diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-05-04 10:53:21 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-05-04 10:53:21 +0100 |
| commit | 4da89717caa2ae0ab28f7e50aa56031e39dcdf9b (patch) | |
| tree | e48b4bbabac76ed69e9ffd7ec2638b266c3be4ca | |
| parent | 7738fefabc6f717c1d5e2459dabadea0fa588def (diff) | |
Add parsing for p:ordered-list(n)
| -rw-r--r-- | lib/style-reader.js | 37 | ||||
| -rw-r--r-- | tests/style-reader.tests.js | 7 |
2 files changed, 40 insertions, 4 deletions
diff --git a/lib/style-reader.js b/lib/style-reader.js index 423d9d0..210e2ed 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -54,11 +54,36 @@ function documentMatcherRule() { runRule ); + var listRule = sequence( + lop.rules.tokenOfType("colon"), + lop.rules.token("identifier", "ordered-list"), + sequence.cut(), + lop.rules.tokenOfType("open-paren"), + sequence.capture(integerRule), + lop.rules.tokenOfType("close-paren") + ).map(function(levelNumber) { + return function(matcher) { + return matcher.orderedList(levelNumber - 1); + }; + }); + + var optionalListRule = lop.rules.then( + lop.rules.optional(listRule), + function(option) { + return option.valueOrElse(function() { + return function(matcher) { + return matcher; + } + }); + } + ); + return sequence( sequence.capture(elementTypeRule), - sequence.capture(lop.rules.optional(classRule)) - ).map(function(createMatcher, styleName) { - return createMatcher(styleName.valueOrElse()); + sequence.capture(lop.rules.optional(classRule)), + sequence.capture(optionalListRule) + ).map(function(createMatcher, styleName, applyList) { + return applyList(createMatcher(styleName.valueOrElse())); }); } @@ -111,6 +136,7 @@ function htmlPathRule() { } var identifierRule = lop.rules.tokenOfType("identifier"); +var integerRule = lop.rules.tokenOfType("integer"); var classRule = lop.rules.sequence( lop.rules.tokenOfType("dot"), @@ -142,7 +168,10 @@ function tokenise(string) { {name: "colon", regex: /:/}, {name: "gt", regex: />/}, {name: "whitespace", regex: /\s+/}, - {name: "arrow", regex: /=>/} + {name: "arrow", regex: /=>/}, + {name: "open-paren", regex: /\(/}, + {name: "close-paren", regex: /\)/}, + {name: "integer", regex: /([0-9]+)/} ]); return tokeniser.tokenise(string); } diff --git a/tests/style-reader.tests.js b/tests/style-reader.tests.js index d406f48..134eefe 100644 --- a/tests/style-reader.tests.js +++ b/tests/style-reader.tests.js @@ -53,6 +53,13 @@ describe("styleReader.readDocumentMatcher", function() { ); }); + test("reads p:ordered-list(1) as ordered list with index of 0", function() { + assert.deepEqual( + readDocumentMatcher("p:ordered-list(1)"), + documentMatchers.paragraph().orderedList(0) + ); + }); + test("reads plain run", function() { assert.deepEqual( readDocumentMatcher("r"), |
