From dbb20c0e40fde7e436711e5edb7415e36bca9594 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 18 Aug 2011 18:59:42 -0500 Subject: [PATCH] better paragraphs --- lib/marked.js | 55 ++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) 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 '
'; case 'heading': @@ -400,11 +395,9 @@ var tok = function() { return inline.lexer(token.text); case 'text': var body = [ token.text ] - , last = token.line , top; while ((top = tokens[tokens.length-1]) - && top.type === 'text' - && top.line === ++last) { + && top.type === 'text') { body.push(next().text); } return '

'