UNPKG

1.2 kBJavaScriptView Raw
1// Shamelessly copied from nico:
2// https://github.com/lepture/nico/blob/master/lib/sdk/highlight.js
3'use strict';
4
5var format = require('util').format;
6var hl = require('highlight.js');
7
8
9var escape = function(html) {
10 return html.
11 replace(/</g, '&lt;').
12 replace(/>/g, '&gt;').
13 replace(/"/g, '&quot;').
14 replace(/'/g, '&#39;');
15};
16
17exports.render = function(code, language) {
18 language = exports.language(language);
19
20 if (!language) {
21 return '<pre>' + escape(code) + '</pre>';
22 }
23 if (language === 'html') {
24 language = 'xml';
25 }
26 code = hl.highlight(language, code).value;
27 return format(
28 '<div class="highlight"><pre><code class="%s">%s</code></pre></div>',
29 language, code
30 );
31};
32
33exports.language = function(language) {
34 if (!language) {
35 return null;
36 }
37 if (language === 'html') {
38 return 'html';
39 }
40
41 var shortcuts = {
42 'js': 'javascript',
43 'json': 'javascript',
44 'py': 'python',
45 'rb': 'ruby',
46 'md': 'markdown',
47 'mkd': 'markdown',
48 'c++': 'cpp'
49 };
50 if (language && shortcuts[language]) {
51 language = shortcuts[language];
52 }
53
54 if (!language || !hl.LANGUAGES[language]) {
55 return null;
56 }
57
58 return language;
59};
\No newline at end of file