marked 0.3.2 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Gulpfile.js +22 -0
- package/Makefile +1 -1
- package/README.md +21 -1
- package/bower.json +24 -0
- package/component.json +1 -1
- package/lib/marked.js +35 -15
- package/man/marked.1 +3 -0
- package/marked.min.js +6 -0
- package/package.json +4 -2
package/Gulpfile.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var gulp = require('gulp');
|
|
2
|
+
var uglify = require('gulp-uglify');
|
|
3
|
+
var concat = require('gulp-concat');
|
|
4
|
+
|
|
5
|
+
var preserveFirstComment = function() {
|
|
6
|
+
var set = false;
|
|
7
|
+
|
|
8
|
+
return function() {
|
|
9
|
+
if (set) return false;
|
|
10
|
+
set = true;
|
|
11
|
+
return true;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
gulp.task('uglify', function() {
|
|
16
|
+
gulp.src('lib/marked.js')
|
|
17
|
+
.pipe(uglify({preserveComments: preserveFirstComment()}))
|
|
18
|
+
.pipe(concat('marked.min.js'))
|
|
19
|
+
.pipe(gulp.dest('.'));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
gulp.task('default', ['uglify']);
|
package/Makefile
CHANGED
package/README.md
CHANGED
|
@@ -39,6 +39,26 @@ marked.setOptions({
|
|
|
39
39
|
console.log(marked('I am using __markdown__.'));
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### Browser
|
|
43
|
+
|
|
44
|
+
```html
|
|
45
|
+
<!doctype html>
|
|
46
|
+
<html>
|
|
47
|
+
<head>
|
|
48
|
+
<meta charset="utf-8"/>
|
|
49
|
+
<title>Marked in the browser</title>
|
|
50
|
+
<script src="lib/marked.js"></script>
|
|
51
|
+
</head>
|
|
52
|
+
<body>
|
|
53
|
+
<div id="content"></div>
|
|
54
|
+
<script>
|
|
55
|
+
document.getElementById('content').innerHTML =
|
|
56
|
+
marked('# Marked in browser\n\nRendered by **marked**.');
|
|
57
|
+
</script>
|
|
58
|
+
</body>
|
|
59
|
+
</html>
|
|
60
|
+
```
|
|
61
|
+
|
|
42
62
|
## marked(markdownString [,options] [,callback])
|
|
43
63
|
|
|
44
64
|
### markdownString
|
|
@@ -131,7 +151,7 @@ An object containing functions to render tokens to HTML.
|
|
|
131
151
|
|
|
132
152
|
#### Overriding renderer methods
|
|
133
153
|
|
|
134
|
-
The renderer option allows you to render tokens in a custom
|
|
154
|
+
The renderer option allows you to render tokens in a custom manner. Here is an
|
|
135
155
|
example of overriding the default heading token rendering by adding an embedded anchor tag like on GitHub:
|
|
136
156
|
|
|
137
157
|
```javascript
|
package/bower.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "marked",
|
|
3
|
+
"version": "0.3.4",
|
|
4
|
+
"homepage": "https://github.com/chjj/marked",
|
|
5
|
+
"authors": [
|
|
6
|
+
"Christopher Jeffrey <chjjeffrey@gmail.com>"
|
|
7
|
+
],
|
|
8
|
+
"description": "A markdown parser built for speed",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"markdown",
|
|
11
|
+
"markup",
|
|
12
|
+
"html"
|
|
13
|
+
],
|
|
14
|
+
"main": "lib/marked.js",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"ignore": [
|
|
17
|
+
"**/.*",
|
|
18
|
+
"node_modules",
|
|
19
|
+
"bower_components",
|
|
20
|
+
"app/bower_components",
|
|
21
|
+
"test",
|
|
22
|
+
"tests"
|
|
23
|
+
]
|
|
24
|
+
}
|
package/component.json
CHANGED
package/lib/marked.js
CHANGED
|
@@ -20,7 +20,7 @@ var block = {
|
|
|
20
20
|
lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
|
|
21
21
|
blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
|
|
22
22
|
list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
|
|
23
|
-
html: /^ *(?:comment|closed|closing
|
|
23
|
+
html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,
|
|
24
24
|
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
|
|
25
25
|
table: noop,
|
|
26
26
|
paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
|
|
@@ -75,8 +75,9 @@ block.normal = merge({}, block);
|
|
|
75
75
|
*/
|
|
76
76
|
|
|
77
77
|
block.gfm = merge({}, block.normal, {
|
|
78
|
-
fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]
|
|
79
|
-
paragraph:
|
|
78
|
+
fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,
|
|
79
|
+
paragraph: /^/,
|
|
80
|
+
heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
|
|
80
81
|
});
|
|
81
82
|
|
|
82
83
|
block.gfm.paragraph = replace(block.paragraph)
|
|
@@ -188,7 +189,7 @@ Lexer.prototype.token = function(src, top, bq) {
|
|
|
188
189
|
this.tokens.push({
|
|
189
190
|
type: 'code',
|
|
190
191
|
lang: cap[2],
|
|
191
|
-
text: cap[3]
|
|
192
|
+
text: cap[3] || ''
|
|
192
193
|
});
|
|
193
194
|
continue;
|
|
194
195
|
}
|
|
@@ -359,7 +360,8 @@ Lexer.prototype.token = function(src, top, bq) {
|
|
|
359
360
|
type: this.options.sanitize
|
|
360
361
|
? 'paragraph'
|
|
361
362
|
: 'html',
|
|
362
|
-
pre:
|
|
363
|
+
pre: !this.options.sanitizer
|
|
364
|
+
&& (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
|
|
363
365
|
text: cap[0]
|
|
364
366
|
});
|
|
365
367
|
continue;
|
|
@@ -454,7 +456,7 @@ var inline = {
|
|
|
454
456
|
reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
|
|
455
457
|
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
|
|
456
458
|
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
|
|
457
|
-
em: /^\b_((?:
|
|
459
|
+
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
|
|
458
460
|
code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
|
|
459
461
|
br: /^ {2,}\n(?!\s*$)/,
|
|
460
462
|
del: noop,
|
|
@@ -606,8 +608,10 @@ InlineLexer.prototype.output = function(src) {
|
|
|
606
608
|
}
|
|
607
609
|
src = src.substring(cap[0].length);
|
|
608
610
|
out += this.options.sanitize
|
|
609
|
-
?
|
|
610
|
-
|
|
611
|
+
? this.options.sanitizer
|
|
612
|
+
? this.options.sanitizer(cap[0])
|
|
613
|
+
: escape(cap[0])
|
|
614
|
+
: cap[0]
|
|
611
615
|
continue;
|
|
612
616
|
}
|
|
613
617
|
|
|
@@ -678,7 +682,7 @@ InlineLexer.prototype.output = function(src) {
|
|
|
678
682
|
// text
|
|
679
683
|
if (cap = this.rules.text.exec(src)) {
|
|
680
684
|
src = src.substring(cap[0].length);
|
|
681
|
-
out += escape(this.smartypants(cap[0]));
|
|
685
|
+
out += this.renderer.text(escape(this.smartypants(cap[0])));
|
|
682
686
|
continue;
|
|
683
687
|
}
|
|
684
688
|
|
|
@@ -712,7 +716,9 @@ InlineLexer.prototype.smartypants = function(text) {
|
|
|
712
716
|
if (!this.options.smartypants) return text;
|
|
713
717
|
return text
|
|
714
718
|
// em-dashes
|
|
715
|
-
.replace(
|
|
719
|
+
.replace(/---/g, '\u2014')
|
|
720
|
+
// en-dashes
|
|
721
|
+
.replace(/--/g, '\u2013')
|
|
716
722
|
// opening singles
|
|
717
723
|
.replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
|
|
718
724
|
// closing singles & apostrophes
|
|
@@ -730,6 +736,7 @@ InlineLexer.prototype.smartypants = function(text) {
|
|
|
730
736
|
*/
|
|
731
737
|
|
|
732
738
|
InlineLexer.prototype.mangle = function(text) {
|
|
739
|
+
if (!this.options.mangle) return text;
|
|
733
740
|
var out = ''
|
|
734
741
|
, l = text.length
|
|
735
742
|
, i = 0
|
|
@@ -868,7 +875,7 @@ Renderer.prototype.link = function(href, title, text) {
|
|
|
868
875
|
} catch (e) {
|
|
869
876
|
return '';
|
|
870
877
|
}
|
|
871
|
-
if (prot.indexOf('javascript:') === 0) {
|
|
878
|
+
if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {
|
|
872
879
|
return '';
|
|
873
880
|
}
|
|
874
881
|
}
|
|
@@ -889,6 +896,10 @@ Renderer.prototype.image = function(href, title, text) {
|
|
|
889
896
|
return out;
|
|
890
897
|
};
|
|
891
898
|
|
|
899
|
+
Renderer.prototype.text = function(text) {
|
|
900
|
+
return text;
|
|
901
|
+
};
|
|
902
|
+
|
|
892
903
|
/**
|
|
893
904
|
* Parsing & Compiling
|
|
894
905
|
*/
|
|
@@ -1083,7 +1094,8 @@ function escape(html, encode) {
|
|
|
1083
1094
|
}
|
|
1084
1095
|
|
|
1085
1096
|
function unescape(html) {
|
|
1086
|
-
|
|
1097
|
+
// explicitly match decimal, hex, and named HTML entities
|
|
1098
|
+
return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, function(_, n) {
|
|
1087
1099
|
n = n.toLowerCase();
|
|
1088
1100
|
if (n === 'colon') return ':';
|
|
1089
1101
|
if (n.charAt(0) === '#') {
|
|
@@ -1154,8 +1166,13 @@ function marked(src, opt, callback) {
|
|
|
1154
1166
|
|
|
1155
1167
|
pending = tokens.length;
|
|
1156
1168
|
|
|
1157
|
-
var done = function() {
|
|
1158
|
-
|
|
1169
|
+
var done = function(err) {
|
|
1170
|
+
if (err) {
|
|
1171
|
+
opt.highlight = highlight;
|
|
1172
|
+
return callback(err);
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
var out;
|
|
1159
1176
|
|
|
1160
1177
|
try {
|
|
1161
1178
|
out = Parser.parse(tokens, opt);
|
|
@@ -1184,6 +1201,7 @@ function marked(src, opt, callback) {
|
|
|
1184
1201
|
return --pending || done();
|
|
1185
1202
|
}
|
|
1186
1203
|
return highlight(token.text, token.lang, function(err, code) {
|
|
1204
|
+
if (err) return done(err);
|
|
1187
1205
|
if (code == null || code === token.text) {
|
|
1188
1206
|
return --pending || done();
|
|
1189
1207
|
}
|
|
@@ -1226,6 +1244,8 @@ marked.defaults = {
|
|
|
1226
1244
|
breaks: false,
|
|
1227
1245
|
pedantic: false,
|
|
1228
1246
|
sanitize: false,
|
|
1247
|
+
sanitizer: null,
|
|
1248
|
+
mangle: true,
|
|
1229
1249
|
smartLists: false,
|
|
1230
1250
|
silent: false,
|
|
1231
1251
|
highlight: null,
|
|
@@ -1253,7 +1273,7 @@ marked.inlineLexer = InlineLexer.output;
|
|
|
1253
1273
|
|
|
1254
1274
|
marked.parse = marked;
|
|
1255
1275
|
|
|
1256
|
-
if (typeof exports === 'object') {
|
|
1276
|
+
if (typeof module !== 'undefined' && typeof exports === 'object') {
|
|
1257
1277
|
module.exports = marked;
|
|
1258
1278
|
} else if (typeof define === 'function' && define.amd) {
|
|
1259
1279
|
define(function() { return marked; });
|
package/man/marked.1
CHANGED
|
@@ -61,6 +61,9 @@ Use smarter list behavior than the original markdown.
|
|
|
61
61
|
.BI \-\-lang\-prefix\ [\fIprefix\fP]
|
|
62
62
|
Set the prefix for code block classes.
|
|
63
63
|
.TP
|
|
64
|
+
.BI \-\-mangle
|
|
65
|
+
Mangle email addresses.
|
|
66
|
+
.TP
|
|
64
67
|
.BI \-\-no\-sanitize,\ \-no-etc...
|
|
65
68
|
The inverse of any of the marked options above.
|
|
66
69
|
.TP
|
package/marked.min.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* marked - a markdown parser
|
|
3
|
+
* Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
|
|
4
|
+
* https://github.com/chjj/marked
|
|
5
|
+
*/
|
|
6
|
+
(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}());
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "marked",
|
|
3
3
|
"description": "A markdown parser built for speed",
|
|
4
4
|
"author": "Christopher Jeffrey",
|
|
5
|
-
"version": "0.3.
|
|
5
|
+
"version": "0.3.6",
|
|
6
6
|
"main": "./lib/marked.js",
|
|
7
7
|
"bin": "./bin/marked",
|
|
8
8
|
"man": "./man/marked.1",
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"markdown": "*",
|
|
18
18
|
"showdown": "*",
|
|
19
|
-
"
|
|
19
|
+
"gulp": "^3.8.11",
|
|
20
|
+
"gulp-uglify": "^1.1.0",
|
|
21
|
+
"gulp-concat": "^2.5.2"
|
|
20
22
|
},
|
|
21
23
|
"scripts": { "test": "node test", "bench": "node test --bench" }
|
|
22
24
|
}
|