OLD | NEW |
1 /** | 1 /** |
2 * marked - a markdown parser | 2 * marked - a markdown parser |
3 * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) | 3 * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) |
4 * https://github.com/chjj/marked | 4 * https://github.com/chjj/marked |
5 */ | 5 */ |
6 | 6 |
7 ;(function() { | 7 ;(function() { |
8 | 8 |
9 /** | 9 /** |
10 * Block-Level Grammar | 10 * Block-Level Grammar |
11 */ | 11 */ |
12 | 12 |
13 var block = { | 13 var block = { |
14 newline: /^\n+/, | 14 newline: /^\n+/, |
15 code: /^( {4}[^\n]+\n*)+/, | 15 code: /^( {4}[^\n]+\n*)+/, |
16 fences: noop, | 16 fences: noop, |
17 hr: /^( *[-*_]){3,} *(?:\n+|$)/, | 17 hr: /^( *[-*_]){3,} *(?:\n+|$)/, |
18 heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, | 18 heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, |
19 nptable: noop, | 19 nptable: noop, |
20 lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, | 20 lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, |
21 blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, | 21 blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, |
22 list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, | 22 list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, |
23 html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, | 23 html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\
s*$))/, |
24 def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, | 24 def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, |
25 table: noop, | 25 table: noop, |
26 paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, | 26 paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, |
27 text: /^[^\n]+/ | 27 text: /^[^\n]+/ |
28 }; | 28 }; |
29 | 29 |
30 block.bullet = /(?:[*+-]|\d+\.)/; | 30 block.bullet = /(?:[*+-]|\d+\.)/; |
31 block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; | 31 block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; |
32 block.item = replace(block.item, 'gm') | 32 block.item = replace(block.item, 'gm') |
33 (/bull/g, block.bullet) | 33 (/bull/g, block.bullet) |
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 | 861 |
862 Renderer.prototype.link = function(href, title, text) { | 862 Renderer.prototype.link = function(href, title, text) { |
863 if (this.options.sanitize) { | 863 if (this.options.sanitize) { |
864 try { | 864 try { |
865 var prot = decodeURIComponent(unescape(href)) | 865 var prot = decodeURIComponent(unescape(href)) |
866 .replace(/[^\w:]/g, '') | 866 .replace(/[^\w:]/g, '') |
867 .toLowerCase(); | 867 .toLowerCase(); |
868 } catch (e) { | 868 } catch (e) { |
869 return ''; | 869 return ''; |
870 } | 870 } |
871 if (prot.indexOf('javascript:') === 0) { | 871 if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) { |
872 return ''; | 872 return ''; |
873 } | 873 } |
874 } | 874 } |
875 var out = '<a href="' + href + '"'; | 875 var out = '<a href="' + href + '"'; |
876 if (title) { | 876 if (title) { |
877 out += ' title="' + title + '"'; | 877 out += ' title="' + title + '"'; |
878 } | 878 } |
879 out += '>' + text + '</a>'; | 879 out += '>' + text + '</a>'; |
880 return out; | 880 return out; |
881 }; | 881 }; |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1147 , i = 0; | 1147 , i = 0; |
1148 | 1148 |
1149 try { | 1149 try { |
1150 tokens = Lexer.lex(src, opt) | 1150 tokens = Lexer.lex(src, opt) |
1151 } catch (e) { | 1151 } catch (e) { |
1152 return callback(e); | 1152 return callback(e); |
1153 } | 1153 } |
1154 | 1154 |
1155 pending = tokens.length; | 1155 pending = tokens.length; |
1156 | 1156 |
1157 var done = function() { | 1157 var done = function(err) { |
1158 var out, err; | 1158 if (err) { |
| 1159 opt.highlight = highlight; |
| 1160 return callback(err); |
| 1161 } |
| 1162 |
| 1163 var out; |
1159 | 1164 |
1160 try { | 1165 try { |
1161 out = Parser.parse(tokens, opt); | 1166 out = Parser.parse(tokens, opt); |
1162 } catch (e) { | 1167 } catch (e) { |
1163 err = e; | 1168 err = e; |
1164 } | 1169 } |
1165 | 1170 |
1166 opt.highlight = highlight; | 1171 opt.highlight = highlight; |
1167 | 1172 |
1168 return err | 1173 return err |
1169 ? callback(err) | 1174 ? callback(err) |
1170 : callback(null, out); | 1175 : callback(null, out); |
1171 }; | 1176 }; |
1172 | 1177 |
1173 if (!highlight || highlight.length < 3) { | 1178 if (!highlight || highlight.length < 3) { |
1174 return done(); | 1179 return done(); |
1175 } | 1180 } |
1176 | 1181 |
1177 delete opt.highlight; | 1182 delete opt.highlight; |
1178 | 1183 |
1179 if (!pending) return done(); | 1184 if (!pending) return done(); |
1180 | 1185 |
1181 for (; i < tokens.length; i++) { | 1186 for (; i < tokens.length; i++) { |
1182 (function(token) { | 1187 (function(token) { |
1183 if (token.type !== 'code') { | 1188 if (token.type !== 'code') { |
1184 return --pending || done(); | 1189 return --pending || done(); |
1185 } | 1190 } |
1186 return highlight(token.text, token.lang, function(err, code) { | 1191 return highlight(token.text, token.lang, function(err, code) { |
| 1192 if (err) return done(err); |
1187 if (code == null || code === token.text) { | 1193 if (code == null || code === token.text) { |
1188 return --pending || done(); | 1194 return --pending || done(); |
1189 } | 1195 } |
1190 token.text = code; | 1196 token.text = code; |
1191 token.escaped = true; | 1197 token.escaped = true; |
1192 --pending || done(); | 1198 --pending || done(); |
1193 }); | 1199 }); |
1194 })(tokens[i]); | 1200 })(tokens[i]); |
1195 } | 1201 } |
1196 | 1202 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 marked.Renderer = Renderer; | 1252 marked.Renderer = Renderer; |
1247 | 1253 |
1248 marked.Lexer = Lexer; | 1254 marked.Lexer = Lexer; |
1249 marked.lexer = Lexer.lex; | 1255 marked.lexer = Lexer.lex; |
1250 | 1256 |
1251 marked.InlineLexer = InlineLexer; | 1257 marked.InlineLexer = InlineLexer; |
1252 marked.inlineLexer = InlineLexer.output; | 1258 marked.inlineLexer = InlineLexer.output; |
1253 | 1259 |
1254 marked.parse = marked; | 1260 marked.parse = marked; |
1255 | 1261 |
1256 if (typeof exports === 'object') { | 1262 if (typeof module !== 'undefined' && typeof exports === 'object') { |
1257 module.exports = marked; | 1263 module.exports = marked; |
1258 } else if (typeof define === 'function' && define.amd) { | 1264 } else if (typeof define === 'function' && define.amd) { |
1259 define(function() { return marked; }); | 1265 define(function() { return marked; }); |
1260 } else { | 1266 } else { |
1261 this.marked = marked; | 1267 this.marked = marked; |
1262 } | 1268 } |
1263 | 1269 |
1264 }).call(function() { | 1270 }).call(function() { |
1265 return this || (typeof window !== 'undefined' ? window : global); | 1271 return this || (typeof window !== 'undefined' ? window : global); |
1266 }()); | 1272 }()); |
OLD | NEW |