public function writeText($text)
{
if ($this->printer == null) {
throw new LogicException("Not attached to a printer.");
}
if ($text == null) {
return;
}
if (!mb_detect_encoding($text, self::INPUT_ENCODING, true)) {
// Assume that the user has already put non-UTF8 into the target encoding.
return $this->writeTextRaw($text);
}
$i = 0;
$j = 0;
$len = mb_strlen($text, self::INPUT_ENCODING);
while ($i < $len) {
$matching = true;
if (($encoding = $this->identifyText(mb_substr($text, $i, 1, self::INPUT_ENCODING))) === false) {
// Un-encodeable text
$encoding = $this->getPrinter()->getCharacterTable();
}
$i++;
$j = 1;
do {
$char = mb_substr($text, $i, 1, self::INPUT_ENCODING);
$matching = !isset($this->available[$char]) || isset($this->available[$char][$encoding]);
if ($matching) {
$i++;
$j++;
}
} while ($matching && $i < $len);
$this->writeTextUsingEncoding(mb_substr($text, $i - $j, $j, self::INPUT_ENCODING), $encoding);
}
}