better paragraphs

This commit is contained in:
Christopher Jeffrey 2011-08-18 18:59:42 -05:00
parent 76d7ee9bc4
commit dbb20c0e40

View File

@ -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 '<hr>';
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 '<p>'