13
13
var block = {
14
14
newline : / ^ \n + / ,
15
15
code : / ^ ( { 4 } [ ^ \n ] + \n * ) + / ,
16
+ attr : / ^ { { ( [ ^ } ] * ) } } / ,
16
17
fences : noop ,
17
18
hr : / ^ ( * [ - * _ ] ) { 3 , } * (?: \n + | $ ) / ,
18
19
heading : / ^ * ( # { 1 , 6 } ) * ( [ ^ \n ] + ?) * # * * (?: \n + | $ ) / ,
@@ -75,7 +76,7 @@ block.normal = merge({}, block);
75
76
*/
76
77
77
78
block . gfm = merge ( { } , block . normal , {
78
- fences : / ^ * ( ` { 3 , } | ~ { 3 , } ) [ \. ] * ( \S + ) ? * \n ( [ \s \S ] * ?) \s * \1 * (?: \n + | $ ) / ,
79
+ fences : / ^ * ( ` { 3 , } | ~ { 3 , } ) [ \. ] * ( \S + ) ? * \n ( [ \s \S ] * ?) \s * \1 * (?: \n + | { { ( [ ^ } ] * ) } } ) / ,
79
80
paragraph : / ^ / ,
80
81
heading : / ^ * ( # { 1 , 6 } ) + ( [ ^ \n ] + ?) * # * * (?: \n + | $ ) /
81
82
} ) ;
@@ -189,7 +190,8 @@ Lexer.prototype.token = function(src, top, bq) {
189
190
this . tokens . push ( {
190
191
type : 'code' ,
191
192
lang : cap [ 2 ] ,
192
- text : cap [ 3 ] || ''
193
+ text : cap [ 3 ] || '' ,
194
+ attr : cap [ 4 ]
193
195
} ) ;
194
196
continue ;
195
197
}
@@ -769,7 +771,7 @@ function Renderer(options) {
769
771
this . options = options || { } ;
770
772
}
771
773
772
- Renderer . prototype . code = function ( code , lang , escaped ) {
774
+ Renderer . prototype . code = function ( code , lang , escaped , attr ) {
773
775
if ( this . options . highlight ) {
774
776
var out = this . options . highlight ( code , lang ) ;
775
777
if ( out != null && out !== code ) {
@@ -779,9 +781,15 @@ Renderer.prototype.code = function(code, lang, escaped) {
779
781
}
780
782
781
783
if ( ! lang ) {
782
- return '<pre><code>'
783
- + ( escaped ? code : escape ( code , true ) )
784
- + '\n</code></pre>' ;
784
+ if ( attr ) {
785
+ return '<pre><code class="' + attr + '">'
786
+ + ( escaped ? code : escape ( code , true ) )
787
+ + '\n</code></pre>' ;
788
+ } else {
789
+ return '<pre><code>'
790
+ + ( escaped ? code : escape ( code , true ) )
791
+ + '\n</code></pre>' ;
792
+ }
785
793
}
786
794
787
795
return '<pre><code class="'
@@ -1000,7 +1008,8 @@ Parser.prototype.tok = function() {
1000
1008
case 'code' : {
1001
1009
return this . renderer . code ( this . token . text ,
1002
1010
this . token . lang ,
1003
- this . token . escaped ) ;
1011
+ this . token . escaped ,
1012
+ this . token . attr ) ;
1004
1013
}
1005
1014
case 'table' : {
1006
1015
var header = ''
0 commit comments