diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-30 22:06:16 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-30 22:06:16 +0200 |
commit | c1d53ec11fbe085932df911bda5686b7bf671f53 (patch) | |
tree | 97ae6db641eb79ec9b061af136a0b2e3c549db55 /lib/parsers.js | |
parent | 36b49c66c6b75515bc84dd678fd52121a313e8d2 (diff) | |
download | gitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.zip gitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.tar.gz gitbook-c1d53ec11fbe085932df911bda5686b7bf671f53.tar.bz2 |
Switch parsers to a model
Diffstat (limited to 'lib/parsers.js')
-rw-r--r-- | lib/parsers.js | 79 |
1 files changed, 35 insertions, 44 deletions
diff --git a/lib/parsers.js b/lib/parsers.js index a27ddd0..1c9ba4c 100644 --- a/lib/parsers.js +++ b/lib/parsers.js @@ -1,69 +1,60 @@ -var _ = require('lodash'); var path = require('path'); +var Immutable = require('immutable'); var markdownParser = require('gitbook-markdown'); var asciidocParser = require('gitbook-asciidoc'); -var Promise = require('./utils/promise'); +var Parser = require('./models/parser'); // This list is ordered by priority of parsers to use -var PARSERS = [ - createParser(markdownParser, { - name: 'markdown', - extensions: ['.md', '.markdown', '.mdown'] - }), - createParser(asciidocParser, { - name: 'asciidoc', - extensions: ['.adoc', '.asciidoc'] - }) -]; - - -// Prepare and compose a parser -function createParser(parser, base) { - var nparser = base; - - nparser.glossary = Promise.wrapfn(parser.glossary); - nparser.glossary.toText = Promise.wrapfn(parser.glossary.toText); - - nparser.summary = Promise.wrapfn(parser.summary); - nparser.summary.toText = Promise.wrapfn(parser.summary.toText); - - nparser.langs = Promise.wrapfn(parser.langs); - nparser.langs.toText = Promise.wrapfn(parser.langs.toText); - - nparser.readme = Promise.wrapfn(parser.readme); +var parsers = Immutable.List([ + Parser.create('markdown', ['.md', '.markdown', '.mdown'], markdownParser), + Parser.create('asciidoc', ['.adoc', '.asciidoc'], asciidocParser) +]); - nparser.page = Promise.wrapfn(parser.page); - nparser.page.prepare = Promise.wrapfn(parser.page.prepare || _.identity); +/** + Return a specific parser by its name - nparser.inline = Promise.wrapfn(parser.inline); - - return nparser; -} - -// Return a specific parser + @param {String} name + @return {Parser|undefined} +*/ function getParser(name) { - return _.find(PARSERS, { - name: name + return parsers.find(function(parser) { + return parser.getName() === name; }); } -// Return a specific parser according to an extension +/** + Return a specific parser according to an extension + + @param {String} ext + @return {Parser|undefined} +*/ function getParserByExt(ext) { - return _.find(PARSERS, function(input) { - return input.name == ext || _.contains(input.extensions, ext); + return parsers.find(function(parser) { + return parser.matchExtension(ext); }); } -// Return parser for a file +/** + Return parser for a file + + @param {String} ext + @return {Parser|undefined} +*/ function getParserForFile(filename) { return getParser(path.extname(filename)); } +// List all parsable extensions +var extensions = parsers + .map(function(parser) { + return parser.getExtensions(); + }) + .flatten(); + module.exports = { - all: PARSERS, - extensions: _.flatten(_.pluck(PARSERS, 'extensions')), + extensions: extensions, get: getParser, getByExt: getParserByExt, getForFile: getParserForFile |