private function getPrecedingToken($text, $position) { $start = $position; while ($start > 0 && !StringUtil::isWhitespace($text[$start - 1])) { $start--; } $precedingToken = substr($text, $start, $position - $start); return $precedingToken; }
private function getToken($text, $position) { if ($position < strlen($text) - 1 && !StringUtil::isWhitespace(substr($text, $position + 1, 1))) { $nextWs = StringUtil::getNextWhitespace($text, $position); $prevWs = StringUtil::getPrevWhitespace($text, $position); $tokenStart = $prevWs === false ? 0 : $prevWs + 1; $tokenEnd = $nextWs === false ? strlen($text) : $nextWs; $token = substr($text, $tokenStart, $tokenEnd - $tokenStart); // strip trailing . if (!empty($token) && in_array($token[strlen($token) - 1], $this->eosChars)) { $token = substr($token, 0, strlen($token) - 1); } return $token; } else { return ''; } }
public function testIsWhitespace() { $this->assertEquals(true, StringUtil::isWhitespace(' ')); $this->assertEquals(true, StringUtil::isWhitespace("\t")); $this->assertEquals(true, StringUtil::isWhitespace("\n")); }