@@ -5,23 +5,28 @@ var Entities = require('html-entities').XmlEntities;
55var entities = new Entities ( ) ;
66var alias = require ( '../highlight_alias.json' ) ;
77
8- hljs . configure ( {
9- classPrefix : ''
10- } ) ;
11-
128function highlightUtil ( str , options ) {
139 if ( typeof str !== 'string' ) throw new TypeError ( 'str must be a string!' ) ;
1410 options = options || { } ;
1511
12+ var useHljs = options . hasOwnProperty ( 'hljs' ) ? options . hljs : false ;
1613 var gutter = options . hasOwnProperty ( 'gutter' ) ? options . gutter : true ;
1714 var wrap = options . hasOwnProperty ( 'wrap' ) ? options . wrap : true ;
1815 var firstLine = options . hasOwnProperty ( 'firstLine' ) ? + options . firstLine : 1 ;
1916 var caption = options . caption ;
2017 var mark = options . hasOwnProperty ( 'mark' ) ? options . mark : [ ] ;
2118 var tab = options . tab ;
19+
20+ hljs . configure ( { classPrefix : useHljs ? 'hljs-' : '' } ) ;
21+
2222 var data = highlight ( str , options ) ;
2323
24- if ( ! wrap ) return data . value ;
24+ if ( useHljs && ! gutter ) wrap = false ;
25+
26+ var before = useHljs ? '<pre><code class="hljs ' + options . lang + '">' : '<pre>' ;
27+ var after = useHljs ? '</code></pre>' : '</pre>' ;
28+
29+ if ( ! wrap ) return useHljs ? before + data . value + after : data . value ;
2530
2631 var lines = data . value . split ( '\n' ) ;
2732 var numbers = '' ;
@@ -33,9 +38,7 @@ function highlightUtil(str, options) {
3338 line = lines [ i ] ;
3439 if ( tab ) line = replaceTabs ( line , tab ) ;
3540 numbers += '<span class="line">' + ( firstLine + i ) + '</span><br>' ;
36- content += '<span class="line' ;
37- content += ( mark . indexOf ( firstLine + i ) !== - 1 ) ? ' marked' : '' ;
38- content += '">' + line + '</span><br>' ;
41+ content += formatLine ( line , firstLine + i , mark , options ) ;
3942 }
4043
4144 result += '<figure class="highlight' + ( data . language ? ' ' + data . language : '' ) + '">' ;
@@ -50,12 +53,26 @@ function highlightUtil(str, options) {
5053 result += '<td class="gutter"><pre>' + numbers + '</pre></td>' ;
5154 }
5255
53- result += '<td class="code"><pre> ' + content + '</pre> </td>';
56+ result += '<td class="code">' + before + content + after + ' </td>';
5457 result += '</tr></table></figure>' ;
5558
5659 return result ;
5760}
5861
62+ 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 ) {
66+ // Handle marked lines.
67+ res += useHljs ? '<mark>' + line + '</mark>' : ' marked">' + line + '</span>' ;
68+ } else {
69+ res += useHljs ? line : '">' + line + '</span>' ;
70+ }
71+
72+ res += '<br>' ;
73+ return res ;
74+ }
75+
5976function encodePlainString ( str ) {
6077 return entities . encode ( str ) ;
6178}
@@ -121,6 +138,8 @@ function highlight(str, options) {
121138 return result ;
122139 }
123140
141+ if ( options . hljs ) return hljs . highlight ( lang , str ) ;
142+
124143 return tryHighlight ( str , result . language ) || result ;
125144}
126145
0 commit comments