diff --git a/lib/marked.js b/lib/marked.js index 74424dab38..278027363f 100644 --- a/lib/marked.js +++ b/lib/marked.js @@ -494,9 +494,9 @@ var inline = { + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + '|^' // declaration, e.g. + '|^', // CDATA section - link: /^!?\[(inside)\]\((href)\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, + link: /^!?\[(label)\]\((href)\)/, + reflink: /^!?\[(label)\]\s*\[(ref)\]/, + nolink: /^!?\[(ref)\]/, strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, em: /^_([^\s_])_(?!_)|^\*([^\s*"<])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<][\s\S]*?[^\s])\*(?!\*)/, code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, @@ -518,10 +518,11 @@ inline.tag = edit(inline.tag) inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~'; inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex(); -inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/; +var _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`+[^`]*?`+(?!`)|[^\[\]\\`])*/; +var _blockLabel = /(?:\\.|[^\[\]\\])*/; inline._href = /(?:[^()]|\([^()]*\)|\((?:[^()]*\([^()]*\))+[^()]*\))*/; inline.link = replace(inline.link) - ('inside', inline._inside) + ('label', _inlineLabel) ('href', inline._href) (); @@ -529,7 +530,12 @@ inline.link = replace(inline.link) inline.href = /^\s*?(?:\s+['"]([\s\S]*?)['"])?\s*$/; inline.reflink = replace(inline.reflink) - ('inside', inline._inside) + ('label', _inlineLabel) + ('ref', _blockLabel) + (); + +inline.nolink = replace(inline.nolink) + ('ref', _blockLabel) (); /** diff --git a/test/tests/catastrophic.text b/test/tests/catastrophic.text index 483b161ca9..83680575cf 100644 --- a/test/tests/catastrophic.text +++ b/test/tests/catastrophic.text @@ -1,4 +1,5 @@ [link](http://example.com/url) +[``a]b``](http://example.com/url) [link](http://example.com/url [link](http://example.com/ur [link](http://example.com/u