motion-markdown-it-plugins 1.0.0

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.
@@ -0,0 +1,76 @@
1
+ #------------------------------------------------------------------------------
2
+ describe 'api' do
3
+
4
+ #------------------------------------------------------------------------------
5
+ it 'renderer' do
6
+ md = MarkdownIt::Parser.new
7
+ md.use(MotionMarkdownItPlugins::Container, 'spoiler',
8
+ { render: lambda {|tokens, idx, _options, env, renderer|
9
+ tokens[idx].nesting == 1 ? "<details><summary>click me</summary>\n" : "</details>\n" }})
10
+ res = md.render("::: spoiler\n*content*\n:::\n")
11
+ expect(res).to eq "<details><summary>click me</summary>\n<p><em>content</em></p>\n</details>\n"
12
+ end
13
+
14
+ #------------------------------------------------------------------------------
15
+ it '2 char marker' do
16
+ md = MarkdownIt::Parser.new
17
+ md.use(MotionMarkdownItPlugins::Container, 'spoiler', {marker: '->'})
18
+ res = md.render("->->-> spoiler\n*content*\n->->->\n")
19
+ expect(res).to eq "<div class=\"spoiler\">\n<p><em>content</em></p>\n</div>\n"
20
+ end
21
+
22
+ #------------------------------------------------------------------------------
23
+ it 'marker should not collide with fence' do
24
+ md = MarkdownIt::Parser.new
25
+ md.use(MotionMarkdownItPlugins::Container, 'spoiler', {marker: '`'})
26
+ res = md.render("``` spoiler\n*content*\n```\n")
27
+ expect(res).to eq "<div class=\"spoiler\">\n<p><em>content</em></p>\n</div>\n"
28
+ end
29
+
30
+ #------------------------------------------------------------------------------
31
+ it 'marker should not collide with fence #2' do
32
+ md = MarkdownIt::Parser.new
33
+ md.use(MotionMarkdownItPlugins::Container, 'spoiler', {marker: '`'})
34
+ res = md.render("\n``` not spoiler\n*content*\n```\n")
35
+ expect(res).to eq "<pre><code class=\"language-not\">*content*\n</code></pre>\n"
36
+ end
37
+
38
+ #------------------------------------------------------------------------------
39
+ describe 'validator' do
40
+
41
+ #------------------------------------------------------------------------------
42
+ it 'should skip rule if return value is falsy' do
43
+ md = MarkdownIt::Parser.new
44
+ md.use(MotionMarkdownItPlugins::Container, 'name', {validate: lambda {|params| false} })
45
+ res = md.render(":::foo\nbar\n:::\n")
46
+ expect(res).to eq "<p>:::foo\nbar\n:::</p>\n"
47
+ end
48
+
49
+ #------------------------------------------------------------------------------
50
+ it 'should accept rule if return value is true' do
51
+ md = MarkdownIt::Parser.new
52
+ md.use(MotionMarkdownItPlugins::Container, 'name', {validate: lambda {|params| true} })
53
+ res = md.render(":::foo\nbar\n:::\n")
54
+ expect(res).to eq "<div class=\"name\">\n<p>bar</p>\n</div>\n"
55
+ end
56
+
57
+ #------------------------------------------------------------------------------
58
+ it 'rule should call it' do
59
+ count = 0
60
+
61
+ md = MarkdownIt::Parser.new
62
+ md.use(MotionMarkdownItPlugins::Container, 'name', {validate: lambda {|params| count += 1} })
63
+ md.parse(":\n::\n:::\n::::\n:::::\n", {})
64
+ expect(count).to eq 3
65
+ end
66
+
67
+ #------------------------------------------------------------------------------
68
+ it 'should not trim params' do
69
+ md = MarkdownIt::Parser.new
70
+ md.use(MotionMarkdownItPlugins::Container, 'name',
71
+ {validate: lambda {|params| expect(params).to eq ' name '; return 1 } })
72
+ md.parse("::: \tname \ncontent\n:::\n", {})
73
+ end
74
+ end
75
+
76
+ end
@@ -0,0 +1,8 @@
1
+ fixture_dir = fixture_path('container/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'default container' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Container, 'name')
7
+ generate(File.join(fixture_dir, 'default.txt'), md)
8
+ end
@@ -0,0 +1,17 @@
1
+ #------------------------------------------------------------------------------
2
+ describe 'coverage' do
3
+
4
+ #------------------------------------------------------------------------------
5
+ it 'marker coverage' do
6
+ md = MarkdownIt::Parser.new
7
+ md.use(MotionMarkdownItPlugins::Container, 'fox',
8
+ { marker: 'foo',
9
+ validate: lambda {|params| expect(params).to eq 'fox'; return 1}
10
+ })
11
+ tok = md.parse("foofoofoofox\ncontent\nfoofoofoofoo\n", {})
12
+
13
+ expect(tok[0].markup).to eq 'foofoofoo'
14
+ expect(tok[0].info).to eq 'fox'
15
+ expect(tok[4].markup).to eq 'foofoofoofoo'
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ fixture_dir = fixture_path('deflist/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'markdown-it-deflist' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Deflist)
7
+
8
+ generate(File.join(fixture_dir, 'deflist.txt'), md)
9
+ end
@@ -0,0 +1,9 @@
1
+ fixture_dir = fixture_path('ins/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'markdown-it-ins' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Ins)
7
+
8
+ generate(File.join(fixture_dir, 'ins.txt'), md)
9
+ end
@@ -0,0 +1,9 @@
1
+ fixture_dir = fixture_path('mark/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'markdown-it-mark' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Mark)
7
+
8
+ generate(File.join(fixture_dir, 'mark.txt'), md)
9
+ end
@@ -0,0 +1,6 @@
1
+ # make sure to have `--require spec_helper` in `.rspec` to have the
2
+ # spec_helper.rb included automatically in spec files
3
+ require 'byebug'
4
+ require 'benchmark'
5
+ require 'motion-markdown-it-plugins'
6
+ require 'testgen_helper'
@@ -0,0 +1,9 @@
1
+ fixture_dir = fixture_path('sub/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'markdown-it-sub' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Sub)
7
+
8
+ generate(File.join(fixture_dir, 'sub.txt'), md)
9
+ end
@@ -0,0 +1,9 @@
1
+ fixture_dir = fixture_path('sup/fixtures')
2
+
3
+ #------------------------------------------------------------------------------
4
+ describe 'markdown-it-sup' do
5
+ md = MarkdownIt::Parser.new
6
+ md.use(MotionMarkdownItPlugins::Sup)
7
+
8
+ generate(File.join(fixture_dir, 'sup.txt'), md)
9
+ end
@@ -0,0 +1,80 @@
1
+ #------------------------------------------------------------------------------
2
+ def fixture_path(relative_path)
3
+ main_spec_dir = File.dirname(__FILE__)
4
+ fixture_dir = File.join(main_spec_dir, relative_path)
5
+ end
6
+
7
+ #------------------------------------------------------------------------------
8
+ def generate(datafile, parser)
9
+ tests = get_tests(datafile)
10
+
11
+ if ENV['example']
12
+ define_test(tests[ENV['example'].to_i - 1], parser, true)
13
+ else
14
+ tests.each do |t|
15
+ define_test(t, parser)
16
+ end
17
+ end
18
+ end
19
+
20
+ #------------------------------------------------------------------------------
21
+ def get_tests(specfile)
22
+ line_number = 0
23
+ start_line = 0
24
+ end_line = 0
25
+ example_number = 0
26
+ markdown_lines = []
27
+ html_lines = []
28
+ state = 0 # 0 regular text, 1 markdown example, 2 html output
29
+ headertext = ''
30
+ tests = []
31
+ header_re = /#+ /
32
+ filename = File.basename(specfile)
33
+
34
+ File.open(specfile) do |specf|
35
+ specf.each_line do |line|
36
+ line_number += 1
37
+ if state == 0 && header_re =~ line
38
+ headertext = line.gsub(header_re, '').strip
39
+ end
40
+ if line.strip == "."
41
+ state = (state + 1) % 3
42
+ if state == 0
43
+ example_number += 1
44
+ end_line = line_number
45
+ tests << {
46
+ markdown: markdown_lines.join.gsub('→',"\t"),
47
+ html: html_lines.join,
48
+ example: example_number,
49
+ start_line: start_line,
50
+ end_line: end_line,
51
+ section: headertext,
52
+ filename: filename}
53
+ start_line = 0
54
+ markdown_lines = []
55
+ html_lines = []
56
+ end
57
+ elsif state == 1
58
+ if start_line == 0
59
+ start_line = line_number - 1
60
+ end
61
+ markdown_lines << line
62
+ elsif state == 2
63
+ html_lines << line
64
+ end
65
+ end
66
+ end
67
+ return tests
68
+ end
69
+
70
+ #------------------------------------------------------------------------------
71
+ def define_test(testcase, parser, debug_tokens = false)
72
+
73
+ it "#{testcase[:filename]} #{testcase[:section]} (#{testcase[:example].to_s}/#{testcase[:start_line]}-#{testcase[:end_line]}) with markdown:\n#{testcase[:markdown]}" do
74
+ if debug_tokens
75
+ parser.parse(testcase[:markdown], { references: {} }).each {|token| pp token.to_json}
76
+ end
77
+ expect(parser.render(testcase[:markdown])).to eq testcase[:html]
78
+ end
79
+
80
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-markdown-it-plugins
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brett Walker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: motion-markdown-it
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ description: Plugins for use with motion-markdown-it
28
+ email: github@digitalmoksha.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.md
34
+ - lib/motion-markdown-it-plugins.rb
35
+ - lib/motion-markdown-it-plugins/abbr/abbr.rb
36
+ - lib/motion-markdown-it-plugins/checkbox_replace/checkbox_replace.rb
37
+ - lib/motion-markdown-it-plugins/container/container.rb
38
+ - lib/motion-markdown-it-plugins/deflist/deflist.rb
39
+ - lib/motion-markdown-it-plugins/ins/ins.rb
40
+ - lib/motion-markdown-it-plugins/mark/mark.rb
41
+ - lib/motion-markdown-it-plugins/sub/sub.rb
42
+ - lib/motion-markdown-it-plugins/sup/sup.rb
43
+ - lib/motion-markdown-it-plugins/version.rb
44
+ - spec/abbr/abbr_spec.rb
45
+ - spec/checkbox_replace/checkbox_replace_spec.rb
46
+ - spec/container/api_spec.rb
47
+ - spec/container/default_spec.rb
48
+ - spec/container/misc_spec.rb
49
+ - spec/deflist/deflist_spec.rb
50
+ - spec/ins/ins_spec.rb
51
+ - spec/mark/mark_spec.rb
52
+ - spec/spec_helper.rb
53
+ - spec/sub/sub_spec.rb
54
+ - spec/sup/sup_spec.rb
55
+ - spec/testgen_helper.rb
56
+ homepage: https://github.com/digitalmoksha/motion-markdown-it-plugins
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.4.5
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Plugins for motion-markdown-it
80
+ test_files:
81
+ - spec/abbr/abbr_spec.rb
82
+ - spec/checkbox_replace/checkbox_replace_spec.rb
83
+ - spec/container/api_spec.rb
84
+ - spec/container/default_spec.rb
85
+ - spec/container/misc_spec.rb
86
+ - spec/deflist/deflist_spec.rb
87
+ - spec/ins/ins_spec.rb
88
+ - spec/mark/mark_spec.rb
89
+ - spec/spec_helper.rb
90
+ - spec/sub/sub_spec.rb
91
+ - spec/sup/sup_spec.rb
92
+ - spec/testgen_helper.rb