Merge pull request #45 from konforce/decode-escaped-strings

Change Lexer::readString to decode escaped characters to their litera…
This commit is contained in:
Vladimir Razuvaev 2016-09-14 17:43:32 +07:00 committed by GitHub
commit ae5cffb6d5
2 changed files with 8 additions and 8 deletions

View File

@ -229,13 +229,13 @@ class Lexer
$code = Utils::charCodeAt($body, $position);
switch ($code) {
case 34: $value .= '"'; break;
case 47: $value .= '\/'; break;
case 47: $value .= '/'; break;
case 92: $value .= '\\'; break;
case 98: $value .= '\b'; break;
case 102: $value .= '\f'; break;
case 110: $value .= '\n'; break;
case 114: $value .= '\r'; break;
case 116: $value .= '\t'; break;
case 98: $value .= chr(8); break; // \b (backspace)
case 102: $value .= "\f"; break;
case 110: $value .= "\n"; break;
case 114: $value .= "\r"; break;
case 116: $value .= "\t"; break;
case 117:
$hex = mb_substr($body, $position + 1, 4);
if (!preg_match('/[0-9a-fA-F]{4}/', $hex)) {

View File

@ -58,8 +58,8 @@ class LexerTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(new Token(Token::STRING, 0, 8, 'simple'), $this->lexOne('"simple"'));
$this->assertEquals(new Token(Token::STRING, 0, 15, ' white space '), $this->lexOne('" white space "'));
$this->assertEquals(new Token(Token::STRING, 0, 10, 'quote "'), $this->lexOne('"quote \\""'));
$this->assertEquals(new Token(Token::STRING, 0, 20, 'escaped \n\r\b\t\f'), $this->lexOne('"escaped \\n\\r\\b\\t\\f"'));
$this->assertEquals(new Token(Token::STRING, 0, 15, 'slashes \\ \/'), $this->lexOne('"slashes \\\\ \\/"'));
$this->assertEquals(new Token(Token::STRING, 0, 25, 'escaped \n\r\b\t\f'), $this->lexOne('"escaped \\\\n\\\\r\\\\b\\\\t\\\\f"'));
$this->assertEquals(new Token(Token::STRING, 0, 16, 'slashes \\ \/'), $this->lexOne('"slashes \\\\ \\\\/"'));
$this->assertEquals(new Token(Token::STRING, 0, 13, 'unicode яуц'), $this->lexOne('"unicode яуц"'));