aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-03-31 12:35:57 +0100
committerMichael Williamson <mike@zwobble.org>2013-03-31 12:35:57 +0100
commit24b17947c668bc1f3392aa332804d9b57f76618a (patch)
tree40612e9faa45d8d5912de8021d4adcdd6f14b2f0 /lib
parent099c86ab5fabea429eb226fbff179f0317ec755c (diff)
Require ">" between nested elements in style
Diffstat (limited to 'lib')
-rw-r--r--lib/style-reader.js23
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);