X-Git-Url: http://git.roojs.org/?p=web.mtrack;a=blobdiff_plain;f=Zend%2FSearch%2FLucene%2FIndex%2FTerm.php;fp=Zend%2FSearch%2FLucene%2FIndex%2FTerm.php;h=a042cfd8517b83be731cec4a710f1be8a3f1e173;hp=0000000000000000000000000000000000000000;hb=29cac3c0e01987683ce5d500381a30d9cc1c4936;hpb=837ccffb3a0d087521a4f3061499690f22972ad8 diff --git a/Zend/Search/Lucene/Index/Term.php b/Zend/Search/Lucene/Index/Term.php new file mode 100644 index 00000000..a042cfd8 --- /dev/null +++ b/Zend/Search/Lucene/Index/Term.php @@ -0,0 +1,144 @@ +field = ($field === null)? Zend_Search_Lucene::getDefaultSearchField() : $field; + $this->text = $text; + } + + + /** + * Returns term key + * + * @return string + */ + public function key() + { + return $this->field . chr(0) . $this->text; + } + + /** + * Get term prefix + * + * @param string $str + * @param integer $length + * @return string + */ + public static function getPrefix($str, $length) + { + $prefixBytes = 0; + $prefixChars = 0; + while ($prefixBytes < strlen($str) && $prefixChars < $length) { + $charBytes = 1; + if ((ord($str[$prefixBytes]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($str[$prefixBytes]) & 0x20 ) { + $charBytes++; + if (ord($str[$prefixBytes]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($prefixBytes + $charBytes > strlen($str)) { + // wrong character + break; + } + + $prefixChars++; + $prefixBytes += $charBytes; + } + + return substr($str, 0, $prefixBytes); + } + + /** + * Get UTF-8 string length + * + * @param string $str + * @return string + */ + public static function getLength($str) + { + $bytes = 0; + $chars = 0; + while ($bytes < strlen($str)) { + $charBytes = 1; + if ((ord($str[$bytes]) & 0xC0) == 0xC0) { + $charBytes++; + if (ord($str[$bytes]) & 0x20 ) { + $charBytes++; + if (ord($str[$bytes]) & 0x10 ) { + $charBytes++; + } + } + } + + if ($bytes + $charBytes > strlen($str)) { + // wrong character + break; + } + + $chars++; + $bytes += $charBytes; + } + + return $chars; + } +} +