mirror of
https://github.com/peklaiho/madlisp.git
synced 2024-12-26 16:08:42 +00:00
add support for special characters in strings: vertical tab, null
This commit is contained in:
parent
7049d54427
commit
c39064a682
@ -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 {
|
||||
|
@ -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 == '{') {
|
||||
|
@ -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\""],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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"', '}', ')']
|
||||
],
|
||||
];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user