From 24b17947c668bc1f3392aa332804d9b57f76618a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Mar 2013 12:35:57 +0100 Subject: Require ">" between nested elements in style --- lib/style-reader.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/style-reader.js b/lib/style-reader.js index 7ed4132..a566826 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -7,15 +7,11 @@ exports.read = read; function read(string) { - var elementStrings = string.split(/\s+/); - var elements = elementStrings.map(readElement); - return styles.elements(elements); -} - -function readElement(string) { var capture = lop.rules.sequence.capture; var identifierRule = lop.rules.tokenOfType("identifier"); + var whitespaceRule = lop.rules.tokenOfType("whitespace"); + var classRule = lop.rules.sequence( lop.rules.tokenOfType("dot"), capture(identifierRule) @@ -32,7 +28,7 @@ function readElement(string) { } ); - var styleRule = lop.rules.sequence( + var styleElementRule = lop.rules.sequence( capture(identifierRule), capture(lop.rules.zeroOrMore(classRule)), capture(freshRule) @@ -47,6 +43,18 @@ function readElement(string) { return styles.element(tagName, options); }); + var styleRule = lop.rules.then( + lop.rules.zeroOrMoreWithSeparator( + styleElementRule, + lop.rules.sequence( + whitespaceRule, + lop.rules.tokenOfType("gt"), + whitespaceRule + ) + ), + styles.elements + ); + var tokens = tokenise(string); var parser = lop.Parser(); var parseResult = parser.parseTokens(styleRule, tokens); @@ -69,6 +77,7 @@ function tokenise(string) { {name: "identifier", regex: /([a-z][a-z0-9\-]*)/}, {name: "dot", regex: /\./}, {name: "colon", regex: /:/}, + {name: "gt", regex: />/}, {name: "whitespace", regex: /\s+/} ]); return tokeniser.tokenise(string); -- cgit v1.2.3