move SearchDescription building into tokens

Moving the logic for extending the SearchDescription into the
token classes splits up the code and makes it more readable.
More importantly: it allows tokenizer to define custom token
classes in the future.
This commit is contained in:
Sarah Hoffmann
2021-07-17 20:24:33 +02:00
parent 3cd85eaaf1
commit a48ebd9b47
9 changed files with 464 additions and 270 deletions

View File

@@ -8,9 +8,9 @@ namespace Nominatim\Token;
class Country
{
/// Database word id, if available.
public $iId;
private $iId;
/// Two-letter country code (lower-cased).
public $sCountryCode;
private $sCountryCode;
public function __construct($iId, $sCountryCode)
{
@@ -18,6 +18,32 @@ class Country
$this->sCountryCode = $sCountryCode;
}
public function getId()
{
return $this->iId;
}
/**
* 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)
{
if ($oSearch->hasCountry() || !$oPosition->maybePhrase('country')) {
return array();
}
$oNewSearch = $oSearch->clone($oPosition->isLastToken() ? 1 : 6);
$oNewSearch->setCountry($this->sCountryCode);
return array($oNewSearch);
}
public function debugInfo()
{
return array(
@@ -26,4 +52,9 @@ class Country
'Info' => $this->sCountryCode
);
}
public function debugCode()
{
return 'C';
}
}