diff --git a/src/Printer.php b/src/Printer.php index e7a07eb..bb21275 100644 --- a/src/Printer.php +++ b/src/Printer.php @@ -53,6 +53,8 @@ class Printer $a = str_replace("\n", "\\n", $a); $a = str_replace("\r", "\\r", $a); $a = str_replace("\t", "\\t", $a); + $a = str_replace("\v", "\\v", $a); + $a = str_replace("\0", "\\0", $a); $a = str_replace("\"", "\\\"", $a); return '"' . $a . '"'; } else { diff --git a/src/Tokenizer.php b/src/Tokenizer.php index 020ba59..c3a42d8 100644 --- a/src/Tokenizer.php +++ b/src/Tokenizer.php @@ -48,6 +48,10 @@ class Tokenizer $current .= "\r"; } elseif ($c == 't') { $current .= "\t"; + } elseif ($c == 'v') { + $current .= "\v"; + } elseif ($c == '0') { + $current .= "\0"; } elseif ($c == "\\" || $c == '"') { $current .= $c; } else { @@ -81,7 +85,7 @@ class Tokenizer // Start of comment $addCurrent(); $isComment = true; - } elseif ($c == ' ' || $c == "\t" || $c == "\n" || $c == "\r" || $c == ':') { + } elseif ($c == ' ' || $c == "\t" || $c == "\n" || $c == "\r" || $c == "\v" || $c == "\0" || $c == ':') { // Whitespace and colon are ignored $addCurrent(); } elseif ($c == '(' || $c == '[' || $c == '{') { diff --git a/test/PrinterTest.php b/test/PrinterTest.php index 13028e7..ff4259a 100644 --- a/test/PrinterTest.php +++ b/test/PrinterTest.php @@ -40,7 +40,7 @@ class PrinterTest extends TestCase // Test strings ['abc', 'abc'], - ["a\\b\nc\rd\te\"f", "a\\b\nc\rd\te\"f"], + ["a\\b\nc\rd\te\"f\vg\0h", "a\\b\nc\rd\te\"f\vg\0h"], ]; } @@ -77,7 +77,7 @@ class PrinterTest extends TestCase // Test strings ['abc', '"abc"'], - ["a\\b\nc\rd\te\"f", "\"a\\\\b\\nc\\rd\\te\\\"f\""], + ["a\\b\nc\rd\te\"f\vg\0h", "\"a\\\\b\\nc\\rd\\te\\\"f\\vg\\0h\""], ]; } diff --git a/test/TokenizerTest.php b/test/TokenizerTest.php index b71e2aa..ad9664d 100644 --- a/test/TokenizerTest.php +++ b/test/TokenizerTest.php @@ -58,8 +58,8 @@ class TokenizerTest extends TestCase ["\n", []], ["\r", []], [":", []], - [" \t\n\r: ", []], - [" aa\t\n\rbb:\r\ncc\t ", ['aa', 'bb', 'cc']], + [" \t\n\r\v\0: ", []], + [" aa\t\n\rbb:\r\ncc\t\v\0dd ", ['aa', 'bb', 'cc', 'dd']], // Comments [";comment", []], @@ -93,8 +93,8 @@ class TokenizerTest extends TestCase // Test everything together [ - "(abc<+=-_!?>\"str\n\\r;\\\"\";com\"ment\r{\"a\":\"b\"})", - ['(', 'abc<+=-_!?>', "\"str\n\r;\"\"", '{', '"a"', '"b"', '}', ')'] + "(abc<+=-_!?>\"str\n\\r;\v\\\"\";com\"me\0nt\r{\"a\":\"b\"})", + ['(', 'abc<+=-_!?>', "\"str\n\r;\v\"\"", '{', '"a"', '"b"', '}', ')'] ], ]; }