diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-03-31 12:35:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-03-31 12:35:57 +0100 |
| commit | 24b17947c668bc1f3392aa332804d9b57f76618a (patch) | |
| tree | 40612e9faa45d8d5912de8021d4adcdd6f14b2f0 /lib | |
| parent | 099c86ab5fabea429eb226fbff179f0317ec755c (diff) | |
Require ">" between nested elements in style
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/style-reader.js | 23 |
1 files changed, 16 insertions, 7 deletions
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); |
