marked-rails 0.0.5 → 0.2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/marked-rails/version.rb +1 -1
- data/vendor/assets/javascripts/marked.js +95 -19
- metadata +3 -3
data/lib/marked-rails/version.rb
CHANGED
@@ -21,9 +21,9 @@ var block = {
|
|
21
21
|
blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/,
|
22
22
|
list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
|
23
23
|
html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
|
24
|
-
def: /^ *\[([^\]]+)\]:
|
24
|
+
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
|
25
25
|
table: noop,
|
26
|
-
paragraph: /^([^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))
|
26
|
+
paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
|
27
27
|
text: /^[^\n]+/
|
28
28
|
};
|
29
29
|
|
@@ -70,7 +70,7 @@ block.normal = merge({}, block);
|
|
70
70
|
*/
|
71
71
|
|
72
72
|
block.gfm = merge({}, block.normal, {
|
73
|
-
fences: /^ *(`{3,}|~{3,}) *(\
|
73
|
+
fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,
|
74
74
|
paragraph: /^/
|
75
75
|
});
|
76
76
|
|
@@ -144,6 +144,8 @@ Lexer.prototype.token = function(src, top) {
|
|
144
144
|
, next
|
145
145
|
, loose
|
146
146
|
, cap
|
147
|
+
, bull
|
148
|
+
, b
|
147
149
|
, item
|
148
150
|
, space
|
149
151
|
, i
|
@@ -272,10 +274,11 @@ Lexer.prototype.token = function(src, top) {
|
|
272
274
|
// list
|
273
275
|
if (cap = this.rules.list.exec(src)) {
|
274
276
|
src = src.substring(cap[0].length);
|
277
|
+
bull = cap[2];
|
275
278
|
|
276
279
|
this.tokens.push({
|
277
280
|
type: 'list_start',
|
278
|
-
ordered:
|
281
|
+
ordered: bull.length > 1
|
279
282
|
});
|
280
283
|
|
281
284
|
// Get each top-level item.
|
@@ -302,6 +305,16 @@ Lexer.prototype.token = function(src, top) {
|
|
302
305
|
: item.replace(/^ {1,4}/gm, '');
|
303
306
|
}
|
304
307
|
|
308
|
+
// Determine whether the next list item belongs here.
|
309
|
+
// Backpedal if it does not belong in this list.
|
310
|
+
if (this.options.smartLists && i !== l - 1) {
|
311
|
+
b = block.bullet.exec(cap[i+1])[0];
|
312
|
+
if (bull !== b && !(bull.length > 1 && b.length > 1)) {
|
313
|
+
src = cap.slice(i + 1).join('\n') + src;
|
314
|
+
i = l - 1;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
305
318
|
// Determine whether item is loose or not.
|
306
319
|
// Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
|
307
320
|
// for discount behavior.
|
@@ -339,7 +352,7 @@ Lexer.prototype.token = function(src, top) {
|
|
339
352
|
type: this.options.sanitize
|
340
353
|
? 'paragraph'
|
341
354
|
: 'html',
|
342
|
-
pre: cap[1] === 'pre',
|
355
|
+
pre: cap[1] === 'pre' || cap[1] === 'script',
|
343
356
|
text: cap[0]
|
344
357
|
});
|
345
358
|
continue;
|
@@ -394,7 +407,9 @@ Lexer.prototype.token = function(src, top) {
|
|
394
407
|
src = src.substring(cap[0].length);
|
395
408
|
this.tokens.push({
|
396
409
|
type: 'paragraph',
|
397
|
-
text: cap[
|
410
|
+
text: cap[1][cap[1].length-1] === '\n'
|
411
|
+
? cap[1].slice(0, -1)
|
412
|
+
: cap[1]
|
398
413
|
});
|
399
414
|
continue;
|
400
415
|
}
|
@@ -424,7 +439,7 @@ Lexer.prototype.token = function(src, top) {
|
|
424
439
|
*/
|
425
440
|
|
426
441
|
var inline = {
|
427
|
-
escape: /^\\([\\`*{}\[\]()#+\-.!_
|
442
|
+
escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
|
428
443
|
autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
|
429
444
|
url: noop,
|
430
445
|
tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
|
@@ -433,7 +448,7 @@ var inline = {
|
|
433
448
|
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
|
434
449
|
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
|
435
450
|
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
|
436
|
-
code: /^(`+)([\s\S]*?[^`])\1(?!`)/,
|
451
|
+
code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
|
437
452
|
br: /^ {2,}\n(?!\s*$)/,
|
438
453
|
del: noop,
|
439
454
|
text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
|
@@ -471,9 +486,9 @@ inline.pedantic = merge({}, inline.normal, {
|
|
471
486
|
*/
|
472
487
|
|
473
488
|
inline.gfm = merge({}, inline.normal, {
|
474
|
-
escape: replace(inline.escape)('])', '
|
475
|
-
url: /^(https?:\/\/[^\s]+[
|
476
|
-
del:
|
489
|
+
escape: replace(inline.escape)('])', '~|])')(),
|
490
|
+
url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
|
491
|
+
del: /^~~(?=\S)([\s\S]*?\S)~~/,
|
477
492
|
text: replace(inline.text)
|
478
493
|
(']|', '~]|')
|
479
494
|
('|', '|https?://|')
|
@@ -524,8 +539,8 @@ InlineLexer.rules = inline;
|
|
524
539
|
* Static Lexing/Compiling Method
|
525
540
|
*/
|
526
541
|
|
527
|
-
InlineLexer.output = function(src, links,
|
528
|
-
var inline = new InlineLexer(links,
|
542
|
+
InlineLexer.output = function(src, links, options) {
|
543
|
+
var inline = new InlineLexer(links, options);
|
529
544
|
return inline.output(src);
|
530
545
|
};
|
531
546
|
|
@@ -706,6 +721,19 @@ InlineLexer.prototype.outputLink = function(cap, link) {
|
|
706
721
|
}
|
707
722
|
};
|
708
723
|
|
724
|
+
/**
|
725
|
+
* Smartypants Transformations
|
726
|
+
*/
|
727
|
+
|
728
|
+
InlineLexer.prototype.smartypants = function(text) {
|
729
|
+
if (!this.options.smartypants) return text;
|
730
|
+
return text
|
731
|
+
.replace(/--/g, '—')
|
732
|
+
.replace(/'([^']*)'/g, '‘$1’')
|
733
|
+
.replace(/"([^"]*)"/g, '“$1”')
|
734
|
+
.replace(/\.{3}/g, '…');
|
735
|
+
};
|
736
|
+
|
709
737
|
/**
|
710
738
|
* Mangle Links
|
711
739
|
*/
|
@@ -828,7 +856,8 @@ Parser.prototype.tok = function() {
|
|
828
856
|
|
829
857
|
return '<pre><code'
|
830
858
|
+ (this.token.lang
|
831
|
-
? ' class="
|
859
|
+
? ' class="'
|
860
|
+
+ this.options.langPrefix
|
832
861
|
+ this.token.lang
|
833
862
|
+ '"'
|
834
863
|
: '')
|
@@ -991,13 +1020,58 @@ function merge(obj) {
|
|
991
1020
|
* Marked
|
992
1021
|
*/
|
993
1022
|
|
994
|
-
function marked(src, opt) {
|
1023
|
+
function marked(src, opt, callback) {
|
1024
|
+
if (callback || typeof opt === 'function') {
|
1025
|
+
if (!callback) {
|
1026
|
+
callback = opt;
|
1027
|
+
opt = null;
|
1028
|
+
}
|
1029
|
+
|
1030
|
+
if (opt) opt = merge({}, marked.defaults, opt);
|
1031
|
+
|
1032
|
+
var tokens = Lexer.lex(tokens, opt)
|
1033
|
+
, highlight = opt.highlight
|
1034
|
+
, pending = 0
|
1035
|
+
, l = tokens.length
|
1036
|
+
, i = 0;
|
1037
|
+
|
1038
|
+
if (!highlight || highlight.length < 3) {
|
1039
|
+
return callback(null, Parser.parse(tokens, opt));
|
1040
|
+
}
|
1041
|
+
|
1042
|
+
var done = function() {
|
1043
|
+
delete opt.highlight;
|
1044
|
+
var out = Parser.parse(tokens, opt);
|
1045
|
+
opt.highlight = highlight;
|
1046
|
+
return callback(null, out);
|
1047
|
+
};
|
1048
|
+
|
1049
|
+
for (; i < l; i++) {
|
1050
|
+
(function(token) {
|
1051
|
+
if (token.type !== 'code') return;
|
1052
|
+
pending++;
|
1053
|
+
return highlight(token.text, token.lang, function(err, code) {
|
1054
|
+
if (code == null || code === token.text) {
|
1055
|
+
return --pending || done();
|
1056
|
+
}
|
1057
|
+
token.text = code;
|
1058
|
+
token.escaped = true;
|
1059
|
+
--pending || done();
|
1060
|
+
});
|
1061
|
+
})(tokens[i]);
|
1062
|
+
}
|
1063
|
+
|
1064
|
+
return;
|
1065
|
+
}
|
995
1066
|
try {
|
1067
|
+
if (opt) opt = merge({}, marked.defaults, opt);
|
996
1068
|
return Parser.parse(Lexer.lex(src, opt), opt);
|
997
1069
|
} catch (e) {
|
998
1070
|
e.message += '\nPlease report this to https://github.com/chjj/marked.';
|
999
1071
|
if ((opt || marked.defaults).silent) {
|
1000
|
-
return 'An error occured
|
1072
|
+
return '<p>An error occured:</p><pre>'
|
1073
|
+
+ escape(e.message + '', true)
|
1074
|
+
+ '</pre>';
|
1001
1075
|
}
|
1002
1076
|
throw e;
|
1003
1077
|
}
|
@@ -1009,7 +1083,7 @@ function marked(src, opt) {
|
|
1009
1083
|
|
1010
1084
|
marked.options =
|
1011
1085
|
marked.setOptions = function(opt) {
|
1012
|
-
marked.defaults
|
1086
|
+
merge(marked.defaults, opt);
|
1013
1087
|
return marked;
|
1014
1088
|
};
|
1015
1089
|
|
@@ -1019,8 +1093,10 @@ marked.defaults = {
|
|
1019
1093
|
breaks: false,
|
1020
1094
|
pedantic: false,
|
1021
1095
|
sanitize: false,
|
1096
|
+
smartLists: false,
|
1022
1097
|
silent: false,
|
1023
|
-
highlight: null
|
1098
|
+
highlight: null,
|
1099
|
+
langPrefix: 'lang-'
|
1024
1100
|
};
|
1025
1101
|
|
1026
1102
|
/**
|
@@ -1038,7 +1114,7 @@ marked.inlineLexer = InlineLexer.output;
|
|
1038
1114
|
|
1039
1115
|
marked.parse = marked;
|
1040
1116
|
|
1041
|
-
if (typeof
|
1117
|
+
if (typeof exports === 'object') {
|
1042
1118
|
module.exports = marked;
|
1043
1119
|
} else if (typeof define === 'function' && define.amd) {
|
1044
1120
|
define(function() { return marked; });
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marked-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: ! 'A gemified verison of the chjj/marked: "A full-featured markdown parser
|
16
16
|
and compiler, written in javascript."'
|
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
50
|
version: '0'
|
51
51
|
requirements: []
|
52
52
|
rubyforge_project:
|
53
|
-
rubygems_version: 1.8.
|
53
|
+
rubygems_version: 1.8.24
|
54
54
|
signing_key:
|
55
55
|
specification_version: 3
|
56
56
|
summary: A gemified verison of the chjj/marked
|