rdiscount 1.5.5 → 1.5.8
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/Rakefile +74 -94
- data/ext/dumptree.c +0 -0
- data/ext/generate.c +19 -6
- data/ext/markdown.c +17 -4
- data/ext/rdiscount.c +8 -0
- data/lib/rdiscount.rb +1 -1
- data/rdiscount.gemspec +3 -3
- data/test/markdown_test.rb +24 -2
- data/test/rdiscount_test.rb +24 -0
- metadata +3 -2
data/Rakefile
CHANGED
|
@@ -1,75 +1,28 @@
|
|
|
1
1
|
require 'rake/clean'
|
|
2
|
+
require 'digest/md5'
|
|
2
3
|
|
|
3
4
|
task :default => :test
|
|
4
5
|
|
|
5
|
-
# PACKAGING =================================================================
|
|
6
|
-
|
|
7
|
-
require 'rubygems/specification'
|
|
8
|
-
$spec = eval(File.read('rdiscount.gemspec'))
|
|
9
|
-
|
|
10
|
-
def package(ext='')
|
|
11
|
-
"pkg/rdiscount-#{$spec.version}" + ext
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
desc 'Build packages'
|
|
15
|
-
task :package => %w[.gem .tar.gz].map {|e| package(e)}
|
|
16
|
-
|
|
17
|
-
desc 'Build and install as local gem'
|
|
18
|
-
task :install => package('.gem') do
|
|
19
|
-
sh "gem install #{package('.gem')}"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
directory 'pkg/'
|
|
23
|
-
|
|
24
|
-
file package('.gem') => %w[pkg/ rdiscount.gemspec] + $spec.files do |f|
|
|
25
|
-
sh "gem build rdiscount.gemspec"
|
|
26
|
-
mv File.basename(f.name), f.name
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
file package('.tar.gz') => %w[pkg/] + $spec.files do |f|
|
|
30
|
-
sh "git archive --format=tar HEAD | gzip > #{f.name}"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# GEMSPEC HELPERS ==========================================================
|
|
34
|
-
|
|
35
|
-
def source_version
|
|
36
|
-
line = File.read('lib/rdiscount.rb')[/^\s*VERSION = .*/]
|
|
37
|
-
line.match(/.*VERSION = '(.*)'/)[1]
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
file 'rdiscount.gemspec' => FileList['Rakefile','lib/rdiscount.rb'] do |f|
|
|
41
|
-
# read spec file and split out manifest section
|
|
42
|
-
spec = File.read(f.name)
|
|
43
|
-
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
|
44
|
-
head.sub!(/\.version = '.*'/, ".version = '#{source_version}'")
|
|
45
|
-
head.sub!(/\.date = '.*'/, ".date = '#{Date.today.to_s}'")
|
|
46
|
-
# determine file list from git ls-files
|
|
47
|
-
files = `git ls-files`.
|
|
48
|
-
split("\n").
|
|
49
|
-
sort.
|
|
50
|
-
reject{ |file| file =~ /^\./ || file =~ /^test\/MarkdownTest/ }.
|
|
51
|
-
map{ |file| " #{file}" }.
|
|
52
|
-
join("\n")
|
|
53
|
-
# piece file back together and write...
|
|
54
|
-
manifest = " s.files = %w[\n#{files}\n ]\n"
|
|
55
|
-
spec = [head,manifest,tail].join(" # = MANIFEST =\n")
|
|
56
|
-
File.open(f.name, 'w') { |io| io.write(spec) }
|
|
57
|
-
puts "updated #{f.name}"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
6
|
# ==========================================================
|
|
61
7
|
# Ruby Extension
|
|
62
8
|
# ==========================================================
|
|
63
9
|
|
|
64
10
|
DLEXT = Config::CONFIG['DLEXT']
|
|
11
|
+
RUBYDIGEST = Digest::MD5.hexdigest(`#{RUBY} --version`)
|
|
65
12
|
|
|
66
|
-
file 'ext/Makefile' => FileList['ext
|
|
13
|
+
file 'ext/Makefile' => FileList['ext/*.{c,h,rb}'] do
|
|
67
14
|
chdir('ext') { ruby 'extconf.rb' }
|
|
68
15
|
end
|
|
69
16
|
CLEAN.include 'ext/Makefile', 'ext/mkmf.log'
|
|
70
17
|
|
|
71
|
-
file "ext/
|
|
72
|
-
|
|
18
|
+
file "ext/ruby-#{RUBYDIGEST}" do |f|
|
|
19
|
+
rm_f FileList["ext/ruby-*"]
|
|
20
|
+
touch f.name
|
|
21
|
+
end
|
|
22
|
+
CLEAN.include "ext/ruby-*"
|
|
23
|
+
|
|
24
|
+
file "ext/rdiscount.#{DLEXT}" => FileList["ext/Makefile", "ext/ruby-#{RUBYDIGEST}"] do |f|
|
|
25
|
+
sh 'cd ext && make clean && make'
|
|
73
26
|
end
|
|
74
27
|
CLEAN.include 'ext/*.{o,bundle,so,dll}'
|
|
75
28
|
|
|
@@ -84,18 +37,12 @@ task :build => "lib/rdiscount.#{DLEXT}"
|
|
|
84
37
|
# Testing
|
|
85
38
|
# ==========================================================
|
|
86
39
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
"testrb"
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
desc 'Run unit tests'
|
|
96
|
-
task 'test:unit' => [:build] do |t|
|
|
97
|
-
sh "#{runner} test/markdown_test.rb test/rdiscount_test.rb"
|
|
40
|
+
require 'rake/testtask'
|
|
41
|
+
Rake::TestTask.new('test:unit') do |t|
|
|
42
|
+
t.test_files = FileList['test/*_test.rb']
|
|
43
|
+
t.ruby_opts += ['-rubygems'] if defined? Gem
|
|
98
44
|
end
|
|
45
|
+
task 'test:unit' => [:build]
|
|
99
46
|
|
|
100
47
|
desc 'Run conformance tests (MARKDOWN_TEST_VER=1.0)'
|
|
101
48
|
task 'test:conformance' => [:build] do |t|
|
|
@@ -136,37 +83,14 @@ task :doc => 'doc/index.html'
|
|
|
136
83
|
|
|
137
84
|
file 'doc/index.html' => FileList['lib/*.rb'] do |f|
|
|
138
85
|
sh((<<-end).gsub(/\s+/, ' '))
|
|
139
|
-
hanna --charset utf8 \
|
|
140
|
-
--
|
|
141
|
-
--inline-source \
|
|
142
|
-
--line-numbers \
|
|
143
|
-
--main RDiscount \
|
|
144
|
-
--op doc \
|
|
145
|
-
--title 'RDiscount API Documentation' \
|
|
86
|
+
hanna --charset utf8 --fmt html --inline-source --line-numbers \
|
|
87
|
+
--main RDiscount --op doc --title 'RDiscount API Documentation' \
|
|
146
88
|
#{f.prerequisites.join(' ')}
|
|
147
89
|
end
|
|
148
90
|
end
|
|
149
91
|
|
|
150
92
|
CLEAN.include 'doc'
|
|
151
93
|
|
|
152
|
-
|
|
153
|
-
# ==========================================================
|
|
154
|
-
# Rubyforge
|
|
155
|
-
# ==========================================================
|
|
156
|
-
|
|
157
|
-
desc 'Publish new release to rubyforge'
|
|
158
|
-
task :release => [package('.gem'), package('.tar.gz')] do |t|
|
|
159
|
-
sh <<-end
|
|
160
|
-
rubyforge add_release wink rdiscount #{$spec.version} #{package('.gem')} &&
|
|
161
|
-
rubyforge add_file wink rdiscount #{$spec.version} #{package('.tar.gz')}
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
desc 'Publish API docs to rubyforge'
|
|
166
|
-
task :publish => :doc do |t|
|
|
167
|
-
sh 'scp -rp doc/. rubyforge.org:/var/www/gforge-projects/wink/rdiscount'
|
|
168
|
-
end
|
|
169
|
-
|
|
170
94
|
# ==========================================================
|
|
171
95
|
# Update package's Discount sources
|
|
172
96
|
# ==========================================================
|
|
@@ -200,3 +124,59 @@ file 'discount' do |f|
|
|
|
200
124
|
TEXT
|
|
201
125
|
fail "discount sources required."
|
|
202
126
|
end
|
|
127
|
+
|
|
128
|
+
# PACKAGING =================================================================
|
|
129
|
+
|
|
130
|
+
if defined?(Gem)
|
|
131
|
+
$spec = eval(File.read('rdiscount.gemspec'))
|
|
132
|
+
|
|
133
|
+
def package(ext='')
|
|
134
|
+
"pkg/rdiscount-#{$spec.version}" + ext
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
desc 'Build packages'
|
|
138
|
+
task :package => %w[.gem .tar.gz].map {|e| package(e)}
|
|
139
|
+
|
|
140
|
+
desc 'Build and install as local gem'
|
|
141
|
+
task :install => package('.gem') do
|
|
142
|
+
sh "gem install #{package('.gem')}"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
directory 'pkg/'
|
|
146
|
+
|
|
147
|
+
file package('.gem') => %w[pkg/ rdiscount.gemspec] + $spec.files do |f|
|
|
148
|
+
sh "gem build rdiscount.gemspec"
|
|
149
|
+
mv File.basename(f.name), f.name
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
file package('.tar.gz') => %w[pkg/] + $spec.files do |f|
|
|
153
|
+
sh "git archive --format=tar HEAD | gzip > #{f.name}"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# GEMSPEC HELPERS ==========================================================
|
|
157
|
+
|
|
158
|
+
def source_version
|
|
159
|
+
line = File.read('lib/rdiscount.rb')[/^\s*VERSION = .*/]
|
|
160
|
+
line.match(/.*VERSION = '(.*)'/)[1]
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
file 'rdiscount.gemspec' => FileList['Rakefile','lib/rdiscount.rb'] do |f|
|
|
164
|
+
# read spec file and split out manifest section
|
|
165
|
+
spec = File.read(f.name)
|
|
166
|
+
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
|
167
|
+
head.sub!(/\.version = '.*'/, ".version = '#{source_version}'")
|
|
168
|
+
head.sub!(/\.date = '.*'/, ".date = '#{Date.today.to_s}'")
|
|
169
|
+
# determine file list from git ls-files
|
|
170
|
+
files = `git ls-files`.
|
|
171
|
+
split("\n").
|
|
172
|
+
sort.
|
|
173
|
+
reject{ |file| file =~ /^\./ || file =~ /^test\/MarkdownTest/ }.
|
|
174
|
+
map{ |file| " #{file}" }.
|
|
175
|
+
join("\n")
|
|
176
|
+
# piece file back together and write...
|
|
177
|
+
manifest = " s.files = %w[\n#{files}\n ]\n"
|
|
178
|
+
spec = [head,manifest,tail].join(" # = MANIFEST =\n")
|
|
179
|
+
File.open(f.name, 'w') { |io| io.write(spec) }
|
|
180
|
+
puts "updated #{f.name}"
|
|
181
|
+
end
|
|
182
|
+
end
|
data/ext/dumptree.c
CHANGED
|
File without changes
|
data/ext/generate.c
CHANGED
|
@@ -632,9 +632,9 @@ linkyformat(MMIOT *f, Cstring text, int image, Footnote *ref)
|
|
|
632
632
|
|
|
633
633
|
Qstring(tag->link_sfx, f);
|
|
634
634
|
|
|
635
|
-
if ( tag->WxH
|
|
636
|
-
Qprintf(f," height=\"%d\"", ref->height);
|
|
637
|
-
Qprintf(f, " width=\"%d\"", ref->width);
|
|
635
|
+
if ( tag->WxH) {
|
|
636
|
+
if ( ref->height) Qprintf(f," height=\"%d\"", ref->height);
|
|
637
|
+
if ( ref->width) Qprintf(f, " width=\"%d\"", ref->width);
|
|
638
638
|
}
|
|
639
639
|
|
|
640
640
|
if ( S(ref->title) ) {
|
|
@@ -667,7 +667,7 @@ linkylinky(int image, MMIOT *f)
|
|
|
667
667
|
int status = 0;
|
|
668
668
|
|
|
669
669
|
CREATE(name);
|
|
670
|
-
|
|
670
|
+
memset(&key, 0, sizeof key);
|
|
671
671
|
|
|
672
672
|
if ( linkylabel(f, &name) ) {
|
|
673
673
|
if ( peek(f,1) == '(' ) {
|
|
@@ -869,9 +869,19 @@ maybe_tag_or_link(MMIOT *f)
|
|
|
869
869
|
|
|
870
870
|
if ( size ) {
|
|
871
871
|
if ( maybetag || (size >= 3 && strncmp(cursor(f), "!--", 3) == 0) ) {
|
|
872
|
+
|
|
873
|
+
/* It is not a html tag unless we find the closing '>' in
|
|
874
|
+
* the same block.
|
|
875
|
+
*/
|
|
876
|
+
while ( (c = peek(f, size+1)) != '>' )
|
|
877
|
+
if ( c == EOF )
|
|
878
|
+
return 0;
|
|
879
|
+
else
|
|
880
|
+
size++;
|
|
881
|
+
|
|
872
882
|
Qstring(forbidden_tag(f) ? "<" : "<", f);
|
|
873
883
|
while ( ((c = peek(f, 1)) != EOF) && (c != '>') )
|
|
874
|
-
|
|
884
|
+
Qchar(pull(f), f);
|
|
875
885
|
return 1;
|
|
876
886
|
}
|
|
877
887
|
else if ( !isspace(c) && process_possible_link(f, size) ) {
|
|
@@ -973,6 +983,9 @@ static struct smarties {
|
|
|
973
983
|
{ '\'', "'t>", "rsquo", 0 },
|
|
974
984
|
{ '\'', "'re>", "rsquo", 0 },
|
|
975
985
|
{ '\'', "'ll>", "rsquo", 0 },
|
|
986
|
+
{ '\'', "'ve>", "rsquo", 0 },
|
|
987
|
+
{ '\'', "'m>", "rsquo", 0 },
|
|
988
|
+
{ '\'', "'d>", "rsquo", 0 },
|
|
976
989
|
{ '-', "--", "mdash", 1 },
|
|
977
990
|
{ '-', "<->", "ndash", 0 },
|
|
978
991
|
{ '.', "...", "hellip", 2 },
|
|
@@ -1331,7 +1344,7 @@ printtable(Paragraph *pp, MMIOT *f)
|
|
|
1331
1344
|
int hcols;
|
|
1332
1345
|
char *p;
|
|
1333
1346
|
|
|
1334
|
-
if ( !(pp->text && pp->text->next
|
|
1347
|
+
if ( !(pp->text && pp->text->next) )
|
|
1335
1348
|
return 0;
|
|
1336
1349
|
|
|
1337
1350
|
hdr = pp->text;
|
data/ext/markdown.c
CHANGED
|
@@ -230,6 +230,8 @@ htmlblock(Paragraph *p, struct kw *tag)
|
|
|
230
230
|
/* consume trailing gunk in close tag */
|
|
231
231
|
c = flogetc(&f);
|
|
232
232
|
}
|
|
233
|
+
if ( !f.t )
|
|
234
|
+
return 0;
|
|
233
235
|
ret = f.t->next;
|
|
234
236
|
f.t->next = 0;
|
|
235
237
|
return ret;
|
|
@@ -269,17 +271,24 @@ istable(Line *t)
|
|
|
269
271
|
{
|
|
270
272
|
char *p;
|
|
271
273
|
Line *dashes = t->next;
|
|
274
|
+
int contains = 0; /* found character bits; 0x01 is |, 0x02 is - */
|
|
272
275
|
|
|
273
276
|
/* two lines, first must contain | */
|
|
274
277
|
if ( !(dashes && memchr(T(t->text), '|', S(t->text))) )
|
|
275
278
|
return 0;
|
|
276
279
|
|
|
277
|
-
/* second line must
|
|
280
|
+
/* second line must contain - or | and nothing
|
|
281
|
+
* else except for whitespace or :
|
|
282
|
+
*/
|
|
278
283
|
for ( p = T(dashes->text)+S(dashes->text)-1; p >= T(dashes->text); --p)
|
|
279
|
-
if (
|
|
284
|
+
if ( *p == '|' )
|
|
285
|
+
contains |= 0x01;
|
|
286
|
+
else if ( *p == '-' )
|
|
287
|
+
contains |= 0x02;
|
|
288
|
+
else if ( ! ((*p == ':') || isspace(*p)) )
|
|
280
289
|
return 0;
|
|
281
290
|
|
|
282
|
-
return
|
|
291
|
+
return (contains & 0x03);
|
|
283
292
|
}
|
|
284
293
|
|
|
285
294
|
|
|
@@ -379,7 +388,11 @@ ishdr(Line *t, int *htyp)
|
|
|
379
388
|
char *q = T(t->next->text);
|
|
380
389
|
|
|
381
390
|
if ( (*q == '=') || (*q == '-') ) {
|
|
382
|
-
|
|
391
|
+
/* find trailing space on === line */
|
|
392
|
+
int e = S(t->next->text) - 1;
|
|
393
|
+
while (e > 1 && q[e] == ' ') e--;
|
|
394
|
+
|
|
395
|
+
for (i=1; i <= e; i++)
|
|
383
396
|
if ( q[0] != q[i] )
|
|
384
397
|
return 0;
|
|
385
398
|
*htyp = SETEXT;
|
data/ext/rdiscount.c
CHANGED
|
@@ -10,6 +10,7 @@ rb_rdiscount_to_html(int argc, VALUE *argv, VALUE self)
|
|
|
10
10
|
/* grab char pointer to markdown input text */
|
|
11
11
|
char *res;
|
|
12
12
|
int szres;
|
|
13
|
+
VALUE encoding;
|
|
13
14
|
VALUE text = rb_funcall(self, rb_intern("text"), 0);
|
|
14
15
|
VALUE buf = rb_str_buf_new(1024);
|
|
15
16
|
Check_Type(text, T_STRING);
|
|
@@ -28,6 +29,13 @@ rb_rdiscount_to_html(int argc, VALUE *argv, VALUE self)
|
|
|
28
29
|
}
|
|
29
30
|
mkd_cleanup(doc);
|
|
30
31
|
|
|
32
|
+
|
|
33
|
+
/* force the input encoding */
|
|
34
|
+
if ( rb_respond_to(text, rb_intern("encoding")) ) {
|
|
35
|
+
encoding = rb_funcall(text, rb_intern("encoding"), 0);
|
|
36
|
+
rb_funcall(buf, rb_intern("force_encoding"), 1, encoding);
|
|
37
|
+
}
|
|
38
|
+
|
|
31
39
|
return buf;
|
|
32
40
|
}
|
|
33
41
|
|
data/lib/rdiscount.rb
CHANGED
data/rdiscount.gemspec
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'rdiscount'
|
|
3
|
-
s.version = '1.5.
|
|
3
|
+
s.version = '1.5.8'
|
|
4
4
|
s.summary = "Fast Implementation of Gruber's Markdown in C"
|
|
5
|
-
s.date = '
|
|
5
|
+
s.date = '2010-02-03'
|
|
6
6
|
s.email = 'r@tomayko.com'
|
|
7
7
|
s.homepage = 'http://github.com/rtomayko/rdiscount'
|
|
8
8
|
s.has_rdoc = true
|
|
9
|
-
s.authors = ["Ryan Tomayko", "Andrew White"]
|
|
9
|
+
s.authors = ["Ryan Tomayko", "David Loren Parsons", "Andrew White"]
|
|
10
10
|
# = MANIFEST =
|
|
11
11
|
s.files = %w[
|
|
12
12
|
COPYING
|
data/test/markdown_test.rb
CHANGED
|
@@ -111,13 +111,35 @@ class MarkdownTest < Test::Unit::TestCase
|
|
|
111
111
|
markdown.to_html
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
+
def test_ul_with_zero_space_indent
|
|
115
|
+
markdown = Markdown.new("- foo\n\n- bar\n\n baz\n")
|
|
116
|
+
assert_equal "<ul><li><p>foo</p></li><li><p>bar</p><p>baz</p></li></ul>",
|
|
117
|
+
markdown.to_html.gsub("\n", "")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_ul_with_single_space_indent
|
|
121
|
+
markdown = Markdown.new(" - foo\n\n - bar\n\n baz\n")
|
|
122
|
+
assert_equal "<ul><li><p>foo</p></li><li><p>bar</p><p>baz</p></li></ul>",
|
|
123
|
+
markdown.to_html.gsub("\n", "")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# http://github.com/rtomayko/rdiscount/issues/#issue/13
|
|
127
|
+
def test_headings_with_trailing_space
|
|
128
|
+
text = "The Ant-Sugar Tales \n" +
|
|
129
|
+
"=================== \n\n" +
|
|
130
|
+
"By Candice Yellowflower \n"
|
|
131
|
+
markdown = Markdown.new(text)
|
|
132
|
+
assert_equal "<h1>The Ant-Sugar Tales </h1>\n\n<p>By Candice Yellowflower <br/>\n</p>\n",
|
|
133
|
+
markdown.to_html
|
|
134
|
+
end
|
|
135
|
+
|
|
114
136
|
# Build tests for each file in the MarkdownTest test suite
|
|
115
137
|
|
|
116
138
|
Dir["#{MARKDOWN_TEST_DIR}/Tests/*.text"].each do |text_file|
|
|
117
139
|
|
|
118
140
|
basename = File.basename(text_file).sub(/\.text$/, '')
|
|
119
141
|
html_file = text_file.sub(/text$/, 'html')
|
|
120
|
-
method_name = basename.gsub(/[-,]/, '').gsub(/\s+/, '_').downcase
|
|
142
|
+
method_name = basename.gsub(/[-,()]/, '').gsub(/\s+/, '_').downcase
|
|
121
143
|
|
|
122
144
|
define_method "test_#{method_name}" do
|
|
123
145
|
markdown = Markdown.new(File.read(text_file))
|
|
@@ -125,7 +147,7 @@ class MarkdownTest < Test::Unit::TestCase
|
|
|
125
147
|
assert_not_nil actual_html
|
|
126
148
|
end
|
|
127
149
|
|
|
128
|
-
define_method "test_#{method_name}
|
|
150
|
+
define_method "test_#{method_name}_smart" do
|
|
129
151
|
markdown = Markdown.new(File.read(text_file), :smart)
|
|
130
152
|
actual_html = markdown.to_html
|
|
131
153
|
assert_not_nil actual_html
|
data/test/rdiscount_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
1
2
|
rootdir = File.dirname(File.dirname(__FILE__))
|
|
2
3
|
$LOAD_PATH.unshift "#{rootdir}/lib"
|
|
3
4
|
|
|
@@ -29,6 +30,21 @@ class RDiscountTest < Test::Unit::TestCase
|
|
|
29
30
|
assert_equal %(<h1>Heading</h1>\n\n<p>“Quoted text”</p>\n), rd.to_html
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
def test_that_smart_gives_ve_suffix_a_rsquo
|
|
34
|
+
rd = RDiscount.new("I've been meaning to tell you ..", :smart)
|
|
35
|
+
assert_equal "<p>I’ve been meaning to tell you ..</p>\n", rd.to_html
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_that_smart_gives_m_suffix_a_rsquo
|
|
39
|
+
rd = RDiscount.new("I'm not kidding", :smart)
|
|
40
|
+
assert_equal "<p>I’m not kidding</p>\n", rd.to_html
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_that_smart_gives_d_suffix_a_rsquo
|
|
44
|
+
rd = RDiscount.new("what'd you say?", :smart)
|
|
45
|
+
assert_equal "<p>what’d you say?</p>\n", rd.to_html
|
|
46
|
+
end
|
|
47
|
+
|
|
32
48
|
def test_that_generate_toc_sets_toc_ids
|
|
33
49
|
rd = RDiscount.new("# Level 1\n\n## Level 2", :generate_toc)
|
|
34
50
|
assert rd.generate_toc
|
|
@@ -40,4 +56,12 @@ class RDiscountTest < Test::Unit::TestCase
|
|
|
40
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>)
|
|
41
57
|
assert_equal exp, rd.toc_content.strip
|
|
42
58
|
end
|
|
59
|
+
|
|
60
|
+
if "".respond_to?(:encoding)
|
|
61
|
+
def test_should_return_string_in_same_encoding_as_input
|
|
62
|
+
input = "Yogācāra"
|
|
63
|
+
output = RDiscount.new(input).to_html
|
|
64
|
+
assert_equal input.encoding.name, output.encoding.name
|
|
65
|
+
end
|
|
66
|
+
end
|
|
43
67
|
end
|
metadata
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rdiscount
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.5.
|
|
4
|
+
version: 1.5.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Tomayko
|
|
8
|
+
- David Loren Parsons
|
|
8
9
|
- Andrew White
|
|
9
10
|
autorequire:
|
|
10
11
|
bindir: bin
|
|
11
12
|
cert_chain: []
|
|
12
13
|
|
|
13
|
-
date:
|
|
14
|
+
date: 2010-02-03 00:00:00 -08:00
|
|
14
15
|
default_executable:
|
|
15
16
|
dependencies: []
|
|
16
17
|
|