J. King 5 years ago
parent
commit
5a12fa8ad7
  1. 35
      lib/Data.php
  2. 12
      lib/ParseErrorEmitter.php
  3. 11
      lib/Tokenizer.php
  4. 11
      tests/cases/TestTokenizer.php

35
lib/Data.php

@ -79,16 +79,6 @@ class Data {
$this->eof = true;
}
if (self::$debug) {
echo "\nConsume\n==========\n";
echo "Length: $length\n";
echo "Data: ";
var_export($string);
echo "\n";
echo "Pointer: {$this->data->posChar()}\n";
echo "==========\n\n";
}
return $string;
}
@ -111,12 +101,6 @@ class Data {
$this->_column -= $length;
}
}
if (self::$debug) {
echo "\nUnconsume\n==========\n";
echo "Pointer: {$this->data->posChar()}\n";
echo "==========\n\n";
}
}
public function consumeWhile(string $match, int $limit = 0): string {
@ -132,15 +116,6 @@ class Data {
$string = $this->data->peekChar($length);
if (self::$debug) {
echo "\nPeek\n==========\n";
echo "Data: ";
var_export($string);
echo "\n";
echo "Pointer: {$this->data->posChar()}\n";
echo "==========\n\n";
}
return $string;
}
@ -204,16 +179,6 @@ class Data {
$this->data->seek(($advancePointer) ? -1 : 0 - $count - 2);
}
if (self::$debug) {
echo ($advancePointer) ? "\nconsume" : "\npeek";
echo ($while) ? 'While' : 'Until';
echo "\n==========\nPattern: ";
var_export(str_replace(["\t", "\n", "\x0c", "\x0d"], ['\t', '\n', '\x0c', '\x0d'], implode('', $match)));
echo "\nData: ";
var_export($string);
echo "\nPointer: {$this->data->posChar()}\n==========\n\n";
}
return $string;
}

12
lib/ParseErrorEmitter.php

@ -8,14 +8,8 @@ trait ParseErrorEmitter {
private function error(int $code, ...$arg): bool {
$data = ($this instanceof Data) ? $this : ($this->data ?? null);
if ($this->errorHandler) {
if ($data) {
return $this->errorHandler->emit($data->filePath, $data->line, $data->column, $code, ...$arg);
} else {
throw new \Exception("Emitted parse error without data stream");
}
} else {
throw new \Exception("Emitted error without error handler");
}
assert($data instanceof Data);
assert($this->errorHandler instanceof ParseError);
return $this->errorHandler->emit($data->filePath, $data->line, $data->column, $code, ...$arg);
}
}

11
lib/Tokenizer.php

@ -997,7 +997,8 @@ class Tokenizer {
}
# Anything else
else {
# Switch to the script data state. Reconsume the current input character.
# Switch to the script data state.
# Reconsume the current input character.
$this->state = self::SCRIPT_DATA_STATE;
$this->data->unconsume();
}
@ -3389,7 +3390,7 @@ class Tokenizer {
# Not a valid state, unimplemented, or implemented elsewhere
else {
throw new \Exception("Unimplemented state: ".(self::STATE_NAMES[$this->state] ?? $this->state));
throw new \Exception("Unimplemented state: ".(self::STATE_NAMES[$this->state] ?? $this->state)); // @codeCoverageIgnore
}
}
}
@ -3635,7 +3636,7 @@ class Tokenizer {
// OPTIMIZATION: Combine all digit types
// NOTE: This branch should never be reached
$charRefCode = ($charRefCode * 16) + hexdec($char);
$charRefCode = ($charRefCode * 16) + hexdec($char); // @codeCoverageIgnore
}
# U+003B SEMICOLON
elseif ($char === ';') {
@ -3665,7 +3666,7 @@ class Tokenizer {
// OPTIMIZATION: Combine all digit types
// NOTE: This branch should never be reached
$charRefCode = ($charRefCode * 10) + ((int) ($char));
$charRefCode = ($charRefCode * 10) + ((int) ($char)); // @codeCoverageIgnore
}
# U+003B SEMICOLON
elseif ($char === ';') {
@ -3728,7 +3729,7 @@ class Tokenizer {
# Not a valid state, unimplemented, or implemented elsewhere
else {
throw new \Exception("Unimplemented character reference consumption state: ".(self::STATE_NAMES[$this->state] ?? $this->state));
throw new \Exception("Unimplemented character reference consumption state: ".(self::STATE_NAMES[$this->state] ?? $this->state)); // @codeCoverageIgnore
}
}
}

11
tests/cases/TestTokenizer.php

@ -8,7 +8,16 @@ use dW\HTML5\OpenElementsStack;
use dW\HTML5\ParseError;
use dW\HTML5\Tokenizer;
/** @covers \dW\HTML5\Tokenizer */
/**
* @covers \dW\HTML5\Tokenizer
* @covers \dW\HTML5\Data
* @covers \dW\HTML5\CharacterToken
* @covers \dW\HTML5\CommentToken
* @covers \dW\HTML5\DataToken
* @covers \dW\HTML5\TagToken
* @covers \dW\HTML5\DOCTYPEToken
* @covers \dW\HTML5\TokenAttr
*/
class TestTokenizer extends \dW\HTML5\Test\StandardTest {
const DEBUG = false;

Loading…
Cancel
Save