coradoc 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +35 -0
  3. data/{.docker/readme.md → README.Docker.adoc} +21 -25
  4. data/README.adoc +121 -0
  5. data/coradoc.gemspec +4 -0
  6. data/docker-compose.yml +14 -0
  7. data/exe/coradoc +5 -0
  8. data/exe/reverse_adoc +24 -34
  9. data/exe/w2a +16 -28
  10. data/lib/coradoc/cli.rb +105 -0
  11. data/lib/coradoc/converter.rb +145 -0
  12. data/lib/coradoc/document.rb +13 -0
  13. data/lib/coradoc/element/admonition.rb +5 -0
  14. data/lib/coradoc/element/attribute_list.rb +1 -1
  15. data/lib/coradoc/element/author.rb +4 -4
  16. data/lib/coradoc/element/bibliography.rb +24 -0
  17. data/lib/coradoc/element/bibliography_entry.rb +24 -0
  18. data/lib/coradoc/element/block/core.rb +6 -4
  19. data/lib/coradoc/element/block/example.rb +1 -0
  20. data/lib/coradoc/element/block/pass.rb +21 -0
  21. data/lib/coradoc/element/block/quote.rb +1 -1
  22. data/lib/coradoc/element/block/reviewer_comment.rb +19 -0
  23. data/lib/coradoc/element/block/side.rb +4 -2
  24. data/lib/coradoc/element/block/sourcecode.rb +1 -0
  25. data/lib/coradoc/element/block.rb +2 -0
  26. data/lib/coradoc/element/comment_block.rb +22 -0
  27. data/lib/coradoc/element/comment_line.rb +18 -0
  28. data/lib/coradoc/element/document_attributes.rb +8 -1
  29. data/lib/coradoc/element/header.rb +1 -1
  30. data/lib/coradoc/element/image/block_image.rb +8 -0
  31. data/lib/coradoc/element/image/core.rb +6 -5
  32. data/lib/coradoc/element/include.rb +18 -0
  33. data/lib/coradoc/element/inline/citation.rb +24 -0
  34. data/lib/coradoc/element/inline/cross_reference.rb +29 -8
  35. data/lib/coradoc/element/inline.rb +1 -0
  36. data/lib/coradoc/element/list/core.rb +10 -2
  37. data/lib/coradoc/element/list_item.rb +7 -5
  38. data/lib/coradoc/element/paragraph.rb +8 -5
  39. data/lib/coradoc/element/revision.rb +1 -1
  40. data/lib/coradoc/element/section.rb +6 -4
  41. data/lib/coradoc/element/table.rb +2 -2
  42. data/lib/coradoc/element/tag.rb +19 -0
  43. data/lib/coradoc/element/term.rb +21 -0
  44. data/lib/coradoc/element/text_element.rb +9 -1
  45. data/lib/coradoc/element/title.rb +1 -1
  46. data/lib/coradoc/generator.rb +2 -0
  47. data/lib/coradoc/input/adoc.rb +28 -0
  48. data/lib/coradoc/input/docx.rb +35 -0
  49. data/lib/coradoc/{reverse_adoc → input/html}/README.adoc +9 -9
  50. data/lib/coradoc/{reverse_adoc → input/html}/cleaner.rb +18 -4
  51. data/lib/coradoc/input/html/config.rb +75 -0
  52. data/lib/coradoc/{reverse_adoc → input/html}/converters/a.rb +1 -1
  53. data/lib/coradoc/{reverse_adoc → input/html}/converters/aside.rb +1 -1
  54. data/lib/coradoc/{reverse_adoc → input/html}/converters/audio.rb +1 -1
  55. data/lib/coradoc/{reverse_adoc → input/html}/converters/base.rb +1 -1
  56. data/lib/coradoc/{reverse_adoc → input/html}/converters/blockquote.rb +2 -2
  57. data/lib/coradoc/{reverse_adoc → input/html}/converters/br.rb +1 -1
  58. data/lib/coradoc/{reverse_adoc → input/html}/converters/bypass.rb +1 -1
  59. data/lib/coradoc/{reverse_adoc → input/html}/converters/code.rb +1 -1
  60. data/lib/coradoc/{reverse_adoc → input/html}/converters/div.rb +1 -1
  61. data/lib/coradoc/{reverse_adoc → input/html}/converters/dl.rb +1 -1
  62. data/lib/coradoc/{reverse_adoc → input/html}/converters/drop.rb +1 -1
  63. data/lib/coradoc/{reverse_adoc → input/html}/converters/em.rb +1 -1
  64. data/lib/coradoc/{reverse_adoc → input/html}/converters/figure.rb +1 -1
  65. data/lib/coradoc/{reverse_adoc → input/html}/converters/h.rb +1 -1
  66. data/lib/coradoc/{reverse_adoc → input/html}/converters/head.rb +1 -1
  67. data/lib/coradoc/{reverse_adoc → input/html}/converters/hr.rb +1 -1
  68. data/lib/coradoc/{reverse_adoc → input/html}/converters/ignore.rb +1 -1
  69. data/lib/coradoc/{reverse_adoc → input/html}/converters/img.rb +7 -7
  70. data/lib/coradoc/{reverse_adoc → input/html}/converters/li.rb +1 -1
  71. data/lib/coradoc/{reverse_adoc → input/html}/converters/mark.rb +1 -1
  72. data/lib/coradoc/{reverse_adoc → input/html}/converters/markup.rb +1 -1
  73. data/lib/coradoc/{reverse_adoc → input/html}/converters/math.rb +3 -3
  74. data/lib/coradoc/{reverse_adoc → input/html}/converters/ol.rb +1 -1
  75. data/lib/coradoc/{reverse_adoc → input/html}/converters/p.rb +1 -1
  76. data/lib/coradoc/{reverse_adoc → input/html}/converters/pass_through.rb +1 -1
  77. data/lib/coradoc/{reverse_adoc → input/html}/converters/pre.rb +1 -1
  78. data/lib/coradoc/{reverse_adoc → input/html}/converters/q.rb +1 -1
  79. data/lib/coradoc/{reverse_adoc → input/html}/converters/strong.rb +1 -1
  80. data/lib/coradoc/{reverse_adoc → input/html}/converters/sub.rb +1 -1
  81. data/lib/coradoc/{reverse_adoc → input/html}/converters/sup.rb +1 -1
  82. data/lib/coradoc/{reverse_adoc → input/html}/converters/table.rb +4 -4
  83. data/lib/coradoc/{reverse_adoc → input/html}/converters/td.rb +1 -1
  84. data/lib/coradoc/{reverse_adoc → input/html}/converters/text.rb +2 -2
  85. data/lib/coradoc/{reverse_adoc → input/html}/converters/th.rb +1 -1
  86. data/lib/coradoc/{reverse_adoc → input/html}/converters/tr.rb +1 -1
  87. data/lib/coradoc/{reverse_adoc → input/html}/converters/video.rb +1 -1
  88. data/lib/coradoc/input/html/converters.rb +57 -0
  89. data/lib/coradoc/input/html/errors.rb +12 -0
  90. data/lib/coradoc/{reverse_adoc → input/html}/html_converter.rb +37 -22
  91. data/lib/coradoc/{reverse_adoc → input/html}/plugin.rb +6 -6
  92. data/lib/coradoc/{reverse_adoc → input/html}/plugins/plateau.rb +3 -3
  93. data/lib/coradoc/{reverse_adoc → input/html}/postprocessor.rb +3 -3
  94. data/lib/coradoc/input/html.rb +59 -0
  95. data/lib/coradoc/input.rb +12 -0
  96. data/lib/coradoc/output/adoc.rb +17 -0
  97. data/lib/coradoc/output/coradoc_tree_debug.rb +19 -0
  98. data/lib/coradoc/output.rb +11 -0
  99. data/lib/coradoc/parser/asciidoc/admonition.rb +24 -0
  100. data/lib/coradoc/parser/asciidoc/attribute_list.rb +67 -0
  101. data/lib/coradoc/parser/asciidoc/base.rb +101 -13
  102. data/lib/coradoc/parser/asciidoc/bibliography.rb +30 -0
  103. data/lib/coradoc/parser/asciidoc/block.rb +82 -0
  104. data/lib/coradoc/parser/asciidoc/citation.rb +48 -0
  105. data/lib/coradoc/parser/asciidoc/content.rb +15 -120
  106. data/lib/coradoc/parser/asciidoc/document_attributes.rb +12 -5
  107. data/lib/coradoc/parser/asciidoc/header.rb +1 -4
  108. data/lib/coradoc/parser/asciidoc/inline.rb +72 -0
  109. data/lib/coradoc/parser/asciidoc/list.rb +81 -0
  110. data/lib/coradoc/parser/asciidoc/paragraph.rb +33 -0
  111. data/lib/coradoc/parser/asciidoc/section.rb +36 -31
  112. data/lib/coradoc/parser/asciidoc/table.rb +32 -0
  113. data/lib/coradoc/parser/asciidoc/term.rb +23 -0
  114. data/lib/coradoc/parser/base.rb +39 -4
  115. data/lib/coradoc/transformer.rb +353 -82
  116. data/lib/coradoc/util.rb +1 -1
  117. data/lib/coradoc/version.rb +1 -1
  118. data/lib/coradoc.rb +8 -5
  119. data/lib/reverse_adoc.rb +6 -6
  120. data/utils/parser_analyzer.rb +66 -0
  121. data/utils/round_trip.rb +37 -0
  122. metadata +112 -54
  123. data/.docker/Makefile +0 -35
  124. data/.docker/docker-compose.yml +0 -14
  125. data/Makefile +0 -1
  126. data/README.md +0 -73
  127. data/docker-compose.yml +0 -1
  128. data/lib/coradoc/reverse_adoc/config.rb +0 -73
  129. data/lib/coradoc/reverse_adoc/converters.rb +0 -55
  130. data/lib/coradoc/reverse_adoc/errors.rb +0 -10
  131. data/lib/coradoc/reverse_adoc.rb +0 -30
  132. /data/{.docker/Dockerfile → Dockerfile} +0 -0
  133. /data/lib/coradoc/{reverse_adoc → input/html}/LICENSE.txt +0 -0
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Li < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Mark < Markup
4
4
  def coradoc_class
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Markup < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,10 +1,10 @@
1
- # Unless run with Coradoc::ReverseAdoc.config.mathml2asciimath,
1
+ # Unless run with Coradoc::Input::HTML.config.mathml2asciimath,
2
2
  # this is cheating: we're injecting MathML into Asciidoctor, but
3
3
  # Asciidoctor only understands AsciiMath or LaTeX
4
4
 
5
5
  require "mathml2asciimath"
6
6
 
7
- module Coradoc::ReverseAdoc
7
+ module Coradoc::Input::HTML
8
8
  module Converters
9
9
  class Math < Base
10
10
  # FIXIT
@@ -14,7 +14,7 @@ module Coradoc::ReverseAdoc
14
14
 
15
15
  def convert(node, _state = {})
16
16
  stem = node.to_s.gsub(/\n/, " ")
17
- stem = MathML2AsciiMath.m2a(stem) if Coradoc::ReverseAdoc.config.mathml2asciimath
17
+ stem = MathML2AsciiMath.m2a(stem) if Coradoc::Input::HTML.config.mathml2asciimath
18
18
  unless stem.nil?
19
19
  stem = stem.gsub(/\[/, "\\[").gsub(/\]/, "\\]").gsub(
20
20
  /\(\(([^\)]+)\)\)/, "(\\1)"
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Ol < Base
4
4
  # FIXIT
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class P < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class PassThrough < Base
4
4
  def to_coradoc(node, _state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Pre < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Q < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Strong < Markup
4
4
  def coradoc_class
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Sub < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Sup < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,12 +1,12 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Table < Base
4
4
  def to_coradoc(node, state = {})
5
5
  id = node["id"]
6
6
  title = extract_title(node)
7
- attrs = style(node)
7
+ attributes = style(node)
8
8
  content = treat_children_coradoc(node, state)
9
- Coradoc::Element::Table.new(title, content, { id: id, attrs: attrs })
9
+ Coradoc::Element::Table.new(title, content, { id: id, attributes: attributes })
10
10
  end
11
11
 
12
12
  def extract_title(node)
@@ -238,7 +238,7 @@ module Coradoc::ReverseAdoc
238
238
  end
239
239
  end
240
240
 
241
- document_width = Coradoc::ReverseAdoc.config.doc_width.to_r
241
+ document_width = Coradoc::Input::HTML.config.doc_width.to_r
242
242
 
243
243
  column_sizes += [nil] * (cpr.first - column_sizes.length)
244
244
 
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Td < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,10 +1,10 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Text < Base
4
4
  def to_coradoc(node, state = {})
5
5
  return treat_empty(node, state) if node.text.strip.empty?
6
6
 
7
- Coradoc::Element::TextElement.new(node.text)
7
+ Coradoc::Element::TextElement.new(node.text, html_cleanup: true)
8
8
  end
9
9
 
10
10
  private
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Th < Td
4
4
  def cellstyle(node)
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Tr < Base
4
4
  def to_coradoc(node, state = {})
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  module Converters
3
3
  class Video < Base
4
4
  def to_coradoc(node, _state = {})
@@ -0,0 +1,57 @@
1
+ module Coradoc
2
+ module Input::HTML
3
+ module Converters
4
+ def self.register(tag_name, converter)
5
+ @@converters ||= {}
6
+ @@converters[tag_name.to_sym] = converter
7
+ end
8
+
9
+ def self.unregister(tag_name)
10
+ @@converters.delete(tag_name.to_sym)
11
+ end
12
+
13
+ def self.lookup(tag_name)
14
+ converter = @@converters[tag_name.to_sym] || default_converter(tag_name)
15
+ converter = converter.new if converter.respond_to? :new
16
+ converter
17
+ end
18
+
19
+ # Note: process won't run plugin hooks
20
+ def self.process(node, state)
21
+ node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
22
+ return node.map { |i| process(i, state) }.join if node.is_a? Array
23
+
24
+ lookup(node.name).convert(node, state)
25
+ end
26
+
27
+ def self.process_coradoc(node, state)
28
+ node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
29
+ return node.map { |i| process_coradoc(i, state) } if node.is_a? Array
30
+
31
+ plugins = state[:plugin_instances] || {}
32
+ process = proc { lookup(node.name).to_coradoc(node, state) }
33
+ plugins.each do |i|
34
+ prev_process = process
35
+ process = proc { i.html_tree_run_hooks(node, state, &prev_process) }
36
+ end
37
+ process.(node, state)
38
+ end
39
+
40
+ def self.default_converter(tag_name)
41
+ case Coradoc::Input::HTML.config.unknown_tags.to_sym
42
+ when :pass_through
43
+ Coradoc::Input::HTML::Converters::PassThrough.new
44
+ when :drop
45
+ Coradoc::Input::HTML::Converters::Drop.new
46
+ when :bypass
47
+ Coradoc::Input::HTML::Converters::Bypass.new
48
+ when :raise
49
+ raise UnknownTagError, "unknown tag: #{tag_name}"
50
+ else
51
+ raise InvalidConfigurationError,
52
+ "unknown value #{Coradoc::Input::HTML.config.unknown_tags.inspect} for Coradoc::Input::HTML.config.unknown_tags"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ module Coradoc
2
+ module Input::HTML
3
+ class Error < StandardError
4
+ end
5
+
6
+ class UnknownTagError < Error
7
+ end
8
+
9
+ class InvalidConfigurationError < Error
10
+ end
11
+ end
12
+ end
@@ -37,12 +37,11 @@ require_relative "converters/video"
37
37
  require_relative "converters/math"
38
38
 
39
39
  module Coradoc
40
- module ReverseAdoc
40
+ module Input::HTML
41
41
  class HtmlConverter
42
42
  def self.to_coradoc(input, options = {})
43
- plugin_instances = options.delete(:plugin_instances)
44
- ReverseAdoc.config.with(options) do
45
- plugin_instances ||= Coradoc::ReverseAdoc.config.plugins.map(&:new)
43
+ Input::HTML.config.with(options) do
44
+ plugin_instances = prepare_plugin_instances(options)
46
45
 
47
46
  root = track_time "Loading input HTML document" do
48
47
  case input
@@ -85,52 +84,68 @@ module Coradoc
85
84
  end
86
85
  end
87
86
 
87
+ options[:plugin_instances] = plugin_instances unless options.frozen?
88
+
88
89
  coradoc
89
90
  end
90
91
  end
91
92
 
92
93
  def self.convert(input, options = {})
93
- ReverseAdoc.config.with(options) do
94
- plugin_instances = Coradoc::ReverseAdoc.config.plugins.map(&:new)
95
-
96
- options = options.merge(plugin_instances: plugin_instances)
94
+ Input::HTML.config.with(options) do
95
+ plugin_instances = prepare_plugin_instances(options)
97
96
 
98
97
  coradoc = to_coradoc(input, options)
99
98
 
100
99
  if coradoc.is_a?(Hash)
101
100
  coradoc.to_h do |file, tree|
102
101
  track_time "Converting file #{file || 'main'}" do
103
- [file, convert_single_coradoc_to_adoc(file, tree, plugin_instances)]
102
+ [file,
103
+ convert_single_coradoc_to_adoc(file, tree, options)]
104
104
  end
105
105
  end
106
106
  else
107
- convert_single_coradoc_to_adoc(nil, coradoc, plugin_instances)
107
+ convert_single_coradoc_to_adoc(nil, coradoc, options)
108
108
  end
109
109
  end
110
110
  end
111
111
 
112
- def self.convert_single_coradoc_to_adoc(_file, coradoc, plugin_instances)
112
+ def self.convert_single_coradoc_to_adoc(_file, coradoc, options)
113
+ plugin_instances = prepare_plugin_instances(options)
114
+
113
115
  result = track_time "Converting Coradoc tree into Asciidoc" do
114
116
  Coradoc::Generator.gen_adoc(coradoc)
115
117
  end
116
- result = track_time "Cleaning up the result" do
117
- ReverseAdoc.cleaner.tidy(result)
118
- end
119
- plugin_instances.each do |plugin|
120
- if plugin.respond_to?(:postprocess_asciidoc_string)
121
- plugin.asciidoc_string = result
122
- track_time "Postprocessing AsciiDoc string with #{plugin.name} plugin" do
123
- plugin.postprocess_asciidoc_string
118
+ cleanup_result(result, options)
119
+ end
120
+
121
+ def self.cleanup_result(result, options)
122
+ Input::HTML.config.with(options) do
123
+ plugin_instances = prepare_plugin_instances(options)
124
+
125
+ result = track_time "Cleaning up the result" do
126
+ Input::HTML.cleaner.tidy(result)
127
+ end
128
+ plugin_instances.each do |plugin|
129
+ if plugin.respond_to?(:postprocess_asciidoc_string)
130
+ plugin.asciidoc_string = result
131
+ track_time "Postprocessing AsciiDoc string with #{plugin.name} plugin" do
132
+ plugin.postprocess_asciidoc_string
133
+ end
134
+ result = plugin.asciidoc_string
124
135
  end
125
- result = plugin.asciidoc_string
126
136
  end
137
+
138
+ result
127
139
  end
128
- result
140
+ end
141
+
142
+ def self.prepare_plugin_instances(options)
143
+ options[:plugin_instances] || Coradoc::Input::HTML.config.plugins.map(&:new)
129
144
  end
130
145
 
131
146
  @track_time_indentation = 0
132
147
  def self.track_time(task)
133
- if ReverseAdoc.config.track_time
148
+ if Input::HTML.config.track_time
134
149
  warn " " * @track_time_indentation +
135
150
  "* #{task} is starting..."
136
151
  @track_time_indentation += 1
@@ -1,9 +1,9 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  class Plugin
3
3
  #### Plugin system general
4
4
 
5
5
  # Allow building plugins with a shorthand syntax:
6
- # plugin = Coradoc::ReverseAdoc::Plugin.new do
6
+ # plugin = Coradoc::Input::HTML::Plugin.new do
7
7
  # def name = "Test"
8
8
  # end
9
9
 
@@ -53,12 +53,12 @@ module Coradoc::ReverseAdoc
53
53
  end
54
54
  end
55
55
 
56
- def html_tree_process_to_coradoc(tree, state={})
57
- Coradoc::ReverseAdoc::Converters.process_coradoc(tree, state)
56
+ def html_tree_process_to_coradoc(tree, state = {})
57
+ Coradoc::Input::HTML::Converters.process_coradoc(tree, state)
58
58
  end
59
59
 
60
- def html_tree_process_to_adoc(tree, state={})
61
- Coradoc::ReverseAdoc::Converters.process(tree, state)
60
+ def html_tree_process_to_adoc(tree, state = {})
61
+ Coradoc::Input::HTML::Converters.process(tree, state)
62
62
  end
63
63
 
64
64
  def html_tree_preview
@@ -1,10 +1,10 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  class Plugin
3
3
  # This plugin enhances documents from the PLATEAU project
4
4
  # to extract more data.
5
5
  #
6
6
  # Usage:
7
- # reverse_adoc -rcoradoc/reverse_adoc/plugins/plateau
7
+ # reverse_adoc -rcoradoc/input/html/plugins/plateau
8
8
  # --external-images -u raise --output _out/index.adoc index.html
9
9
  class Plateau < Plugin
10
10
  def name
@@ -203,4 +203,4 @@ module Coradoc::ReverseAdoc
203
203
  end
204
204
  end
205
205
 
206
- Coradoc::ReverseAdoc.config.plugins << Coradoc::ReverseAdoc::Plugin::Plateau
206
+ Coradoc::Input::HTML.config.plugins << Coradoc::Input::HTML::Plugin::Plateau
@@ -1,4 +1,4 @@
1
- module Coradoc::ReverseAdoc
1
+ module Coradoc::Input::HTML
2
2
  # Postprocessor's aim is to convert a Coradoc tree from
3
3
  # a mess that has been created from HTML into a tree that
4
4
  # is compatible with what we would get out of Coradoc, if
@@ -73,7 +73,7 @@ module Coradoc::ReverseAdoc
73
73
  end
74
74
 
75
75
  def split_sections
76
- max_level = Coradoc::ReverseAdoc.config.split_sections
76
+ max_level = Coradoc::Input::HTML.config.split_sections
77
77
 
78
78
  return unless max_level
79
79
 
@@ -111,7 +111,7 @@ module Coradoc::ReverseAdoc
111
111
  # we can compute numbers
112
112
  previous_sections[elem] = parent_sections[title.level_int]
113
113
  parent_sections[title.level_int] = elem
114
- parent_sections[(title.level_int+1)..nil] = nil
114
+ parent_sections[(title.level_int + 1)..nil] = nil
115
115
 
116
116
  elem
117
117
  else
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest"
4
+ require "nokogiri"
5
+ require "coradoc/input"
6
+ require_relative "html/errors"
7
+ require_relative "html/cleaner"
8
+ require_relative "html/config"
9
+ require_relative "html/converters"
10
+ require_relative "html/converters/base"
11
+ require_relative "html/html_converter"
12
+ require_relative "html/plugin"
13
+ require_relative "html/postprocessor"
14
+
15
+ module Coradoc
16
+ module Input::HTML
17
+ def self.convert(input, options = {})
18
+ Coradoc::Input::HTML::HtmlConverter.convert(input, options)
19
+ end
20
+
21
+ def self.to_coradoc(input, options = {})
22
+ Input::HTML::HtmlConverter.to_coradoc(input, options)
23
+ end
24
+
25
+ def self.config
26
+ @config ||= Config.new
27
+ yield @config if block_given?
28
+ @config
29
+ end
30
+
31
+ def self.cleaner
32
+ @cleaner ||= Cleaner.new
33
+ end
34
+
35
+ def self.processor_id
36
+ :html
37
+ end
38
+
39
+ def self.processor_match?(filename)
40
+ %w[.html .htm].any? { |i| filename.downcase.end_with?(i) }
41
+ end
42
+
43
+ def self.processor_execute(input, options = {})
44
+ to_coradoc(input, options)
45
+ end
46
+
47
+ def self.processor_postprocess(data, options)
48
+ if options[:output_processor] == :adoc
49
+ data.transform_values do |v|
50
+ Input::HTML::HtmlConverter.cleanup_result(v, options)
51
+ end
52
+ else
53
+ data
54
+ end
55
+ end
56
+
57
+ Coradoc::Input.define(self)
58
+ end
59
+ end
@@ -0,0 +1,12 @@
1
+ require "coradoc"
2
+
3
+ module Coradoc
4
+ module Input
5
+ @processors = {}
6
+ extend Converter::CommonInputOutputMethods
7
+ end
8
+ end
9
+
10
+ require "coradoc/input/adoc"
11
+ require "coradoc/input/docx"
12
+ require "coradoc/input/html"
@@ -0,0 +1,17 @@
1
+ module Coradoc
2
+ module Output::Adoc
3
+ def self.processor_id
4
+ :adoc
5
+ end
6
+
7
+ def self.processor_match?(filename)
8
+ %w[.adoc].any? { |i| filename.downcase.end_with?(i) }
9
+ end
10
+
11
+ def self.processor_execute(input, _options = {})
12
+ input.transform_values { |i| Coradoc::Generator.gen_adoc(i) }
13
+ end
14
+
15
+ Coradoc::Output.define(self)
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Coradoc
2
+ module Output::CoradocTreeDebug
3
+ def self.processor_id
4
+ :coradoc_tree_debug
5
+ end
6
+
7
+ def self.processor_match?(filename)
8
+ false
9
+ end
10
+
11
+ def self.processor_execute(input, _options = {})
12
+ out = StringIO.new
13
+ PP.pp(input, out)
14
+ { nil => out.string }
15
+ end
16
+
17
+ Coradoc::Output.define(self)
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require "coradoc"
2
+
3
+ module Coradoc
4
+ module Output
5
+ @processors = {}
6
+ extend Converter::CommonInputOutputMethods
7
+ end
8
+ end
9
+
10
+ require "coradoc/output/adoc"
11
+ require "coradoc/output/coradoc_tree_debug"
@@ -0,0 +1,24 @@
1
+ module Coradoc
2
+ module Parser
3
+ module Asciidoc
4
+ module Admonition
5
+ def admonition_type
6
+ str('NOTE') | str('TIP') | str('EDITOR') |
7
+ str('IMPORTANT') | str('WARNING') | str('CAUTION') |
8
+ str('TODO')
9
+ # requires atypical syntax for access?
10
+ # | str('DANGER')
11
+ # | str('SAFETY PRECAUTION')
12
+ end
13
+ def admonition_line
14
+ admonition_type.as(:admonition_type) >> str(': ') >>
15
+ (
16
+ (text.as(:text) >>
17
+ line_ending.as(:line_break)
18
+ ).repeat(1)
19
+ ).as(:content)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,67 @@
1
+ module Coradoc
2
+ module Parser
3
+ module Asciidoc
4
+ module AttributeList
5
+
6
+ def named_attribute_name
7
+ attribute_name
8
+ end
9
+
10
+ def named_attribute_value
11
+ match('[^\],]').repeat(1)
12
+ end
13
+
14
+ def named_attribute
15
+ (match('[a-zA-Z0-9_-]').repeat(1).as(:named_key) >>
16
+ str(' ').maybe >> str("=") >> str(' ').maybe >>
17
+ match['a-zA-Z0-9_\- \"'].repeat(1).as(:named_value) >>
18
+ str(' ').maybe
19
+ ).as(:named)
20
+ end
21
+
22
+ def positional_attribute
23
+ (match['a-zA-Z0-9_\-%'].repeat(1) >>
24
+ str("=").absent?
25
+ ).as(:positional)
26
+ end
27
+
28
+ def named_many
29
+ (named_attribute.repeat(1,1) >>
30
+ (str(",") >> space.maybe >> named_attribute).repeat(0))
31
+ end
32
+
33
+ def positional_one_named_many
34
+ (positional_attribute.repeat(1,1) >>
35
+ (str(",") >> space.maybe >> named_attribute).repeat(1))
36
+ end
37
+
38
+ def positional_many_named_many
39
+ (positional_attribute.repeat(1,1) >>
40
+ (str(",") >> space.maybe >> positional_attribute).repeat(1) >>
41
+ (str(",") >> space.maybe>> named_attribute).repeat(1))
42
+ end
43
+
44
+ def positional_many
45
+ (positional_attribute.repeat(1,1) >>
46
+ (str(",") >> space.maybe >> positional_attribute).repeat(0))
47
+ end
48
+
49
+ def positional_zero_or_one
50
+ positional_attribute.repeat(0,1)
51
+ end
52
+
53
+ def attribute_list(name = :attribute_list)
54
+ str('[') >> str("[").absent? >>
55
+ ( named_many |
56
+ positional_one_named_many |
57
+ positional_many_named_many |
58
+ positional_many |
59
+ positional_zero_or_one
60
+ ).as(:attribute_array).as(name) >>
61
+ str("]")
62
+ end
63
+
64
+ end
65
+ end
66
+ end
67
+ end