diff --git a/README.md b/README.md index 7ca32565..e6e1ef03 100644 --- a/README.md +++ b/README.md @@ -19,15 +19,15 @@ node v0.6.x ``` bash $ node test --bench -marked completed in 7904ms. -marked (with gfm) completed in 8947ms. -discount completed in 7171ms. -showdown (reuse converter) completed in 15729ms. -showdown (new converter) completed in 18149ms. -markdown-js completed in 24521ms. +marked completed in 7303ms. +marked (with gfm) completed in 8206ms. +discount completed in 7170ms. +showdown (reuse converter) completed in 15865ms. +showdown (new converter) completed in 18140ms. +markdown-js completed in 24357ms. ``` -__Marked is now only ~700ms behind Discount (which is written in C).__ +__Marked is now only ~130ms behind Discount, which is written in C.__ For those feeling skeptical: These benchmarks run the entire markdown test suite 1000 times. The test suite tests every feature. It doesn't cater to specific diff --git a/lib/marked.js b/lib/marked.js index 78750fa3..3e9d5c24 100644 --- a/lib/marked.js +++ b/lib/marked.js @@ -11,13 +11,13 @@ var block = { newline: /^\n+/, - code: /^ {4,}[^\n]*(?:\n {4,}[^\n]*|\n)*(?=\n| *$)/, - gfm_code: /^ *``` *(\w+)? *\n([^\0]+?)\s*```(?= *\n| *$)/, - hr: /^( *[\-*_]){3,} *\n/, + code: /^ {4,}[^\n]*(?:\n {4,}[^\n]*|\n)*(?:\n+| *$)/, + gfm_code: /^ *``` *(\w+)? *\n([^\0]+?)\s*```(?: *\n+| *$)/, + hr: /^( *[\-*_]){3,} *\n+/, heading: /^ *(#{1,6}) *([^\0]+?) *#* *\n+/, - lheading: /^([^\n]+)\n *(=|-){3,}/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*)+/, - list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )|\s*$)(?!\1bullet)/, + lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, + blockquote: /^( *>[^\n]+(\n[^\n]+)*)+\n*/, + list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )|\s*$)(?!\1bullet)\n*/, html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, paragraph: /^([^\n]+\n?(?!body))+\n*/, text: /^[^\n]+/ @@ -27,7 +27,7 @@ block.list = (function() { var list = block.list.source; list = list - .replace('bullet', /(?:[*+-](?!( *[-*]){2,})|\d+\.)/.source) + .replace('bullet', /(?:[*+-](?!(?: *[-*]){2,})|\d+\.)/.source); return new RegExp(list); })(); @@ -121,9 +121,7 @@ block.token = function(str, tokens, top) { cap = cap[0].replace(/^ {4}/gm, ''); tokens.push({ type: 'code', - text: cap[cap.length-1] === '\n' - ? cap.slice(0, -1) - : cap + text: cap.replace(/\n+$/, '') }); continue; }