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/BUILDING +5 -1
- data/README.markdown +7 -7
- data/Rakefile +3 -2
- data/ext/config.h +8 -6
- data/ext/css.c +14 -5
- data/ext/cstring.h +1 -1
- data/ext/docheader.c +13 -7
- data/ext/dumptree.c +1 -1
- data/ext/emmatch.c +1 -1
- data/ext/extconf.rb +13 -0
- data/ext/generate.c +215 -55
- data/ext/markdown.c +225 -100
- data/ext/markdown.h +48 -27
- data/ext/mkdio.c +49 -32
- data/ext/mkdio.h +42 -24
- data/ext/rdiscount.c +4 -0
- data/ext/resource.c +3 -1
- data/ext/setup.c +47 -0
- data/ext/tags.c +15 -2
- data/ext/tags.h +1 -0
- data/ext/toc.c +35 -22
- data/lib/rdiscount.rb +5 -1
- data/rdiscount.gemspec +4 -4
- data/test/rdiscount_test.rb +12 -2
- metadata +25 -41
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
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
|
-
|
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
|
-
|
32
|
-
|
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
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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, "
|
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),
|
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
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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,
|
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
|
}
|
data/lib/rdiscount.rb
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
# end
|
25
25
|
#
|
26
26
|
class RDiscount
|
27
|
-
VERSION = '
|
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.
|
data/rdiscount.gemspec
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rdiscount'
|
3
|
-
s.version = '
|
3
|
+
s.version = '2.0.7'
|
4
4
|
s.summary = "Fast Implementation of Gruber's Markdown in C"
|
5
|
-
s.date = '
|
5
|
+
s.date = '2013-01-29'
|
6
6
|
s.email = 'rtomayko@gmail.com'
|
7
7
|
s.homepage = 'http://github.com/rtomayko/rdiscount'
|
8
|
-
s.
|
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
|
data/test/rdiscount_test.rb
CHANGED
@@ -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 %(<
|
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
|
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
|
-
|
5
|
-
prerelease:
|
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
|
-
|
85
|
-
|
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
|
-
|
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.
|
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
|