text block function
This commit is contained in:
parent
9527426b65
commit
70da22d078
158
lib/marked.js
158
lib/marked.js
@ -22,14 +22,14 @@ var block = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
block.keys = [
|
block.keys = [
|
||||||
'newline',
|
'newline',
|
||||||
'block',
|
'block',
|
||||||
'heading',
|
'heading',
|
||||||
'lheading',
|
'lheading',
|
||||||
'hr',
|
'hr',
|
||||||
'blockquote',
|
'blockquote',
|
||||||
'list',
|
'list',
|
||||||
'html',
|
'html',
|
||||||
'text'
|
'text'
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ block.lexer = function(str) {
|
|||||||
|
|
||||||
// grab link definitons
|
// grab link definitons
|
||||||
str = str.replace(
|
str = str.replace(
|
||||||
/^ {0,3}\[([^\]]+)\]: *([^ ]+)(?: +"([^\n]+)")? *$/gm,
|
/^ {0,3}\[([^\]]+)\]: *([^ ]+)(?: +"([^\n]+)")? *$/gm,
|
||||||
function(__, id, href, title) {
|
function(__, id, href, title) {
|
||||||
links[id] = {
|
links[id] = {
|
||||||
href: href,
|
href: href,
|
||||||
@ -100,22 +100,22 @@ block.token = function(str, tokens) {
|
|||||||
break;
|
break;
|
||||||
case 'lheading':
|
case 'lheading':
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: 'heading',
|
type: 'heading',
|
||||||
depth: cap[2] === '=' ? 1 : 2,
|
depth: cap[2] === '=' ? 1 : 2,
|
||||||
text: cap[1]
|
text: cap[1]
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'heading':
|
case 'heading':
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: 'heading',
|
type: 'heading',
|
||||||
depth: cap[1].length,
|
depth: cap[1].length,
|
||||||
text: cap[2]
|
text: cap[2]
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'block':
|
case 'block':
|
||||||
cap = cap[0].replace(/^ {4}/gm, '');
|
cap = cap[0].replace(/^ {4}/gm, '');
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: 'block',
|
type: 'block',
|
||||||
text: cap
|
text: cap
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -130,10 +130,10 @@ block.token = function(str, tokens) {
|
|||||||
/^( *)([*+-]|\d+\.)[^\n]*(?:\n(?!\1(?:\2|\d+\.))[^\n]*)*/gm
|
/^( *)([*+-]|\d+\.)[^\n]*(?:\n(?!\1(?:\2|\d+\.))[^\n]*)*/gm
|
||||||
);
|
);
|
||||||
each(cap, function(item) {
|
each(cap, function(item) {
|
||||||
// remove the list items sigil
|
// remove the list items sigil
|
||||||
// so its seen as the next token
|
// so its seen as the next token
|
||||||
item = item.replace(/^ *([*+-]|\d+\.) */, '');
|
item = item.replace(/^ *([*+-]|\d+\.) */, '');
|
||||||
// outdent whatever the
|
// outdent whatever the
|
||||||
// list item contains, hacky
|
// list item contains, hacky
|
||||||
var space = /\n( +)/.exec(item);
|
var space = /\n( +)/.exec(item);
|
||||||
if (space) {
|
if (space) {
|
||||||
@ -141,7 +141,7 @@ block.token = function(str, tokens) {
|
|||||||
item = item.replace(space, '');
|
item = item.replace(space, '');
|
||||||
}
|
}
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: loose
|
type: loose
|
||||||
? 'loose_item_start'
|
? 'loose_item_start'
|
||||||
: 'list_item_start'
|
: 'list_item_start'
|
||||||
});
|
});
|
||||||
@ -157,7 +157,7 @@ block.token = function(str, tokens) {
|
|||||||
case 'html':
|
case 'html':
|
||||||
case 'text':
|
case 'text':
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: key,
|
type: key,
|
||||||
text: cap[0]
|
text: cap[0]
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -197,13 +197,13 @@ var inline = {
|
|||||||
|
|
||||||
inline.keys = [
|
inline.keys = [
|
||||||
'escape',
|
'escape',
|
||||||
'autolink',
|
'autolink',
|
||||||
'tag',
|
'tag',
|
||||||
'link',
|
'link',
|
||||||
'reflink',
|
'reflink',
|
||||||
'nolink',
|
'nolink',
|
||||||
'strong',
|
'strong',
|
||||||
'em',
|
'em',
|
||||||
'code',
|
'code',
|
||||||
'br',
|
'br',
|
||||||
'text'
|
'text'
|
||||||
@ -226,7 +226,7 @@ inline.text = (function() {
|
|||||||
('code')
|
('code')
|
||||||
('br');
|
('br');
|
||||||
|
|
||||||
return new
|
return new
|
||||||
RegExp('^[^\\0]+?(?=' + body.join('|') + '|$)');
|
RegExp('^[^\\0]+?(?=' + body.join('|') + '|$)');
|
||||||
})();
|
})();
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ inline.lexer = function(str) {
|
|||||||
|
|
||||||
while (scan()) {
|
while (scan()) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'escape':
|
case 'escape':
|
||||||
out += cap[1];
|
out += cap[1];
|
||||||
break;
|
break;
|
||||||
case 'tag':
|
case 'tag':
|
||||||
@ -285,28 +285,28 @@ inline.lexer = function(str) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (cap[0][0] !== '!') {
|
if (cap[0][0] !== '!') {
|
||||||
out += '<a href="'
|
out += '<a href="'
|
||||||
+ escape(link.href)
|
+ escape(link.href)
|
||||||
+ '"'
|
+ '"'
|
||||||
+ (link.title
|
+ (link.title
|
||||||
? ' title="'
|
? ' title="'
|
||||||
+ escape(link.title)
|
+ escape(link.title)
|
||||||
+ '"'
|
+ '"'
|
||||||
: '')
|
: '')
|
||||||
+ '>'
|
+ '>'
|
||||||
+ inline.lexer(cap[1])
|
+ inline.lexer(cap[1])
|
||||||
+ '</a>';
|
+ '</a>';
|
||||||
} else {
|
} else {
|
||||||
out += '<img src="'
|
out += '<img src="'
|
||||||
+ escape(link.href)
|
+ escape(link.href)
|
||||||
+ '" alt="'
|
+ '" alt="'
|
||||||
+ escape(cap[1])
|
+ escape(cap[1])
|
||||||
+ '"'
|
+ '"'
|
||||||
+ (link.title
|
+ (link.title
|
||||||
? ' title="'
|
? ' title="'
|
||||||
+ escape(link.title)
|
+ escape(link.title)
|
||||||
+ '"'
|
+ '"'
|
||||||
: '')
|
: '')
|
||||||
+ '>';
|
+ '>';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -325,18 +325,18 @@ inline.lexer = function(str) {
|
|||||||
+ '</a>';
|
+ '</a>';
|
||||||
break;
|
break;
|
||||||
case 'strong':
|
case 'strong':
|
||||||
out += '<strong>'
|
out += '<strong>'
|
||||||
+ inline.lexer(cap[2] || cap[1])
|
+ inline.lexer(cap[2] || cap[1])
|
||||||
+ '</strong>';
|
+ '</strong>';
|
||||||
break;
|
break;
|
||||||
case 'em':
|
case 'em':
|
||||||
out += '<em>'
|
out += '<em>'
|
||||||
+ inline.lexer(cap[2] || cap[1])
|
+ inline.lexer(cap[2] || cap[1])
|
||||||
+ '</em>';
|
+ '</em>';
|
||||||
break;
|
break;
|
||||||
case 'code':
|
case 'code':
|
||||||
out += '<code>'
|
out += '<code>'
|
||||||
+ escape(cap[2] || cap[1])
|
+ escape(cap[2] || cap[1])
|
||||||
+ '</code>';
|
+ '</code>';
|
||||||
break;
|
break;
|
||||||
case 'br':
|
case 'br':
|
||||||
@ -368,64 +368,76 @@ var tok = function() {
|
|||||||
switch (token.type) {
|
switch (token.type) {
|
||||||
case 'space':
|
case 'space':
|
||||||
return '';
|
return '';
|
||||||
case 'hr':
|
case 'hr':
|
||||||
return '<hr>';
|
return '<hr>';
|
||||||
case 'heading':
|
case 'heading':
|
||||||
return '<h' + token.depth + '>'
|
return '<h' + token.depth + '>'
|
||||||
+ inline.lexer(token.text)
|
+ inline.lexer(token.text)
|
||||||
+ '</h' + token.depth + '>';
|
+ '</h' + token.depth + '>';
|
||||||
case 'block':
|
case 'block':
|
||||||
return '<pre><code>'
|
return '<pre><code>'
|
||||||
+ escape(token.text)
|
+ escape(token.text)
|
||||||
+ '</code></pre>';
|
+ '</code></pre>';
|
||||||
case 'blockquote_start':
|
case 'blockquote_start':
|
||||||
var body = [];
|
var body = [];
|
||||||
|
|
||||||
while (next().type !== 'blockquote_end') {
|
while (next().type !== 'blockquote_end') {
|
||||||
body.push(tok());
|
body.push(tok());
|
||||||
}
|
}
|
||||||
return '<blockquote>'
|
|
||||||
+ body.join('')
|
return '<blockquote>'
|
||||||
|
+ body.join('')
|
||||||
+ '</blockquote>';
|
+ '</blockquote>';
|
||||||
case 'list_start':
|
case 'list_start':
|
||||||
var body = []
|
var type = token.ordered ? 'ol' : 'ul'
|
||||||
, type = token.ordered ? 'ol' : 'ul';
|
, body = [];
|
||||||
|
|
||||||
while (next().type !== 'list_end') {
|
while (next().type !== 'list_end') {
|
||||||
body.push(tok());
|
body.push(tok());
|
||||||
}
|
}
|
||||||
return '<' + type + '>'
|
|
||||||
+ body.join('')
|
return '<' + type + '>'
|
||||||
|
+ body.join('')
|
||||||
+ '</' + type + '>';
|
+ '</' + type + '>';
|
||||||
case 'list_item_start':
|
case 'list_item_start':
|
||||||
var body = [];
|
var body = [];
|
||||||
|
|
||||||
while (next().type !== 'list_item_end') {
|
while (next().type !== 'list_item_end') {
|
||||||
body.push(token.type === 'text'
|
body.push(token.type === 'text'
|
||||||
? inline.lexer(token.text)
|
? text()
|
||||||
: tok());
|
: tok());
|
||||||
}
|
}
|
||||||
return '<li>'
|
|
||||||
+ body.join(' ')
|
return '<li>'
|
||||||
|
+ body.join(' ')
|
||||||
+ '</li>';
|
+ '</li>';
|
||||||
case 'loose_item_start':
|
case 'loose_item_start':
|
||||||
var body = [];
|
var body = [];
|
||||||
|
|
||||||
while (next().type !== 'list_item_end') {
|
while (next().type !== 'list_item_end') {
|
||||||
body.push(tok());
|
body.push(tok());
|
||||||
}
|
}
|
||||||
return '<li>'
|
|
||||||
+ body.join(' ')
|
return '<li>'
|
||||||
|
+ body.join(' ')
|
||||||
+ '</li>';
|
+ '</li>';
|
||||||
case 'html':
|
case 'html':
|
||||||
return inline.lexer(token.text);
|
return inline.lexer(token.text);
|
||||||
case 'text':
|
case 'text':
|
||||||
var body = [ token.text ]
|
return '<p>' + text() + '</p>';
|
||||||
, top;
|
}
|
||||||
while ((top = tokens[tokens.length-1])
|
};
|
||||||
&& top.type === 'text') {
|
|
||||||
body.push(next().text);
|
var text = function() {
|
||||||
}
|
var body = [ token.text ]
|
||||||
return '<p>'
|
, top;
|
||||||
+ inline.lexer(body.join('\n'))
|
|
||||||
+ '</p>';
|
while ((top = tokens[tokens.length-1])
|
||||||
|
&& top.type === 'text') {
|
||||||
|
body.push(next().text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return inline.lexer(body.join('\n'));
|
||||||
};
|
};
|
||||||
|
|
||||||
var parse = function(src) {
|
var parse = function(src) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user