qiita_marker 0.23.2.2 → 0.23.5.1

Sign up to get free protection for your applications and to get access to all the features.
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