greenmat 3.2.2.1 → 3.5.1.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 (44) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +17 -4
  3. data/CHANGELOG.md +21 -0
  4. data/COPYING +17 -11
  5. data/Gemfile +2 -2
  6. data/README.md +19 -13
  7. data/bin/greenmat +4 -40
  8. data/ext/greenmat/autolink.c +29 -16
  9. data/ext/greenmat/buffer.c +24 -17
  10. data/ext/greenmat/buffer.h +18 -13
  11. data/ext/greenmat/gm_markdown.c +38 -14
  12. data/ext/greenmat/gm_render.c +60 -21
  13. data/ext/greenmat/greenmat.h +22 -0
  14. data/ext/greenmat/houdini.h +25 -0
  15. data/ext/greenmat/houdini_href_e.c +27 -11
  16. data/ext/greenmat/houdini_html_e.c +22 -1
  17. data/ext/greenmat/html.c +130 -48
  18. data/ext/greenmat/html.h +19 -14
  19. data/ext/greenmat/html_smartypants.c +47 -20
  20. data/ext/greenmat/markdown.c +42 -30
  21. data/ext/greenmat/markdown.h +17 -15
  22. data/ext/greenmat/stack.c +22 -0
  23. data/ext/greenmat/stack.h +22 -0
  24. data/greenmat.gemspec +4 -3
  25. data/lib/greenmat.rb +1 -1
  26. data/lib/greenmat/cli.rb +86 -0
  27. data/lib/greenmat/compat.rb +0 -5
  28. data/lib/greenmat/render_strip.rb +13 -1
  29. data/lib/greenmat/version.rb +1 -1
  30. data/spec/greenmat/markdown_spec.rb +123 -0
  31. data/test/custom_render_test.rb +41 -2
  32. data/test/greenmat_bin_test.rb +80 -0
  33. data/test/greenmat_compat_test.rb +6 -6
  34. data/test/html5_test.rb +60 -38
  35. data/test/html_render_test.rb +162 -128
  36. data/test/html_toc_render_test.rb +74 -11
  37. data/test/markdown_test.rb +261 -161
  38. data/test/safe_render_test.rb +5 -6
  39. data/test/smarty_html_test.rb +19 -13
  40. data/test/smarty_pants_test.rb +10 -0
  41. data/test/stripdown_render_test.rb +38 -9
  42. data/test/test_helper.rb +30 -9
  43. metadata +34 -19
  44. data/tasks/generate_xcode_project.rake +0 -5
@@ -2,34 +2,33 @@ require 'test_helper'
2
2
 
3
3
  class SafeRenderTest < Greenmat::TestCase
4
4
  def setup
5
- @render = Greenmat::Render::Safe
6
- @parser = Greenmat::Markdown.new(@render, fenced_code_blocks: true)
5
+ @renderer = Greenmat::Render::Safe
7
6
  end
8
7
 
9
8
  def test_safe_links_only_is_enabled_by_default
10
9
  markdown = "[foo](javascript:alert('foo'))"
11
- output = @parser.render(markdown)
10
+ output = render(markdown)
12
11
 
13
12
  assert_not_match %r{a href}, output
14
13
  end
15
14
 
16
15
  def test_escape_html_is_enabled_by_default
17
16
  markdown = "<p>Hello world!</p>"
18
- output = @parser.render(markdown)
17
+ output = render(markdown)
19
18
 
20
19
  assert_match %r{&lt;}, output
21
20
  end
22
21
 
23
22
  def test_html_escaping_in_code_blocks
24
23
  markdown = "~~~\n<p>Hello!</p>\n~~~"
25
- output = @parser.render(markdown)
24
+ output = render(markdown)
26
25
 
27
26
  assert_match %r{&lt;p&gt;}, output
28
27
  end
29
28
 
30
29
  def test_lang_class_is_removed
31
30
  markdown = "~~~ruby\nclass Foo; end\n~~~"
32
- output = @parser.render(markdown)
31
+ output = render(markdown, with: [:fenced_code_blocks])
33
32
 
34
33
  assert_not_match %r{ruby}, output
35
34
  end
@@ -3,43 +3,49 @@ require 'test_helper'
3
3
 
4
4
  class SmartyHTMLTest < Greenmat::TestCase
5
5
  def setup
6
- @smarty_markdown = Greenmat::Markdown.new(Greenmat::Render::SmartyHTML)
6
+ @renderer = Greenmat::Render::SmartyHTML
7
7
  end
8
8
 
9
9
  def test_that_smartyhtml_converts_single_quotes
10
- markdown = @smarty_markdown.render("They're not for sale.")
11
- assert_equal "<p>They&rsquo;re not for sale.</p>\n", markdown
10
+ markdown = render("They're not for sale.")
11
+ assert_equal "<p>They&rsquo;re not for sale.</p>", markdown
12
12
  end
13
13
 
14
14
  def test_that_smartyhtml_converts_double_quotes
15
- rd = @smarty_markdown.render(%("Quoted text"))
16
- assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>\n), rd
15
+ rd = render(%("Quoted text"))
16
+ assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>), rd
17
17
  end
18
18
 
19
19
  def test_that_smartyhtml_converts_double_hyphen
20
- rd = @smarty_markdown.render("double hyphen -- ndash")
21
- assert_equal "<p>double hyphen &ndash; ndash</p>\n", rd
20
+ rd = render("double hyphen -- ndash")
21
+ assert_equal "<p>double hyphen &ndash; ndash</p>", rd
22
22
  end
23
23
 
24
24
  def test_that_smartyhtml_converts_triple_hyphen
25
- rd = @smarty_markdown.render("triple hyphen --- mdash")
26
- assert_equal "<p>triple hyphen &mdash; mdash</p>\n", rd
25
+ rd = render("triple hyphen --- mdash")
26
+ assert_equal "<p>triple hyphen &mdash; mdash</p>", rd
27
27
  end
28
28
 
29
29
  def test_that_smartyhtml_ignores_double_hyphen_in_code
30
- rd = @smarty_markdown.render("double hyphen in `--option`")
31
- assert_equal "<p>double hyphen in <code>--option</code></p>\n", rd
30
+ rd = render("double hyphen in `--option`")
31
+ assert_equal "<p>double hyphen in <code>--option</code></p>", rd
32
32
  end
33
33
 
34
34
  def test_that_smartyhtml_ignores_pre
35
- rd = @smarty_markdown.render(" It's a test of \"pre\"\n")
35
+ rd = render(" It's a test of \"pre\"\n")
36
36
  expected = "It&#39;s a test of &quot;pre&quot;"
37
37
  assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
38
38
  end
39
39
 
40
40
  def test_that_smartyhtml_ignores_code
41
- rd = @smarty_markdown.render("`It's a test of \"code\"`\n")
41
+ rd = render("`It's a test of \"code\"`\n")
42
42
  expected = "It&#39;s a test of &quot;code&quot;"
43
43
  assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
44
44
  end
45
+
46
+ def test_that_smartyhtml_ignores_links_for_single_quotes
47
+ output = render("[John](link)'s cat")
48
+ expected = %(<p><a href="link">John</a>&rsquo;s cat</p>)
49
+ assert_equal expected, output
50
+ end
45
51
  end
@@ -45,4 +45,14 @@ class SmartyPantsTest < Greenmat::TestCase
45
45
  rd = @pants.render("<p>Hopin' that this bug gets some fixin'.</p>")
46
46
  assert_equal "<p>Hopin&rsquo; that this bug gets some fixin&rsquo;.</p>", rd
47
47
  end
48
+
49
+ def test_that_is_not_confused_by_fractions
50
+ rd = @pants.render('I am 1/4... of the way to 1/4/2000')
51
+ assert_equal "I am &frac14;&hellip; of the way to 1/4/2000", rd
52
+ end
53
+
54
+ def test_that_smart_converts_multiple_single_quotes
55
+ rd = @pants.render(%(<p>'First' and 'second' and 'third'</p>))
56
+ assert_equal %(<p>&lsquo;First&rsquo; and &lsquo;second&rsquo; and &lsquo;third&rsquo;</p>), rd
57
+ end
48
58
  end
@@ -3,37 +3,66 @@ require 'test_helper'
3
3
 
4
4
  class StripDownRender < Greenmat::TestCase
5
5
  def setup
6
- @parser = Greenmat::Markdown.new(Greenmat::Render::StripDown)
6
+ @renderer = Greenmat::Render::StripDown
7
7
  end
8
8
 
9
9
  def test_titles
10
10
  markdown = "# Foo bar"
11
- output = @parser.render(markdown)
11
+ output = render(markdown)
12
12
 
13
- assert_equal "Foo bar\n", output
13
+ assert_equal "Foo bar", output
14
14
  end
15
15
 
16
16
  def test_code_blocks
17
17
  markdown = "\tclass Foo\n\tend"
18
- output = @parser.render(markdown)
18
+ output = render(markdown)
19
19
 
20
- assert_equal "class Foo\nend\n", output
20
+ assert_equal "class Foo\nend", output
21
21
  end
22
22
 
23
23
  def test_images
24
24
  markdown = "Look at this ![picture](http://example.org/picture.png)\n" \
25
25
  "And this: ![](http://example.org/image.jpg)"
26
26
  expected = "Look at this picture http://example.org/picture.png\n" \
27
- "And this: http://example.org/image.jpg\n"
28
- output = @parser.render(markdown)
27
+ "And this: http://example.org/image.jpg"
28
+ output = render(markdown)
29
29
 
30
30
  assert_equal expected, output
31
31
  end
32
32
 
33
33
  def test_links
34
34
  markdown = "Here's an [example](https://github.com)"
35
- expected = "Here's an example (https://github.com)\n"
36
- output = @parser.render(markdown)
35
+ expected = "Here's an example (https://github.com)"
36
+ output = render(markdown)
37
+
38
+ assert_equal expected, output
39
+ end
40
+
41
+ def test_tables
42
+ markdown = "| Left-Aligned | Centre Aligned | Right Aligned |\n" \
43
+ "| :------------ |:---------------:| -----:|\n" \
44
+ "| col 3 is | some wordy text | $1600 |\n" \
45
+ "| col 2 is | centered | $12 |"
46
+ expected = "Left-Aligned\tCentre Aligned\tRight Aligned\t\n" \
47
+ "col 3 is\tsome wordy text\t$1600\t\n" \
48
+ "col 2 is\tcentered\t$12\t"
49
+ output = render(markdown, with: [:tables])
50
+
51
+ assert_equal expected, output
52
+ end
53
+
54
+ def test_highlight
55
+ markdown = "==Hello world!=="
56
+ expected = "Hello world!"
57
+ output = render(markdown, with: [:highlight])
58
+
59
+ assert_equal expected, output
60
+ end
61
+
62
+ def test_with_quote_option_enabled
63
+ markdown = %(A common idiom is "Hello world")
64
+ expected = %(A common idiom is Hello world)
65
+ output = render(markdown, with: [:quote])
37
66
 
38
67
  assert_equal expected, output
39
68
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # coding: UTF-8
2
- Encoding.default_internal = 'UTF-8' if defined? Encoding
2
+ $:.unshift(File.expand_path('../../lib', __FILE__))
3
+ Encoding.default_internal = 'UTF-8'
3
4
 
4
5
  gem 'test-unit', '>= 2' # necessary when not using bundle exec
5
6
 
@@ -9,21 +10,41 @@ require 'nokogiri'
9
10
  require 'greenmat'
10
11
  require 'greenmat/render_strip'
11
12
  require 'greenmat/render_man'
12
- require 'greenmat/compat'
13
13
 
14
14
  class Greenmat::TestCase < Test::Unit::TestCase
15
- def html_equal(html_a, html_b)
16
- assert_equal Nokogiri::HTML::DocumentFragment.parse(html_a).to_html,
17
- Nokogiri::HTML::DocumentFragment.parse(html_b).to_html
15
+ def assert_renders(html, markdown)
16
+ assert_equal html, render(markdown)
18
17
  end
19
18
 
20
- def assert_renders(html, markdown)
21
- html_equal html, parser.render(markdown)
19
+ def render(markdown, options = {})
20
+ options = options.fetch(:with, {})
21
+
22
+ if options.kind_of?(Array)
23
+ options = Hash[options.map {|o| [o, true]}]
24
+ end
25
+
26
+ render = begin
27
+ renderer.new(options)
28
+ rescue ArgumentError
29
+ renderer.new
30
+ end
31
+
32
+ parser = Greenmat::Markdown.new(render, options)
33
+
34
+ parser.render(markdown).chomp
22
35
  end
23
36
 
24
37
  private
25
38
 
26
- def parser
27
- @parser ||= Greenmat::Markdown.new(Greenmat::Render::HTML)
39
+ def renderer
40
+ @renderer ||= Greenmat::Render::HTML
41
+ end
42
+
43
+ # Imported from Active Support
44
+ class ::String
45
+ def strip_heredoc
46
+ indent = scan(/^ *(?=\S)/).min.size || 0
47
+ gsub(/^[ \t]{#{indent}}/, '')
48
+ end
28
49
  end
29
50
  end
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greenmat
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2.1
4
+ version: 3.5.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natacha Porté
8
8
  - Vicent Martí
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-13 00:00:00.000000000 Z
12
+ date: 2021-03-03 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: nokogiri
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -26,61 +40,61 @@ dependencies:
26
40
  - !ruby/object:Gem::Version
27
41
  version: 1.6.0
28
42
  - !ruby/object:Gem::Dependency
29
- name: rake-compiler
43
+ name: rake
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
46
  - - "~>"
33
47
  - !ruby/object:Gem::Version
34
- version: 0.8.3
48
+ version: 12.2.1
35
49
  type: :development
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - "~>"
40
54
  - !ruby/object:Gem::Version
41
- version: 0.8.3
55
+ version: 12.2.1
42
56
  - !ruby/object:Gem::Dependency
43
- name: rspec
57
+ name: rake-compiler
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
- version: '3.2'
62
+ version: 1.0.3
49
63
  type: :development
50
64
  prerelease: false
51
65
  version_requirements: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
- version: '3.2'
69
+ version: 1.0.3
56
70
  - !ruby/object:Gem::Dependency
57
- name: rubygems-xcodeproj_generator
71
+ name: rspec
58
72
  requirement: !ruby/object:Gem::Requirement
59
73
  requirements:
60
74
  - - "~>"
61
75
  - !ruby/object:Gem::Version
62
- version: '0.1'
76
+ version: '3.2'
63
77
  type: :development
64
78
  prerelease: false
65
79
  version_requirements: !ruby/object:Gem::Requirement
66
80
  requirements:
67
81
  - - "~>"
68
82
  - !ruby/object:Gem::Version
69
- version: '0.1'
83
+ version: '3.2'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: test-unit
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - "~>"
75
89
  - !ruby/object:Gem::Version
76
- version: 2.5.4
90
+ version: 3.2.3
77
91
  type: :development
78
92
  prerelease: false
79
93
  version_requirements: !ruby/object:Gem::Requirement
80
94
  requirements:
81
95
  - - "~>"
82
96
  - !ruby/object:Gem::Version
83
- version: 2.5.4
97
+ version: 3.2.3
84
98
  description: A Markdown parser for Qiita, based on Redcarpet.
85
99
  email: nkymyj@gmail.com
86
100
  executables:
@@ -120,13 +134,13 @@ files:
120
134
  - ext/greenmat/stack.h
121
135
  - greenmat.gemspec
122
136
  - lib/greenmat.rb
137
+ - lib/greenmat/cli.rb
123
138
  - lib/greenmat/compat.rb
124
139
  - lib/greenmat/render_man.rb
125
140
  - lib/greenmat/render_strip.rb
126
141
  - lib/greenmat/version.rb
127
142
  - spec/greenmat/markdown_spec.rb
128
143
  - spec/spec_helper.rb
129
- - tasks/generate_xcode_project.rake
130
144
  - tasks/greenmat.rake
131
145
  - tasks/spec.rake
132
146
  - test/MarkdownTest_1.0.3/MarkdownTest.pl
@@ -216,6 +230,7 @@ files:
216
230
  - test/benchmark.rb
217
231
  - test/custom_render_test.rb
218
232
  - test/fixtures/benchmark.md
233
+ - test/greenmat_bin_test.rb
219
234
  - test/greenmat_compat_test.rb
220
235
  - test/html5_test.rb
221
236
  - test/html_render_test.rb
@@ -231,7 +246,7 @@ homepage: https://github.com/increments/greenmat
231
246
  licenses:
232
247
  - MIT
233
248
  metadata: {}
234
- post_install_message:
249
+ post_install_message:
235
250
  rdoc_options: []
236
251
  require_paths:
237
252
  - lib
@@ -246,9 +261,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
261
  - !ruby/object:Gem::Version
247
262
  version: '0'
248
263
  requirements: []
249
- rubyforge_project:
250
- rubygems_version: 2.4.6
251
- signing_key:
264
+ rubygems_version: 3.0.3
265
+ signing_key:
252
266
  specification_version: 4
253
267
  summary: A Markdown parser for Qiita, based on Redcarpet.
254
268
  test_files:
@@ -341,6 +355,7 @@ test_files:
341
355
  - test/benchmark.rb
342
356
  - test/custom_render_test.rb
343
357
  - test/fixtures/benchmark.md
358
+ - test/greenmat_bin_test.rb
344
359
  - test/greenmat_compat_test.rb
345
360
  - test/html5_test.rb
346
361
  - test/html_render_test.rb
@@ -1,5 +0,0 @@
1
- require 'rubygems/xcodeproj_generator/rake_task'
2
-
3
- Rubygems::XcodeprojGenerator::RakeTask.new do |project|
4
- project.build_command = 'bundle exec rake compile'
5
- end