rdiscount 1.6.8 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/ext/tags.c CHANGED
@@ -61,6 +61,9 @@ mkd_search_tags(char *pat, int len)
61
61
  }
62
62
 
63
63
 
64
+ static int populated = 0;
65
+
66
+
64
67
  /* load in the standard collection of html tags that markdown supports
65
68
  */
66
69
  void
@@ -70,8 +73,6 @@ mkd_prepare_tags()
70
73
  #define KW(x) mkd_define_tag(x, 0)
71
74
  #define SC(x) mkd_define_tag(x, 1)
72
75
 
73
- static int populated = 0;
74
-
75
76
  if ( populated ) return;
76
77
  populated = 1;
77
78
 
@@ -108,3 +109,15 @@ mkd_prepare_tags()
108
109
 
109
110
  mkd_sort_tags();
110
111
  } /* mkd_prepare_tags */
112
+
113
+
114
+ /* destroy the blocktags list (for shared libraries)
115
+ */
116
+ void
117
+ mkd_deallocate_tags()
118
+ {
119
+ if ( S(blocktags) > 0 ) {
120
+ populated = 0;
121
+ DELETE(blocktags);
122
+ }
123
+ } /* mkd_deallocate_tags */
data/ext/tags.h CHANGED
@@ -12,6 +12,7 @@ struct kw {
12
12
 
13
13
  struct kw* mkd_search_tags(char *, int);
14
14
  void mkd_prepare_tags();
15
+ void mkd_deallocate_tags();
15
16
  void mkd_sort_tags();
16
17
  void mkd_define_tag(char *, int);
17
18
 
data/ext/toc.c CHANGED
@@ -22,53 +22,66 @@ mkd_toc(Document *p, char **doc)
22
22
  Paragraph *tp, *srcp;
23
23
  int last_hnumber = 0;
24
24
  Cstring res;
25
+ int size;
25
26
 
26
- CREATE(res);
27
- RESERVE(res, 100);
27
+ if ( !(doc && p && p->ctx) ) return -1;
28
28
 
29
29
  *doc = 0;
30
+
31
+ if ( ! (p->ctx->flags & MKD_TOC) ) return 0;
30
32
 
31
- if ( !(p && p->ctx) ) return -1;
32
- if ( ! (p->ctx->flags & TOC) ) return 0;
33
+ CREATE(res);
34
+ RESERVE(res, 100);
33
35
 
34
36
  for ( tp = p->code; tp ; tp = tp->next ) {
35
37
  if ( tp->typ == SOURCE ) {
36
38
  for ( srcp = tp->down; srcp; srcp = srcp->next ) {
37
39
  if ( srcp->typ == HDR && srcp->text ) {
38
40
 
39
- if ( last_hnumber == srcp->hnumber )
40
- Csprintf(&res, "%*s</li>\n", srcp->hnumber, "");
41
- else while ( last_hnumber > srcp->hnumber ) {
42
- Csprintf(&res, "%*s</li>\n%*s</ul>\n",
43
- last_hnumber, "",
44
- last_hnumber-1,"");
45
- --last_hnumber;
41
+ if ( last_hnumber >= srcp->hnumber ) {
42
+ while ( last_hnumber > srcp->hnumber ) {
43
+ Csprintf(&res, "%*s</ul></li>\n", last_hnumber-1,"");
44
+ --last_hnumber;
45
+ }
46
46
  }
47
47
 
48
48
  while ( srcp->hnumber > last_hnumber ) {
49
- Csprintf(&res, "\n%*s<ul>\n", srcp->hnumber, "");
49
+ Csprintf(&res, "%*s%s<ul>\n", last_hnumber, "",
50
+ last_hnumber ? "<li>" : "");
50
51
  ++last_hnumber;
51
52
  }
52
53
  Csprintf(&res, "%*s<li><a href=\"#", srcp->hnumber, "");
53
- mkd_string_to_anchor(T(srcp->text->text), S(srcp->text->text), Csputc, &res);
54
+ mkd_string_to_anchor(T(srcp->text->text),
55
+ S(srcp->text->text),
56
+ (mkd_sta_function_t)Csputc, &res,1);
54
57
  Csprintf(&res, "\">");
55
- Csreparse(&res, T(srcp->text->text), S(srcp->text->text), 0);
58
+ mkd_string_to_anchor(T(srcp->text->text),
59
+ S(srcp->text->text),
60
+ (mkd_sta_function_t)Csputc, &res,0);
56
61
  Csprintf(&res, "</a>");
62
+ Csprintf(&res, "</li>\n");
57
63
  }
58
64
  }
59
65
  }
60
66
  }
61
67
 
62
68
  while ( last_hnumber > 0 ) {
63
- Csprintf(&res, "%*s</li>\n%*s</ul>\n",
64
- last_hnumber, "", last_hnumber, "");
65
69
  --last_hnumber;
70
+ Csprintf(&res, last_hnumber ? "%*s</ul></li>\n" : "%*s</ul>\n", last_hnumber, "");
66
71
  }
72
+
73
+ if ( (size = S(res)) > 0 ) {
74
+ EXPAND(res) = 0;
67
75
  /* HACK ALERT! HACK ALERT! HACK ALERT! */
68
- *doc = T(res); /* we know that a T(Cstring) is a character pointer */
69
- /* so we can simply pick it up and carry it away, */
70
- return S(res); /* leaving the husk of the Ctring on the stack */
71
- /* END HACK ALERT */
76
+ *doc = T(res); /* we know that a T(Cstring) is a character pointer
77
+ * so we can simply pick it up and carry it away,
78
+ * leaving the husk of the Ctring on the stack
79
+ * END HACK ALERT
80
+ */
81
+ }
82
+ else
83
+ DELETE(res);
84
+ return size;
72
85
  }
73
86
 
74
87
 
@@ -82,9 +95,9 @@ mkd_generatetoc(Document *p, FILE *out)
82
95
  int ret = EOF;
83
96
 
84
97
  if ( sz > 0 )
85
- ret = fwrite(buf, sz, 1, out);
98
+ ret = fwrite(buf, 1, sz, out);
86
99
 
87
100
  if ( buf ) free(buf);
88
101
 
89
- return ret;
102
+ return (ret == sz) ? ret : EOF;
90
103
  }
@@ -24,7 +24,7 @@
24
24
  # end
25
25
  #
26
26
  class RDiscount
27
- VERSION = '1.6.8'
27
+ VERSION = '2.0.7'
28
28
 
29
29
  # Original Markdown formatted text.
30
30
  attr_reader :text
@@ -42,6 +42,9 @@ class RDiscount
42
42
  # included for compatibility.
43
43
  attr_accessor :fold_lines
44
44
 
45
+ # Enable php markdown extra-style footnotes
46
+ attr_accessor :footnotes
47
+
45
48
  # Enable Table Of Contents generation
46
49
  attr_accessor :generate_toc
47
50
 
@@ -75,6 +78,7 @@ class RDiscount
75
78
  # * <tt>:filter_html</tt> - Do not output any raw HTML tags included in
76
79
  # the source text.
77
80
  # * <tt>:fold_lines</tt> - RedCloth compatible line folding (not used).
81
+ # * <tt>:footnotes</tt> - PHP markdown extra-style footnotes.
78
82
  # * <tt>:generate_toc</tt> - Enable Table Of Contents generation
79
83
  # * <tt>:no_image</tt> - Do not output any <tt><img></tt> tags.
80
84
  # * <tt>:no_links</tt> - Do not output any <tt><a></tt> tags.
@@ -1,12 +1,11 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rdiscount'
3
- s.version = '1.6.8'
3
+ s.version = '2.0.7'
4
4
  s.summary = "Fast Implementation of Gruber's Markdown in C"
5
- s.date = '2011-01-25'
5
+ s.date = '2013-01-29'
6
6
  s.email = 'rtomayko@gmail.com'
7
7
  s.homepage = 'http://github.com/rtomayko/rdiscount'
8
- s.has_rdoc = true
9
- s.authors = ["Ryan Tomayko", "David Loren Parsons", "Andrew White"]
8
+ s.authors = ["Ryan Tomayko", "David Loren Parsons", "Andrew White", "David Foster"]
10
9
  # = MANIFEST =
11
10
  s.files = %w[
12
11
  BUILDING
@@ -33,6 +32,7 @@ Gem::Specification.new do |s|
33
32
  ext/mkdio.h
34
33
  ext/rdiscount.c
35
34
  ext/resource.c
35
+ ext/setup.c
36
36
  ext/tags.c
37
37
  ext/tags.h
38
38
  ext/toc.c
@@ -48,12 +48,12 @@ class RDiscountTest < Test::Unit::TestCase
48
48
  def test_that_generate_toc_sets_toc_ids
49
49
  rd = RDiscount.new("# Level 1\n\n## Level 2", :generate_toc)
50
50
  assert rd.generate_toc
51
- assert_equal %(<h1 id="Level+1\">Level 1</h1>\n\n<h2 id="Level+2\">Level 2</h2>\n), rd.to_html
51
+ assert_equal %(<a name="Level.1"></a>\n<h1>Level 1</h1>\n\n<a name="Level.2"></a>\n<h2>Level 2</h2>\n), rd.to_html
52
52
  end
53
53
 
54
54
  def test_should_get_the_generated_toc
55
55
  rd = RDiscount.new("# Level 1\n\n## Level 2", :generate_toc)
56
- exp = %(<ul>\n <li><a href="#Level+1">Level 1</a>\n <ul>\n <li><a href="#Level+2">Level 2</a> </li>\n </ul>\n </li>\n </ul>)
56
+ exp = %(<ul>\n <li><a href="#Level.1">Level 1</a></li>\n <li><ul>\n <li><a href="#Level.2">Level 2</a></li>\n </ul></li>\n</ul>)
57
57
  assert_equal exp, rd.toc_content.strip
58
58
  end
59
59
 
@@ -108,4 +108,14 @@ EOS
108
108
  rd = RDiscount.new("foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b>")
109
109
  assert_equal "<p>foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b></p>\n", rd.to_html
110
110
  end
111
+
112
+ def test_that_footnotes_flag_works
113
+ rd = RDiscount.new(<<EOS, :footnotes)
114
+ Obtuse text.[^1]
115
+
116
+ [^1]: Clarification
117
+ EOS
118
+ assert rd.to_html.include?('<a href="#fn:1" rel="footnote">1</a>')
119
+ end
120
+
111
121
  end
metadata CHANGED
@@ -1,35 +1,28 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rdiscount
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 6
9
- - 8
10
- version: 1.6.8
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.7
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Ryan Tomayko
14
9
  - David Loren Parsons
15
10
  - Andrew White
11
+ - David Foster
16
12
  autorequire:
17
13
  bindir: bin
18
14
  cert_chain: []
19
-
20
- date: 2011-01-25 00:00:00 -08:00
21
- default_executable:
15
+ date: 2013-01-29 00:00:00.000000000 Z
22
16
  dependencies: []
23
-
24
17
  description:
25
18
  email: rtomayko@gmail.com
26
- executables:
19
+ executables:
27
20
  - rdiscount
28
- extensions:
21
+ extensions:
29
22
  - ext/extconf.rb
30
- extra_rdoc_files:
23
+ extra_rdoc_files:
31
24
  - COPYING
32
- files:
25
+ files:
33
26
  - BUILDING
34
27
  - COPYING
35
28
  - README.markdown
@@ -53,6 +46,7 @@ files:
53
46
  - ext/mkdio.h
54
47
  - ext/rdiscount.c
55
48
  - ext/resource.c
49
+ - ext/setup.c
56
50
  - ext/tags.c
57
51
  - ext/tags.h
58
52
  - ext/toc.c
@@ -67,40 +61,30 @@ files:
67
61
  - test/benchmark.txt
68
62
  - test/markdown_test.rb
69
63
  - test/rdiscount_test.rb
70
- has_rdoc: true
71
64
  homepage: http://github.com/rtomayko/rdiscount
72
65
  licenses: []
73
-
74
66
  post_install_message:
75
67
  rdoc_options: []
76
-
77
- require_paths:
68
+ require_paths:
78
69
  - lib
79
- required_ruby_version: !ruby/object:Gem::Requirement
70
+ required_ruby_version: !ruby/object:Gem::Requirement
80
71
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
88
- required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
77
  none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- hash: 3
94
- segments:
95
- - 0
96
- version: "0"
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
97
82
  requirements: []
98
-
99
83
  rubyforge_project: wink
100
- rubygems_version: 1.3.7
84
+ rubygems_version: 1.8.24
101
85
  signing_key:
102
86
  specification_version: 3
103
87
  summary: Fast Implementation of Gruber's Markdown in C
104
- test_files:
88
+ test_files:
105
89
  - test/markdown_test.rb
106
90
  - test/rdiscount_test.rb