coradoc 1.1.8 → 2.0.12

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.

Potentially problematic release.


This version of coradoc might be problematic. Click here for more details.

Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/Rakefile +3 -12
  4. data/exe/coradoc +21 -2
  5. data/lib/coradoc/cli.rb +185 -91
  6. data/lib/coradoc/configurable.rb +527 -0
  7. data/lib/coradoc/coradoc.rb +463 -0
  8. data/lib/coradoc/core_model/annotation_block.rb +57 -0
  9. data/lib/coradoc/core_model/base.rb +172 -0
  10. data/lib/coradoc/core_model/bibliography.rb +41 -0
  11. data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
  12. data/lib/coradoc/core_model/block.rb +63 -0
  13. data/lib/coradoc/core_model/children_content.rb +53 -0
  14. data/lib/coradoc/core_model/comment_block.rb +10 -0
  15. data/lib/coradoc/core_model/definition_item.rb +46 -0
  16. data/lib/coradoc/core_model/definition_list.rb +28 -0
  17. data/lib/coradoc/core_model/element_attribute.rb +26 -0
  18. data/lib/coradoc/core_model/example_block.rb +10 -0
  19. data/lib/coradoc/core_model/footnote.rb +92 -0
  20. data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
  21. data/lib/coradoc/core_model/id_generator.rb +16 -0
  22. data/lib/coradoc/core_model/image.rb +66 -0
  23. data/lib/coradoc/core_model/inline_element.rb +140 -0
  24. data/lib/coradoc/core_model/list_block.rb +135 -0
  25. data/lib/coradoc/core_model/list_item.rb +142 -0
  26. data/lib/coradoc/core_model/listing_block.rb +13 -0
  27. data/lib/coradoc/core_model/literal_block.rb +10 -0
  28. data/lib/coradoc/core_model/metadata.rb +79 -0
  29. data/lib/coradoc/core_model/open_block.rb +10 -0
  30. data/lib/coradoc/core_model/paragraph_block.rb +10 -0
  31. data/lib/coradoc/core_model/pass_block.rb +10 -0
  32. data/lib/coradoc/core_model/quote_block.rb +12 -0
  33. data/lib/coradoc/core_model/reviewer_block.rb +10 -0
  34. data/lib/coradoc/core_model/sidebar_block.rb +10 -0
  35. data/lib/coradoc/core_model/source_block.rb +10 -0
  36. data/lib/coradoc/core_model/structural_element.rb +94 -0
  37. data/lib/coradoc/core_model/table.rb +148 -0
  38. data/lib/coradoc/core_model/term.rb +53 -0
  39. data/lib/coradoc/core_model/text_content.rb +22 -0
  40. data/lib/coradoc/core_model/toc.rb +105 -0
  41. data/lib/coradoc/core_model/toc_generator.rb +151 -0
  42. data/lib/coradoc/core_model/verse_block.rb +12 -0
  43. data/lib/coradoc/core_model.rb +77 -0
  44. data/lib/coradoc/document_builder.rb +184 -0
  45. data/lib/coradoc/document_manipulator.rb +203 -0
  46. data/lib/coradoc/errors.rb +312 -0
  47. data/lib/coradoc/format_module.rb +49 -0
  48. data/lib/coradoc/hooks.rb +176 -0
  49. data/lib/coradoc/input.rb +17 -7
  50. data/lib/coradoc/logger.rb +54 -0
  51. data/lib/coradoc/output.rb +17 -6
  52. data/lib/coradoc/performance_regression.rb +109 -0
  53. data/lib/coradoc/processor_registry.rb +50 -0
  54. data/lib/coradoc/query.rb +455 -0
  55. data/lib/coradoc/registry.rb +156 -0
  56. data/lib/coradoc/serializer/registry.rb +150 -0
  57. data/lib/coradoc/transform.rb +11 -0
  58. data/lib/coradoc/validation.rb +646 -0
  59. data/lib/coradoc/version.rb +1 -1
  60. data/lib/coradoc/visitor.rb +283 -0
  61. data/lib/coradoc.rb +40 -19
  62. metadata +67 -277
  63. data/.editorconfig +0 -15
  64. data/.envrc +0 -1
  65. data/.irbrc +0 -1
  66. data/.pryrc.sample +0 -1
  67. data/.rubocop.yml +0 -14
  68. data/.rubocop_todo.yml +0 -179
  69. data/CHANGELOG.md +0 -9
  70. data/CODE_OF_CONDUCT.md +0 -84
  71. data/Dockerfile +0 -19
  72. data/Gemfile +0 -16
  73. data/LICENSE.txt +0 -21
  74. data/Makefile +0 -35
  75. data/README.Docker.adoc +0 -57
  76. data/README.adoc +0 -119
  77. data/coradoc.gemspec +0 -40
  78. data/docker-compose.yml +0 -14
  79. data/exe/reverse_adoc +0 -81
  80. data/exe/w2a +0 -60
  81. data/flake.lock +0 -114
  82. data/flake.nix +0 -135
  83. data/lib/coradoc/converter.rb +0 -144
  84. data/lib/coradoc/document.rb +0 -77
  85. data/lib/coradoc/element/admonition.rb +0 -18
  86. data/lib/coradoc/element/attribute.rb +0 -36
  87. data/lib/coradoc/element/attribute_list.rb +0 -138
  88. data/lib/coradoc/element/audio.rb +0 -33
  89. data/lib/coradoc/element/author.rb +0 -24
  90. data/lib/coradoc/element/base.rb +0 -92
  91. data/lib/coradoc/element/bibliography.rb +0 -24
  92. data/lib/coradoc/element/bibliography_entry.rb +0 -24
  93. data/lib/coradoc/element/block/core.rb +0 -76
  94. data/lib/coradoc/element/block/example.rb +0 -23
  95. data/lib/coradoc/element/block/listing.rb +0 -21
  96. data/lib/coradoc/element/block/literal.rb +0 -21
  97. data/lib/coradoc/element/block/open.rb +0 -22
  98. data/lib/coradoc/element/block/pass.rb +0 -21
  99. data/lib/coradoc/element/block/quote.rb +0 -19
  100. data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
  101. data/lib/coradoc/element/block/side.rb +0 -19
  102. data/lib/coradoc/element/block/sourcecode.rb +0 -21
  103. data/lib/coradoc/element/block.rb +0 -17
  104. data/lib/coradoc/element/break.rb +0 -11
  105. data/lib/coradoc/element/comment_block.rb +0 -22
  106. data/lib/coradoc/element/comment_line.rb +0 -18
  107. data/lib/coradoc/element/document_attributes.rb +0 -33
  108. data/lib/coradoc/element/header.rb +0 -22
  109. data/lib/coradoc/element/image/block_image.rb +0 -32
  110. data/lib/coradoc/element/image/core.rb +0 -58
  111. data/lib/coradoc/element/image/inline_image.rb +0 -12
  112. data/lib/coradoc/element/image.rb +0 -10
  113. data/lib/coradoc/element/include.rb +0 -18
  114. data/lib/coradoc/element/inline/anchor.rb +0 -19
  115. data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
  116. data/lib/coradoc/element/inline/bold.rb +0 -25
  117. data/lib/coradoc/element/inline/cross_reference.rb +0 -46
  118. data/lib/coradoc/element/inline/footnote.rb +0 -24
  119. data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
  120. data/lib/coradoc/element/inline/highlight.rb +0 -25
  121. data/lib/coradoc/element/inline/italic.rb +0 -25
  122. data/lib/coradoc/element/inline/link.rb +0 -42
  123. data/lib/coradoc/element/inline/monospace.rb +0 -25
  124. data/lib/coradoc/element/inline/quotation.rb +0 -20
  125. data/lib/coradoc/element/inline/small.rb +0 -19
  126. data/lib/coradoc/element/inline/span.rb +0 -37
  127. data/lib/coradoc/element/inline/subscript.rb +0 -20
  128. data/lib/coradoc/element/inline/superscript.rb +0 -20
  129. data/lib/coradoc/element/inline/underline.rb +0 -19
  130. data/lib/coradoc/element/inline.rb +0 -23
  131. data/lib/coradoc/element/list/core.rb +0 -51
  132. data/lib/coradoc/element/list/definition.rb +0 -29
  133. data/lib/coradoc/element/list/ordered.rb +0 -17
  134. data/lib/coradoc/element/list/unordered.rb +0 -17
  135. data/lib/coradoc/element/list.rb +0 -13
  136. data/lib/coradoc/element/list_item.rb +0 -98
  137. data/lib/coradoc/element/list_item_definition.rb +0 -32
  138. data/lib/coradoc/element/paragraph.rb +0 -37
  139. data/lib/coradoc/element/revision.rb +0 -27
  140. data/lib/coradoc/element/section.rb +0 -62
  141. data/lib/coradoc/element/table.rb +0 -91
  142. data/lib/coradoc/element/tag.rb +0 -19
  143. data/lib/coradoc/element/term.rb +0 -22
  144. data/lib/coradoc/element/text_element.rb +0 -92
  145. data/lib/coradoc/element/title.rb +0 -62
  146. data/lib/coradoc/element/video.rb +0 -50
  147. data/lib/coradoc/generator.rb +0 -19
  148. data/lib/coradoc/input/adoc.rb +0 -30
  149. data/lib/coradoc/input/docx.rb +0 -64
  150. data/lib/coradoc/input/html/LICENSE.txt +0 -25
  151. data/lib/coradoc/input/html/README.adoc +0 -308
  152. data/lib/coradoc/input/html/cleaner.rb +0 -142
  153. data/lib/coradoc/input/html/config.rb +0 -77
  154. data/lib/coradoc/input/html/converters/a.rb +0 -52
  155. data/lib/coradoc/input/html/converters/aside.rb +0 -16
  156. data/lib/coradoc/input/html/converters/audio.rb +0 -29
  157. data/lib/coradoc/input/html/converters/base.rb +0 -108
  158. data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
  159. data/lib/coradoc/input/html/converters/br.rb +0 -15
  160. data/lib/coradoc/input/html/converters/bypass.rb +0 -81
  161. data/lib/coradoc/input/html/converters/code.rb +0 -23
  162. data/lib/coradoc/input/html/converters/div.rb +0 -19
  163. data/lib/coradoc/input/html/converters/dl.rb +0 -62
  164. data/lib/coradoc/input/html/converters/drop.rb +0 -26
  165. data/lib/coradoc/input/html/converters/em.rb +0 -21
  166. data/lib/coradoc/input/html/converters/figure.rb +0 -25
  167. data/lib/coradoc/input/html/converters/h.rb +0 -42
  168. data/lib/coradoc/input/html/converters/head.rb +0 -23
  169. data/lib/coradoc/input/html/converters/hr.rb +0 -15
  170. data/lib/coradoc/input/html/converters/ignore.rb +0 -20
  171. data/lib/coradoc/input/html/converters/img.rb +0 -110
  172. data/lib/coradoc/input/html/converters/li.rb +0 -17
  173. data/lib/coradoc/input/html/converters/mark.rb +0 -19
  174. data/lib/coradoc/input/html/converters/markup.rb +0 -31
  175. data/lib/coradoc/input/html/converters/math.rb +0 -38
  176. data/lib/coradoc/input/html/converters/ol.rb +0 -65
  177. data/lib/coradoc/input/html/converters/p.rb +0 -23
  178. data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
  179. data/lib/coradoc/input/html/converters/pre.rb +0 -55
  180. data/lib/coradoc/input/html/converters/q.rb +0 -16
  181. data/lib/coradoc/input/html/converters/strong.rb +0 -20
  182. data/lib/coradoc/input/html/converters/sub.rb +0 -22
  183. data/lib/coradoc/input/html/converters/sup.rb +0 -22
  184. data/lib/coradoc/input/html/converters/table.rb +0 -319
  185. data/lib/coradoc/input/html/converters/td.rb +0 -81
  186. data/lib/coradoc/input/html/converters/text.rb +0 -32
  187. data/lib/coradoc/input/html/converters/th.rb +0 -18
  188. data/lib/coradoc/input/html/converters/tr.rb +0 -22
  189. data/lib/coradoc/input/html/converters/video.rb +0 -29
  190. data/lib/coradoc/input/html/converters.rb +0 -59
  191. data/lib/coradoc/input/html/errors.rb +0 -14
  192. data/lib/coradoc/input/html/html_converter.rb +0 -168
  193. data/lib/coradoc/input/html/plugin.rb +0 -131
  194. data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
  195. data/lib/coradoc/input/html/postprocessor.rb +0 -220
  196. data/lib/coradoc/input/html.rb +0 -61
  197. data/lib/coradoc/legacy_parser.rb +0 -200
  198. data/lib/coradoc/oscal.rb +0 -99
  199. data/lib/coradoc/output/adoc.rb +0 -19
  200. data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
  201. data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
  202. data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
  203. data/lib/coradoc/parser/asciidoc/base.rb +0 -87
  204. data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
  205. data/lib/coradoc/parser/asciidoc/block.rb +0 -94
  206. data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
  207. data/lib/coradoc/parser/asciidoc/content.rb +0 -64
  208. data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
  209. data/lib/coradoc/parser/asciidoc/header.rb +0 -29
  210. data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
  211. data/lib/coradoc/parser/asciidoc/list.rb +0 -115
  212. data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
  213. data/lib/coradoc/parser/asciidoc/section.rb +0 -61
  214. data/lib/coradoc/parser/asciidoc/table.rb +0 -32
  215. data/lib/coradoc/parser/asciidoc/term.rb +0 -41
  216. data/lib/coradoc/parser/asciidoc/text.rb +0 -158
  217. data/lib/coradoc/parser/base.rb +0 -40
  218. data/lib/coradoc/parser.rb +0 -11
  219. data/lib/coradoc/reverse_adoc.rb +0 -18
  220. data/lib/coradoc/transformer.rb +0 -476
  221. data/lib/coradoc/util.rb +0 -12
  222. data/lib/reverse_adoc.rb +0 -20
  223. data/utils/inspect_asciidoc.rb +0 -29
  224. data/utils/parser_analyzer.rb +0 -66
  225. data/utils/round_trip.rb +0 -53
@@ -1,108 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Base
6
- # Default implementation to convert a given Nokogiri node
7
- # to an AsciiDoc script.
8
- # Can be overriden by subclasses.
9
- def convert(node, state = {})
10
- Coradoc::Generator.gen_adoc(to_coradoc(node, state))
11
- end
12
-
13
- # Note: treat_children won't run plugin hooks
14
- def treat_children(node, state)
15
- node.children.map do |child|
16
- treat(child, state)
17
- end.join
18
- end
19
-
20
- def treat(node, state)
21
- Converters.process(node, state)
22
- end
23
-
24
- def treat_children_coradoc(node, state)
25
- node.children.map do |child|
26
- treat_coradoc(child, state)
27
- end.flatten.reject { |x| x.to_s.empty? }
28
- end
29
-
30
- def treat_coradoc(node, state)
31
- Converters.process_coradoc(node, state)
32
- end
33
-
34
- def extract_title(node)
35
- title = Coradoc::Element::TextElement.escape_keychars(
36
- node["title"].to_s,
37
- )
38
- title.empty? ? "" : %[ #{title}]
39
- end
40
-
41
- def node_has_ancestor?(node, name)
42
- case name
43
- when String
44
- node.ancestors.map(&:name).include?(name)
45
- when Array
46
- (node.ancestors.map(&:name) & name).any?
47
- end
48
- end
49
-
50
- def textnode_before_end_with?(node, str)
51
- return nil unless [String, Regexp].include?(str.class)
52
- return nil if str.is_a?(String) && str.empty?
53
-
54
- str = /#{Regexp.escape(str)}/ if str.is_a?(String)
55
- str = /(?:#{str})\z/
56
-
57
- node2 = node.at_xpath("preceding-sibling::node()[1]")
58
- node2.respond_to?(:text) && node2.text.match?(str)
59
- end
60
-
61
- def textnode_after_start_with?(node, str)
62
- return nil unless [String, Regexp].include?(str.class)
63
- return nil if str.is_a?(String) && str.empty?
64
-
65
- str = /#{Regexp.escape(str)}/ if str.is_a?(String)
66
- str = /\A(?:#{str})/
67
-
68
- node2 = node.at_xpath("following-sibling::node()[1]")
69
- node2.respond_to?(:text) && node2.text.match?(str)
70
- end
71
-
72
- def extract_leading_trailing_whitespace(node)
73
- node.text =~ /^(\s+)/
74
- leading_whitespace = $1
75
- if !leading_whitespace.nil?
76
- first_text = node.at_xpath("./text()[1]")
77
- first_text&.replace(first_text.text.lstrip)
78
- leading_whitespace = " "
79
- end
80
- node.text =~ /(\s+)$/
81
- trailing_whitespace = $1
82
- if !trailing_whitespace.nil?
83
- last_text = node.at_xpath("./text()[last()]")
84
- last_text&.replace(last_text.text.rstrip)
85
- trailing_whitespace = " "
86
- end
87
- [leading_whitespace, trailing_whitespace]
88
- end
89
-
90
- def unconstrained_before?(node)
91
- before = node.at_xpath("preceding::node()[1]")
92
-
93
- before &&
94
- !before.text.strip.empty? &&
95
- before.text[-1]&.match?(/\w/)
96
- end
97
-
98
- def unconstrained_after?(node)
99
- after = node.at_xpath("following::node()[1]")
100
-
101
- after && !after.text.strip.empty? &&
102
- after.text[0]&.match?(/\w|,|;|"|\.\?!/)
103
- end
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,22 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Blockquote < Base
6
- def to_coradoc(node, state = {})
7
- node["id"]
8
- cite = node["cite"]
9
- attributes = Coradoc::Element::AttributeList.new
10
- attributes.add_positional("quote", cite) if !cite.nil?
11
- content = treat_children(node, state).strip
12
- content = Coradoc::Input::Html.cleaner.remove_newlines(content)
13
- Coradoc::Element::Block::Quote.new(nil, lines: content,
14
- attributes: attributes)
15
- end
16
- end
17
-
18
- register :blockquote, Blockquote.new
19
- end
20
- end
21
- end
22
- end
@@ -1,15 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Br < Base
6
- def to_coradoc(_node, _state = {})
7
- Coradoc::Element::Inline::HardLineBreak.new
8
- end
9
- end
10
-
11
- register :br, Br.new
12
- end
13
- end
14
- end
15
- end
@@ -1,81 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Bypass < Base
6
- def to_coradoc(node, state = {})
7
- treat_children_coradoc(node, state)
8
- end
9
- end
10
-
11
- register :document, Bypass.new
12
- register :html, Bypass.new
13
- register :body, Bypass.new
14
- register :span, Bypass.new
15
- register :thead, Bypass.new
16
- register :tbody, Bypass.new
17
- register :tfoot, Bypass.new
18
- register :abbr, Bypass.new
19
- register :acronym, Bypass.new
20
- register :address, Bypass.new
21
- register :applet, Bypass.new
22
- register :map, Bypass.new
23
- register :area, Bypass.new
24
- register :bdi, Bypass.new
25
- register :bdo, Bypass.new
26
- register :big, Bypass.new
27
- register :button, Bypass.new
28
- register :canvas, Bypass.new
29
- register :data, Bypass.new
30
- register :datalist, Bypass.new
31
- register :del, Bypass.new
32
- register :ins, Bypass.new
33
- register :dfn, Bypass.new
34
- register :dialog, Bypass.new
35
- register :embed, Bypass.new
36
- register :fieldset, Bypass.new
37
- register :font, Bypass.new
38
- register :footer, Bypass.new
39
- register :form, Bypass.new
40
- register :frame, Bypass.new
41
- register :frameset, Bypass.new
42
- register :header, Bypass.new
43
- register :iframe, Bypass.new
44
- register :input, Bypass.new
45
- register :label, Bypass.new
46
- register :legend, Bypass.new
47
- register :main, Bypass.new
48
- register :menu, Bypass.new
49
- register :menulist, Bypass.new
50
- register :meter, Bypass.new
51
- register :nav, Bypass.new
52
- register :noframes, Bypass.new
53
- register :noscript, Bypass.new
54
- register :object, Bypass.new
55
- register :optgroup, Bypass.new
56
- register :option, Bypass.new
57
- register :output, Bypass.new
58
- register :param, Bypass.new
59
- register :picture, Bypass.new
60
- register :progress, Bypass.new
61
- register :ruby, Bypass.new
62
- register :rt, Bypass.new
63
- register :rp, Bypass.new
64
- register :s, Bypass.new
65
- register :select, Bypass.new
66
- register :small, Bypass.new
67
- register :span, Bypass.new
68
- register :strike, Bypass.new
69
- register :details, Bypass.new
70
- register :section, Bypass.new
71
- register :summary, Bypass.new
72
- register :svg, Bypass.new
73
- register :template, Bypass.new
74
- register :textarea, Bypass.new
75
- register :track, Bypass.new
76
- register :u, Bypass.new
77
- register :wbr, Bypass.new
78
- end
79
- end
80
- end
81
- end
@@ -1,23 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Code < Markup
6
- def coradoc_class
7
- Coradoc::Element::Inline::Monospace
8
- end
9
-
10
- def markup_ancestor_tag_names
11
- %w[code tt kbd samp var]
12
- end
13
- end
14
-
15
- register :code, Code.new
16
- register :tt, Code.new
17
- register :kbd, Code.new
18
- register :samp, Code.new
19
- register :var, Code.new
20
- end
21
- end
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Div < Base
6
- def to_coradoc(node, state = {})
7
- id = node["id"]
8
- contents = treat_children_coradoc(node, state)
9
- Coradoc::Element::Section.new(nil, id: id, contents: contents)
10
- end
11
- end
12
-
13
- register :div, Div.new
14
- register :article, Div.new
15
- register :center, Div.new
16
- end
17
- end
18
- end
19
- end
@@ -1,62 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Dl < Base
6
- def to_coradoc(node, state = {})
7
- items = process_dl(node, state)
8
- items2 = items.map do |item|
9
- Coradoc::Element::ListItemDefinition.new(item[:name],
10
- item[:value])
11
- end
12
- Coradoc::Element::List::Definition.new(items2, delimiter: "::")
13
- end
14
-
15
- def process_dl(node, state = {})
16
- groups = []
17
- current = { name: [], value: [] }
18
-
19
- seen_dd = false
20
- child = node.at_xpath("*[1]")
21
- grandchild = nil
22
- while !child.nil?
23
- if child.name == "div"
24
- grandchild = child.at_xpath("*[1]")
25
- while !grandchild.nil?
26
- groups, current, seen_dd = process_dt_or_dd(groups, current,
27
- seen_dd, grandchild, state)
28
- grandchild = grandchild.at_xpath("following-sibling::*[1]")
29
- end
30
- elsif ["dt", "dd"].include?(child.name)
31
- groups, current, seen_dd = process_dt_or_dd(groups, current,
32
- seen_dd, child, state)
33
- end
34
- child = child.at_xpath("following-sibling::*[1]")
35
- if current[:name].any? && current[:value].any?
36
- groups << current
37
- end
38
- end
39
- groups
40
- end
41
-
42
- def process_dt_or_dd(groups, current, seen_dd, subnode, state = {})
43
- if subnode.name == "dt"
44
- if seen_dd
45
- # groups << current
46
- current = { name: [], value: [] }
47
- seen_dd = false
48
- end
49
- current[:name] += treat_children_coradoc(subnode, state)
50
- elsif subnode.name == "dd"
51
- current[:value] += treat_children_coradoc(subnode, state)
52
- seen_dd = true
53
- end
54
- [groups, current, seen_dd]
55
- end
56
- end
57
-
58
- register :dl, Dl.new
59
- end
60
- end
61
- end
62
- end
@@ -1,26 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Drop < Base
6
- def to_coradoc(node, state = {})
7
- convert(node, state)
8
- end
9
-
10
- def convert(_node, _state = {})
11
- ""
12
- end
13
- end
14
-
15
- register :caption, Drop.new
16
- register :figcaption, Drop.new
17
- register :title, Drop.new
18
- register :link, Drop.new
19
- register :style, Drop.new
20
- register :meta, Drop.new
21
- register :script, Drop.new
22
- register :comment, Drop.new
23
- end
24
- end
25
- end
26
- end
@@ -1,21 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Em < Markup
6
- def coradoc_class
7
- Coradoc::Element::Inline::Italic
8
- end
9
-
10
- def markup_ancestor_tag_names
11
- %w[em i cite]
12
- end
13
- end
14
-
15
- register :em, Em.new
16
- register :i, Em.new
17
- register :cite, Em.new
18
- end
19
- end
20
- end
21
- end
@@ -1,25 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Figure < Base
6
- def to_coradoc(node, state = {})
7
- id = node["id"]
8
- title = extract_title(node)
9
- content = treat_children_coradoc(node, state)
10
- Coradoc::Element::Block::Example.new(title, lines: content, id: id)
11
- end
12
-
13
- def extract_title(node)
14
- title = node.at("./figcaption")
15
- return "" if title.nil?
16
-
17
- treat_children_coradoc(title, {})
18
- end
19
- end
20
-
21
- register :figure, Figure.new
22
- end
23
- end
24
- end
25
- end
@@ -1,42 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class H < Base
6
- def to_coradoc(node, state = {})
7
- id = node["id"]
8
- internal_anchor = treat_children_anchors(node, state)
9
-
10
- if id.to_s.empty? && internal_anchor.size.positive? && internal_anchor.first.respond_to?(:id)
11
- id = internal_anchor.first.id
12
- end
13
-
14
- level = node.name[/\d/].to_i
15
- content = treat_children_no_anchors(node, state)
16
-
17
- Coradoc::Element::Title.new(content, level, id: id)
18
- end
19
-
20
- def treat_children_no_anchors(node, state)
21
- node.children.reject { |a| a.name == "a" }.map do |child|
22
- treat_coradoc(child, state)
23
- end
24
- end
25
-
26
- def treat_children_anchors(node, state)
27
- node.children.select { |a| a.name == "a" }.map do |child|
28
- treat_coradoc(child, state)
29
- end
30
- end
31
- end
32
-
33
- register :h1, H.new
34
- register :h2, H.new
35
- register :h3, H.new
36
- register :h4, H.new
37
- register :h5, H.new
38
- register :h6, H.new
39
- end
40
- end
41
- end
42
- end
@@ -1,23 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Head < Base
6
- def to_coradoc(node, _state = {})
7
- title = extract_title(node)
8
- Coradoc::Element::Header.new(title)
9
- end
10
-
11
- def extract_title(node)
12
- title = node.at("./title")
13
- return "(???)" if title.nil?
14
-
15
- title.text
16
- end
17
- end
18
-
19
- register :head, Head.new
20
- end
21
- end
22
- end
23
- end
@@ -1,15 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Hr < Base
6
- def to_coradoc(_node, _state = {})
7
- Coradoc::Element::Break::ThematicBreak.new
8
- end
9
- end
10
-
11
- register :hr, Hr.new
12
- end
13
- end
14
- end
15
- end
@@ -1,20 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Ignore < Base
6
- def to_coradoc(node, state = {})
7
- convert(node, state)
8
- end
9
-
10
- def convert(_node, _state = {})
11
- "" # noop
12
- end
13
- end
14
-
15
- register :colgroup, Ignore.new
16
- register :col, Ignore.new
17
- end
18
- end
19
- end
20
- end
@@ -1,110 +0,0 @@
1
- require "fileutils"
2
- require "pathname"
3
- require "tempfile"
4
- require "base64"
5
- require "marcel"
6
-
7
- module Coradoc
8
- module Input
9
- module Html
10
- module Converters
11
- class Img < Base
12
- def image_number
13
- sprintf(
14
- Coradoc::Input::Html.config.image_counter_pattern,
15
- Coradoc::Input::Html.config.image_counter,
16
- )
17
- end
18
-
19
- def image_number_increment
20
- Coradoc::Input::Html.config.image_counter += 1
21
- end
22
-
23
- def datauri2file(src)
24
- return unless src
25
-
26
- %r{^data:image/(?:[^;]+);base64,(?<imgdata>.+)$} =~ src
27
-
28
- dest_dir = Pathname.new(Coradoc::Input::Html.config.destination).dirname
29
- images_dir = dest_dir.join("images")
30
- FileUtils.mkdir_p(images_dir)
31
-
32
- ext, image_src_path, tempfile = determine_image_src_path(src,
33
- imgdata)
34
- image_dest_path = images_dir + "#{image_number}.#{ext}"
35
-
36
- # puts "image_dest_path: #{image_dest_path.to_s}"
37
- # puts "image_src_path: #{image_src_path.to_s}"
38
-
39
- if File.exist?(image_src_path)
40
- FileUtils.cp(image_src_path, image_dest_path)
41
- else
42
- @annotate_missing = image_src_path
43
- Kernel.warn "Image #{image_src_path} does not exist"
44
- end
45
-
46
- image_number_increment
47
-
48
- image_dest_path.relative_path_from(dest_dir)
49
- ensure
50
- tempfile&.close!
51
- end
52
-
53
- def determine_image_src_path(src, imgdata)
54
- return copy_temp_file(imgdata) if imgdata
55
-
56
- ext = File.extname(src).strip.downcase[1..]
57
- [ext, Pathname.new(Coradoc::Input::Html.config.sourcedir).join(src)]
58
- end
59
-
60
- def copy_temp_file(imgdata)
61
- f = Tempfile.open(["radoc", ".jpg"])
62
- f.binmode
63
- f.write(Base64.strict_decode64(imgdata))
64
- f.rewind
65
- ext = Marcel::MimeType.for(f).sub(%r{^[^/]+/}, "")
66
- ext = "svg" if ext == "svg+xml"
67
- [ext, f.path, f]
68
- end
69
-
70
- def to_coradoc(node, _state = {})
71
- id = node["id"]
72
- alt = node["alt"]
73
- src = node["src"]
74
- width = node["width"]
75
- height = node["height"]
76
-
77
- width = width.to_i if width&.match?(/\A\d+\z/)
78
- height = height.to_i if height&.match?(/\A\d+\z/)
79
-
80
- title = extract_title(node)
81
-
82
- if Coradoc::Input::Html.config.external_images
83
- # puts "external image conversion #{id}, #{src}"
84
- src = datauri2file(src)
85
- end
86
-
87
- attributes = Coradoc::Element::AttributeList.new
88
- # attributes.add_named("id", id) if id
89
- if alt # && !alt.to_s.empty?
90
- attributes.add_positional(alt)
91
- elsif width || height
92
- attributes.add_positional(nil)
93
- end
94
- attributes.add_named("title", title) if title && !title.empty?
95
- attributes.add_positional(width) if width
96
- attributes.add_positional(height) if height
97
-
98
- if src
99
- Coradoc::Element::Image::BlockImage.new(title, id, src,
100
- attributes: attributes,
101
- annotate_missing: @annotate_missing)
102
- end
103
- end
104
- end
105
-
106
- register :img, Img
107
- end
108
- end
109
- end
110
- end
@@ -1,17 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Li < Base
6
- def to_coradoc(node, state = {})
7
- id = node["id"]
8
- content = treat_children_coradoc(node, state)
9
- Coradoc::Element::ListItem.new(content, id: id)
10
- end
11
- end
12
-
13
- register :li, Li.new
14
- end
15
- end
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- module Coradoc
2
- module Input
3
- module Html
4
- module Converters
5
- class Mark < Markup
6
- def coradoc_class
7
- Coradoc::Element::Inline::Highlight
8
- end
9
-
10
- def markup_ancestor_tag_names
11
- %w[mark]
12
- end
13
- end
14
-
15
- register :mark, Mark.new
16
- end
17
- end
18
- end
19
- end