coradoc-html 1.1.7 → 1.1.13

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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/lib/coradoc/html/config.rb +36 -12
  3. data/lib/coradoc/html/converter_base.rb +26 -68
  4. data/lib/coradoc/html/drop/annotation_drop.rb +31 -0
  5. data/lib/coradoc/html/drop/base.rb +77 -0
  6. data/lib/coradoc/html/drop/bibliography_drop.rb +15 -0
  7. data/lib/coradoc/html/drop/bibliography_entry_drop.rb +24 -0
  8. data/lib/coradoc/html/drop/block_drop.rb +69 -0
  9. data/lib/coradoc/html/drop/definition_item_drop.rb +36 -0
  10. data/lib/coradoc/html/drop/definition_list_drop.rb +15 -0
  11. data/lib/coradoc/html/drop/document_drop.rb +52 -0
  12. data/lib/coradoc/html/drop/drop_factory.rb +73 -0
  13. data/lib/coradoc/html/drop/footnote_drop.rb +24 -0
  14. data/lib/coradoc/html/drop/image_drop.rb +35 -0
  15. data/lib/coradoc/html/drop/inline_element_drop.rb +64 -0
  16. data/lib/coradoc/html/drop/list_block_drop.rb +23 -0
  17. data/lib/coradoc/html/drop/list_item_drop.rb +20 -0
  18. data/lib/coradoc/html/drop/table_cell_drop.rb +35 -0
  19. data/lib/coradoc/html/drop/table_drop.rb +15 -0
  20. data/lib/coradoc/html/drop/table_row_drop.rb +23 -0
  21. data/lib/coradoc/html/drop/term_drop.rb +24 -0
  22. data/lib/coradoc/html/drop/text_content_drop.rb +15 -0
  23. data/lib/coradoc/html/drop/toc_drop.rb +15 -0
  24. data/lib/coradoc/html/drop/toc_entry_drop.rb +32 -0
  25. data/lib/coradoc/html/escape.rb +29 -0
  26. data/lib/coradoc/html/input/cleaner.rb +4 -33
  27. data/lib/coradoc/html/input/config.rb +4 -3
  28. data/lib/coradoc/html/input/converters/a.rb +8 -19
  29. data/lib/coradoc/html/input/converters/aside.rb +4 -5
  30. data/lib/coradoc/html/input/converters/audio.rb +8 -35
  31. data/lib/coradoc/html/input/converters/base.rb +29 -27
  32. data/lib/coradoc/html/input/converters/blockquote.rb +4 -2
  33. data/lib/coradoc/html/input/converters/br.rb +4 -4
  34. data/lib/coradoc/html/input/converters/bypass.rb +68 -67
  35. data/lib/coradoc/html/input/converters/code.rb +7 -5
  36. data/lib/coradoc/html/input/converters/div.rb +4 -4
  37. data/lib/coradoc/html/input/converters/dl.rb +3 -25
  38. data/lib/coradoc/html/input/converters/drop.rb +13 -13
  39. data/lib/coradoc/html/input/converters/em.rb +5 -3
  40. data/lib/coradoc/html/input/converters/figure.rb +3 -26
  41. data/lib/coradoc/html/input/converters/h.rb +9 -11
  42. data/lib/coradoc/html/input/converters/head.rb +5 -4
  43. data/lib/coradoc/html/input/converters/hr.rb +4 -5
  44. data/lib/coradoc/html/input/converters/img.rb +4 -9
  45. data/lib/coradoc/html/input/converters/li.rb +3 -1
  46. data/lib/coradoc/html/input/converters/mark.rb +3 -1
  47. data/lib/coradoc/html/input/converters/markup.rb +4 -8
  48. data/lib/coradoc/html/input/converters/math.rb +7 -14
  49. data/lib/coradoc/html/input/converters/media_base.rb +50 -0
  50. data/lib/coradoc/html/input/converters/ol.rb +6 -8
  51. data/lib/coradoc/html/input/converters/p.rb +43 -34
  52. data/lib/coradoc/html/input/converters/pass_through.rb +2 -4
  53. data/lib/coradoc/html/input/converters/positional_formatting.rb +37 -0
  54. data/lib/coradoc/html/input/converters/pre.rb +3 -3
  55. data/lib/coradoc/html/input/converters/q.rb +6 -3
  56. data/lib/coradoc/html/input/converters/strong.rb +4 -2
  57. data/lib/coradoc/html/input/converters/sub.rb +7 -23
  58. data/lib/coradoc/html/input/converters/sup.rb +7 -23
  59. data/lib/coradoc/html/input/converters/table.rb +3 -1
  60. data/lib/coradoc/html/input/converters/td.rb +4 -30
  61. data/lib/coradoc/html/input/converters/text.rb +4 -3
  62. data/lib/coradoc/html/input/converters/tr.rb +3 -2
  63. data/lib/coradoc/html/input/converters/video.rb +14 -36
  64. data/lib/coradoc/html/input/converters.rb +17 -35
  65. data/lib/coradoc/html/input/html_converter.rb +2 -74
  66. data/lib/coradoc/html/input/plugin.rb +8 -50
  67. data/lib/coradoc/html/input/plugins/plateau.rb +4 -19
  68. data/lib/coradoc/html/input/postprocessor.rb +3 -9
  69. data/lib/coradoc/html/input.rb +26 -8
  70. data/lib/coradoc/html/layout_renderer.rb +163 -0
  71. data/lib/coradoc/html/output.rb +6 -12
  72. data/lib/coradoc/html/renderer.rb +84 -350
  73. data/lib/coradoc/html/section_numberable.rb +9 -0
  74. data/lib/coradoc/html/spa.rb +29 -270
  75. data/lib/coradoc/html/static.rb +29 -238
  76. data/lib/coradoc/html/template_caching.rb +31 -0
  77. data/lib/coradoc/html/template_config.rb +11 -70
  78. data/lib/coradoc/html/template_helpers.rb +39 -31
  79. data/lib/coradoc/html/template_locator.rb +17 -11
  80. data/lib/coradoc/html/theme.rb +1 -7
  81. data/lib/coradoc/html/title_text.rb +57 -0
  82. data/lib/coradoc/html/toc_builder.rb +105 -0
  83. data/lib/coradoc/html/toc_serializer.rb +33 -0
  84. data/lib/coradoc/html/transform/from_core_model.rb +13 -12
  85. data/lib/coradoc/html/transform/to_core_model.rb +10 -12
  86. data/lib/coradoc/html/version.rb +1 -1
  87. data/lib/coradoc/html.rb +43 -88
  88. metadata +37 -70
  89. data/lib/coradoc/html/base.rb +0 -157
  90. data/lib/coradoc/html/converters/admonition.rb +0 -180
  91. data/lib/coradoc/html/converters/attribute.rb +0 -68
  92. data/lib/coradoc/html/converters/attribute_reference.rb +0 -60
  93. data/lib/coradoc/html/converters/audio.rb +0 -165
  94. data/lib/coradoc/html/converters/base.rb +0 -615
  95. data/lib/coradoc/html/converters/bibliography.rb +0 -82
  96. data/lib/coradoc/html/converters/bibliography_entry.rb +0 -108
  97. data/lib/coradoc/html/converters/block_image.rb +0 -72
  98. data/lib/coradoc/html/converters/bold.rb +0 -34
  99. data/lib/coradoc/html/converters/break.rb +0 -32
  100. data/lib/coradoc/html/converters/comment_block.rb +0 -42
  101. data/lib/coradoc/html/converters/comment_line.rb +0 -54
  102. data/lib/coradoc/html/converters/cross_reference.rb +0 -59
  103. data/lib/coradoc/html/converters/document.rb +0 -108
  104. data/lib/coradoc/html/converters/example.rb +0 -114
  105. data/lib/coradoc/html/converters/highlight.rb +0 -34
  106. data/lib/coradoc/html/converters/include.rb +0 -68
  107. data/lib/coradoc/html/converters/inline_image.rb +0 -41
  108. data/lib/coradoc/html/converters/italic.rb +0 -34
  109. data/lib/coradoc/html/converters/line_break.rb +0 -31
  110. data/lib/coradoc/html/converters/link.rb +0 -46
  111. data/lib/coradoc/html/converters/list_item.rb +0 -75
  112. data/lib/coradoc/html/converters/listing.rb +0 -99
  113. data/lib/coradoc/html/converters/literal.rb +0 -102
  114. data/lib/coradoc/html/converters/monospace.rb +0 -34
  115. data/lib/coradoc/html/converters/open.rb +0 -78
  116. data/lib/coradoc/html/converters/ordered.rb +0 -53
  117. data/lib/coradoc/html/converters/paragraph.rb +0 -46
  118. data/lib/coradoc/html/converters/quote.rb +0 -113
  119. data/lib/coradoc/html/converters/reviewer_comment.rb +0 -74
  120. data/lib/coradoc/html/converters/reviewer_note.rb +0 -134
  121. data/lib/coradoc/html/converters/section.rb +0 -90
  122. data/lib/coradoc/html/converters/sidebar.rb +0 -113
  123. data/lib/coradoc/html/converters/source.rb +0 -137
  124. data/lib/coradoc/html/converters/source_code.rb +0 -16
  125. data/lib/coradoc/html/converters/span.rb +0 -61
  126. data/lib/coradoc/html/converters/strikethrough.rb +0 -34
  127. data/lib/coradoc/html/converters/subscript.rb +0 -34
  128. data/lib/coradoc/html/converters/superscript.rb +0 -34
  129. data/lib/coradoc/html/converters/table.rb +0 -85
  130. data/lib/coradoc/html/converters/table_cell.rb +0 -203
  131. data/lib/coradoc/html/converters/table_row.rb +0 -45
  132. data/lib/coradoc/html/converters/template_html_converter.rb +0 -105
  133. data/lib/coradoc/html/converters/term.rb +0 -58
  134. data/lib/coradoc/html/converters/text_element.rb +0 -44
  135. data/lib/coradoc/html/converters/underline.rb +0 -34
  136. data/lib/coradoc/html/converters/unordered.rb +0 -47
  137. data/lib/coradoc/html/converters/verse.rb +0 -105
  138. data/lib/coradoc/html/converters/video.rb +0 -179
  139. data/lib/coradoc/html/element_mapping.rb +0 -210
  140. data/lib/coradoc/html/entity.rb +0 -137
  141. data/lib/coradoc/html/input/converters/ignore.rb +0 -22
  142. data/lib/coradoc/html/input/converters/th.rb +0 -20
  143. data/lib/coradoc/html/theme/base.rb +0 -231
  144. data/lib/coradoc/html/theme/classic_renderer.rb +0 -390
  145. data/lib/coradoc/html/theme/modern/components/ui_components.rb +0 -344
  146. data/lib/coradoc/html/theme/modern/css_generator.rb +0 -311
  147. data/lib/coradoc/html/theme/modern/javascript_generator.rb +0 -314
  148. data/lib/coradoc/html/theme/modern/serializers/document_serializer.rb +0 -382
  149. data/lib/coradoc/html/theme/modern/tailwind_config_builder.rb +0 -164
  150. data/lib/coradoc/html/theme/modern/vue_template_generator.rb +0 -374
  151. data/lib/coradoc/html/theme/modern_renderer.rb +0 -250
  152. data/lib/coradoc/html/theme/registry.rb +0 -153
@@ -5,20 +5,22 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Blockquote < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  id = node['id']
10
12
  cite = node['cite']
11
13
  content = treat_children_coradoc(node, state)
12
14
 
13
15
  Coradoc::CoreModel::QuoteBlock.new(
14
- content: content,
16
+ children: content,
15
17
  id: id,
16
18
  attribution: cite
17
19
  )
18
20
  end
19
21
  end
20
22
 
21
- register :blockquote, Blockquote.new
23
+ register :blockquote, Blockquote::INSTANCE
22
24
  end
23
25
  end
24
26
  end
@@ -5,14 +5,14 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Br < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(_node, _state = {})
9
- Coradoc::CoreModel::InlineElement.new(
10
- format_type: 'line_break'
11
- )
11
+ Coradoc::CoreModel::LineBreakElement.new
12
12
  end
13
13
  end
14
14
 
15
- register :br, Br.new
15
+ register :br, Br::INSTANCE
16
16
  end
17
17
  end
18
18
  end
@@ -5,78 +5,79 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Bypass < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  treat_children_coradoc(node, state)
10
12
  end
11
13
  end
12
14
 
13
- register :document, Bypass.new
14
- register :html, Bypass.new
15
- register :body, Bypass.new
16
- register :span, Bypass.new
17
- register :thead, Bypass.new
18
- register :tbody, Bypass.new
19
- register :tfoot, Bypass.new
20
- register :abbr, Bypass.new
21
- register :acronym, Bypass.new
22
- register :address, Bypass.new
23
- register :applet, Bypass.new
24
- register :map, Bypass.new
25
- register :area, Bypass.new
26
- register :bdi, Bypass.new
27
- register :bdo, Bypass.new
28
- register :big, Bypass.new
29
- register :button, Bypass.new
30
- register :canvas, Bypass.new
31
- register :data, Bypass.new
32
- register :datalist, Bypass.new
33
- register :del, Bypass.new
34
- register :ins, Bypass.new
35
- register :dfn, Bypass.new
36
- register :dialog, Bypass.new
37
- register :embed, Bypass.new
38
- register :fieldset, Bypass.new
39
- register :font, Bypass.new
40
- register :footer, Bypass.new
41
- register :form, Bypass.new
42
- register :frame, Bypass.new
43
- register :frameset, Bypass.new
44
- register :header, Bypass.new
45
- register :iframe, Bypass.new
46
- register :input, Bypass.new
47
- register :label, Bypass.new
48
- register :legend, Bypass.new
49
- register :main, Bypass.new
50
- register :menu, Bypass.new
51
- register :menulist, Bypass.new
52
- register :meter, Bypass.new
53
- register :nav, Bypass.new
54
- register :noframes, Bypass.new
55
- register :noscript, Bypass.new
56
- register :object, Bypass.new
57
- register :optgroup, Bypass.new
58
- register :option, Bypass.new
59
- register :output, Bypass.new
60
- register :param, Bypass.new
61
- register :picture, Bypass.new
62
- register :progress, Bypass.new
63
- register :ruby, Bypass.new
64
- register :rt, Bypass.new
65
- register :rp, Bypass.new
66
- register :s, Bypass.new
67
- register :select, Bypass.new
68
- register :small, Bypass.new
69
- register :span, Bypass.new
70
- register :strike, Bypass.new
71
- register :details, Bypass.new
72
- register :section, Bypass.new
73
- register :summary, Bypass.new
74
- register :svg, Bypass.new
75
- register :template, Bypass.new
76
- register :textarea, Bypass.new
77
- register :track, Bypass.new
78
- register :u, Bypass.new
79
- register :wbr, Bypass.new
15
+ register :document, Bypass::INSTANCE
16
+ register :html, Bypass::INSTANCE
17
+ register :body, Bypass::INSTANCE
18
+ register :span, Bypass::INSTANCE
19
+ register :thead, Bypass::INSTANCE
20
+ register :tbody, Bypass::INSTANCE
21
+ register :tfoot, Bypass::INSTANCE
22
+ register :abbr, Bypass::INSTANCE
23
+ register :acronym, Bypass::INSTANCE
24
+ register :address, Bypass::INSTANCE
25
+ register :applet, Bypass::INSTANCE
26
+ register :map, Bypass::INSTANCE
27
+ register :area, Bypass::INSTANCE
28
+ register :bdi, Bypass::INSTANCE
29
+ register :bdo, Bypass::INSTANCE
30
+ register :big, Bypass::INSTANCE
31
+ register :button, Bypass::INSTANCE
32
+ register :canvas, Bypass::INSTANCE
33
+ register :data, Bypass::INSTANCE
34
+ register :datalist, Bypass::INSTANCE
35
+ register :del, Bypass::INSTANCE
36
+ register :ins, Bypass::INSTANCE
37
+ register :dfn, Bypass::INSTANCE
38
+ register :dialog, Bypass::INSTANCE
39
+ register :embed, Bypass::INSTANCE
40
+ register :fieldset, Bypass::INSTANCE
41
+ register :font, Bypass::INSTANCE
42
+ register :footer, Bypass::INSTANCE
43
+ register :form, Bypass::INSTANCE
44
+ register :frame, Bypass::INSTANCE
45
+ register :frameset, Bypass::INSTANCE
46
+ register :header, Bypass::INSTANCE
47
+ register :iframe, Bypass::INSTANCE
48
+ register :input, Bypass::INSTANCE
49
+ register :label, Bypass::INSTANCE
50
+ register :legend, Bypass::INSTANCE
51
+ register :main, Bypass::INSTANCE
52
+ register :menu, Bypass::INSTANCE
53
+ register :menulist, Bypass::INSTANCE
54
+ register :meter, Bypass::INSTANCE
55
+ register :nav, Bypass::INSTANCE
56
+ register :noframes, Bypass::INSTANCE
57
+ register :noscript, Bypass::INSTANCE
58
+ register :object, Bypass::INSTANCE
59
+ register :optgroup, Bypass::INSTANCE
60
+ register :option, Bypass::INSTANCE
61
+ register :output, Bypass::INSTANCE
62
+ register :param, Bypass::INSTANCE
63
+ register :picture, Bypass::INSTANCE
64
+ register :progress, Bypass::INSTANCE
65
+ register :ruby, Bypass::INSTANCE
66
+ register :rt, Bypass::INSTANCE
67
+ register :rp, Bypass::INSTANCE
68
+ register :s, Bypass::INSTANCE
69
+ register :select, Bypass::INSTANCE
70
+ register :small, Bypass::INSTANCE
71
+ register :strike, Bypass::INSTANCE
72
+ register :details, Bypass::INSTANCE
73
+ register :section, Bypass::INSTANCE
74
+ register :summary, Bypass::INSTANCE
75
+ register :svg, Bypass::INSTANCE
76
+ register :template, Bypass::INSTANCE
77
+ register :textarea, Bypass::INSTANCE
78
+ register :track, Bypass::INSTANCE
79
+ register :u, Bypass::INSTANCE
80
+ register :wbr, Bypass::INSTANCE
80
81
  end
81
82
  end
82
83
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Code < Markup
8
+ INSTANCE = new
9
+
8
10
  def coradoc_format_type
9
11
  'monospace'
10
12
  end
@@ -14,11 +16,11 @@ module Coradoc
14
16
  end
15
17
  end
16
18
 
17
- register :code, Code.new
18
- register :tt, Code.new
19
- register :kbd, Code.new
20
- register :samp, Code.new
21
- register :var, Code.new
19
+ register :code, Code::INSTANCE
20
+ register :tt, Code::INSTANCE
21
+ register :kbd, Code::INSTANCE
22
+ register :samp, Code::INSTANCE
23
+ register :var, Code::INSTANCE
22
24
  end
23
25
  end
24
26
  end
@@ -5,20 +5,20 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Div < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  id = node['id']
10
12
  contents = treat_children_coradoc(node, state)
11
13
 
12
14
  Coradoc::CoreModel::OpenBlock.new(
13
- content: contents,
15
+ children: contents,
14
16
  id: id
15
17
  )
16
18
  end
17
19
  end
18
20
 
19
- register :div, Div.new
20
- register :article, Div.new
21
- register :center, Div.new
21
+ register :div, Div::INSTANCE
22
22
  end
23
23
  end
24
24
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Dl < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  items = process_dl(node, state)
10
12
 
@@ -63,7 +65,6 @@ module Coradoc
63
65
  def process_dt_or_dd(groups, current, seen_dd, subnode, state = {})
64
66
  if subnode.name == 'dt'
65
67
  if seen_dd
66
- # groups << current
67
68
  current = { name: [], value: [] }
68
69
  seen_dd = false
69
70
  end
@@ -74,32 +75,9 @@ module Coradoc
74
75
  end
75
76
  [groups, current, seen_dd]
76
77
  end
77
-
78
- # Extract text from content array
79
- def extract_text_from_content(content)
80
- return content if content.is_a?(String)
81
- return '' if content.nil?
82
-
83
- content.map do |item|
84
- case item
85
- when String
86
- item
87
- when Coradoc::CoreModel::InlineElement
88
- item.content.to_s
89
- when Coradoc::CoreModel::Base
90
- if item.content
91
- item.content.to_s
92
- else
93
- ''
94
- end
95
- else
96
- item.to_s
97
- end
98
- end.join
99
- end
100
78
  end
101
79
 
102
- register :dl, Dl.new
80
+ register :dl, Dl::INSTANCE
103
81
  end
104
82
  end
105
83
  end
@@ -4,24 +4,24 @@ module Coradoc
4
4
  module Input
5
5
  module Html
6
6
  module Converters
7
- class Drop < Base
8
- def to_coradoc(node, state = {})
9
- convert(node, state)
10
- end
7
+ class Skip < Base
8
+ INSTANCE = new
11
9
 
12
- def convert(_node, _state = {})
10
+ def to_coradoc(_node, _state = {})
13
11
  ''
14
12
  end
15
13
  end
16
14
 
17
- register :caption, Drop.new
18
- register :figcaption, Drop.new
19
- register :title, Drop.new
20
- register :link, Drop.new
21
- register :style, Drop.new
22
- register :meta, Drop.new
23
- register :script, Drop.new
24
- register :comment, Drop.new
15
+ register :caption, Skip::INSTANCE
16
+ register :figcaption, Skip::INSTANCE
17
+ register :title, Skip::INSTANCE
18
+ register :link, Skip::INSTANCE
19
+ register :style, Skip::INSTANCE
20
+ register :meta, Skip::INSTANCE
21
+ register :script, Skip::INSTANCE
22
+ register :comment, Skip::INSTANCE
23
+ register :colgroup, Skip::INSTANCE
24
+ register :col, Skip::INSTANCE
25
25
  end
26
26
  end
27
27
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Em < Markup
8
+ INSTANCE = new
9
+
8
10
  def coradoc_format_type
9
11
  'italic'
10
12
  end
@@ -14,9 +16,9 @@ module Coradoc
14
16
  end
15
17
  end
16
18
 
17
- register :em, Em.new
18
- register :i, Em.new
19
- register :cite, Em.new
19
+ register :em, Em::INSTANCE
20
+ register :i, Em::INSTANCE
21
+ register :cite, Em::INSTANCE
20
22
  end
21
23
  end
22
24
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Figure < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  id = node['id']
10
12
  title_content = extract_title(node)
@@ -24,34 +26,9 @@ module Coradoc
24
26
 
25
27
  treat_children_coradoc(title, {})
26
28
  end
27
-
28
- # Extract text from content array
29
- def extract_text_from_content(content)
30
- return content if content.is_a?(String)
31
- return '' if content.nil?
32
-
33
- content.map do |item|
34
- case item
35
- when String
36
- item
37
- when Coradoc::CoreModel::InlineElement
38
- item.content.to_s
39
- when Coradoc::CoreModel::Base
40
- if item.content
41
- item.content.to_s
42
- elsif item.title
43
- item.title.to_s
44
- else
45
- ''
46
- end
47
- else
48
- item.to_s
49
- end
50
- end.join
51
- end
52
29
  end
53
30
 
54
- register :figure, Figure.new
31
+ register :figure, Figure::INSTANCE
55
32
  end
56
33
  end
57
34
  end
@@ -5,22 +5,21 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class H < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  id = node['id']
10
12
  internal_anchor = treat_children_anchors(node, state)
11
13
 
12
- # Check if it has id attribute
13
14
  if id.to_s.empty? && internal_anchor.size.positive?
14
15
  first_model = internal_anchor.first
15
- # InlineElement (anchor) has a target attribute
16
16
  id = first_model.target if first_model.is_a?(Coradoc::CoreModel::InlineElement) && first_model.target
17
17
  end
18
18
 
19
19
  level_int = node.name[/\d/].to_i
20
20
  content = treat_children_no_anchors(node, state)
21
21
 
22
- Coradoc::CoreModel::StructuralElement.new(
23
- element_type: 'section',
22
+ Coradoc::CoreModel::SectionElement.new(
24
23
  title: extract_title_text(content),
25
24
  level: level_int,
26
25
  id: id,
@@ -47,7 +46,6 @@ module Coradoc
47
46
  def extract_title_text(content)
48
47
  return '' if content.nil? || content.empty?
49
48
 
50
- # Extract text from content
51
49
  if content.is_a?(Array)
52
50
  content.map do |c|
53
51
  if c.is_a?(Coradoc::CoreModel::InlineElement)
@@ -64,12 +62,12 @@ module Coradoc
64
62
  end
65
63
  end
66
64
 
67
- register :h1, H.new
68
- register :h2, H.new
69
- register :h3, H.new
70
- register :h4, H.new
71
- register :h5, H.new
72
- register :h6, H.new
65
+ register :h1, H::INSTANCE
66
+ register :h2, H::INSTANCE
67
+ register :h3, H::INSTANCE
68
+ register :h4, H::INSTANCE
69
+ register :h5, H::INSTANCE
70
+ register :h6, H::INSTANCE
73
71
  end
74
72
  end
75
73
  end
@@ -5,11 +5,12 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Head < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, _state = {})
9
11
  title = extract_title(node)
10
- # Use StructuralElement with element_type "document" for document header
11
- Coradoc::CoreModel::StructuralElement.new(
12
- element_type: 'document',
12
+ # Use DocumentElement for document header
13
+ Coradoc::CoreModel::DocumentElement.new(
13
14
  title: title,
14
15
  level: 0
15
16
  )
@@ -23,7 +24,7 @@ module Coradoc
23
24
  end
24
25
  end
25
26
 
26
- register :head, Head.new
27
+ register :head, Head::INSTANCE
27
28
  end
28
29
  end
29
30
  end
@@ -5,15 +5,14 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Hr < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(_node, _state = {})
9
- Coradoc::CoreModel::Block.new(
10
- element_type: 'thematic_break',
11
- block_semantic_type: :horizontal_rule
12
- )
11
+ Coradoc::CoreModel::HorizontalRuleBlock.new
13
12
  end
14
13
  end
15
14
 
16
- register :hr, Hr.new
15
+ register :hr, Hr::INSTANCE
17
16
  end
18
17
  end
19
18
  end
@@ -11,6 +11,8 @@ module Coradoc
11
11
  module Html
12
12
  module Converters
13
13
  class Img < Base
14
+ INSTANCE = new
15
+
14
16
  def image_number
15
17
  format(
16
18
  Coradoc::Html::Input.config.image_counter_pattern,
@@ -37,13 +39,9 @@ module Coradoc
37
39
  )
38
40
  image_dest_path = images_dir + "#{image_number}.#{ext}"
39
41
 
40
- # puts "image_dest_path: #{image_dest_path.to_s}"
41
- # puts "image_src_path: #{image_src_path.to_s}"
42
-
43
42
  if File.exist?(image_src_path)
44
43
  FileUtils.cp(image_src_path, image_dest_path)
45
44
  else
46
- @annotate_missing = image_src_path
47
45
  Kernel.warn "Image #{image_src_path} does not exist"
48
46
  end
49
47
 
@@ -84,10 +82,7 @@ module Coradoc
84
82
 
85
83
  title = extract_title(node)
86
84
 
87
- if Coradoc::Html::Input.config.external_images
88
- # puts "external image conversion #{id}, #{src}"
89
- src = datauri2file(src)
90
- end
85
+ src = datauri2file(src) if Coradoc::Html::Input.config.external_images
91
86
 
92
87
  # Use CoreModel::Image
93
88
  return unless src
@@ -103,7 +98,7 @@ module Coradoc
103
98
  end
104
99
  end
105
100
 
106
- register :img, Img
101
+ register :img, Img::INSTANCE
107
102
  end
108
103
  end
109
104
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Li < Base
8
+ INSTANCE = new
9
+
8
10
  def to_coradoc(node, state = {})
9
11
  id = node['id']
10
12
 
@@ -28,7 +30,7 @@ module Coradoc
28
30
  end
29
31
  end
30
32
 
31
- register :li, Li.new
33
+ register :li, Li::INSTANCE
32
34
  end
33
35
  end
34
36
  end
@@ -5,6 +5,8 @@ module Coradoc
5
5
  module Html
6
6
  module Converters
7
7
  class Mark < Markup
8
+ INSTANCE = new
9
+
8
10
  def coradoc_format_type
9
11
  'highlight'
10
12
  end
@@ -14,7 +16,7 @@ module Coradoc
14
16
  end
15
17
  end
16
18
 
17
- register :mark, Mark.new
19
+ register :mark, Mark::INSTANCE
18
20
  end
19
21
  end
20
22
  end
@@ -14,14 +14,12 @@ module Coradoc
14
14
 
15
15
  # Wrap whitespace in InlineElement so it can be processed
16
16
  leading_whitespace = if leading_ws
17
- Coradoc::CoreModel::InlineElement.new(
18
- format_type: 'text',
17
+ Coradoc::CoreModel::TextElement.new(
19
18
  content: leading_ws
20
19
  )
21
20
  end
22
21
  trailing_whitespace = if trailing_ws
23
- Coradoc::CoreModel::InlineElement.new(
24
- format_type: 'text',
22
+ Coradoc::CoreModel::TextElement.new(
25
23
  content: trailing_ws
26
24
  )
27
25
  end
@@ -33,8 +31,7 @@ module Coradoc
33
31
  elsif node.children.empty?
34
32
  # Return InlineElement wrapper for whitespace
35
33
  if leading_ws
36
- Coradoc::CoreModel::InlineElement.new(
37
- format_type: 'text',
34
+ Coradoc::CoreModel::TextElement.new(
38
35
  content: leading_ws
39
36
  )
40
37
  end
@@ -46,8 +43,7 @@ module Coradoc
46
43
  text_content, nested = extract_text_and_elements(content)
47
44
 
48
45
  # Create CoreModel::InlineElement with the appropriate format type
49
- inline_element = Coradoc::CoreModel::InlineElement.new(
50
- format_type: coradoc_format_type,
46
+ inline_element = Coradoc::CoreModel::InlineElement.format_type_class(coradoc_format_type).new(
51
47
  content: text_content,
52
48
  nested_elements: nested.empty? ? nil : nested,
53
49
  metadata: { unconstrained: u }
@@ -1,20 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Unless run with Coradoc::Input::HTML.config.mathml2asciimath,
4
- # this is cheating: we're injecting MathML into Asciidoctor, but
5
- # Asciidoctor only understands AsciiMath or LaTeX
6
-
7
3
  module Coradoc
8
4
  module Input
9
5
  module Html
10
6
  module Converters
11
7
  class Math < Base
12
- # FIXIT
13
- def to_coradoc(node, state = {})
14
- convert(node, state)
15
- end
8
+ INSTANCE = new
16
9
 
17
- def convert(node, _state = {})
10
+ def to_coradoc(node, _state = {})
18
11
  stem = node.to_s.tr("\n", ' ')
19
12
  if Coradoc::Html::Input.config.mathml2asciimath
20
13
  require 'plurimath'
@@ -24,7 +17,6 @@ module Coradoc
24
17
  unless stem.nil?
25
18
  stem = stem.gsub('[', '\\[')
26
19
  stem = stem.gsub(']', '\\]')
27
- # Handle ((...)) patterns - iterate to avoid polynomial regex
28
20
  loop do
29
21
  new_stem = stem.gsub(/\(\(([^)]{1,100})\)\)/, '(\\1)')
30
22
  break if new_stem == stem
@@ -33,13 +25,14 @@ module Coradoc
33
25
  end
34
26
  end
35
27
 
36
- # NOTE: MathML/LaTeX conversion to AsciiDoc stem format
37
- # This converts HTML math elements to AsciiDoc's stem:[] macro format
38
- ' stem:[' << stem << '] '
28
+ Coradoc::CoreModel::StemElement.new(
29
+ content: stem,
30
+ stem_type: 'mathml'
31
+ )
39
32
  end
40
33
  end
41
34
 
42
- register :math, Math.new
35
+ register :math, Math::INSTANCE
43
36
  end
44
37
  end
45
38
  end