commonmarker 0.20.2 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of commonmarker might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/Rakefile +16 -4
- data/commonmarker.gemspec +8 -11
- data/ext/commonmarker/cmark-gfm-core-extensions.h +24 -1
- data/ext/commonmarker/commonmarker.c +120 -78
- data/ext/commonmarker/node.h +1 -0
- data/ext/commonmarker/table.c +52 -13
- data/ext/commonmarker/tasklist.c +33 -13
- data/lib/commonmarker.rb +5 -4
- data/lib/commonmarker/config.rb +5 -4
- data/lib/commonmarker/node.rb +1 -1
- data/lib/commonmarker/node/inspect.rb +11 -11
- data/lib/commonmarker/renderer.rb +7 -5
- data/lib/commonmarker/renderer/html_renderer.rb +21 -34
- data/lib/commonmarker/version.rb +1 -1
- data/test/benchmark.rb +1 -1
- data/test/test_attributes.rb +2 -2
- data/test/test_commonmark.rb +11 -11
- data/test/test_encoding.rb +0 -1
- data/test/test_extensions.rb +39 -40
- data/test/test_footnotes.rb +9 -9
- data/test/test_gc.rb +2 -0
- data/test/test_helper.rb +7 -8
- data/test/test_maliciousness.rb +192 -190
- data/test/test_node.rb +10 -12
- data/test/test_options.rb +15 -15
- data/test/test_pathological_inputs.rb +2 -2
- data/test/test_plaintext.rb +21 -21
- data/test/test_renderer.rb +9 -9
- data/test/test_spec.rb +3 -2
- data/test/test_tasklists.rb +16 -6
- metadata +42 -42
data/test/test_node.rb
CHANGED
@@ -12,7 +12,7 @@ class TestNode < Minitest::Test
|
|
12
12
|
@doc.walk do |node|
|
13
13
|
nodes << node.type
|
14
14
|
end
|
15
|
-
assert_equal [
|
15
|
+
assert_equal %i[document paragraph text emph text text], nodes
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_each
|
@@ -20,29 +20,29 @@ class TestNode < Minitest::Test
|
|
20
20
|
@doc.first_child.each do |node|
|
21
21
|
nodes << node.type
|
22
22
|
end
|
23
|
-
assert_equal [
|
23
|
+
assert_equal %i[text emph text], nodes
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_deprecated_each_child
|
27
27
|
nodes = []
|
28
|
-
|
28
|
+
_, err = capture_io do
|
29
29
|
@doc.first_child.each_child do |node|
|
30
30
|
nodes << node.type
|
31
31
|
end
|
32
32
|
end
|
33
|
-
assert_equal [
|
34
|
-
assert_match
|
33
|
+
assert_equal %i[text emph text], nodes
|
34
|
+
assert_match(/`each_child` is deprecated/, err)
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_select
|
38
38
|
nodes = @doc.first_child.select { |node| node.type == :text }
|
39
39
|
assert_equal CommonMarker::Node, nodes.first.class
|
40
|
-
assert_equal [
|
40
|
+
assert_equal %i[text text], nodes.map(&:type)
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_map
|
44
44
|
nodes = @doc.first_child.map(&:type)
|
45
|
-
assert_equal [
|
45
|
+
assert_equal %i[text emph text], nodes
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_insert_illegal
|
@@ -63,9 +63,7 @@ class TestNode < Minitest::Test
|
|
63
63
|
|
64
64
|
def test_walk_and_set_string_content
|
65
65
|
@doc.walk do |node|
|
66
|
-
if node.type == :text && node.string_content == 'there'
|
67
|
-
node.string_content = 'world'
|
68
|
-
end
|
66
|
+
node.string_content = 'world' if node.type == :text && node.string_content == 'there'
|
69
67
|
end
|
70
68
|
result = HtmlRenderer.new.render(@doc)
|
71
69
|
assert_equal "<p>Hi <em>world</em>, I am mostly text!</p>\n", result
|
@@ -82,10 +80,10 @@ class TestNode < Minitest::Test
|
|
82
80
|
end
|
83
81
|
|
84
82
|
def test_inspect
|
85
|
-
assert_match
|
83
|
+
assert_match(/#<CommonMarker::Node\(document\):/, @doc.inspect)
|
86
84
|
end
|
87
85
|
|
88
86
|
def test_pretty_print
|
89
|
-
assert_match
|
87
|
+
assert_match(/#<CommonMarker::Node\(document\):/, PP.pp(@doc, +''))
|
90
88
|
end
|
91
89
|
end
|
data/test/test_options.rb
CHANGED
@@ -4,34 +4,34 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class TestExtensions < Minitest::Test
|
6
6
|
def test_full_info_string
|
7
|
-
md =
|
8
|
-
```ruby
|
9
|
-
module Foo
|
10
|
-
```
|
7
|
+
md = <<~MD
|
8
|
+
```ruby
|
9
|
+
module Foo
|
10
|
+
```
|
11
11
|
MD
|
12
12
|
|
13
13
|
CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
|
14
|
-
assert_includes out,
|
14
|
+
assert_includes out, '<pre><code class="language-ruby">'
|
15
15
|
end
|
16
16
|
|
17
|
-
md =
|
18
|
-
```ruby my info string
|
19
|
-
module Foo
|
20
|
-
```
|
17
|
+
md = <<~MD
|
18
|
+
```ruby my info string
|
19
|
+
module Foo
|
20
|
+
```
|
21
21
|
MD
|
22
22
|
|
23
23
|
CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
|
24
|
-
assert_includes out,
|
24
|
+
assert_includes out, '<pre><code class="language-ruby" data-meta="my info string">'
|
25
25
|
end
|
26
26
|
|
27
|
-
md =
|
28
|
-
```ruby my \x00 string
|
29
|
-
module Foo
|
30
|
-
```
|
27
|
+
md = <<~MD
|
28
|
+
```ruby my \x00 string
|
29
|
+
module Foo
|
30
|
+
```
|
31
31
|
MD
|
32
32
|
|
33
33
|
CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
|
34
|
-
assert_includes out, %
|
34
|
+
assert_includes out, %(<pre><code class="language-ruby" data-meta="my � string">)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'test_helper'
|
4
4
|
require 'minitest/benchmark' if ENV['BENCH']
|
5
5
|
|
6
|
-
def markdown(
|
7
|
-
CommonMarker.render_doc(
|
6
|
+
def markdown(str)
|
7
|
+
CommonMarker.render_doc(str).to_html
|
8
8
|
end
|
9
9
|
|
10
10
|
# list of pairs consisting of input and a regex that must match the output.
|
data/test/test_plaintext.rb
CHANGED
@@ -4,19 +4,19 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class TestPlaintext < Minitest::Test
|
6
6
|
def setup
|
7
|
-
@markdown =
|
8
|
-
Hi *there*!
|
7
|
+
@markdown = <<~MD
|
8
|
+
Hi *there*!
|
9
9
|
|
10
|
-
1. I am a numeric list.
|
11
|
-
2. I continue the list.
|
12
|
-
* Suddenly, an unordered list!
|
13
|
-
* What fun!
|
10
|
+
1. I am a numeric list.
|
11
|
+
2. I continue the list.
|
12
|
+
* Suddenly, an unordered list!
|
13
|
+
* What fun!
|
14
14
|
|
15
|
-
Okay, _enough_.
|
15
|
+
Okay, _enough_.
|
16
16
|
|
17
|
-
| a | b |
|
18
|
-
| --- | --- |
|
19
|
-
| c | d |
|
17
|
+
| a | b |
|
18
|
+
| --- | --- |
|
19
|
+
| c | d |
|
20
20
|
MD
|
21
21
|
end
|
22
22
|
|
@@ -27,20 +27,20 @@ Okay, _enough_.
|
|
27
27
|
def test_to_commonmark
|
28
28
|
compare = render_doc(@markdown).to_plaintext
|
29
29
|
|
30
|
-
assert_equal
|
31
|
-
Hi there!
|
30
|
+
assert_equal <<~PLAINTEXT, compare
|
31
|
+
Hi there!
|
32
32
|
|
33
|
-
1. I am a numeric list.
|
34
|
-
2. I continue the list.
|
33
|
+
1. I am a numeric list.
|
34
|
+
2. I continue the list.
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
- Suddenly, an unordered list!
|
37
|
+
- What fun!
|
38
38
|
|
39
|
-
Okay, enough.
|
39
|
+
Okay, enough.
|
40
40
|
|
41
|
-
| a | b |
|
42
|
-
| --- | --- |
|
43
|
-
| c | d |
|
44
|
-
|
41
|
+
| a | b |
|
42
|
+
| --- | --- |
|
43
|
+
| c | d |
|
44
|
+
PLAINTEXT
|
45
45
|
end
|
46
46
|
end
|
data/test/test_renderer.rb
CHANGED
@@ -14,16 +14,16 @@ class TestRenderer < Minitest::Test
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_multiple_tables
|
17
|
-
content =
|
18
|
-
| Input | Expected | Actual |
|
19
|
-
| ----------- | ---------------- | --------- |
|
20
|
-
| One | Two | Three |
|
17
|
+
content = <<~DOC
|
18
|
+
| Input | Expected | Actual |
|
19
|
+
| ----------- | ---------------- | --------- |
|
20
|
+
| One | Two | Three |
|
21
21
|
|
22
|
-
| Header | Row | Example |
|
23
|
-
| :------: | ---: | :------ |
|
24
|
-
| Foo | Bar | Baz |
|
25
|
-
|
26
|
-
doc = CommonMarker.render_doc(content, :DEFAULT, [
|
22
|
+
| Header | Row | Example |
|
23
|
+
| :------: | ---: | :------ |
|
24
|
+
| Foo | Bar | Baz |
|
25
|
+
DOC
|
26
|
+
doc = CommonMarker.render_doc(content, :DEFAULT, %i[autolink table tagfilter])
|
27
27
|
results = CommonMarker::HtmlRenderer.new.render(doc)
|
28
28
|
assert_equal 2, results.scan(/<tbody>/).size
|
29
29
|
end
|
data/test/test_spec.rb
CHANGED
@@ -8,6 +8,7 @@ class TestSpec < Minitest::Test
|
|
8
8
|
|
9
9
|
spec.each do |testcase|
|
10
10
|
next if testcase[:extensions].include?(:disabled)
|
11
|
+
|
11
12
|
doc = CommonMarker.render_doc(testcase[:markdown], :DEFAULT, testcase[:extensions])
|
12
13
|
|
13
14
|
define_method("test_to_html_example_#{testcase[:example]}") do
|
@@ -21,8 +22,8 @@ class TestSpec < Minitest::Test
|
|
21
22
|
end
|
22
23
|
|
23
24
|
define_method("test_sourcepos_example_#{testcase[:example]}") do
|
24
|
-
lhs = doc.to_html([
|
25
|
-
rhs = HtmlRenderer.new(options: [
|
25
|
+
lhs = doc.to_html(%i[UNSAFE SOURCEPOS], testcase[:extensions]).rstrip
|
26
|
+
rhs = HtmlRenderer.new(options: %i[UNSAFE SOURCEPOS], extensions: testcase[:extensions]).render(doc).rstrip
|
26
27
|
assert_equal lhs, rhs, testcase[:markdown]
|
27
28
|
end
|
28
29
|
end
|
data/test/test_tasklists.rb
CHANGED
@@ -7,13 +7,13 @@ class TestTasklists < Minitest::Test
|
|
7
7
|
text = <<-MD
|
8
8
|
- [x] Add task list
|
9
9
|
- [ ] Define task list
|
10
|
-
MD
|
10
|
+
MD
|
11
11
|
@doc = CommonMarker.render_doc(text, :DEFAULT, %i[tasklist])
|
12
|
-
@expected =
|
13
|
-
<ul>
|
14
|
-
<li><input type="checkbox" checked="" disabled="" /> Add task list</li>
|
15
|
-
<li><input type="checkbox" disabled="" /> Define task list</li>
|
16
|
-
</ul>
|
12
|
+
@expected = <<~HTML
|
13
|
+
<ul>
|
14
|
+
<li><input type="checkbox" checked="" disabled="" /> Add task list</li>
|
15
|
+
<li><input type="checkbox" disabled="" /> Define task list</li>
|
16
|
+
</ul>
|
17
17
|
HTML
|
18
18
|
end
|
19
19
|
|
@@ -28,6 +28,16 @@ MD
|
|
28
28
|
def test_tasklist_state
|
29
29
|
list = @doc.first_child
|
30
30
|
assert_equal 'checked', list.first_child.tasklist_state
|
31
|
+
assert list.first_child.tasklist_item_checked?
|
31
32
|
assert_equal 'unchecked', list.first_child.next.tasklist_state
|
33
|
+
refute list.first_child.next.tasklist_item_checked?
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_set_tasklist_state
|
37
|
+
list = @doc.first_child
|
38
|
+
list.first_child.tasklist_item_checked = false
|
39
|
+
refute list.first_child.tasklist_item_checked?
|
40
|
+
list.first_child.next.tasklist_item_checked = true
|
41
|
+
assert list.first_child.next.tasklist_item_checked?
|
32
42
|
end
|
33
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commonmarker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen Torikian
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-01-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby-enum
|
@@ -26,63 +26,63 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0.5'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: awesome_print
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: json
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '1.
|
48
|
+
version: '1.8'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '1.
|
55
|
+
version: '1.8'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: minitest
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '5.6'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '5.6'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: minitest-focus
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
76
|
+
version: '1.1'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 1.
|
83
|
+
version: '1.1'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: rake
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
@@ -96,33 +96,33 @@ dependencies:
|
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name: rake
|
99
|
+
name: rake-compiler
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
104
|
+
version: '0.9'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - "
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
111
|
+
version: '0.9'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rdoc
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
118
|
+
version: '6.2'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
125
|
+
version: '6.2'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rubocop
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -283,7 +283,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
283
283
|
requirements:
|
284
284
|
- - ">="
|
285
285
|
- !ruby/object:Gem::Version
|
286
|
-
version:
|
286
|
+
version: '0'
|
287
287
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
288
288
|
requirements:
|
289
289
|
- - ">="
|
@@ -295,28 +295,28 @@ signing_key:
|
|
295
295
|
specification_version: 4
|
296
296
|
summary: CommonMark parser and renderer. Written in C, wrapped in Ruby.
|
297
297
|
test_files:
|
298
|
-
- test/benchmark.rb
|
299
|
-
- test/fixtures/curly.md
|
300
|
-
- test/fixtures/dingus.md
|
301
|
-
- test/fixtures/strong.md
|
302
|
-
- test/fixtures/table.md
|
303
298
|
- test/test_attributes.rb
|
304
|
-
- test/
|
299
|
+
- test/test_linebreaks.rb
|
300
|
+
- test/test_doc.rb
|
301
|
+
- test/test_plaintext.rb
|
302
|
+
- test/test_pathological_inputs.rb
|
303
|
+
- test/test_node.rb
|
304
|
+
- test/test_maliciousness.rb
|
305
305
|
- test/test_commands.rb
|
306
|
+
- test/test_tasklists.rb
|
306
307
|
- test/test_commonmark.rb
|
307
|
-
- test/test_doc.rb
|
308
308
|
- test/test_encoding.rb
|
309
|
-
- test/
|
309
|
+
- test/test_smartpunct.rb
|
310
|
+
- test/test_spec.rb
|
310
311
|
- test/test_footnotes.rb
|
311
|
-
- test/
|
312
|
+
- test/test_extensions.rb
|
313
|
+
- test/fixtures/dingus.md
|
314
|
+
- test/fixtures/strong.md
|
315
|
+
- test/fixtures/table.md
|
316
|
+
- test/fixtures/curly.md
|
312
317
|
- test/test_helper.rb
|
313
|
-
- test/test_linebreaks.rb
|
314
|
-
- test/test_maliciousness.rb
|
315
|
-
- test/test_node.rb
|
316
318
|
- test/test_options.rb
|
317
|
-
- test/
|
318
|
-
- test/
|
319
|
+
- test/benchmark.rb
|
320
|
+
- test/test_basics.rb
|
319
321
|
- test/test_renderer.rb
|
320
|
-
- test/
|
321
|
-
- test/test_spec.rb
|
322
|
-
- test/test_tasklists.rb
|
322
|
+
- test/test_gc.rb
|