From a78d8242d2be4377accfb95447d549828f08dbd0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 4 May 2013 10:58:06 +0100 Subject: Add parsing for unordered lists --- lib/style-reader.js | 38 +++++++++++++++++++++++--------------- 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"), -- cgit v1.2.3