summaryrefslogtreecommitdiffstats
path: root/lib/parsers.js
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-30 22:06:16 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-30 22:06:16 +0200
commitc1d53ec11fbe085932df911bda5686b7bf671f53 (patch)
tree97ae6db641eb79ec9b061af136a0b2e3c549db55 /lib/parsers.js
parent36b49c66c6b75515bc84dd678fd52121a313e8d2 (diff)
downloadgitbook-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.js79
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