Skip to content

Commit be12d0d

Browse files
committed
Support extensions for code blocks
1 parent e5a99a3 commit be12d0d

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

lib/marked.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
var block = {
1414
newline: /^\n+/,
1515
code: /^( {4}[^\n]+\n*)+/,
16+
attr: /^{{([^}]*)}}/,
1617
fences: noop,
1718
hr: /^( *[-*_]){3,} *(?:\n+|$)/,
1819
heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
@@ -75,7 +76,7 @@ block.normal = merge({}, block);
7576
*/
7677

7778
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+|{{([^}]*)}})/,
7980
paragraph: /^/,
8081
heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
8182
});
@@ -189,7 +190,8 @@ Lexer.prototype.token = function(src, top, bq) {
189190
this.tokens.push({
190191
type: 'code',
191192
lang: cap[2],
192-
text: cap[3] || ''
193+
text: cap[3] || '',
194+
attr: cap[4]
193195
});
194196
continue;
195197
}
@@ -769,7 +771,7 @@ function Renderer(options) {
769771
this.options = options || {};
770772
}
771773

772-
Renderer.prototype.code = function(code, lang, escaped) {
774+
Renderer.prototype.code = function(code, lang, escaped, attr) {
773775
if (this.options.highlight) {
774776
var out = this.options.highlight(code, lang);
775777
if (out != null && out !== code) {
@@ -779,9 +781,15 @@ Renderer.prototype.code = function(code, lang, escaped) {
779781
}
780782

781783
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+
}
785793
}
786794

787795
return '<pre><code class="'
@@ -1000,7 +1008,8 @@ Parser.prototype.tok = function() {
10001008
case 'code': {
10011009
return this.renderer.code(this.token.text,
10021010
this.token.lang,
1003-
this.token.escaped);
1011+
this.token.escaped,
1012+
this.token.attr);
10041013
}
10051014
case 'table': {
10061015
var header = ''

0 commit comments

Comments
 (0)