diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-05-04 10:58:06 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-05-04 10:58:06 +0100 |
| commit | a78d8242d2be4377accfb95447d549828f08dbd0 (patch) | |
| tree | d6909620c20ffb0fc6e613afde31c033515a9a49 | |
| parent | 4da89717caa2ae0ab28f7e50aa56031e39dcdf9b (diff) | |
Add parsing for unordered lists
| -rw-r--r-- | lib/style-reader.js | 38 | ||||
| -rw-r--r-- | tests/style-reader.tests.js | 7 |
2 files changed, 30 insertions, 15 deletions
diff --git a/lib/style-reader.js b/lib/style-reader.js index 210e2ed..c18cf00 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -35,35 +35,43 @@ function readDocumentMatcher(string) { function documentMatcherRule() { var sequence = lop.rules.sequence; - var paragraphRule = lop.rules.then( - lop.rules.token("identifier", "p"), - function() { - return documentMatchers.paragraph; - } - ); + var identifierToConstant = function(identifier, constant) { + return lop.rules.then( + lop.rules.token("identifier", identifier), + function() { + return constant; + } + ); + }; - var runRule = lop.rules.then( - lop.rules.token("identifier", "r"), - function() { - return documentMatchers.run; - } - ); + var paragraphRule = identifierToConstant("p", documentMatchers.paragraph); + var runRule = identifierToConstant("r", documentMatchers.run); var elementTypeRule = lop.rules.firstOf("p or r", paragraphRule, runRule ); + + var listTypeRule = lop.rules.firstOf("list type", + identifierToConstant("ordered-list", {isOrdered: true}), + identifierToConstant("unordered-list", {isOrdered: false}) + ); + var listRule = sequence( lop.rules.tokenOfType("colon"), - lop.rules.token("identifier", "ordered-list"), + sequence.capture(listTypeRule), sequence.cut(), lop.rules.tokenOfType("open-paren"), sequence.capture(integerRule), lop.rules.tokenOfType("close-paren") - ).map(function(levelNumber) { + ).map(function(listType, levelNumber) { return function(matcher) { - return matcher.orderedList(levelNumber - 1); + if (listType.isOrdered) { + return matcher.orderedList(levelNumber - 1); + } else { + return matcher.unorderedList(levelNumber - 1); + } }; }); diff --git a/tests/style-reader.tests.js b/tests/style-reader.tests.js index 134eefe..12dafca 100644 --- a/tests/style-reader.tests.js +++ b/tests/style-reader.tests.js @@ -60,6 +60,13 @@ describe("styleReader.readDocumentMatcher", function() { ); }); + test("reads p:unordered-list(1) as unordered list with index of 0", function() { + assert.deepEqual( + readDocumentMatcher("p:unordered-list(1)"), + documentMatchers.paragraph().unorderedList(0) + ); + }); + test("reads plain run", function() { assert.deepEqual( readDocumentMatcher("r"), |
