Support for the FreeMonoTengwar font and ConScript encoding
[tengwarjs.git] / document-parser.js
1
2 var Parser = require("./parser");
3
4 // produces a document parser from a word parser in an arbitrary mode
5 module.exports = makeDocumentParser;
6 function makeDocumentParser(parseWord, makeOptions) {
7 var parseLine = Parser.makeDelimitedParser(parseWord, parseSomeSpaces);
8 var parseParagraph = Parser.makeDelimitedParser(parseLine, parseNewlineSpace);
9 var parseSection = Parser.makeDelimitedParser(parseParagraph, parseNewlineSpace);
10 var parseDocument = Parser.makeDelimitedParser(parseSection, parseNewlineSpaces);
11 return Parser.makeParser(function (callback, options) {
12 options = makeOptions(options);
13 var state = parseDocument(callback, options);
14 return state;
15 });
16 }
17
18 var parseSpace = Parser.makeExpect(" ");
19 var parseAnySpaces = Parser.makeParseAny(parseSpace);
20 var parseSomeSpaces = Parser.makeParseSome(parseSpace);
21 var parseNewline = Parser.makeExpect("\n");
22 var parseNewlines = Parser.makeParseSome(parseNewline);
23
24 function parseNewlineSpace(callback) {
25 return parseAnySpaces(function () {
26 return parseNewline(function () {
27 return parseAnySpaces(callback);
28 });
29 });
30 }
31
32 function parseNewlineSpaces(callback) {
33 return parseAnySpaces(function () {
34 return parseNewlines(function () {
35 return parseAnySpaces(callback);
36 });
37 });
38 }