diff --git a/lib/marked.js b/lib/marked.js index 7368055b..86fd3b93 100644 --- a/lib/marked.js +++ b/lib/marked.js @@ -10,7 +10,7 @@ */ var block = { - newline: /^\n/, + newline: /^\n+/, block: /^ {4,}[^\n]*(?:\n {4,}[^\n]*)*/, heading: /^ *(#{1,6}) *([^\n#]*) *#*/, lheading: /^([^\n]+)\n *(=|-){3,}/, @@ -63,10 +63,10 @@ block.lexer = function(str) { tokens.links = links; - return block.token(str, tokens, 0); + return block.token(str, tokens); }; -block.token = function(str, tokens, line) { +block.token = function(str, tokens) { var rules = block , keys = block.keys , len = keys.length @@ -87,43 +87,42 @@ block.token = function(str, tokens, line) { while (scan()) { switch (key) { case 'newline': - line++; + if (cap[0].length > 1) { + tokens.push({ + type: 'space' + }); + } break; case 'hr': tokens.push({ - type: 'hr', - line: line + type: 'hr' }); break; case 'lheading': tokens.push({ type: 'heading', depth: cap[2] === '=' ? 1 : 2, - text: cap[1], - line: line + text: cap[1] }); break; case 'heading': tokens.push({ type: 'heading', depth: cap[1].length, - text: cap[2], - line: line + text: cap[2] }); break; case 'block': cap = cap[0].replace(/^ {4}/gm, ''); tokens.push({ type: 'block', - text: cap, - line: line + text: cap }); break; case 'list': tokens.push({ type: 'list_start', - ordered: isFinite(cap[2]), - line: line + ordered: isFinite(cap[2]) }); // get each top-level // item in the list @@ -142,38 +141,32 @@ block.token = function(str, tokens, line) { item = item.replace(space, ''); } tokens.push({ - type: 'list_item_start', - line: line + type: 'list_item_start' }); - block.token(item, tokens, line); + block.token(item, tokens); tokens.push({ - type: 'list_item_end', - line: line + type: 'list_item_end' }); }); tokens.push({ - type: 'list_end', - line: line + type: 'list_end' }); break; case 'html': case 'text': tokens.push({ type: key, - text: cap[0], - line: line + text: cap[0] }); break; case 'blockquote': tokens.push({ - type: 'blockquote_start', - line: line + type: 'blockquote_start' }); cap = cap[0].replace(/^ *>/gm, ''); - block.token(cap, tokens, line); + block.token(cap, tokens); tokens.push({ - type: 'blockquote_end', - line: line + type: 'blockquote_end' }); break; } @@ -357,6 +350,8 @@ var next = function() { var tok = function() { switch (token.type) { + case 'space': + return ''; case 'hr': return '
'