From 443ad6fcbef7734e8b91d8082a0583ce2165c446 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 14 Nov 2016 20:59:40 +0000 Subject: Allow escape sequences in separator --- lib/style-reader.js | 14 +++++++++++--- 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); -- cgit v1.2.3