diff options
| -rw-r--r-- | lib/style-reader.js | 14 | ||||
| -rw-r--r-- | test/style-reader.tests.js | 7 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/style-reader.js b/lib/style-reader.js index 370b5b6..0f2efc5 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -208,11 +208,19 @@ function htmlPathRule() { var identifierRule = lop.rules.tokenOfType("identifier"); var integerRule = lop.rules.tokenOfType("integer"); - + +var escapeSequences = { + "n": "\n", + "r": "\r", + "t": "\t" +}; + var stringRule = lop.rules.then( lop.rules.tokenOfType("string"), function(value) { - return value; + return value.replace(/\\(.)/g, function(match, code) { + return escapeSequences[code] || code; + }); } ); @@ -257,7 +265,7 @@ function tokenise(string) { {name: "close-paren", regex: /\)/}, {name: "open-square-bracket", regex: /\[/}, {name: "close-square-bracket", regex: /\]/}, - {name: "string", regex: /'([^']*)'/}, + {name: "string", regex: /'((?:\\.|[^'])*)'/}, {name: "integer", regex: /([0-9]+)/}, {name: "choice", regex: /\|/}, {name: "bang", regex: /(!)/} diff --git a/test/style-reader.tests.js b/test/style-reader.tests.js index b4363f0..3fb5f1f 100644 --- a/test/style-reader.tests.js +++ b/test/style-reader.tests.js @@ -67,6 +67,13 @@ test('styleReader.readHtmlPath', { ]); assertHtmlPath("p:separator('x')", expected); }, + + 'reads separator with escape sequence': function() { + var expected = htmlPaths.elements([ + htmlPaths.element("p", {}, {separator: "\r\n\t\'\\"}) + ]); + assertHtmlPath("p:separator('\\r\\n\\t\\'\\\\')", expected); + }, 'reads ignore element': function() { assertHtmlPath("!", htmlPaths.ignore); |
