1 |
|
2 |
|
3 | 'use strict';
|
4 |
|
5 | var format = require('util').format;
|
6 | var hl = require('highlight.js');
|
7 |
|
8 |
|
9 | var escape = function(html) {
|
10 | return html.
|
11 | replace(/</g, '<').
|
12 | replace(/>/g, '>').
|
13 | replace(/"/g, '"').
|
14 | replace(/'/g, ''');
|
15 | };
|
16 |
|
17 | exports.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 |
|
33 | exports.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 |