UNPKG

1.58 kBJavaScriptView Raw
1/* jshint node: true */
2'use strict'
3
4const Language = require('./language')
5
6/**
7 * Module: Mdx singleton.
8 *
9 * const Mdx = require('mdx')
10 */
11
12let Mdx = {}
13module.exports = Mdx
14
15/**
16 * Detects a language for a given filename. Returns a {Language} instance.
17 *
18 * Mdx.detectLanguage('file.js')
19 * #=> <Language 'javascript'>
20 */
21
22Mdx.detectLanguage = function (fname) {
23 for (let name in this.languages) {
24 let lang = Mdx.getLanguage(name)
25 if (lang.matches(fname)) return lang
26 }
27}
28
29/**
30 * Returns a {Language} instance.
31 *
32 * js = Mdx.getLanguage('javascript')
33 */
34
35Mdx.getLanguage = function (name) {
36 let lang = this.languages[name]
37 return lang && new Language(name, lang)
38}
39
40/**
41 * (Private) List of languages.
42 */
43
44Mdx.languages = require('./config').languages
45
46/**
47 * Extractor. See {Extractor} class for details
48 */
49
50Mdx.Extractor = require('./extractor')
51
52/**
53 * Render an extractor output to Markdown.
54 *
55 * ex = new Mdx.Extractor()
56 * ex.push(...)
57 *
58 * output = Mdx.renderTemplate(ex.toJson())
59 */
60
61Mdx.renderTemplate = function (output) {
62 const mustache = require('mustache')
63 const tplFile = require.resolve('../templates/markdown.mustache')
64 const fs = require('fs')
65 const tpl = fs.readFileSync(tplFile, 'utf-8')
66
67 // lol, deep clone
68 output = JSON.parse(JSON.stringify(output))
69
70 output.blocks.forEach(function (block) {
71 if (~['class', 'module', 'section'].indexOf(block.type)) {
72 block._headerprefix = '##'
73 } else {
74 block._headerprefix = '###'
75 }
76 })
77
78 return mustache.render(tpl, output).trim() + '\n'
79}