61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
var _ = require('lodash');
|
|
var path = require('path');
|
|
|
|
var markdownParser = require('gitbook-markdown');
|
|
var asciidocParser = require('gitbook-asciidoc');
|
|
|
|
var Promise = require('./utils/promise');
|
|
|
|
// 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);
|
|
|
|
nparser.page = Promise.wrapfn(parser.page);
|
|
nparser.page.prepare = Promise.wrapfn(parser.page.prepare || _.identity);
|
|
|
|
return nparser;
|
|
}
|
|
|
|
// Return a specific parser according to an extension
|
|
function getParser(ext) {
|
|
return _.find(PARSERS, function(input) {
|
|
return input.name == ext || _.contains(input.extensions, ext);
|
|
});
|
|
}
|
|
|
|
// Return parser for a file
|
|
function getParserForFile(filename) {
|
|
return getParser(path.extname(filename));
|
|
}
|
|
|
|
module.exports = {
|
|
all: PARSERS,
|
|
extensions: _.flatten(_.pluck(PARSERS, 'extensions')),
|
|
get: getParser,
|
|
getForFile: getParserForFile
|
|
};
|