diff options
| -rw-r--r-- | lib/styles/parser/tokeniser.js | 5 | ||||
| -rw-r--r-- | test/styles/parser/tokeniser.tests.js | 4 |
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/styles/parser/tokeniser.js b/lib/styles/parser/tokeniser.js index 2ada818..b97facd 100644 --- a/lib/styles/parser/tokeniser.js +++ b/lib/styles/parser/tokeniser.js @@ -3,6 +3,8 @@ var RegexTokeniser = lop.RegexTokeniser; exports.tokenise = tokenise; +var stringPrefix = "'((?:\\\\.|[^'])*)"; + function tokenise(string) { var tokeniser = new RegexTokeniser([ {name: "identifier", regex: /([a-zA-Z][a-zA-Z0-9\-]*)/}, @@ -16,7 +18,8 @@ function tokenise(string) { {name: "close-paren", regex: /\)/}, {name: "open-square-bracket", regex: /\[/}, {name: "close-square-bracket", regex: /\]/}, - {name: "string", regex: /'((?:\\.|[^'])*)'/}, + {name: "string", regex: new RegExp(stringPrefix + "'")}, + {name: "unterminated-string", regex: new RegExp(stringPrefix)}, {name: "integer", regex: /([0-9]+)/}, {name: "choice", regex: /\|/}, {name: "bang", regex: /(!)/} diff --git a/test/styles/parser/tokeniser.tests.js b/test/styles/parser/tokeniser.tests.js index e8b9d00..a7db79d 100644 --- a/test/styles/parser/tokeniser.tests.js +++ b/test/styles/parser/tokeniser.tests.js @@ -31,6 +31,10 @@ test("strings are tokenised", function() { assertTokens("'Tristan'", [isToken("string", "Tristan")]); }); +test("unterminated strings are tokenised", function() { + assertTokens("'Tristan", [isToken("unterminated-string", "Tristan")]); +}); + test("arrows are tokenised", function() { assertTokens("=>", [isToken("arrow")]); }); |
