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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +19 -17
  3. data/Rakefile +57 -56
  4. data/bin/qiita_marker +2 -7
  5. data/ext/qiita_marker/blocks.c +4 -1
  6. data/ext/qiita_marker/cmark-gfm_version.h +2 -2
  7. data/ext/qiita_marker/qfm_custom_block.c +33 -52
  8. data/ext/qiita_marker/qiita_marker.c +30 -44
  9. data/ext/qiita_marker/scanners.c +2438 -2450
  10. data/ext/qiita_marker/table.c +28 -2
  11. data/lib/qiita_marker/config.rb +3 -3
  12. data/lib/qiita_marker/node/inspect.rb +8 -18
  13. data/lib/qiita_marker/node.rb +6 -6
  14. data/lib/qiita_marker/renderer/html_renderer.rb +38 -38
  15. data/lib/qiita_marker/renderer.rb +5 -5
  16. data/lib/qiita_marker/version.rb +1 -1
  17. data/lib/qiita_marker.rb +9 -11
  18. data/qiita_marker.gemspec +27 -29
  19. metadata +3 -63
  20. data/test/benchmark.rb +0 -32
  21. data/test/fixtures/curly.md +0 -1
  22. data/test/fixtures/dingus.md +0 -10
  23. data/test/fixtures/strong.md +0 -1
  24. data/test/fixtures/table.md +0 -10
  25. data/test/test_attributes.rb +0 -24
  26. data/test/test_basics.rb +0 -35
  27. data/test/test_commands.rb +0 -72
  28. data/test/test_commonmark.rb +0 -36
  29. data/test/test_doc.rb +0 -130
  30. data/test/test_encoding.rb +0 -23
  31. data/test/test_extensions.rb +0 -116
  32. data/test/test_footnotes.rb +0 -60
  33. data/test/test_gc.rb +0 -47
  34. data/test/test_helper.rb +0 -71
  35. data/test/test_linebreaks.rb +0 -15
  36. data/test/test_maliciousness.rb +0 -262
  37. data/test/test_node.rb +0 -89
  38. data/test/test_options.rb +0 -37
  39. data/test/test_pathological_inputs.rb +0 -94
  40. data/test/test_plaintext.rb +0 -46
  41. data/test/test_qfm_autolink_class_name.rb +0 -62
  42. data/test/test_qfm_code_data_metadata.rb +0 -41
  43. data/test/test_qfm_custom_block.rb +0 -39
  44. data/test/test_qfm_mention_no_emphasis.rb +0 -60
  45. data/test/test_renderer.rb +0 -47
  46. data/test/test_smartpunct.rb +0 -27
  47. data/test/test_spec.rb +0 -30
  48. data/test/test_tasklists.rb +0 -43
  49. 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
@@ -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
@@ -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
@@ -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">&quot;quotes&quot; should be escaped</text>
103
- </paragraph>
104
- </document>
105
- XML
106
- end
107
- end