summaryrefslogtreecommitdiffstats
path: root/lib/parsers.js
blob: 68998658d638c294ac0382d2d7bbf08cc9f36e44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
};