summaryrefslogtreecommitdiffstats
path: root/lib/output/modifiers/highlightCode.js
blob: deabd68177e429e11b9eab71536761585b1802a2 (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
var Promise = require('../../utils/promise');
var editHTMLElement = require('./editHTMLElement');

/**
    Highlight all code elements

    @param {Function(lang, body) -> String} highlight
    @param {HTMLDom} $
    @return {Promise}
*/
function highlightCode(highlight, $) {
    return editHTMLElement($, 'code', function($code) {
        var classNames = ($code.attr('class') || '').split(' ');
        var lang = classNames
            .map(function(cl) {
                // Markdown
                if (cl.search('lang-') === 0) {
                    return cl.slice('lang-'.length);
                }

                // Asciidoc
                if (cl.search('language-') === 0) {
                    return cl.slice('language-'.length);
                }

                return null;
            })
            .find(function(cl) {
                return Boolean(cl);
            });
        var source = $code.text();

        return Promise(highlight(lang, source))
        .then(function(r) {
            if (r.html) {
                $code.html(r.html);
            } else {
                $code.text(r.text);
            }
        });
    });
}

module.exports = highlightCode;