diff options
Diffstat (limited to 'lib/style-reader.js')
| -rw-r--r-- | lib/style-reader.js | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/lib/style-reader.js b/lib/style-reader.js index 13f3609..2d75016 100644 --- a/lib/style-reader.js +++ b/lib/style-reader.js @@ -1,3 +1,4 @@ +var _ = require("underscore"); var lop = require("lop"); var RegexTokeniser = lop.RegexTokeniser; @@ -52,12 +53,18 @@ function documentMatcherRule() { runRule ); + var styleIdRule = lop.rules.then( + classRule, + function(styleId) { + return {styleId: styleId}; + } + ); + var listTypeRule = lop.rules.firstOf("list type", identifierToConstant("ordered-list", {isOrdered: true}), identifierToConstant("unordered-list", {isOrdered: false}) ); - var listRule = sequence( lop.rules.tokenOfType("colon"), sequence.capture(listTypeRule), @@ -66,31 +73,28 @@ function documentMatcherRule() { sequence.capture(integerRule), lop.rules.tokenOfType("close-paren") ).map(function(listType, levelNumber) { - return function(matcher) { - return matcher.list({ + return { + list: { isOrdered: listType.isOrdered, levelIndex: levelNumber - 1 - }); + } }; }); - - var optionalListRule = lop.rules.then( - lop.rules.optional(listRule), - function(option) { - return option.valueOrElse(function() { - return function(matcher) { - return matcher; - }; - }); - } + var matcherSuffix = lop.rules.firstOf("matcher suffix", + styleIdRule, + listRule ); + var matcherSuffixes = lop.rules.zeroOrMore(matcherSuffix); return sequence( sequence.capture(elementTypeRule), - sequence.capture(lop.rules.optional(classRule)), - sequence.capture(optionalListRule) - ).map(function(createMatcher, styleId, applyList) { - return applyList(createMatcher(styleId.valueOrElse())); + sequence.capture(matcherSuffixes) + ).map(function(createMatcher, suffixes) { + var matcherOptions = {}; + suffixes.forEach(function(suffix) { + _.extend(matcherOptions, suffix); + }); + return createMatcher(matcherOptions); }); } |
