qiita_marker 0.23.2.2 → 0.23.5.1
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.
- checksums.yaml +4 -4
- data/LICENSE.txt +19 -17
- data/Rakefile +57 -56
- data/bin/qiita_marker +2 -7
- data/ext/qiita_marker/blocks.c +4 -1
- data/ext/qiita_marker/cmark-gfm_version.h +2 -2
- data/ext/qiita_marker/qfm_custom_block.c +33 -52
- data/ext/qiita_marker/qiita_marker.c +30 -44
- data/ext/qiita_marker/scanners.c +2438 -2450
- data/ext/qiita_marker/table.c +28 -2
- data/lib/qiita_marker/config.rb +3 -3
- data/lib/qiita_marker/node/inspect.rb +8 -18
- data/lib/qiita_marker/node.rb +6 -6
- data/lib/qiita_marker/renderer/html_renderer.rb +38 -38
- data/lib/qiita_marker/renderer.rb +5 -5
- data/lib/qiita_marker/version.rb +1 -1
- data/lib/qiita_marker.rb +9 -11
- data/qiita_marker.gemspec +27 -29
- metadata +3 -63
- data/test/benchmark.rb +0 -32
- data/test/fixtures/curly.md +0 -1
- data/test/fixtures/dingus.md +0 -10
- data/test/fixtures/strong.md +0 -1
- data/test/fixtures/table.md +0 -10
- data/test/test_attributes.rb +0 -24
- data/test/test_basics.rb +0 -35
- data/test/test_commands.rb +0 -72
- data/test/test_commonmark.rb +0 -36
- data/test/test_doc.rb +0 -130
- data/test/test_encoding.rb +0 -23
- data/test/test_extensions.rb +0 -116
- data/test/test_footnotes.rb +0 -60
- data/test/test_gc.rb +0 -47
- data/test/test_helper.rb +0 -71
- data/test/test_linebreaks.rb +0 -15
- data/test/test_maliciousness.rb +0 -262
- data/test/test_node.rb +0 -89
- data/test/test_options.rb +0 -37
- data/test/test_pathological_inputs.rb +0 -94
- data/test/test_plaintext.rb +0 -46
- data/test/test_qfm_autolink_class_name.rb +0 -62
- data/test/test_qfm_code_data_metadata.rb +0 -41
- data/test/test_qfm_custom_block.rb +0 -39
- data/test/test_qfm_mention_no_emphasis.rb +0 -60
- data/test/test_renderer.rb +0 -47
- data/test/test_smartpunct.rb +0 -27
- data/test/test_spec.rb +0 -30
- data/test/test_tasklists.rb +0 -43
- data/test/test_xml.rb +0 -107
@@ -1,60 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TestQfmMentionNoEmphasis < Minitest::Test
|
6
|
-
describe 'with mention_no_emphasis option' do
|
7
|
-
[
|
8
|
-
['@_username_', false],
|
9
|
-
['@__username__', false],
|
10
|
-
['@___username___', false],
|
11
|
-
['@user__name__', false],
|
12
|
-
['@some__user__name__', false],
|
13
|
-
[' @_username_', false],
|
14
|
-
['あ@_username_', false],
|
15
|
-
['A@_username_', true],
|
16
|
-
['@*username*', true],
|
17
|
-
['_foo_', true],
|
18
|
-
['_', false],
|
19
|
-
['_foo @username_', false],
|
20
|
-
['__foo @username__', false],
|
21
|
-
['___foo @username___', false]
|
22
|
-
].each do |text, emphasize|
|
23
|
-
describe "with text #{text.inspect}" do
|
24
|
-
if emphasize
|
25
|
-
it 'emphasizes the text' do
|
26
|
-
QiitaMarker.render_html(text, :MENTION_NO_EMPHASIS).tap do |out|
|
27
|
-
assert_match(/(<em>|<strong>)/, out.chomp)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
else
|
31
|
-
it 'does not emphasize the text' do
|
32
|
-
QiitaMarker.render_html(text, :MENTION_NO_EMPHASIS).tap do |out|
|
33
|
-
assert_match "<p>#{text.strip}</p>", out.chomp
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'without mention_no_emphasis option' do
|
42
|
-
describe 'with text "@_username_"' do
|
43
|
-
text = '@_username_'
|
44
|
-
it 'emphasizes the text' do
|
45
|
-
QiitaMarker.render_html(text, :DEFAULT, %i[]).tap do |out|
|
46
|
-
assert_match(/<em>/, out.chomp)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe 'with text "_foo @username_"' do
|
52
|
-
text = '_foo @username_'
|
53
|
-
it 'emphasizes the text' do
|
54
|
-
QiitaMarker.render_html(text, :DEFAULT, %i[]).tap do |out|
|
55
|
-
assert_match(/<em>/, out.chomp)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/test/test_renderer.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TestRenderer < Minitest::Test
|
6
|
-
def setup
|
7
|
-
@doc = QiitaMarker.render_doc('Hi *there*')
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_html_renderer
|
11
|
-
renderer = HtmlRenderer.new
|
12
|
-
result = renderer.render(@doc)
|
13
|
-
assert_equal "<p>Hi <em>there</em></p>\n", result
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_multiple_tables
|
17
|
-
content = <<~DOC
|
18
|
-
| Input | Expected | Actual |
|
19
|
-
| ----------- | ---------------- | --------- |
|
20
|
-
| One | Two | Three |
|
21
|
-
|
22
|
-
| Header | Row | Example |
|
23
|
-
| :------: | ---: | :------ |
|
24
|
-
| Foo | Bar | Baz |
|
25
|
-
DOC
|
26
|
-
doc = QiitaMarker.render_doc(content, :DEFAULT, %i[autolink table tagfilter])
|
27
|
-
results = QiitaMarker::HtmlRenderer.new.render(doc)
|
28
|
-
assert_equal 2, results.scan(/<tbody>/).size
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_escape_html_encoding
|
32
|
-
my_renderer = Class.new(HtmlRenderer) do
|
33
|
-
attr_reader :input_encoding, :output_encoding
|
34
|
-
|
35
|
-
def text(node)
|
36
|
-
@input_encoding = node.string_content.encoding
|
37
|
-
escape_html(node.string_content).tap do |escaped|
|
38
|
-
@output_encoding = escaped.encoding
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
renderer = my_renderer.new
|
44
|
-
assert_equal Encoding::UTF_8, renderer.render(@doc).encoding
|
45
|
-
assert_equal renderer.input_encoding, renderer.output_encoding
|
46
|
-
end
|
47
|
-
end
|
data/test/test_smartpunct.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class SmartPunctTest < Minitest::Test
|
6
|
-
smart_punct = open_spec_file('smart_punct.txt')
|
7
|
-
|
8
|
-
smart_punct.each do |testcase|
|
9
|
-
doc = QiitaMarker.render_doc(testcase[:markdown], :SMART)
|
10
|
-
html = QiitaMarker.render_html(testcase[:markdown], :SMART)
|
11
|
-
|
12
|
-
define_method("test_smart_punct_example_#{testcase[:example]}") do
|
13
|
-
doc_rendered = doc.to_html.strip
|
14
|
-
html_rendered = html.strip
|
15
|
-
|
16
|
-
assert_equal testcase[:html], doc_rendered, testcase[:markdown]
|
17
|
-
assert_equal testcase[:html], html_rendered, testcase[:markdown]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_smart_hardbreak_no_spaces_render_doc
|
22
|
-
markdown = "\"foo\"\nbaz"
|
23
|
-
result = "<p>“foo”<br />\nbaz</p>\n"
|
24
|
-
doc = QiitaMarker.render_doc(markdown, :SMART)
|
25
|
-
assert_equal result, doc.to_html([:HARDBREAKS])
|
26
|
-
end
|
27
|
-
end
|
data/test/test_spec.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
require 'json'
|
5
|
-
|
6
|
-
class TestSpec < Minitest::Test
|
7
|
-
spec = open_spec_file('spec.txt')
|
8
|
-
|
9
|
-
spec.each do |testcase|
|
10
|
-
next if testcase[:extensions].include?(:disabled)
|
11
|
-
|
12
|
-
doc = QiitaMarker.render_doc(testcase[:markdown], :DEFAULT, testcase[:extensions])
|
13
|
-
|
14
|
-
define_method("test_to_html_example_#{testcase[:example]}") do
|
15
|
-
actual = doc.to_html(:UNSAFE, testcase[:extensions]).rstrip
|
16
|
-
assert_equal testcase[:html], actual, testcase[:markdown]
|
17
|
-
end
|
18
|
-
|
19
|
-
define_method("test_html_renderer_example_#{testcase[:example]}") do
|
20
|
-
actual = HtmlRenderer.new(options: :UNSAFE, extensions: testcase[:extensions]).render(doc).rstrip
|
21
|
-
assert_equal testcase[:html], actual, testcase[:markdown]
|
22
|
-
end
|
23
|
-
|
24
|
-
define_method("test_sourcepos_example_#{testcase[:example]}") do
|
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
|
27
|
-
assert_equal lhs, rhs, testcase[:markdown]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/test/test_tasklists.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TestTasklists < Minitest::Test
|
6
|
-
def setup
|
7
|
-
text = <<-MD
|
8
|
-
- [x] Add task list
|
9
|
-
- [ ] Define task list
|
10
|
-
MD
|
11
|
-
@doc = QiitaMarker.render_doc(text, :DEFAULT, %i[tasklist])
|
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
|
-
HTML
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_to_html
|
21
|
-
assert_equal @expected, @doc.to_html
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_html_renderer
|
25
|
-
assert_equal @expected, QiitaMarker::HtmlRenderer.new.render(@doc)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_tasklist_state
|
29
|
-
list = @doc.first_child
|
30
|
-
assert_equal 'checked', list.first_child.tasklist_state
|
31
|
-
assert list.first_child.tasklist_item_checked?
|
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?
|
42
|
-
end
|
43
|
-
end
|
data/test/test_xml.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TestXml < Minitest::Test
|
6
|
-
def setup
|
7
|
-
@markdown = <<~MD
|
8
|
-
Hi *there*!
|
9
|
-
|
10
|
-
1. I am a numeric list.
|
11
|
-
2. I continue the list.
|
12
|
-
* Suddenly, an unordered list!
|
13
|
-
* What fun!
|
14
|
-
|
15
|
-
Okay, _enough_.
|
16
|
-
|
17
|
-
| a | b |
|
18
|
-
| --- | --- |
|
19
|
-
| c | d |
|
20
|
-
MD
|
21
|
-
end
|
22
|
-
|
23
|
-
def render_doc(doc)
|
24
|
-
QiitaMarker.render_doc(doc, :DEFAULT, [:table])
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_to_xml
|
28
|
-
compare = render_doc(@markdown).to_xml(:SOURCEPOS)
|
29
|
-
|
30
|
-
assert_equal <<~XML, compare
|
31
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
32
|
-
<!DOCTYPE document SYSTEM "CommonMark.dtd">
|
33
|
-
<document sourcepos="1:1-12:13" xmlns="http://commonmark.org/xml/1.0">
|
34
|
-
<paragraph sourcepos="1:1-1:11">
|
35
|
-
<text sourcepos="1:1-1:3" xml:space="preserve">Hi </text>
|
36
|
-
<emph sourcepos="1:4-1:10">
|
37
|
-
<text sourcepos="1:5-1:9" xml:space="preserve">there</text>
|
38
|
-
</emph>
|
39
|
-
<text sourcepos="1:11-1:11" xml:space="preserve">!</text>
|
40
|
-
</paragraph>
|
41
|
-
<list sourcepos="3:1-4:23" type="ordered" start="1" delim="period" tight="true">
|
42
|
-
<item sourcepos="3:1-3:23">
|
43
|
-
<paragraph sourcepos="3:4-3:23">
|
44
|
-
<text sourcepos="3:4-3:23" xml:space="preserve">I am a numeric list.</text>
|
45
|
-
</paragraph>
|
46
|
-
</item>
|
47
|
-
<item sourcepos="4:1-4:23">
|
48
|
-
<paragraph sourcepos="4:4-4:23">
|
49
|
-
<text sourcepos="4:4-4:23" xml:space="preserve">I continue the list.</text>
|
50
|
-
</paragraph>
|
51
|
-
</item>
|
52
|
-
</list>
|
53
|
-
<list sourcepos="5:1-7:0" type="bullet" tight="true">
|
54
|
-
<item sourcepos="5:1-5:30">
|
55
|
-
<paragraph sourcepos="5:3-5:30">
|
56
|
-
<text sourcepos="5:3-5:30" xml:space="preserve">Suddenly, an unordered list!</text>
|
57
|
-
</paragraph>
|
58
|
-
</item>
|
59
|
-
<item sourcepos="6:1-7:0">
|
60
|
-
<paragraph sourcepos="6:3-6:11">
|
61
|
-
<text sourcepos="6:3-6:11" xml:space="preserve">What fun!</text>
|
62
|
-
</paragraph>
|
63
|
-
</item>
|
64
|
-
</list>
|
65
|
-
<paragraph sourcepos="8:1-8:15">
|
66
|
-
<text sourcepos="8:1-8:6" xml:space="preserve">Okay, </text>
|
67
|
-
<emph sourcepos="8:7-8:14">
|
68
|
-
<text sourcepos="8:8-8:13" xml:space="preserve">enough</text>
|
69
|
-
</emph>
|
70
|
-
<text sourcepos="8:15-8:15" xml:space="preserve">.</text>
|
71
|
-
</paragraph>
|
72
|
-
<table sourcepos="10:1-12:13">
|
73
|
-
<table_header sourcepos="10:1-10:13">
|
74
|
-
<table_cell sourcepos="10:2-10:6">
|
75
|
-
<text sourcepos="10:3-10:3" xml:space="preserve">a</text>
|
76
|
-
</table_cell>
|
77
|
-
<table_cell sourcepos="10:8-10:12">
|
78
|
-
<text sourcepos="10:9-10:9" xml:space="preserve">b</text>
|
79
|
-
</table_cell>
|
80
|
-
</table_header>
|
81
|
-
<table_row sourcepos="12:1-12:13">
|
82
|
-
<table_cell sourcepos="12:2-12:6">
|
83
|
-
<text sourcepos="12:3-12:3" xml:space="preserve">c</text>
|
84
|
-
</table_cell>
|
85
|
-
<table_cell sourcepos="12:8-12:12">
|
86
|
-
<text sourcepos="12:9-12:9" xml:space="preserve">d</text>
|
87
|
-
</table_cell>
|
88
|
-
</table_row>
|
89
|
-
</table>
|
90
|
-
</document>
|
91
|
-
XML
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_to_xml_with_quotes
|
95
|
-
compare = render_doc('"quotes" should be escaped').to_xml(:DEFAULT)
|
96
|
-
|
97
|
-
assert_equal <<~XML, compare
|
98
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
99
|
-
<!DOCTYPE document SYSTEM "CommonMark.dtd">
|
100
|
-
<document xmlns="http://commonmark.org/xml/1.0">
|
101
|
-
<paragraph>
|
102
|
-
<text xml:space="preserve">"quotes" should be escaped</text>
|
103
|
-
</paragraph>
|
104
|
-
</document>
|
105
|
-
XML
|
106
|
-
end
|
107
|
-
end
|