clean
This commit is contained in:
parent
68157a29b4
commit
ea1a4043a4
324
lib/marked.js
324
lib/marked.js
@ -136,10 +136,7 @@ block.token = function lex(str, tokens, line) {
|
||||
|
||||
var scan = function() {
|
||||
if (!str) return;
|
||||
|
||||
var i = 0;
|
||||
|
||||
for (; i < len; i++) {
|
||||
for (var i = 0; i < len; i++) {
|
||||
key = keys[i];
|
||||
if (cap = rules[key].exec(str)) {
|
||||
str = str.substring(cap[0].length);
|
||||
@ -148,107 +145,108 @@ block.token = function lex(str, tokens, line) {
|
||||
}
|
||||
};
|
||||
|
||||
while (scan())
|
||||
switch (key) {
|
||||
case 'newline':
|
||||
line++;
|
||||
break;
|
||||
case 'hr':
|
||||
tokens.push({
|
||||
type: 'hr',
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'lheading':
|
||||
tokens.push({
|
||||
type: 'heading',
|
||||
depth: cap[2] === '=' ? 1 : 2,
|
||||
text: cap[1],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'heading':
|
||||
tokens.push({
|
||||
type: 'heading',
|
||||
depth: cap[1].length,
|
||||
text: cap[2],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'block':
|
||||
cap = cap[0].replace(/^ {4}/gm, '');
|
||||
tokens.push({
|
||||
type: 'block',
|
||||
text: cap,
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'list':
|
||||
tokens.push({
|
||||
type: 'list_start',
|
||||
ordered: isFinite(cap[2]),
|
||||
line: line
|
||||
});
|
||||
// get each top-level
|
||||
// item in the list
|
||||
cap = cap[0].match(
|
||||
/^( *)(\*|\+|-|\d+\.)[^\n]+(?:\n(?:\1 )+[^\n]+)*/gm
|
||||
);
|
||||
cap.forEach(function(item) {
|
||||
// remove the list items sigil
|
||||
// so its seen as the next token
|
||||
item = item.replace(/^ *(\*|\+|-|\d+\.) */, '');
|
||||
// outdent whatever the
|
||||
// list item contains, hacky
|
||||
var len = /\n( +)/.exec(item);
|
||||
if (len) {
|
||||
len = len[1].length;
|
||||
item = item.replace(
|
||||
new RegExp('^ {' + len + '}', 'gm'),
|
||||
''
|
||||
);
|
||||
}
|
||||
while (scan()) {
|
||||
switch (key) {
|
||||
case 'newline':
|
||||
line++;
|
||||
break;
|
||||
case 'hr':
|
||||
tokens.push({
|
||||
type: 'list_item_start',
|
||||
type: 'hr',
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'lheading':
|
||||
tokens.push({
|
||||
type: 'heading',
|
||||
depth: cap[2] === '=' ? 1 : 2,
|
||||
text: cap[1],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'heading':
|
||||
tokens.push({
|
||||
type: 'heading',
|
||||
depth: cap[1].length,
|
||||
text: cap[2],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'block':
|
||||
cap = cap[0].replace(/^ {4}/gm, '');
|
||||
tokens.push({
|
||||
type: 'block',
|
||||
text: cap,
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'list':
|
||||
tokens.push({
|
||||
type: 'list_start',
|
||||
ordered: isFinite(cap[2]),
|
||||
line: line
|
||||
});
|
||||
// get each top-level
|
||||
// item in the list
|
||||
cap = cap[0].match(
|
||||
/^( *)(\*|\+|-|\d+\.)[^\n]+(?:\n(?:\1 )+[^\n]+)*/gm
|
||||
);
|
||||
cap.forEach(function(item) {
|
||||
// remove the list items sigil
|
||||
// so its seen as the next token
|
||||
item = item.replace(/^ *(\*|\+|-|\d+\.) */, '');
|
||||
// outdent whatever the
|
||||
// list item contains, hacky
|
||||
var len = /\n( +)/.exec(item);
|
||||
if (len) {
|
||||
len = len[1].length;
|
||||
item = item.replace(
|
||||
new RegExp('^ {' + len + '}', 'gm'),
|
||||
''
|
||||
);
|
||||
}
|
||||
tokens.push({
|
||||
type: 'list_item_start',
|
||||
line: line
|
||||
});
|
||||
|
||||
// recurse
|
||||
lex(item, tokens, line);
|
||||
|
||||
tokens.push({
|
||||
type: 'list_item_end',
|
||||
line: line
|
||||
});
|
||||
});
|
||||
tokens.push({
|
||||
type: 'list_end',
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'html':
|
||||
case 'text':
|
||||
tokens.push({
|
||||
type: key,
|
||||
text: cap[0],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'blockquote':
|
||||
tokens.push({
|
||||
type: 'blockquote_start',
|
||||
line: line
|
||||
});
|
||||
cap = cap[0].replace(/^ *>/gm, '');
|
||||
|
||||
// recurse
|
||||
lex(item, tokens, line);
|
||||
lex(cap, tokens, line);
|
||||
|
||||
tokens.push({
|
||||
type: 'list_item_end',
|
||||
type: 'blockquote_end',
|
||||
line: line
|
||||
});
|
||||
});
|
||||
tokens.push({
|
||||
type: 'list_end',
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'html':
|
||||
case 'text':
|
||||
tokens.push({
|
||||
type: key,
|
||||
text: cap[0],
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
case 'blockquote':
|
||||
tokens.push({
|
||||
type: 'blockquote_start',
|
||||
line: line
|
||||
});
|
||||
cap = cap[0].replace(/^ *>/gm, '');
|
||||
|
||||
// recurse
|
||||
lex(cap, tokens, line);
|
||||
|
||||
tokens.push({
|
||||
type: 'blockquote_end',
|
||||
line: line
|
||||
});
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return tokens;
|
||||
@ -302,10 +300,7 @@ inline.lexer = function(str) {
|
||||
|
||||
var scan = function() {
|
||||
if (!str) return;
|
||||
|
||||
var i = 0;
|
||||
|
||||
for (; i < len; i++) {
|
||||
for (var i = 0; i < len; i++) {
|
||||
key = keys[i];
|
||||
if (cap = rules[key].exec(str)) {
|
||||
str = str.substring(cap[0].length);
|
||||
@ -314,70 +309,71 @@ inline.lexer = function(str) {
|
||||
}
|
||||
};
|
||||
|
||||
while (scan())
|
||||
switch (key) {
|
||||
case 'tag':
|
||||
out += cap[0];
|
||||
break;
|
||||
case 'img':
|
||||
out += '<img src="'
|
||||
+ escape(cap[2])
|
||||
+ '" alt="' + escape(cap[1])
|
||||
+ '"'
|
||||
+ (cap[3]
|
||||
? ' title="'
|
||||
+ escape(cap[3])
|
||||
+ '"'
|
||||
: '')
|
||||
+ '>';
|
||||
break;
|
||||
case 'link':
|
||||
case 'reflink':
|
||||
link = links[cap[2]] || '';
|
||||
out += '<a href="'
|
||||
+ escape(link.href || cap[2])
|
||||
+ '"'
|
||||
+ (link.title
|
||||
? ' title="'
|
||||
+ escape(link.title)
|
||||
+ '"'
|
||||
: '')
|
||||
+ '>'
|
||||
+ inline.lexer(cap[1])
|
||||
+ '</a>';
|
||||
break;
|
||||
case 'autolink':
|
||||
if (cap[2] === '@') {
|
||||
text = mangle(cap[1]);
|
||||
href = mangle('mailto:') + text;
|
||||
} else {
|
||||
text = escape(cap[1]);
|
||||
href = text;
|
||||
}
|
||||
out += '<a href="' + href + '">'
|
||||
+ text
|
||||
+ '</a>';
|
||||
break;
|
||||
case 'strong':
|
||||
out += '<strong>'
|
||||
+ inline.lexer(cap[2] || cap[1])
|
||||
+ '</strong>';
|
||||
break;
|
||||
case 'em':
|
||||
out += '<em>'
|
||||
+ inline.lexer(cap[2] || cap[1])
|
||||
+ '</em>';
|
||||
break;
|
||||
case 'escape':
|
||||
out += '<code>'
|
||||
+ escape(cap[2] || cap[1])
|
||||
+ '</code>';
|
||||
break;
|
||||
case 'text':
|
||||
out += escape(cap[1]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
while (scan()) {
|
||||
switch (key) {
|
||||
case 'tag':
|
||||
out += cap[0];
|
||||
break;
|
||||
case 'img':
|
||||
out += '<img src="'
|
||||
+ escape(cap[2])
|
||||
+ '" alt="' + escape(cap[1])
|
||||
+ '"'
|
||||
+ (cap[3]
|
||||
? ' title="'
|
||||
+ escape(cap[3])
|
||||
+ '"'
|
||||
: '')
|
||||
+ '>';
|
||||
break;
|
||||
case 'link':
|
||||
case 'reflink':
|
||||
link = links[cap[2]] || '';
|
||||
out += '<a href="'
|
||||
+ escape(link.href || cap[2])
|
||||
+ '"'
|
||||
+ (link.title
|
||||
? ' title="'
|
||||
+ escape(link.title)
|
||||
+ '"'
|
||||
: '')
|
||||
+ '>'
|
||||
+ inline.lexer(cap[1])
|
||||
+ '</a>';
|
||||
break;
|
||||
case 'autolink':
|
||||
if (cap[2] === '@') {
|
||||
text = mangle(cap[1]);
|
||||
href = mangle('mailto:') + text;
|
||||
} else {
|
||||
text = escape(cap[1]);
|
||||
href = text;
|
||||
}
|
||||
out += '<a href="' + href + '">'
|
||||
+ text
|
||||
+ '</a>';
|
||||
break;
|
||||
case 'strong':
|
||||
out += '<strong>'
|
||||
+ inline.lexer(cap[2] || cap[1])
|
||||
+ '</strong>';
|
||||
break;
|
||||
case 'em':
|
||||
out += '<em>'
|
||||
+ inline.lexer(cap[2] || cap[1])
|
||||
+ '</em>';
|
||||
break;
|
||||
case 'escape':
|
||||
out += '<code>'
|
||||
+ escape(cap[2] || cap[1])
|
||||
+ '</code>';
|
||||
break;
|
||||
case 'text':
|
||||
out += escape(cap[1]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
|
Loading…
x
Reference in New Issue
Block a user