marked-rails 0.2.10.1 → 0.3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b68f070d24786a94504f62f1183c949b4f90d95c
4
- data.tar.gz: e6797910ccece2cf131e59de8c0dc5d4560d2289
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDNkNDE3NjM4Zjg4ZGY0ODNjZDFkM2IzNTVjMmE5MmM2M2EwZTc2Yg==
5
+ data.tar.gz: !binary |-
6
+ ZWU3MTkzMzlkMjJlOTFmOGRkN2ZiODFmMGE3NTgwMTc1NjNkYzA3Mg==
5
7
  SHA512:
6
- metadata.gz: 360a9aada83b7dc27baa537274d99c5e8e78de0bf348f37d9dda42f5881eb4428c4d9388bebc4e08fb5de51ff68e4da4c4097070d99b1c03e3b9c5c6311c3ab2
7
- data.tar.gz: 23d870e6d4ebc2a982d76eae6b98237b8390722cc844ef0140fe12df7ead4b3530f1431b24134b7233440babb35236f66245509bd378065d6c680990cb04f3d6
8
+ metadata.gz: !binary |-
9
+ MGViNTI1YTExN2JhODY0NTU2ZmY3OWU5MmU0ZDk1MThjOTQzODZhNjdlZTQy
10
+ ZmEwZGUzMDk0NGJlMTI0YTQxMmNiNjU0OWRmNzVmYmJiNDA5ZDA0NjFjMWY4
11
+ YzNlNTExMjI5YWI2ZmZiMjAyMWJmNTQ2M2NiMWFhNWM2MTE2ZGM=
12
+ data.tar.gz: !binary |-
13
+ NjU3OTMwZDBmODBlMTZjMzk3YmFkNTYyMmZiMzg2YmUwMjUyZDFiMzFmZjQ3
14
+ M2JhM2EzM2I0ZGM4YzdjZWNhNDlhYjY2ODBjYTI5OGY1NTFlZjFhM2Y2YmRk
15
+ ZjAzNzMzODE1NWNiYmE0NWNmOWJjNGFiZmQ4Y2Q2ODRlYTU2OGI=
data/README.md CHANGED
@@ -36,8 +36,6 @@ To invoke the generator, run:
36
36
  rails generate marked:install
37
37
  ```
38
38
 
39
- You're done!
40
-
41
39
  ## Versioning Conventions
42
40
 
43
41
  The least significant digits are gem-specific. Everything before those digits are marked versions.
@@ -1,6 +1,6 @@
1
1
  module Marked
2
2
  module Rails
3
- MARKED_VERSION = "0.2.10"
4
- VERSION = "#{MARKED_VERSION}.1"
3
+ MARKED_VERSION = "0.3.2"
4
+ VERSION = "#{MARKED_VERSION}.0"
5
5
  end
6
6
  end
@@ -3,10 +3,11 @@ require File.expand_path('../lib/marked-rails/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["nodanaonlyzuul", "rosscooperman"]
6
- gem.email = ["stephen@eastmedia.com"]
6
+ gem.email = ["cooperman@gmail.com"]
7
7
  gem.description = 'A gemified verison of the chjj/marked: "A full-featured markdown parser and compiler, written in javascript."'
8
8
  gem.summary = 'A gemified verison of the chjj/marked'
9
- gem.homepage = "https://github.com/eastmedia/marked-rails"
9
+ gem.homepage = "https://github.com/rosscooperman/marked-rails"
10
+ gem.licenses = ['MIT']
10
11
 
11
12
  gem.files = `git ls-files`.split($\)
12
13
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * marked - a markdown parser
3
- * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed)
3
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
4
4
  * https://github.com/chjj/marked
5
5
  */
6
6
 
@@ -18,8 +18,8 @@ var block = {
18
18
  heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
19
19
  nptable: noop,
20
20
  lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
21
- blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/,
22
- list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
21
+ blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
22
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
23
23
  html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
24
24
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
25
25
  table: noop,
@@ -35,13 +35,18 @@ block.item = replace(block.item, 'gm')
35
35
 
36
36
  block.list = replace(block.list)
37
37
  (/bull/g, block.bullet)
38
- ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)
38
+ ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))')
39
+ ('def', '\\n+(?=' + block.def.source + ')')
40
+ ();
41
+
42
+ block.blockquote = replace(block.blockquote)
43
+ ('def', block.def)
39
44
  ();
40
45
 
41
46
  block._tag = '(?!(?:'
42
47
  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
43
48
  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
44
- + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b';
49
+ + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';
45
50
 
46
51
  block.html = replace(block.html)
47
52
  ('comment', /<!--[\s\S]*?-->/)
@@ -141,7 +146,7 @@ Lexer.prototype.lex = function(src) {
141
146
  * Lexing
142
147
  */
143
148
 
144
- Lexer.prototype.token = function(src, top) {
149
+ Lexer.prototype.token = function(src, top, bq) {
145
150
  var src = src.replace(/^ +$/gm, '')
146
151
  , next
147
152
  , loose
@@ -264,7 +269,7 @@ Lexer.prototype.token = function(src, top) {
264
269
  // Pass `top` to keep the current
265
270
  // "toplevel" state. This is exactly
266
271
  // how markdown.pl works.
267
- this.token(cap, top);
272
+ this.token(cap, top, true);
268
273
 
269
274
  this.tokens.push({
270
275
  type: 'blockquote_end'
@@ -333,7 +338,7 @@ Lexer.prototype.token = function(src, top) {
333
338
  });
334
339
 
335
340
  // Recurse.
336
- this.token(item, false);
341
+ this.token(item, false, bq);
337
342
 
338
343
  this.tokens.push({
339
344
  type: 'list_item_end'
@@ -361,7 +366,7 @@ Lexer.prototype.token = function(src, top) {
361
366
  }
362
367
 
363
368
  // def
364
- if (top && (cap = this.rules.def.exec(src))) {
369
+ if ((!bq && top) && (cap = this.rules.def.exec(src))) {
365
370
  src = src.substring(cap[0].length);
366
371
  this.tokens.links[cap[1].toLowerCase()] = {
367
372
  href: cap[2],
@@ -514,6 +519,8 @@ function InlineLexer(links, options) {
514
519
  this.options = options || marked.defaults;
515
520
  this.links = links;
516
521
  this.rules = inline.normal;
522
+ this.renderer = this.options.renderer || new Renderer;
523
+ this.renderer.options = this.options;
517
524
 
518
525
  if (!this.links) {
519
526
  throw new
@@ -577,29 +584,26 @@ InlineLexer.prototype.output = function(src) {
577
584
  text = escape(cap[1]);
578
585
  href = text;
579
586
  }
580
- out += '<a href="'
581
- + href
582
- + '">'
583
- + text
584
- + '</a>';
587
+ out += this.renderer.link(href, null, text);
585
588
  continue;
586
589
  }
587
590
 
588
591
  // url (gfm)
589
- if (cap = this.rules.url.exec(src)) {
592
+ if (!this.inLink && (cap = this.rules.url.exec(src))) {
590
593
  src = src.substring(cap[0].length);
591
594
  text = escape(cap[1]);
592
595
  href = text;
593
- out += '<a href="'
594
- + href
595
- + '">'
596
- + text
597
- + '</a>';
596
+ out += this.renderer.link(href, null, text);
598
597
  continue;
599
598
  }
600
599
 
601
600
  // tag
602
601
  if (cap = this.rules.tag.exec(src)) {
602
+ if (!this.inLink && /^<a /i.test(cap[0])) {
603
+ this.inLink = true;
604
+ } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
605
+ this.inLink = false;
606
+ }
603
607
  src = src.substring(cap[0].length);
604
608
  out += this.options.sanitize
605
609
  ? escape(cap[0])
@@ -610,10 +614,12 @@ InlineLexer.prototype.output = function(src) {
610
614
  // link
611
615
  if (cap = this.rules.link.exec(src)) {
612
616
  src = src.substring(cap[0].length);
617
+ this.inLink = true;
613
618
  out += this.outputLink(cap, {
614
619
  href: cap[2],
615
620
  title: cap[3]
616
621
  });
622
+ this.inLink = false;
617
623
  continue;
618
624
  }
619
625
 
@@ -628,50 +634,44 @@ InlineLexer.prototype.output = function(src) {
628
634
  src = cap[0].substring(1) + src;
629
635
  continue;
630
636
  }
637
+ this.inLink = true;
631
638
  out += this.outputLink(cap, link);
639
+ this.inLink = false;
632
640
  continue;
633
641
  }
634
642
 
635
643
  // strong
636
644
  if (cap = this.rules.strong.exec(src)) {
637
645
  src = src.substring(cap[0].length);
638
- out += '<strong>'
639
- + this.output(cap[2] || cap[1])
640
- + '</strong>';
646
+ out += this.renderer.strong(this.output(cap[2] || cap[1]));
641
647
  continue;
642
648
  }
643
649
 
644
650
  // em
645
651
  if (cap = this.rules.em.exec(src)) {
646
652
  src = src.substring(cap[0].length);
647
- out += '<em>'
648
- + this.output(cap[2] || cap[1])
649
- + '</em>';
653
+ out += this.renderer.em(this.output(cap[2] || cap[1]));
650
654
  continue;
651
655
  }
652
656
 
653
657
  // code
654
658
  if (cap = this.rules.code.exec(src)) {
655
659
  src = src.substring(cap[0].length);
656
- out += '<code>'
657
- + escape(cap[2], true)
658
- + '</code>';
660
+ out += this.renderer.codespan(escape(cap[2], true));
659
661
  continue;
660
662
  }
661
663
 
662
664
  // br
663
665
  if (cap = this.rules.br.exec(src)) {
664
666
  src = src.substring(cap[0].length);
665
- out += '<br>';
667
+ out += this.renderer.br();
666
668
  continue;
667
669
  }
668
670
 
669
671
  // del (gfm)
670
672
  if (cap = this.rules.del.exec(src)) {
671
673
  src = src.substring(cap[0].length);
672
- out += '<del>'
673
- + this.output(cap[1])
674
- + '</del>';
674
+ out += this.renderer.del(this.output(cap[1]));
675
675
  continue;
676
676
  }
677
677
 
@@ -696,31 +696,12 @@ InlineLexer.prototype.output = function(src) {
696
696
  */
697
697
 
698
698
  InlineLexer.prototype.outputLink = function(cap, link) {
699
- if (cap[0].charAt(0) !== '!') {
700
- return '<a href="'
701
- + escape(link.href)
702
- + '"'
703
- + (link.title
704
- ? ' title="'
705
- + escape(link.title)
706
- + '"'
707
- : '')
708
- + '>'
709
- + this.output(cap[1])
710
- + '</a>';
711
- } else {
712
- return '<img src="'
713
- + escape(link.href)
714
- + '" alt="'
715
- + escape(cap[1])
716
- + '"'
717
- + (link.title
718
- ? ' title="'
719
- + escape(link.title)
720
- + '"'
721
- : '')
722
- + '>';
723
- }
699
+ var href = escape(link.href)
700
+ , title = link.title ? escape(link.title) : null;
701
+
702
+ return cap[0].charAt(0) !== '!'
703
+ ? this.renderer.link(href, title, this.output(cap[1]))
704
+ : this.renderer.image(href, title, escape(cap[1]));
724
705
  };
725
706
 
726
707
  /**
@@ -765,6 +746,149 @@ InlineLexer.prototype.mangle = function(text) {
765
746
  return out;
766
747
  };
767
748
 
749
+ /**
750
+ * Renderer
751
+ */
752
+
753
+ function Renderer(options) {
754
+ this.options = options || {};
755
+ }
756
+
757
+ Renderer.prototype.code = function(code, lang, escaped) {
758
+ if (this.options.highlight) {
759
+ var out = this.options.highlight(code, lang);
760
+ if (out != null && out !== code) {
761
+ escaped = true;
762
+ code = out;
763
+ }
764
+ }
765
+
766
+ if (!lang) {
767
+ return '<pre><code>'
768
+ + (escaped ? code : escape(code, true))
769
+ + '\n</code></pre>';
770
+ }
771
+
772
+ return '<pre><code class="'
773
+ + this.options.langPrefix
774
+ + escape(lang, true)
775
+ + '">'
776
+ + (escaped ? code : escape(code, true))
777
+ + '\n</code></pre>\n';
778
+ };
779
+
780
+ Renderer.prototype.blockquote = function(quote) {
781
+ return '<blockquote>\n' + quote + '</blockquote>\n';
782
+ };
783
+
784
+ Renderer.prototype.html = function(html) {
785
+ return html;
786
+ };
787
+
788
+ Renderer.prototype.heading = function(text, level, raw) {
789
+ return '<h'
790
+ + level
791
+ + ' id="'
792
+ + this.options.headerPrefix
793
+ + raw.toLowerCase().replace(/[^\w]+/g, '-')
794
+ + '">'
795
+ + text
796
+ + '</h'
797
+ + level
798
+ + '>\n';
799
+ };
800
+
801
+ Renderer.prototype.hr = function() {
802
+ return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
803
+ };
804
+
805
+ Renderer.prototype.list = function(body, ordered) {
806
+ var type = ordered ? 'ol' : 'ul';
807
+ return '<' + type + '>\n' + body + '</' + type + '>\n';
808
+ };
809
+
810
+ Renderer.prototype.listitem = function(text) {
811
+ return '<li>' + text + '</li>\n';
812
+ };
813
+
814
+ Renderer.prototype.paragraph = function(text) {
815
+ return '<p>' + text + '</p>\n';
816
+ };
817
+
818
+ Renderer.prototype.table = function(header, body) {
819
+ return '<table>\n'
820
+ + '<thead>\n'
821
+ + header
822
+ + '</thead>\n'
823
+ + '<tbody>\n'
824
+ + body
825
+ + '</tbody>\n'
826
+ + '</table>\n';
827
+ };
828
+
829
+ Renderer.prototype.tablerow = function(content) {
830
+ return '<tr>\n' + content + '</tr>\n';
831
+ };
832
+
833
+ Renderer.prototype.tablecell = function(content, flags) {
834
+ var type = flags.header ? 'th' : 'td';
835
+ var tag = flags.align
836
+ ? '<' + type + ' style="text-align:' + flags.align + '">'
837
+ : '<' + type + '>';
838
+ return tag + content + '</' + type + '>\n';
839
+ };
840
+
841
+ // span level renderer
842
+ Renderer.prototype.strong = function(text) {
843
+ return '<strong>' + text + '</strong>';
844
+ };
845
+
846
+ Renderer.prototype.em = function(text) {
847
+ return '<em>' + text + '</em>';
848
+ };
849
+
850
+ Renderer.prototype.codespan = function(text) {
851
+ return '<code>' + text + '</code>';
852
+ };
853
+
854
+ Renderer.prototype.br = function() {
855
+ return this.options.xhtml ? '<br/>' : '<br>';
856
+ };
857
+
858
+ Renderer.prototype.del = function(text) {
859
+ return '<del>' + text + '</del>';
860
+ };
861
+
862
+ Renderer.prototype.link = function(href, title, text) {
863
+ if (this.options.sanitize) {
864
+ try {
865
+ var prot = decodeURIComponent(unescape(href))
866
+ .replace(/[^\w:]/g, '')
867
+ .toLowerCase();
868
+ } catch (e) {
869
+ return '';
870
+ }
871
+ if (prot.indexOf('javascript:') === 0) {
872
+ return '';
873
+ }
874
+ }
875
+ var out = '<a href="' + href + '"';
876
+ if (title) {
877
+ out += ' title="' + title + '"';
878
+ }
879
+ out += '>' + text + '</a>';
880
+ return out;
881
+ };
882
+
883
+ Renderer.prototype.image = function(href, title, text) {
884
+ var out = '<img src="' + href + '" alt="' + text + '"';
885
+ if (title) {
886
+ out += ' title="' + title + '"';
887
+ }
888
+ out += this.options.xhtml ? '/>' : '>';
889
+ return out;
890
+ };
891
+
768
892
  /**
769
893
  * Parsing & Compiling
770
894
  */
@@ -773,14 +897,17 @@ function Parser(options) {
773
897
  this.tokens = [];
774
898
  this.token = null;
775
899
  this.options = options || marked.defaults;
900
+ this.options.renderer = this.options.renderer || new Renderer;
901
+ this.renderer = this.options.renderer;
902
+ this.renderer.options = this.options;
776
903
  }
777
904
 
778
905
  /**
779
906
  * Static Parse Method
780
907
  */
781
908
 
782
- Parser.parse = function(src, options) {
783
- var parser = new Parser(options);
909
+ Parser.parse = function(src, options, renderer) {
910
+ var parser = new Parser(options, renderer);
784
911
  return parser.parse(src);
785
912
  };
786
913
 
@@ -789,7 +916,7 @@ Parser.parse = function(src, options) {
789
916
  */
790
917
 
791
918
  Parser.prototype.parse = function(src) {
792
- this.inline = new InlineLexer(src.links, this.options);
919
+ this.inline = new InlineLexer(src.links, this.options, this.renderer);
793
920
  this.tokens = src.reverse();
794
921
 
795
922
  var out = '';
@@ -840,83 +967,53 @@ Parser.prototype.tok = function() {
840
967
  return '';
841
968
  }
842
969
  case 'hr': {
843
- return '<hr>\n';
970
+ return this.renderer.hr();
844
971
  }
845
972
  case 'heading': {
846
- return '<h'
847
- + this.token.depth
848
- + ' id="'
849
- + this.token.text.toLowerCase().replace(/[^\w]+/g, '-')
850
- + '">'
851
- + this.inline.output(this.token.text)
852
- + '</h'
853
- + this.token.depth
854
- + '>\n';
973
+ return this.renderer.heading(
974
+ this.inline.output(this.token.text),
975
+ this.token.depth,
976
+ this.token.text);
855
977
  }
856
978
  case 'code': {
857
- if (this.options.highlight) {
858
- var code = this.options.highlight(this.token.text, this.token.lang);
859
- if (code != null && code !== this.token.text) {
860
- this.token.escaped = true;
861
- this.token.text = code;
862
- }
863
- }
864
-
865
- if (!this.token.escaped) {
866
- this.token.text = escape(this.token.text, true);
867
- }
868
-
869
- return '<pre><code'
870
- + (this.token.lang
871
- ? ' class="'
872
- + this.options.langPrefix
873
- + this.token.lang
874
- + '"'
875
- : '')
876
- + '>'
877
- + this.token.text
878
- + '</code></pre>\n';
979
+ return this.renderer.code(this.token.text,
980
+ this.token.lang,
981
+ this.token.escaped);
879
982
  }
880
983
  case 'table': {
881
- var body = ''
882
- , heading
984
+ var header = ''
985
+ , body = ''
883
986
  , i
884
987
  , row
885
988
  , cell
989
+ , flags
886
990
  , j;
887
991
 
888
992
  // header
889
- body += '<thead>\n<tr>\n';
993
+ cell = '';
890
994
  for (i = 0; i < this.token.header.length; i++) {
891
- heading = this.inline.output(this.token.header[i]);
892
- body += '<th';
893
- if (this.token.align[i]) {
894
- body += ' style="text-align:' + this.token.align[i] + '"';
895
- }
896
- body += '>' + heading + '</th>\n';
995
+ flags = { header: true, align: this.token.align[i] };
996
+ cell += this.renderer.tablecell(
997
+ this.inline.output(this.token.header[i]),
998
+ { header: true, align: this.token.align[i] }
999
+ );
897
1000
  }
898
- body += '</tr>\n</thead>\n';
1001
+ header += this.renderer.tablerow(cell);
899
1002
 
900
- // body
901
- body += '<tbody>\n'
902
1003
  for (i = 0; i < this.token.cells.length; i++) {
903
1004
  row = this.token.cells[i];
904
- body += '<tr>\n';
1005
+
1006
+ cell = '';
905
1007
  for (j = 0; j < row.length; j++) {
906
- cell = this.inline.output(row[j]);
907
- body += '<td';
908
- if (this.token.align[j]) {
909
- body += ' style="text-align:' + this.token.align[j] + '"';
910
- }
911
- body += '>' + cell + '</td>\n';
1008
+ cell += this.renderer.tablecell(
1009
+ this.inline.output(row[j]),
1010
+ { header: false, align: this.token.align[j] }
1011
+ );
912
1012
  }
913
- body += '</tr>\n';
914
- }
915
- body += '</tbody>\n';
916
1013
 
917
- return '<table>\n'
918
- + body
919
- + '</table>\n';
1014
+ body += this.renderer.tablerow(cell);
1015
+ }
1016
+ return this.renderer.table(header, body);
920
1017
  }
921
1018
  case 'blockquote_start': {
922
1019
  var body = '';
@@ -925,25 +1022,17 @@ Parser.prototype.tok = function() {
925
1022
  body += this.tok();
926
1023
  }
927
1024
 
928
- return '<blockquote>\n'
929
- + body
930
- + '</blockquote>\n';
1025
+ return this.renderer.blockquote(body);
931
1026
  }
932
1027
  case 'list_start': {
933
- var type = this.token.ordered ? 'ol' : 'ul'
934
- , body = '';
1028
+ var body = ''
1029
+ , ordered = this.token.ordered;
935
1030
 
936
1031
  while (this.next().type !== 'list_end') {
937
1032
  body += this.tok();
938
1033
  }
939
1034
 
940
- return '<'
941
- + type
942
- + '>\n'
943
- + body
944
- + '</'
945
- + type
946
- + '>\n';
1035
+ return this.renderer.list(body, ordered);
947
1036
  }
948
1037
  case 'list_item_start': {
949
1038
  var body = '';
@@ -954,9 +1043,7 @@ Parser.prototype.tok = function() {
954
1043
  : this.tok();
955
1044
  }
956
1045
 
957
- return '<li>'
958
- + body
959
- + '</li>\n';
1046
+ return this.renderer.listitem(body);
960
1047
  }
961
1048
  case 'loose_item_start': {
962
1049
  var body = '';
@@ -965,24 +1052,19 @@ Parser.prototype.tok = function() {
965
1052
  body += this.tok();
966
1053
  }
967
1054
 
968
- return '<li>'
969
- + body
970
- + '</li>\n';
1055
+ return this.renderer.listitem(body);
971
1056
  }
972
1057
  case 'html': {
973
- return !this.token.pre && !this.options.pedantic
1058
+ var html = !this.token.pre && !this.options.pedantic
974
1059
  ? this.inline.output(this.token.text)
975
1060
  : this.token.text;
1061
+ return this.renderer.html(html);
976
1062
  }
977
1063
  case 'paragraph': {
978
- return '<p>'
979
- + this.inline.output(this.token.text)
980
- + '</p>\n';
1064
+ return this.renderer.paragraph(this.inline.output(this.token.text));
981
1065
  }
982
1066
  case 'text': {
983
- return '<p>'
984
- + this.parseText()
985
- + '</p>\n';
1067
+ return this.renderer.paragraph(this.parseText());
986
1068
  }
987
1069
  }
988
1070
  };
@@ -1000,6 +1082,19 @@ function escape(html, encode) {
1000
1082
  .replace(/'/g, '&#39;');
1001
1083
  }
1002
1084
 
1085
+ function unescape(html) {
1086
+ return html.replace(/&([#\w]+);/g, function(_, n) {
1087
+ n = n.toLowerCase();
1088
+ if (n === 'colon') return ':';
1089
+ if (n.charAt(0) === '#') {
1090
+ return n.charAt(1) === 'x'
1091
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
1092
+ : String.fromCharCode(+n.substring(1));
1093
+ }
1094
+ return '';
1095
+ });
1096
+ }
1097
+
1003
1098
  function replace(regex, opt) {
1004
1099
  regex = regex.source;
1005
1100
  opt = opt || '';
@@ -1032,6 +1127,7 @@ function merge(obj) {
1032
1127
  return obj;
1033
1128
  }
1034
1129
 
1130
+
1035
1131
  /**
1036
1132
  * Marked
1037
1133
  */
@@ -1134,7 +1230,10 @@ marked.defaults = {
1134
1230
  silent: false,
1135
1231
  highlight: null,
1136
1232
  langPrefix: 'lang-',
1137
- smartypants: false
1233
+ smartypants: false,
1234
+ headerPrefix: '',
1235
+ renderer: new Renderer,
1236
+ xhtml: false
1138
1237
  };
1139
1238
 
1140
1239
  /**
@@ -1144,6 +1243,8 @@ marked.defaults = {
1144
1243
  marked.Parser = Parser;
1145
1244
  marked.parser = Parser.parse;
1146
1245
 
1246
+ marked.Renderer = Renderer;
1247
+
1147
1248
  marked.Lexer = Lexer;
1148
1249
  marked.lexer = Lexer.lex;
1149
1250
 
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.2.10.1
4
+ version: 0.3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nodanaonlyzuul
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-23 00:00:00.000000000 Z
12
+ date: 2014-11-03 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: 'A gemified verison of the chjj/marked: "A full-featured markdown parser
14
+ description: ! 'A gemified verison of the chjj/marked: "A full-featured markdown parser
15
15
  and compiler, written in javascript."'
16
16
  email:
17
- - stephen@eastmedia.com
17
+ - cooperman@gmail.com
18
18
  executables: []
19
19
  extensions: []
20
20
  extra_rdoc_files: []
@@ -30,8 +30,9 @@ files:
30
30
  - lib/marked-rails/version.rb
31
31
  - marked-rails.gemspec
32
32
  - vendor/assets/javascripts/marked.js
33
- homepage: https://github.com/eastmedia/marked-rails
34
- licenses: []
33
+ homepage: https://github.com/rosscooperman/marked-rails
34
+ licenses:
35
+ - MIT
35
36
  metadata: {}
36
37
  post_install_message:
37
38
  rdoc_options: []
@@ -39,17 +40,17 @@ require_paths:
39
40
  - lib
40
41
  required_ruby_version: !ruby/object:Gem::Requirement
41
42
  requirements:
42
- - - '>='
43
+ - - ! '>='
43
44
  - !ruby/object:Gem::Version
44
45
  version: '0'
45
46
  required_rubygems_version: !ruby/object:Gem::Requirement
46
47
  requirements:
47
- - - '>='
48
+ - - ! '>='
48
49
  - !ruby/object:Gem::Version
49
50
  version: '0'
50
51
  requirements: []
51
52
  rubyforge_project:
52
- rubygems_version: 2.0.3
53
+ rubygems_version: 2.2.2
53
54
  signing_key:
54
55
  specification_version: 4
55
56
  summary: A gemified verison of the chjj/marked