rdiscount 1.6.8 → 2.0.7
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.
- 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
|