X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/db3ced17bbfff00411f506d8c84419c875959d5e..cd4bcea8945d95a43f1e1cb078656c7b452a74ea:/lib-php/TokenSpecialTerm.php?ds=sidebyside diff --git a/lib-php/TokenSpecialTerm.php b/lib-php/TokenSpecialTerm.php index b2c312ec..cdd04e6c 100644 --- a/lib-php/TokenSpecialTerm.php +++ b/lib-php/TokenSpecialTerm.php @@ -1,4 +1,12 @@ iOperator = $iOperator; } + public function getId() + { + return $this->iId; + } + + /** + * Check if the token can be added to the given search. + * Derive new searches by adding this token to an existing search. + * + * @param object $oSearch Partial search description derived so far. + * @param object $oPosition Description of the token position within + the query. + * + * @return True if the token is compatible with the search configuration + * given the position. + */ + public function isExtendable($oSearch, $oPosition) + { + return !$oSearch->hasOperator() + && $oPosition->isPhrase('') + && ($this->iOperator != \Nominatim\Operator::NONE + || (!$oSearch->hasAddress() && !$oSearch->hasHousenumber() && !$oSearch->hasCountry())); + } + + /** + * Derive new searches by adding this token to an existing search. + * + * @param object $oSearch Partial search description derived so far. + * @param object $oPosition Description of the token position within + the query. + * + * @return SearchDescription[] List of derived search descriptions. + */ + public function extendSearch($oSearch, $oPosition) + { + $iSearchCost = 2; + + $iOp = $this->iOperator; + if ($iOp == \Nominatim\Operator::NONE) { + if ($oSearch->hasName() || $oSearch->getContext()->isBoundedSearch()) { + $iOp = \Nominatim\Operator::NAME; + } else { + $iOp = \Nominatim\Operator::NEAR; + $iSearchCost += 2; + } + } elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) { + $iSearchCost += 2; + } + if ($oSearch->hasHousenumber()) { + $iSearchCost ++; + } + + $oNewSearch = $oSearch->clone($iSearchCost); + $oNewSearch->setPoiSearch($iOp, $this->sClass, $this->sType); + + return array($oNewSearch); + } + + public function debugInfo() { return array( @@ -38,4 +105,9 @@ class SpecialTerm ) ); } + + public function debugCode() + { + return 'S'; + } }