reverse_adoc 0.3.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +4 -3
  3. data/Gemfile +1 -1
  4. data/Rakefile +7 -7
  5. data/exe/reverse_adoc +11 -11
  6. data/exe/w2a +15 -16
  7. data/lib/reverse_adoc/cleaner.rb +17 -18
  8. data/lib/reverse_adoc/config.rb +7 -7
  9. data/lib/reverse_adoc/converters/a.rb +24 -24
  10. data/lib/reverse_adoc/converters/aside.rb +6 -4
  11. data/lib/reverse_adoc/converters/audio.rb +16 -21
  12. data/lib/reverse_adoc/converters/base.rb +79 -5
  13. data/lib/reverse_adoc/converters/blockquote.rb +16 -7
  14. data/lib/reverse_adoc/converters/br.rb +5 -1
  15. data/lib/reverse_adoc/converters/bypass.rb +38 -34
  16. data/lib/reverse_adoc/converters/code.rb +42 -1
  17. data/lib/reverse_adoc/converters/div.rb +7 -3
  18. data/lib/reverse_adoc/converters/drop.rb +6 -2
  19. data/lib/reverse_adoc/converters/em.rb +44 -7
  20. data/lib/reverse_adoc/converters/figure.rb +10 -6
  21. data/lib/reverse_adoc/converters/h.rb +19 -11
  22. data/lib/reverse_adoc/converters/head.rb +7 -2
  23. data/lib/reverse_adoc/converters/hr.rb +5 -1
  24. data/lib/reverse_adoc/converters/ignore.rb +6 -2
  25. data/lib/reverse_adoc/converters/img.rb +29 -19
  26. data/lib/reverse_adoc/converters/li.rb +6 -13
  27. data/lib/reverse_adoc/converters/mark.rb +11 -2
  28. data/lib/reverse_adoc/converters/math.rb +13 -2
  29. data/lib/reverse_adoc/converters/ol.rb +44 -26
  30. data/lib/reverse_adoc/converters/p.rb +13 -7
  31. data/lib/reverse_adoc/converters/pass_through.rb +5 -1
  32. data/lib/reverse_adoc/converters/pre.rb +23 -10
  33. data/lib/reverse_adoc/converters/q.rb +6 -2
  34. data/lib/reverse_adoc/converters/strong.rb +41 -6
  35. data/lib/reverse_adoc/converters/sub.rb +6 -2
  36. data/lib/reverse_adoc/converters/sup.rb +6 -2
  37. data/lib/reverse_adoc/converters/table.rb +28 -23
  38. data/lib/reverse_adoc/converters/td.rb +32 -16
  39. data/lib/reverse_adoc/converters/text.rb +19 -19
  40. data/lib/reverse_adoc/converters/th.rb +4 -6
  41. data/lib/reverse_adoc/converters/tr.rb +7 -7
  42. data/lib/reverse_adoc/converters/video.rb +16 -23
  43. data/lib/reverse_adoc/converters.rb +2 -3
  44. data/lib/reverse_adoc/html_converter.rb +48 -43
  45. data/lib/reverse_adoc/version.rb +1 -1
  46. data/lib/reverse_adoc.rb +9 -9
  47. data/reverse_adoc.gemspec +6 -3
  48. data/spec/assets/basic.html +3 -0
  49. data/spec/bin/reverse_adoc_spec.rb +9 -8
  50. data/spec/bin/w2a_spec.rb +12 -12
  51. data/spec/components/anchors_spec.rb +18 -12
  52. data/spec/components/basic_spec.rb +28 -14
  53. data/spec/components/code_spec.rb +2 -4
  54. data/spec/components/escapables_spec.rb +4 -6
  55. data/spec/components/from_the_wild_spec.rb +2 -4
  56. data/spec/components/html_fragment_spec.rb +2 -3
  57. data/spec/components/lists_spec.rb +12 -8
  58. data/spec/components/paragraphs_spec.rb +2 -3
  59. data/spec/components/quotation_spec.rb +5 -5
  60. data/spec/components/tables_spec.rb +22 -11
  61. data/spec/components/unknown_tags_spec.rb +13 -10
  62. data/spec/lib/reverse_adoc/cleaner_spec.rb +70 -71
  63. data/spec/lib/reverse_adoc/config_spec.rb +5 -6
  64. data/spec/lib/reverse_adoc/converters/aside_spec.rb +2 -3
  65. data/spec/lib/reverse_adoc/converters/audio_spec.rb +3 -5
  66. data/spec/lib/reverse_adoc/converters/blockquote_spec.rb +5 -6
  67. data/spec/lib/reverse_adoc/converters/br_spec.rb +2 -2
  68. data/spec/lib/reverse_adoc/converters/code_spec.rb +3 -5
  69. data/spec/lib/reverse_adoc/converters/div_spec.rb +3 -5
  70. data/spec/lib/reverse_adoc/converters/figure_spec.rb +2 -4
  71. data/spec/lib/reverse_adoc/converters/img_spec.rb +5 -7
  72. data/spec/lib/reverse_adoc/converters/li_spec.rb +2 -4
  73. data/spec/lib/reverse_adoc/converters/mark_spec.rb +4 -4
  74. data/spec/lib/reverse_adoc/converters/p_spec.rb +2 -3
  75. data/spec/lib/reverse_adoc/converters/pre_spec.rb +8 -9
  76. data/spec/lib/reverse_adoc/converters/q_spec.rb +3 -3
  77. data/spec/lib/reverse_adoc/converters/strong_spec.rb +9 -8
  78. data/spec/lib/reverse_adoc/converters/text_spec.rb +21 -16
  79. data/spec/lib/reverse_adoc/converters/video_spec.rb +7 -9
  80. data/spec/lib/reverse_adoc/converters_spec.rb +9 -6
  81. data/spec/lib/reverse_adoc.rb +25 -25
  82. data/spec/spec_helper.rb +11 -11
  83. data/spec/support/shell_helpers.rb +1 -1
  84. metadata +20 -6
@@ -1,62 +1,67 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ReverseAdoc::Converters::Text do
4
-
5
4
  let(:converter) { ReverseAdoc::Converters::Text.new }
6
5
 
7
- it 'treats newline within text as a single whitespace' do
6
+ it "treats newline within text as a single whitespace" do
8
7
  input = node_for("<p>foo\nbar</p>")
9
8
  result = converter.convert(input)
10
- expect(result).to eq 'foo bar'
9
+ expect(result).to eq "foo bar"
11
10
  end
12
11
 
13
- it 'removes leading newlines' do
12
+ it "removes leading newlines" do
14
13
  input = node_for("<p>\n\nfoo bar</p>")
15
14
  result = converter.convert(input)
16
- expect(result).to eq 'foo bar'
15
+ expect(result).to eq "foo bar"
17
16
  end
18
17
 
19
- it 'removes trailing newlines' do
18
+ it "removes trailing newlines" do
20
19
  input = node_for("<p>foo bar\n\n</p>")
21
20
  result = converter.convert(input)
22
- expect(result).to eq 'foo bar'
21
+ expect(result).to eq "foo bar"
23
22
  end
24
23
 
25
- it 'keeps nbsps' do
24
+ it "keeps nbsps" do
26
25
  input = node_for("<p>foo\u00A0bar \u00A0</p>")
27
26
  result = converter.convert(input)
28
27
  expect(result).to eq "foo&nbsp;bar &nbsp;"
29
28
  end
30
29
 
31
- it 'keeps escaped HTML-ish characters' do
30
+ it "keeps HTML characters" do
32
31
  input = node_for("<p>&lt;foo&gt;</p>")
33
32
  result = converter.convert(input)
34
- expect(result).to eq '\<foo\>'
33
+ expect(result).to eq "<foo>"
34
+ end
35
+
36
+ it "escapes Link like characters in text" do
37
+ input = node_for("<p>&lt;&lt;foo&gt;&gt;</p>")
38
+ result = converter.convert(input)
39
+ expect(result).to eq '\<<foo>>'
35
40
  end
36
41
 
37
- context 'within backticks' do
42
+ context "within backticks" do
38
43
  it "preserves single underscores" do
39
44
  input = node_for("<p>`foo_bar`</p>")
40
45
  result = converter.convert(input)
41
- expect(result).to eq '`foo_bar`'
46
+ expect(result).to eq "`foo_bar`"
42
47
  end
43
48
 
44
49
  it "preserves multiple underscores" do
45
50
  input = node_for("<p>`foo_bar __example__`</p>")
46
51
  result = converter.convert(input)
47
- expect(result).to eq '`foo_bar __example__`'
52
+ expect(result).to eq "`foo_bar __example__`"
48
53
  end
49
54
 
50
55
  it "preserves single asterisks" do
51
56
  input = node_for("<p>`def foo *args`</p>")
52
57
  result = converter.convert(input)
53
- expect(result).to eq '`def foo *args`'
58
+ expect(result).to eq "`def foo *args`"
54
59
  end
55
60
 
56
61
  it "preserves multiple asterisks" do
57
62
  input = node_for("<p>`def foo 2***3`</p>")
58
63
  result = converter.convert(input)
59
- expect(result).to eq '`def foo 2***3`'
64
+ expect(result).to eq "`def foo 2***3`"
60
65
  end
61
66
  end
62
67
  end
@@ -1,17 +1,15 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ReverseAdoc::Converters::Video do
4
-
5
4
  let(:converter) { ReverseAdoc::Converters::Video.new }
6
5
 
7
- it 'converts audio with no attributes' do
8
- node = node_for("<audio src='example.mp3'/>")
9
- expect(converter.convert(node)).to include "video::example.mp3[]"
6
+ it "converts video with no attributes" do
7
+ node = node_for("<video src='example.mp4'/>")
8
+ expect(converter.convert(node)).to include "video::example.mp4[]"
10
9
  end
11
10
 
12
- it 'converts audio with full set of attributes' do
13
- node = node_for("<audio id='A' src='example.mp3' loop='loop'/>")
14
- expect(converter.convert(node)).to include "[[A]]\nvideo::example.mp3[options=\"loop\"]"
11
+ it "converts video with full set of attributes" do
12
+ node = node_for("<video id='A' src='example.mp4' loop='loop'/>")
13
+ expect(converter.convert(node)).to include "[[A]]\nvideo::example.mp4[options=\"loop\"]"
15
14
  end
16
-
17
15
  end
@@ -1,19 +1,22 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ReverseAdoc::Converters do
4
4
  before { ReverseAdoc.config.unknown_tags = :raise }
5
5
  let(:converters) { ReverseAdoc::Converters }
6
6
 
7
- describe '.register and .unregister' do
8
- it 'adds a converter mapping to the list' do
9
- expect { converters.lookup(:foo) }.to raise_error ReverseAdoc::UnknownTagError
7
+ describe ".register and .unregister" do
8
+ it "adds a converter mapping to the list" do
9
+ expect do
10
+ converters.lookup(:foo)
11
+ end.to raise_error ReverseAdoc::UnknownTagError
10
12
 
11
13
  converters.register :foo, :foobar
12
14
  expect(converters.lookup(:foo)).to eq :foobar
13
15
 
14
16
  converters.unregister :foo
15
- expect { converters.lookup(:foo) }.to raise_error ReverseAdoc::UnknownTagError
17
+ expect do
18
+ converters.lookup(:foo)
19
+ end.to raise_error ReverseAdoc::UnknownTagError
16
20
  end
17
21
  end
18
-
19
22
  end
@@ -1,49 +1,49 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe ReverseAdoc do
4
- let(:input) { File.read('spec/assets/minimum.html') }
4
+ let(:input) { File.read("spec/assets/minimum.html") }
5
5
  let(:document) { Nokogiri::HTML(input) }
6
6
 
7
- it 'parses nokogiri documents' do
7
+ it "parses nokogiri documents" do
8
8
  expect { ReverseAdoc.convert(document) }.not_to raise_error
9
9
  end
10
10
 
11
- it 'parses nokogiri elements' do
11
+ it "parses nokogiri elements" do
12
12
  expect { ReverseAdoc.convert(document.root) }.not_to raise_error
13
13
  end
14
14
 
15
- it 'parses string input' do
15
+ it "parses string input" do
16
16
  expect { ReverseAdoc.convert(input) }.not_to raise_error
17
17
  end
18
18
 
19
- it 'behaves in a sane way when root element is nil' do
20
- expect(ReverseAdoc.convert(nil)).to eq ''
19
+ it "behaves in a sane way when root element is nil" do
20
+ expect(ReverseAdoc.convert(nil)).to eq ""
21
21
  end
22
22
 
23
- describe '#config' do
24
- it 'stores a given configuration option' do
23
+ describe "#config" do
24
+ it "stores a given configuration option" do
25
25
  ReverseAdoc.config.tag_border = true
26
26
  expect(ReverseAdoc.config.tag_border).to eq true
27
27
  end
28
28
 
29
- it 'can be used as a block configurator as well' do
29
+ it "can be used as a block configurator as well" do
30
30
  ReverseAdoc.config do |config|
31
- expect(config.tag_border).to eq ' '
31
+ expect(config.tag_border).to eq " "
32
32
  config.tag_border = true
33
33
  end
34
34
  expect(ReverseAdoc.config.tag_border).to eq true
35
35
  end
36
36
  end
37
37
 
38
- shared_examples 'converting source with external images included' do |result|
38
+ shared_examples "converting source with external images included" do |result|
39
39
  let(:temp_dir) do
40
40
  Pathname.new(ReverseAdoc.config.destination).dirname
41
41
  end
42
- let(:images_folder) { File.join(temp_dir, 'images') }
42
+ let(:images_folder) { File.join(temp_dir, "images") }
43
43
 
44
44
  before do
45
45
  ReverseAdoc.config.destination = File.join(Dir.mktmpdir,
46
- 'output.html')
46
+ "output.html")
47
47
  ReverseAdoc.config.sourcedir = Dir.mktmpdir
48
48
  ReverseAdoc.config.external_images = true
49
49
  end
@@ -52,7 +52,7 @@ describe ReverseAdoc do
52
52
  FileUtils.rm_rf(temp_dir)
53
53
  end
54
54
 
55
- it 'Creates local files from external URI' do
55
+ it "Creates local files from external URI" do
56
56
  expect { convert }
57
57
  .to(change do
58
58
  Dir["#{images_folder}/*gif"]
@@ -64,27 +64,27 @@ describe ReverseAdoc do
64
64
 
65
65
  # TODO: fix github actions integration with libreoffice, currently it hangs
66
66
  # when trying to use soffice binary
67
- unless Gem::Platform.local.os == 'darwin' && !ENV['GITHUB_ACTION'].nil?
68
- context 'when docx file input' do
67
+ unless Gem::Platform.local.os == "darwin" && !ENV["GITHUB_ACTION"].nil?
68
+ context "when docx file input" do
69
69
  subject(:convert) do
70
70
  ReverseAdoc.convert(
71
71
  ReverseAdoc.cleaner.preprocess_word_html(input.document.html),
72
- WordToMarkdown::REVERSE_MARKDOWN_OPTIONS
72
+ WordToMarkdown::REVERSE_MARKDOWN_OPTIONS,
73
73
  )
74
74
  end
75
75
  let(:input) do
76
- WordToMarkdown.new('spec/assets/external_images.docx',
76
+ WordToMarkdown.new("spec/assets/external_images.docx",
77
77
  ReverseAdoc.config.sourcedir)
78
78
  end
79
- it_behaves_like 'converting source with external images included',
80
- ['001.gif', '002.gif']
79
+ it_behaves_like "converting source with external images included",
80
+ ["001.gif", "002.gif"]
81
81
  end
82
82
  end
83
83
 
84
- context 'when html file input' do
84
+ context "when html file input" do
85
85
  subject(:convert) { ReverseAdoc.convert(input) }
86
- let(:input) { File.read('spec/assets/external_images.html') }
87
- it_behaves_like 'converting source with external images included',
88
- ['001.gif']
86
+ let(:input) { File.read("spec/assets/external_images.html") }
87
+ it_behaves_like "converting source with external images included",
88
+ ["001.gif"]
89
89
  end
90
90
  end
data/spec/spec_helper.rb CHANGED
@@ -1,18 +1,18 @@
1
- require 'simplecov'
1
+ require "simplecov"
2
2
 
3
- SimpleCov.profiles.define 'gem' do
4
- add_filter '/spec/'
5
- add_filter '/autotest/'
6
- add_group 'Libraries', '/lib/'
3
+ SimpleCov.profiles.define "gem" do
4
+ add_filter "/spec/"
5
+ add_filter "/autotest/"
6
+ add_group "Libraries", "/lib/"
7
7
  end
8
- SimpleCov.start 'gem'
8
+ SimpleCov.start "gem"
9
9
 
10
- require 'reverse_adoc'
11
- require 'reverse_adoc/html_converter'
12
- require 'word-to-markdown'
10
+ require "reverse_adoc"
11
+ require "reverse_adoc/html_converter"
12
+ require "word-to-markdown"
13
13
 
14
- Dir[File.join('spec', 'support', '**', '*.rb')]
15
- .each { |f| require File.join('.', f) }
14
+ Dir[File.join("spec", "support", "**", "*.rb")]
15
+ .each { |f| require File.join(".", f) }
16
16
 
17
17
  RSpec.configure do |config|
18
18
  config.after(:each) do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'open3'
3
+ require "open3"
4
4
 
5
5
  module ShellUtils
6
6
  class ShellExcutionError < StandardError; end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reverse_adoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-13 00:00:00.000000000 Z
11
+ date: 2024-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: coradoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: marcel
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +58,14 @@ dependencies:
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.12'
61
+ version: '1.13'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.12'
68
+ version: '1.13'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: codeclimate-test-reporter
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -275,14 +289,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
275
289
  requirements:
276
290
  - - ">="
277
291
  - !ruby/object:Gem::Version
278
- version: 2.5.0
292
+ version: 2.7.0
279
293
  required_rubygems_version: !ruby/object:Gem::Requirement
280
294
  requirements:
281
295
  - - ">="
282
296
  - !ruby/object:Gem::Version
283
297
  version: '0'
284
298
  requirements: []
285
- rubygems_version: 3.1.6
299
+ rubygems_version: 3.3.27
286
300
  signing_key:
287
301
  specification_version: 4
288
302
  summary: Generate AsciiDoc from HTML and Microsoft Word via CLI or library.