summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-05-04 10:58:06 +0100
committerMichael Williamson <mike@zwobble.org>2013-05-04 10:58:06 +0100
commita78d8242d2be4377accfb95447d549828f08dbd0 (patch)
treed6909620c20ffb0fc6e613afde31c033515a9a49
parent4da89717caa2ae0ab28f7e50aa56031e39dcdf9b (diff)
Add parsing for unordered lists
-rw-r--r--lib/style-reader.js38
-rw-r--r--tests/style-reader.tests.js7
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"),