diff --git a/resources/Zip32_utf8_10501_1.zip b/resources/Zip32_utf8_10501_1.zip index df21a99..0e469b2 100644 Binary files a/resources/Zip32_utf8_10501_1.zip and b/resources/Zip32_utf8_10501_1.zip differ diff --git a/resources/converter.php b/resources/converter.php index 831465d..542523b 100644 --- a/resources/converter.php +++ b/resources/converter.php @@ -18,6 +18,7 @@ $contents = mb_convert_encoding($contents, 'UTF-8', $encoding); } $contents = preg_replace("/^\xEF\xBB\xBF/", '', $contents); + $contents = trim(str_replace('Zip5,City,Area,Road,Scope', '', $contents)); $zip = new ZipArchive(); $zip->open($file, ZipArchive::OVERWRITE); diff --git a/resources/data/zip3.rules b/resources/data/zip3.rules index 875ae03..c4a6247 100644 Binary files a/resources/data/zip3.rules and b/resources/data/zip3.rules differ diff --git a/resources/data/zip5.rules b/resources/data/zip5.rules index 2a6903f..75270a0 100644 Binary files a/resources/data/zip5.rules and b/resources/data/zip5.rules differ diff --git a/src/Address.php b/src/Address.php index adccf76..b4934dd 100644 --- a/src/Address.php +++ b/src/Address.php @@ -83,7 +83,7 @@ public function set($address) /** * tokenize. * - * @return JArray + * @return array */ private function tokenize() { @@ -106,7 +106,7 @@ private function tokenize() } } - return new JArray($tokens); + return $tokens; } /** @@ -126,7 +126,7 @@ public function __toString() */ public function tokens() { - return $this->tokens; + return new JArray($this->tokens); } /** @@ -157,10 +157,11 @@ public function getPoint($index) */ public function flat($length = null, $offset = 0) { - $length = $length ?: $this->tokens->length(); + $tokens = $this->tokens(); + $length = $length ?: $tokens->length(); $end = $offset + $length; - return (string) $this->tokens->slice($offset, $end)->map(function ($token) { + return (string) $tokens->slice($offset, $end)->map(function ($token) { return implode('', $token); })->join(''); } diff --git a/src/Rule.php b/src/Rule.php index 9377b4f..39b42f5 100644 --- a/src/Rule.php +++ b/src/Rule.php @@ -22,7 +22,7 @@ class Rule public $zip5; /** - * $tokens. + * $address. * * @var Address */ @@ -31,7 +31,7 @@ class Rule /** * $tokens. * - * @var JArray + * @var array */ public $tokens; @@ -97,10 +97,11 @@ public function match($address) $ruleAddressTokens ); $addressTokens = $address->tokens(); + $currentTokens = $this->tokens(); $cur = $ruleAddressTokens->length() - 1; - $cur -= $this->tokens->length() > 0 && $this->tokens->includes('全') === false; - $cur -= $this->tokens->includes('至'); + $cur -= $currentTokens->length() > 0 && $currentTokens->includes('全') === false; + $cur -= $currentTokens->includes('至'); if ($this->equalsToken($ruleAddressTokens, $addressTokens, $cur) === false) { return false; @@ -108,7 +109,7 @@ public function match($address) $addressPoint = $address->getPoint($cur + 1); - if ($this->tokens->length() > 0 && $addressPoint->isEmpty() === true) { + if ($currentTokens->length() > 0 && $addressPoint->isEmpty() === true) { return false; } @@ -123,7 +124,7 @@ public function match($address) ($token === '以下' && $addressPoint->compare($left, '<=') === false) || ($token === '至' && ( ($right->compare($addressPoint, '<=') && $addressPoint->compare($left, '<=')) || - ($this->tokens->includes('含附號全') === true && ($addressPoint->x === $left->x)) + ($currentTokens->includes('含附號全') === true && ($addressPoint->x === $left->x)) ) === false) || ($token === '含附號' && ($addressPoint->x === $left->x) === false) || ($token === '附號全' && ($addressPoint->x === $left->x && $addressPoint->y > 0) === false) || @@ -147,18 +148,18 @@ public function match($address) */ public function tokens() { - return $this->tokens; + return new JArray($this->tokens); } /** * tokenize. * * @param string $rule - * @return JArray + * @return array */ private function tokenize($rule, Closure $addressResolver) { - $tokens = new JArray(); + $tokens = []; $pattern = [ '及以上附號|含附號以下|含附號全|含附號', @@ -167,13 +168,13 @@ private function tokenize($rule, Closure $addressResolver) '[連至單雙全](?=[\d全]|$)', ]; - $addressResolver($this->normalize($rule)->replace('/'.implode('|', $pattern).'/u', function ($m) use ($tokens) { + $addressResolver($this->normalize($rule)->replace('/'.implode('|', $pattern).'/u', function ($m) use (&$tokens) { $token = &$m[0]; if ($token === '連') { return ''; } - $tokens->append($token); + $tokens[] = $token; return $token === '附號全' ? '號' : ''; }));