diff options
author | John MacFarlane <jgm@berkeley.edu> | 2015-01-09 14:30:49 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2015-01-09 14:31:16 -0800 |
commit | 3c68dcac2d30616904840c52d359653ba1f746b4 (patch) | |
tree | 4713867b156a27f3e3d52b2436cd40da2a07f9b1 | |
parent | 9d005eab33db7b31edca49982398c666ccc27567 (diff) |
Simplified reMain, with AST manipulation for 2-space hardbreak.
Small performance improvement.
-rw-r--r-- | js/lib/inlines.js | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 5cec93b..ff3ffde 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -71,7 +71,7 @@ var reEntity = new RegExp(ENTITY, 'gi'); // Matches a character with a special meaning in markdown, // or a string of non-special characters. Note: we match // clumps of _ or * or `, because they need to be handled in groups. -var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|(?: *[^\n `\[\]\\!<&*_]+)+|[ \n]+)/m; +var reMain = /^(?:[_*`\n]+|[\[\]\\!<&*_]|[^\n`\[\]\\!<&*_]+)/m; // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { @@ -670,10 +670,19 @@ var parseString = function(block) { // line break; otherwise a soft line break. var parseNewline = function(block) { "use strict"; - var m = this.match(/^ *\n/); + var m = this.match(/^\n/); if (m) { - var node = new Node(m.length > 2 ? 'Hardbreak' : 'Softbreak'); - block.appendChild(node); + // check previous node for trailing spaces + var lastc = block.lastChild; + if (lastc && lastc.t === 'Text') { + var sps = / *$/.exec(lastc.c)[0].length; + if (sps > 0) { + lastc.c = lastc.c.replace(/ *$/,''); + } + block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak')); + } else { + block.appendChild(new Node('Softbreak')); + } return true; } else { return false; |