coradoc 1.1.5 → 1.1.7

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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +1 -0
  3. data/.irbrc +1 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +5 -1
  6. data/.rubocop_todo.yml +179 -0
  7. data/Gemfile +11 -0
  8. data/README.adoc +5 -7
  9. data/coradoc.gemspec +5 -16
  10. data/exe/reverse_adoc +1 -1
  11. data/exe/w2a +1 -1
  12. data/flake.lock +114 -0
  13. data/flake.nix +135 -0
  14. data/lib/coradoc/cli.rb +1 -1
  15. data/lib/coradoc/converter.rb +4 -5
  16. data/lib/coradoc/element/attribute.rb +10 -1
  17. data/lib/coradoc/element/attribute_list.rb +4 -3
  18. data/lib/coradoc/element/audio.rb +1 -1
  19. data/lib/coradoc/element/author.rb +2 -2
  20. data/lib/coradoc/element/base.rb +14 -2
  21. data/lib/coradoc/element/bibliography.rb +1 -1
  22. data/lib/coradoc/element/bibliography_entry.rb +1 -1
  23. data/lib/coradoc/element/block/open.rb +1 -1
  24. data/lib/coradoc/element/block.rb +1 -1
  25. data/lib/coradoc/element/document_attributes.rb +8 -2
  26. data/lib/coradoc/element/image/block_image.rb +3 -2
  27. data/lib/coradoc/element/image/core.rb +5 -4
  28. data/lib/coradoc/element/inline/attribute_reference.rb +19 -0
  29. data/lib/coradoc/element/inline/cross_reference.rb +4 -3
  30. data/lib/coradoc/element/inline/footnote.rb +24 -0
  31. data/lib/coradoc/element/inline/small.rb +19 -0
  32. data/lib/coradoc/element/inline/span.rb +37 -0
  33. data/lib/coradoc/element/inline/underline.rb +19 -0
  34. data/lib/coradoc/element/inline.rb +5 -1
  35. data/lib/coradoc/element/list/core.rb +2 -2
  36. data/lib/coradoc/element/list/ordered.rb +1 -0
  37. data/lib/coradoc/element/list/unordered.rb +1 -0
  38. data/lib/coradoc/element/list_item.rb +19 -20
  39. data/lib/coradoc/element/table.rb +4 -2
  40. data/lib/coradoc/element/term.rb +1 -0
  41. data/lib/coradoc/element/text_element.rb +4 -1
  42. data/lib/coradoc/element/title.rb +1 -1
  43. data/lib/coradoc/element/video.rb +2 -2
  44. data/lib/coradoc/input/adoc.rb +20 -18
  45. data/lib/coradoc/input/docx.rb +25 -23
  46. data/lib/coradoc/input/html/README.adoc +1 -1
  47. data/lib/coradoc/input/html/cleaner.rb +121 -117
  48. data/lib/coradoc/input/html/config.rb +58 -56
  49. data/lib/coradoc/input/html/converters/a.rb +44 -39
  50. data/lib/coradoc/input/html/converters/aside.rb +12 -8
  51. data/lib/coradoc/input/html/converters/audio.rb +24 -20
  52. data/lib/coradoc/input/html/converters/base.rb +103 -99
  53. data/lib/coradoc/input/html/converters/blockquote.rb +18 -14
  54. data/lib/coradoc/input/html/converters/br.rb +11 -7
  55. data/lib/coradoc/input/html/converters/bypass.rb +77 -73
  56. data/lib/coradoc/input/html/converters/code.rb +18 -14
  57. data/lib/coradoc/input/html/converters/div.rb +15 -11
  58. data/lib/coradoc/input/html/converters/dl.rb +51 -44
  59. data/lib/coradoc/input/html/converters/drop.rb +21 -17
  60. data/lib/coradoc/input/html/converters/em.rb +16 -12
  61. data/lib/coradoc/input/html/converters/figure.rb +19 -15
  62. data/lib/coradoc/input/html/converters/h.rb +32 -30
  63. data/lib/coradoc/input/html/converters/head.rb +17 -13
  64. data/lib/coradoc/input/html/converters/hr.rb +11 -7
  65. data/lib/coradoc/input/html/converters/ignore.rb +15 -11
  66. data/lib/coradoc/input/html/converters/img.rb +98 -93
  67. data/lib/coradoc/input/html/converters/li.rb +13 -9
  68. data/lib/coradoc/input/html/converters/mark.rb +14 -10
  69. data/lib/coradoc/input/html/converters/markup.rb +22 -18
  70. data/lib/coradoc/input/html/converters/math.rb +26 -19
  71. data/lib/coradoc/input/html/converters/ol.rb +55 -50
  72. data/lib/coradoc/input/html/converters/p.rb +16 -12
  73. data/lib/coradoc/input/html/converters/pass_through.rb +12 -8
  74. data/lib/coradoc/input/html/converters/pre.rb +49 -45
  75. data/lib/coradoc/input/html/converters/q.rb +12 -8
  76. data/lib/coradoc/input/html/converters/strong.rb +15 -11
  77. data/lib/coradoc/input/html/converters/sub.rb +15 -11
  78. data/lib/coradoc/input/html/converters/sup.rb +15 -11
  79. data/lib/coradoc/input/html/converters/table.rb +21 -13
  80. data/lib/coradoc/input/html/converters/td.rb +64 -60
  81. data/lib/coradoc/input/html/converters/text.rb +24 -20
  82. data/lib/coradoc/input/html/converters/th.rb +13 -9
  83. data/lib/coradoc/input/html/converters/tr.rb +17 -13
  84. data/lib/coradoc/input/html/converters/video.rb +24 -20
  85. data/lib/coradoc/input/html/converters.rb +45 -43
  86. data/lib/coradoc/input/html/errors.rb +8 -6
  87. data/lib/coradoc/input/html/html_converter.rb +93 -90
  88. data/lib/coradoc/input/html/plugin.rb +104 -104
  89. data/lib/coradoc/input/html/plugins/plateau.rb +197 -190
  90. data/lib/coradoc/input/html/postprocessor.rb +188 -182
  91. data/lib/coradoc/input/html.rb +34 -32
  92. data/lib/coradoc/oscal.rb +18 -5
  93. data/lib/coradoc/output/adoc.rb +13 -11
  94. data/lib/coradoc/output/coradoc_tree_debug.rb +15 -13
  95. data/lib/coradoc/parser/asciidoc/admonition.rb +6 -6
  96. data/lib/coradoc/parser/asciidoc/attribute_list.rb +43 -27
  97. data/lib/coradoc/parser/asciidoc/base.rb +3 -6
  98. data/lib/coradoc/parser/asciidoc/bibliography.rb +5 -6
  99. data/lib/coradoc/parser/asciidoc/block.rb +30 -31
  100. data/lib/coradoc/parser/asciidoc/citation.rb +11 -29
  101. data/lib/coradoc/parser/asciidoc/content.rb +23 -33
  102. data/lib/coradoc/parser/asciidoc/document_attributes.rb +2 -3
  103. data/lib/coradoc/parser/asciidoc/header.rb +1 -2
  104. data/lib/coradoc/parser/asciidoc/inline.rb +165 -42
  105. data/lib/coradoc/parser/asciidoc/list.rb +27 -27
  106. data/lib/coradoc/parser/asciidoc/paragraph.rb +28 -19
  107. data/lib/coradoc/parser/asciidoc/section.rb +11 -17
  108. data/lib/coradoc/parser/asciidoc/table.rb +5 -5
  109. data/lib/coradoc/parser/asciidoc/term.rb +24 -8
  110. data/lib/coradoc/parser/asciidoc/text.rb +18 -21
  111. data/lib/coradoc/parser/base.rb +0 -3
  112. data/lib/coradoc/reverse_adoc.rb +3 -3
  113. data/lib/coradoc/transformer.rb +167 -137
  114. data/lib/coradoc/version.rb +1 -1
  115. data/lib/reverse_adoc.rb +1 -1
  116. data/utils/inspect_asciidoc.rb +29 -0
  117. data/utils/parser_analyzer.rb +14 -14
  118. data/utils/round_trip.rb +31 -15
  119. metadata +34 -137
  120. data/.hound.yml +0 -5
  121. data/lib/coradoc/element/inline/citation.rb +0 -24
  122. data/todo.md +0 -10
@@ -1,103 +1,107 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Base
4
- # Default implementation to convert a given Nokogiri node
5
- # to an AsciiDoc script.
6
- # Can be overriden by subclasses.
7
- def convert(node, state = {})
8
- Coradoc::Generator.gen_adoc(to_coradoc(node, state))
9
- end
10
-
11
- # Note: treat_children won't run plugin hooks
12
- def treat_children(node, state)
13
- node.children.map do |child|
14
- treat(child, state)
15
- end.join
16
- end
17
-
18
- def treat(node, state)
19
- Converters.process(node, state)
20
- end
21
-
22
- def treat_children_coradoc(node, state)
23
- node.children.map do |child|
24
- treat_coradoc(child, state)
25
- end.flatten.reject { |x| x.to_s.empty? }
26
- end
27
-
28
- def treat_coradoc(node, state)
29
- Converters.process_coradoc(node, state)
30
- end
31
-
32
- def extract_title(node)
33
- title = Coradoc::Element::TextElement.escape_keychars(
34
- node["title"].to_s,
35
- )
36
- title.empty? ? "" : %[ #{title}]
37
- end
38
-
39
- def node_has_ancestor?(node, name)
40
- case name
41
- when String
42
- node.ancestors.map(&:name).include?(name)
43
- when Array
44
- (node.ancestors.map(&:name) & name).any?
45
- end
46
- end
47
-
48
- def textnode_before_end_with?(node, str)
49
- return nil unless [String, Regexp].include?(str.class)
50
- return nil if str.is_a?(String) && str.empty?
51
-
52
- str = /#{Regexp.escape(str)}/ if str.is_a?(String)
53
- str = /(?:#{str})\z/
54
-
55
- node2 = node.at_xpath("preceding-sibling::node()[1]")
56
- node2.respond_to?(:text) && node2.text.match?(str)
57
- end
58
-
59
- def textnode_after_start_with?(node, str)
60
- return nil unless [String, Regexp].include?(str.class)
61
- return nil if str.is_a?(String) && str.empty?
62
-
63
- str = /#{Regexp.escape(str)}/ if str.is_a?(String)
64
- str = /\A(?:#{str})/
65
-
66
- node2 = node.at_xpath("following-sibling::node()[1]")
67
- node2.respond_to?(:text) && node2.text.match?(str)
68
- end
69
-
70
- def extract_leading_trailing_whitespace(node)
71
- node.text =~ /^(\s+)/
72
- leading_whitespace = $1
73
- if !leading_whitespace.nil?
74
- first_text = node.at_xpath("./text()[1]")
75
- first_text.replace(first_text.text.lstrip) if first_text
76
- leading_whitespace = " "
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
77
104
  end
78
- node.text =~ /(\s+)$/
79
- trailing_whitespace = $1
80
- if !trailing_whitespace.nil?
81
- last_text = node.at_xpath("./text()[last()]")
82
- last_text.replace(last_text.text.rstrip) if last_text
83
- trailing_whitespace = " "
84
- end
85
- [leading_whitespace, trailing_whitespace]
86
- end
87
-
88
- def unconstrained_before?(node)
89
- before = node.at_xpath("preceding::node()[1]")
90
-
91
- before &&
92
- !before.text.strip.empty? &&
93
- before.text[-1]&.match?(/\w/)
94
- end
95
-
96
- def unconstrained_after?(node)
97
- after = node.at_xpath("following::node()[1]")
98
-
99
- after && !after.text.strip.empty? &&
100
- after.text[0]&.match?(/\w|,|;|"|\.\?!/)
101
105
  end
102
106
  end
103
107
  end
@@ -1,18 +1,22 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Blockquote < Base
4
- def to_coradoc(node, state = {})
5
- node["id"]
6
- cite = node["cite"]
7
- attributes = Coradoc::Element::AttributeList.new
8
- attributes.add_positional("quote", cite) if !cite.nil?
9
- content = treat_children(node, state).strip
10
- content = Coradoc::Input::HTML.cleaner.remove_newlines(content)
11
- Coradoc::Element::Block::Quote.new(nil, lines: content,
12
- attributes: attributes)
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
13
19
  end
14
20
  end
15
-
16
- register :blockquote, Blockquote.new
17
21
  end
18
22
  end
@@ -1,11 +1,15 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Br < Base
4
- def to_coradoc(_node, _state = {})
5
- Coradoc::Element::Inline::HardLineBreak.new
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
6
12
  end
7
13
  end
8
-
9
- register :br, Br.new
10
14
  end
11
15
  end
@@ -1,77 +1,81 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Bypass < Base
4
- def to_coradoc(node, state = {})
5
- treat_children_coradoc(node, state)
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
6
78
  end
7
79
  end
8
-
9
- register :document, Bypass.new
10
- register :html, Bypass.new
11
- register :body, Bypass.new
12
- register :span, Bypass.new
13
- register :thead, Bypass.new
14
- register :tbody, Bypass.new
15
- register :tfoot, Bypass.new
16
- register :abbr, Bypass.new
17
- register :acronym, Bypass.new
18
- register :address, Bypass.new
19
- register :applet, Bypass.new
20
- register :map, Bypass.new
21
- register :area, Bypass.new
22
- register :bdi, Bypass.new
23
- register :bdo, Bypass.new
24
- register :big, Bypass.new
25
- register :button, Bypass.new
26
- register :canvas, Bypass.new
27
- register :data, Bypass.new
28
- register :datalist, Bypass.new
29
- register :del, Bypass.new
30
- register :ins, Bypass.new
31
- register :dfn, Bypass.new
32
- register :dialog, Bypass.new
33
- register :embed, Bypass.new
34
- register :fieldset, Bypass.new
35
- register :font, Bypass.new
36
- register :footer, Bypass.new
37
- register :form, Bypass.new
38
- register :frame, Bypass.new
39
- register :frameset, Bypass.new
40
- register :header, Bypass.new
41
- register :iframe, Bypass.new
42
- register :input, Bypass.new
43
- register :label, Bypass.new
44
- register :legend, Bypass.new
45
- register :main, Bypass.new
46
- register :menu, Bypass.new
47
- register :menulist, Bypass.new
48
- register :meter, Bypass.new
49
- register :nav, Bypass.new
50
- register :noframes, Bypass.new
51
- register :noscript, Bypass.new
52
- register :object, Bypass.new
53
- register :optgroup, Bypass.new
54
- register :option, Bypass.new
55
- register :output, Bypass.new
56
- register :param, Bypass.new
57
- register :picture, Bypass.new
58
- register :progress, Bypass.new
59
- register :ruby, Bypass.new
60
- register :rt, Bypass.new
61
- register :rp, Bypass.new
62
- register :s, Bypass.new
63
- register :select, Bypass.new
64
- register :small, Bypass.new
65
- register :span, Bypass.new
66
- register :strike, Bypass.new
67
- register :details, Bypass.new
68
- register :section, Bypass.new
69
- register :summary, Bypass.new
70
- register :svg, Bypass.new
71
- register :template, Bypass.new
72
- register :textarea, Bypass.new
73
- register :track, Bypass.new
74
- register :u, Bypass.new
75
- register :wbr, Bypass.new
76
80
  end
77
81
  end
@@ -1,19 +1,23 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Code < Markup
4
- def coradoc_class
5
- Coradoc::Element::Inline::Monospace
6
- end
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
7
14
 
8
- def markup_ancestor_tag_names
9
- %w[code tt kbd samp var]
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
10
20
  end
11
21
  end
12
-
13
- register :code, Code.new
14
- register :tt, Code.new
15
- register :kbd, Code.new
16
- register :samp, Code.new
17
- register :var, Code.new
18
22
  end
19
23
  end
@@ -1,15 +1,19 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Div < Base
4
- def to_coradoc(node, state = {})
5
- id = node["id"]
6
- contents = treat_children_coradoc(node, state)
7
- Coradoc::Element::Section.new(nil, id: id, contents: contents)
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
8
16
  end
9
17
  end
10
-
11
- register :div, Div.new
12
- register :article, Div.new
13
- register :center, Div.new
14
18
  end
15
19
  end
@@ -1,55 +1,62 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Dl < Base
4
- def to_coradoc(node, state = {})
5
- items = process_dl(node, state)
6
- items2 = items.map do |item|
7
- Coradoc::Element::ListItemDefinition.new(item[:name], item[:value])
8
- end
9
- Coradoc::Element::List::Definition.new(items2, delimiter: "::")
10
- end
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
11
14
 
12
- def process_dl(node, state = {})
13
- groups = []
14
- current = {name: [], value: []}
15
+ def process_dl(node, state = {})
16
+ groups = []
17
+ current = { name: [], value: [] }
15
18
 
16
- seen_dd = false
17
- child = node.at_xpath("*[1]")
18
- grandchild = nil
19
- while !child.nil?
20
- if child.name == "div"
21
- grandchild = child.at_xpath("*[1]")
22
- while !grandchild.nil?
23
- groups, current, seen_dd = process_dt_or_dd(groups, current, seen_dd, grandchild, state)
24
- grandchild = grandchild.at_xpath("following-sibling::*[1]")
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
25
38
  end
26
- elsif ["dt", "dd"].include?(child.name)
27
- groups, current, seen_dd = process_dt_or_dd(groups, current, seen_dd, child, state)
28
- end
29
- child = child.at_xpath("following-sibling::*[1]")
30
- if current[:name].any? && current[:value].any?
31
- groups << current
39
+ groups
32
40
  end
33
- end
34
- groups
35
- end
36
41
 
37
- def process_dt_or_dd(groups, current, seen_dd, subnode, state = {})
38
- if subnode.name == "dt"
39
- if seen_dd
40
- # groups << current
41
- current = {name: [], value: []}
42
- seen_dd = false
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]
43
55
  end
44
- current[:name] += treat_children_coradoc(subnode, state)
45
- elsif subnode.name == "dd"
46
- current[:value] += treat_children_coradoc(subnode, state)
47
- seen_dd = true
48
56
  end
49
- [groups, current, seen_dd]
57
+
58
+ register :dl, Dl.new
50
59
  end
51
60
  end
52
-
53
- register :dl, Dl.new
54
61
  end
55
62
  end
@@ -1,22 +1,26 @@
1
- module Coradoc::Input::HTML
2
- module Converters
3
- class Drop < Base
4
- def to_coradoc(node, state = {})
5
- convert(node, state)
6
- end
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
7
14
 
8
- def convert(_node, _state = {})
9
- ""
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
10
23
  end
11
24
  end
12
-
13
- register :caption, Drop.new
14
- register :figcaption, Drop.new
15
- register :title, Drop.new
16
- register :link, Drop.new
17
- register :style, Drop.new
18
- register :meta, Drop.new
19
- register :script, Drop.new
20
- register :comment, Drop.new
21
25
  end
22
26
  end