1
1
'use strict' ;
2
2
3
- var hljs = require ( 'highlight.js/lib/highlight' ) ;
4
- var Entities = require ( 'html-entities' ) . XmlEntities ;
5
- var entities = new Entities ( ) ;
6
- var alias = require ( '../highlight_alias.json' ) ;
3
+ const hljs = require ( 'highlight.js/lib/highlight' ) ;
4
+ const Entities = require ( 'html-entities' ) . XmlEntities ;
5
+ const entities = new Entities ( ) ;
6
+ const alias = require ( '../highlight_alias.json' ) ;
7
7
8
- function highlightUtil ( str , options ) {
8
+ function highlightUtil ( str , options = { } ) {
9
9
if ( typeof str !== 'string' ) throw new TypeError ( 'str must be a string!' ) ;
10
- options = options || { } ;
11
10
12
- var useHljs = options . hasOwnProperty ( 'hljs' ) ? options . hljs : false ;
13
- var gutter = options . hasOwnProperty ( 'gutter' ) ? options . gutter : true ;
14
- var wrap = options . hasOwnProperty ( 'wrap' ) ? options . wrap : true ;
15
- var firstLine = options . hasOwnProperty ( 'firstLine' ) ? + options . firstLine : 1 ;
16
- var caption = options . caption ;
17
- var mark = options . hasOwnProperty ( 'mark' ) ? options . mark : [ ] ;
18
- var tab = options . tab ;
11
+ const useHljs = options . hasOwnProperty ( 'hljs' ) ? options . hljs : false ;
12
+ const {
13
+ gutter = true ,
14
+ firstLine = 1 ,
15
+ caption,
16
+ mark = [ ] ,
17
+ tab
18
+ } = options ;
19
+ let { wrap = true } = options ;
19
20
20
21
hljs . configure ( { classPrefix : useHljs ? 'hljs-' : '' } ) ;
21
22
22
- var data = highlight ( str , options ) ;
23
+ const data = highlight ( str , options ) ;
23
24
24
25
if ( useHljs && ! gutter ) wrap = false ;
25
26
26
- var before = useHljs ? ' <pre><code class="hljs ' + options . lang + '">' : '<pre>' ;
27
- var after = useHljs ? '</code></pre>' : '</pre>' ;
27
+ const before = useHljs ? ` <pre><code class="hljs ${ options . lang } ">` : '<pre>' ;
28
+ const after = useHljs ? '</code></pre>' : '</pre>' ;
28
29
29
30
if ( ! wrap ) return useHljs ? before + data . value + after : data . value ;
30
31
31
- var lines = data . value . split ( '\n' ) ;
32
- var numbers = '' ;
33
- var content = '' ;
34
- var result = '' ;
35
- var line ;
32
+ const lines = data . value . split ( '\n' ) ;
33
+ let numbers = '' ;
34
+ let content = '' ;
36
35
37
- for ( var i = 0 , len = lines . length ; i < len ; i ++ ) {
38
- line = lines [ i ] ;
36
+ for ( let i = 0 , len = lines . length ; i < len ; i ++ ) {
37
+ let line = lines [ i ] ;
39
38
if ( tab ) line = replaceTabs ( line , tab ) ;
40
- numbers += ' <span class="line">' + ( firstLine + i ) + ' </span><br>' ;
39
+ numbers += ` <span class="line">${ firstLine + i } </span><br>` ;
41
40
content += formatLine ( line , firstLine + i , mark , options ) ;
42
41
}
43
42
44
- result += ' <figure class="highlight' + ( data . language ? ' ' + data . language : '' ) + '">' ;
43
+ let result = ` <figure class="highlight${ data . language ? ` ${ data . language } ` : '' } ">` ;
45
44
46
45
if ( caption ) {
47
- result += ' <figcaption>' + caption + ' </figcaption>' ;
46
+ result += ` <figcaption>${ caption } </figcaption>` ;
48
47
}
49
48
50
49
result += '<table><tr>' ;
51
50
52
51
if ( gutter ) {
53
- result += ' <td class="gutter"><pre>' + numbers + ' </pre></td>' ;
52
+ result += ` <td class="gutter"><pre>${ numbers } </pre></td>` ;
54
53
}
55
54
56
- result += ' <td class="code">' + before + content + after + ' </td>' ;
55
+ result += ` <td class="code">${ before } ${ content } ${ after } </td>` ;
57
56
result += '</tr></table></figure>' ;
58
57
59
58
return result ;
60
59
}
61
60
62
61
function formatLine ( line , lineno , marked , options ) {
63
- var useHljs = options . hljs || false ;
64
- var res = useHljs ? '' : '<span class="line' ;
65
- if ( marked . indexOf ( lineno ) !== - 1 ) {
62
+ const useHljs = options . hljs || false ;
63
+ let res = useHljs ? '' : '<span class="line' ;
64
+ if ( marked . includes ( lineno ) ) {
66
65
// Handle marked lines.
67
- res += useHljs ? ' <mark>' + line + ' </mark>' : ' marked">' + line + ' </span>' ;
66
+ res += useHljs ? ` <mark>${ line } </mark>` : ` marked">${ line } </span>` ;
68
67
} else {
69
- res += useHljs ? line : '">' + line + ' </span>' ;
68
+ res += useHljs ? line : `"> ${ line } </span>` ;
70
69
}
71
70
72
71
res += '<br>' ;
@@ -78,10 +77,10 @@ function encodePlainString(str) {
78
77
}
79
78
80
79
function replaceTabs ( str , tab ) {
81
- return str . replace ( / ^ \t + / , function ( match ) {
82
- var result = '' ;
80
+ return str . replace ( / ^ \t + / , match => {
81
+ let result = '' ;
83
82
84
- for ( var i = 0 , len = match . length ; i < len ; i ++ ) {
83
+ for ( let i = 0 , len = match . length ; i < len ; i ++ ) {
85
84
result += tab ;
86
85
}
87
86
@@ -90,7 +89,7 @@ function replaceTabs(str, tab) {
90
89
}
91
90
92
91
function loadLanguage ( lang ) {
93
- hljs . registerLanguage ( lang , require ( ' highlight.js/lib/languages/' + lang ) ) ;
92
+ hljs . registerLanguage ( lang , require ( ` highlight.js/lib/languages/${ lang } ` ) ) ;
94
93
}
95
94
96
95
function tryLanguage ( lang ) {
@@ -102,29 +101,25 @@ function tryLanguage(lang) {
102
101
}
103
102
104
103
function loadAllLanguages ( ) {
105
- alias . languages . filter ( function ( lang ) {
106
- return ! hljs . getLanguage ( lang ) ;
107
- } ) . forEach ( loadLanguage ) ;
104
+ alias . languages . filter ( lang => ! hljs . getLanguage ( lang ) ) . forEach ( loadLanguage ) ;
108
105
}
109
106
110
107
function highlight ( str , options ) {
111
- var lang = options . lang ;
112
- var autoDetect = options . hasOwnProperty ( 'autoDetect' ) ? options . autoDetect : false ;
108
+ let { lang } = options ;
109
+ const { autoDetect = false } = options ;
113
110
114
111
if ( ! lang && autoDetect ) {
115
112
loadAllLanguages ( ) ;
116
- lang = ( function ( ) {
117
- var result = hljs . highlightAuto ( str ) ;
118
- if ( result . relevance > 0 && result . language ) return result . language ;
113
+ const result = hljs . highlightAuto ( str ) ;
114
+ if ( result . relevance > 0 && result . language ) lang = result . language ;
119
115
120
- } ( ) ) ;
121
116
}
122
117
123
118
if ( ! lang ) {
124
119
lang = 'plain' ;
125
120
}
126
121
127
- var result = {
122
+ const result = {
128
123
value : encodePlainString ( str ) ,
129
124
language : lang . toLowerCase ( )
130
125
} ;
@@ -145,11 +140,11 @@ function highlight(str, options) {
145
140
146
141
function tryHighlight ( str , lang ) {
147
142
try {
148
- var matching = str . match ( / ( \r ? \n ) / ) ;
149
- var separator = matching ? matching [ 1 ] : '' ;
150
- var lines = matching ? str . split ( separator ) : [ str ] ;
151
- var result = hljs . highlight ( lang , lines . shift ( ) ) ;
152
- var html = result . value ;
143
+ const matching = str . match ( / ( \r ? \n ) / ) ;
144
+ const separator = matching ? matching [ 1 ] : '' ;
145
+ const lines = matching ? str . split ( separator ) : [ str ] ;
146
+ let result = hljs . highlight ( lang , lines . shift ( ) ) ;
147
+ let html = result . value ;
153
148
while ( lines . length > 0 ) {
154
149
result = hljs . highlight ( lang , lines . shift ( ) , false , result . top ) ;
155
150
html += separator + result . value ;
0 commit comments