Merge branch 'compliant'

This commit is contained in:
Christopher Jeffrey 2011-08-15 00:20:02 -05:00
commit 141accbfaf
2 changed files with 51 additions and 34 deletions

View File

@ -54,7 +54,6 @@ There may also be some bugs.
- Find a better way of testing. Create a test suite from scratch because most - Find a better way of testing. Create a test suite from scratch because most
markdown compilers don't appear to be working properly in every aspect (but markdown compilers don't appear to be working properly in every aspect (but
it's hard to tell because the markdown "spec" is so vague). it's hard to tell because the markdown "spec" is so vague).
- Possibly alter rules to recognize arbitrary blocks of HTML better.
- Recognize and parse paragraph list items better. - Recognize and parse paragraph list items better.
- Add an explicit pretty printing and minification feature. - Add an explicit pretty printing and minification feature.

View File

@ -196,25 +196,25 @@ block.token = function(str, tokens, line) {
*/ */
var inline = { var inline = {
escape: /^\\([\\`*{}\[\]()#+\-.!])/,
autolink: /^<([^ >]+(:|@)[^ >]+)>/, autolink: /^<([^ >]+(:|@)[^ >]+)>/,
tag: /^<[^\n>]+>/, tag: /^<[^\n>]+>/,
img: /^!\[([^\]]+)\]\(([^\s\)]+)\s*([^\)]*)\)/, link: /^!?\[([^\]]+)\]\(([^\)]+)\)/,
link: /^\[([^\]]+)\]\(([^\)]+)\)/, reflink: /^!?\[([^\]]+)\]\[([^\]]+)\]/,
reflink: /^\[([^\]]+)\]\[([^\]]+)\]/,
strong: /^__([\s\S]+?)__|^\*\*([\s\S]+?)\*\*/, strong: /^__([\s\S]+?)__|^\*\*([\s\S]+?)\*\*/,
em: /^_([^_]+)_|^\*([^*]+)\*/, em: /^_([^_]+)_|^\*([^*]+)\*/,
escape: /^`([^`]+)`|^``([\s\S]+?)``/ code: /^`([^`]+)`|^``([\s\S]+?)``/
}; };
inline.keys = [ inline.keys = [
'escape',
'autolink', 'autolink',
'tag', 'tag',
'img',
'link', 'link',
'reflink', 'reflink',
'strong', 'strong',
'em', 'em',
'escape' 'code'
]; ];
// hacky, but performant // hacky, but performant
@ -245,9 +245,10 @@ inline.text = (function(rules) {
inline.lexer = function(str) { inline.lexer = function(str) {
var out = '' var out = ''
, links = tokens.links , links = tokens.links
, link , link = {}
, text , text
, href; , href
, val;
var rules = inline var rules = inline
, keys = inline.keys , keys = inline.keys
@ -268,35 +269,52 @@ inline.lexer = function(str) {
while (scan()) { while (scan()) {
switch (key) { switch (key) {
case 'escape':
out += cap[1];
break;
case 'tag': case 'tag':
out += cap[0]; out += cap[0];
break; break;
case 'img':
out += '<img src="'
+ escape(cap[2])
+ '" alt="' + escape(cap[1])
+ '"'
+ (cap[3]
? ' title="'
+ escape(cap[3])
+ '"'
: '')
+ '>';
break;
case 'link': case 'link':
case 'reflink': case 'reflink':
link = links[cap[2]] || ''; if (cap[0][0] !== '!') {
out += '<a href="' if (key === 'reflink') {
+ escape(link.href || cap[2]) link = links[cap[2]];
+ '"' } else {
+ (link.title link.href = cap[2];
? ' title="' link.title = cap[3];
+ escape(link.title) }
+ '"' out += '<a href="'
: '') + escape(link.href)
+ '>' + '"'
+ inline.lexer(cap[1]) + (link.title
+ '</a>'; ? ' title="'
+ escape(link.title)
+ '"'
: '')
+ '>'
+ inline.lexer(cap[1])
+ '</a>';
} else {
if (key === 'reflink') {
link = links[cap[2]];
} else {
val = cap[2].match(/^([^\s]+)\s*(.+)?/);
link.href = val[1];
link.title = val[2];
}
out += '<img src="'
+ escape(link.href)
+ '" alt="'
+ escape(cap[1])
+ '"'
+ (link.title
? ' title="'
+ escape(link.title)
+ '"'
: '')
+ '>';
}
break; break;
case 'autolink': case 'autolink':
if (cap[2] === '@') { if (cap[2] === '@') {
@ -320,7 +338,7 @@ inline.lexer = function(str) {
+ inline.lexer(cap[2] || cap[1]) + inline.lexer(cap[2] || cap[1])
+ '</em>'; + '</em>';
break; break;
case 'escape': case 'code':
out += '<code>' out += '<code>'
+ escape(cap[2] || cap[1]) + escape(cap[2] || cap[1])
+ '</code>'; + '</code>';