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 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'lib') 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); + } }; }); -- cgit v1.2.3