coradoc-html 1.1.7 → 1.1.14

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 (153) 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 +72 -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 +72 -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/drop.rb +18 -0
  26. data/lib/coradoc/html/escape.rb +29 -0
  27. data/lib/coradoc/html/input/cleaner.rb +4 -33
  28. data/lib/coradoc/html/input/config.rb +4 -3
  29. data/lib/coradoc/html/input/converters/a.rb +8 -19
  30. data/lib/coradoc/html/input/converters/aside.rb +4 -5
  31. data/lib/coradoc/html/input/converters/audio.rb +6 -35
  32. data/lib/coradoc/html/input/converters/base.rb +29 -27
  33. data/lib/coradoc/html/input/converters/blockquote.rb +4 -2
  34. data/lib/coradoc/html/input/converters/br.rb +4 -4
  35. data/lib/coradoc/html/input/converters/bypass.rb +68 -67
  36. data/lib/coradoc/html/input/converters/code.rb +7 -5
  37. data/lib/coradoc/html/input/converters/div.rb +4 -4
  38. data/lib/coradoc/html/input/converters/dl.rb +3 -25
  39. data/lib/coradoc/html/input/converters/drop.rb +13 -13
  40. data/lib/coradoc/html/input/converters/em.rb +5 -3
  41. data/lib/coradoc/html/input/converters/figure.rb +3 -26
  42. data/lib/coradoc/html/input/converters/h.rb +9 -11
  43. data/lib/coradoc/html/input/converters/head.rb +5 -4
  44. data/lib/coradoc/html/input/converters/hr.rb +4 -5
  45. data/lib/coradoc/html/input/converters/img.rb +4 -9
  46. data/lib/coradoc/html/input/converters/li.rb +3 -1
  47. data/lib/coradoc/html/input/converters/mark.rb +3 -1
  48. data/lib/coradoc/html/input/converters/markup.rb +4 -8
  49. data/lib/coradoc/html/input/converters/math.rb +7 -14
  50. data/lib/coradoc/html/input/converters/media_base.rb +50 -0
  51. data/lib/coradoc/html/input/converters/ol.rb +6 -8
  52. data/lib/coradoc/html/input/converters/p.rb +43 -34
  53. data/lib/coradoc/html/input/converters/pass_through.rb +2 -4
  54. data/lib/coradoc/html/input/converters/positional_formatting.rb +37 -0
  55. data/lib/coradoc/html/input/converters/pre.rb +3 -3
  56. data/lib/coradoc/html/input/converters/q.rb +6 -3
  57. data/lib/coradoc/html/input/converters/strong.rb +4 -2
  58. data/lib/coradoc/html/input/converters/sub.rb +5 -23
  59. data/lib/coradoc/html/input/converters/sup.rb +5 -23
  60. data/lib/coradoc/html/input/converters/table.rb +3 -1
  61. data/lib/coradoc/html/input/converters/td.rb +4 -30
  62. data/lib/coradoc/html/input/converters/text.rb +4 -3
  63. data/lib/coradoc/html/input/converters/tr.rb +3 -2
  64. data/lib/coradoc/html/input/converters/video.rb +12 -36
  65. data/lib/coradoc/html/input/converters.rb +55 -70
  66. data/lib/coradoc/html/input/html_converter.rb +2 -74
  67. data/lib/coradoc/html/input/plugin.rb +8 -57
  68. data/lib/coradoc/html/input/plugins/plateau.rb +4 -19
  69. data/lib/coradoc/html/input/postprocessor.rb +3 -9
  70. data/lib/coradoc/html/input.rb +26 -8
  71. data/lib/coradoc/html/layout_renderer.rb +163 -0
  72. data/lib/coradoc/html/output.rb +6 -12
  73. data/lib/coradoc/html/renderer.rb +86 -357
  74. data/lib/coradoc/html/section_numberable.rb +9 -0
  75. data/lib/coradoc/html/spa.rb +29 -270
  76. data/lib/coradoc/html/static.rb +29 -238
  77. data/lib/coradoc/html/template_caching.rb +31 -0
  78. data/lib/coradoc/html/template_config.rb +11 -70
  79. data/lib/coradoc/html/template_helpers.rb +39 -31
  80. data/lib/coradoc/html/template_locator.rb +17 -11
  81. data/lib/coradoc/html/theme.rb +1 -7
  82. data/lib/coradoc/html/title_text.rb +57 -0
  83. data/lib/coradoc/html/toc_builder.rb +112 -0
  84. data/lib/coradoc/html/toc_serializer.rb +31 -0
  85. data/lib/coradoc/html/transform/from_core_model.rb +13 -12
  86. data/lib/coradoc/html/transform/to_core_model.rb +10 -12
  87. data/lib/coradoc/html/version.rb +1 -1
  88. data/lib/coradoc/html.rb +41 -88
  89. metadata +38 -70
  90. data/lib/coradoc/html/base.rb +0 -157
  91. data/lib/coradoc/html/converters/admonition.rb +0 -180
  92. data/lib/coradoc/html/converters/attribute.rb +0 -68
  93. data/lib/coradoc/html/converters/attribute_reference.rb +0 -60
  94. data/lib/coradoc/html/converters/audio.rb +0 -165
  95. data/lib/coradoc/html/converters/base.rb +0 -615
  96. data/lib/coradoc/html/converters/bibliography.rb +0 -82
  97. data/lib/coradoc/html/converters/bibliography_entry.rb +0 -108
  98. data/lib/coradoc/html/converters/block_image.rb +0 -72
  99. data/lib/coradoc/html/converters/bold.rb +0 -34
  100. data/lib/coradoc/html/converters/break.rb +0 -32
  101. data/lib/coradoc/html/converters/comment_block.rb +0 -42
  102. data/lib/coradoc/html/converters/comment_line.rb +0 -54
  103. data/lib/coradoc/html/converters/cross_reference.rb +0 -59
  104. data/lib/coradoc/html/converters/document.rb +0 -108
  105. data/lib/coradoc/html/converters/example.rb +0 -114
  106. data/lib/coradoc/html/converters/highlight.rb +0 -34
  107. data/lib/coradoc/html/converters/include.rb +0 -68
  108. data/lib/coradoc/html/converters/inline_image.rb +0 -41
  109. data/lib/coradoc/html/converters/italic.rb +0 -34
  110. data/lib/coradoc/html/converters/line_break.rb +0 -31
  111. data/lib/coradoc/html/converters/link.rb +0 -46
  112. data/lib/coradoc/html/converters/list_item.rb +0 -75
  113. data/lib/coradoc/html/converters/listing.rb +0 -99
  114. data/lib/coradoc/html/converters/literal.rb +0 -102
  115. data/lib/coradoc/html/converters/monospace.rb +0 -34
  116. data/lib/coradoc/html/converters/open.rb +0 -78
  117. data/lib/coradoc/html/converters/ordered.rb +0 -53
  118. data/lib/coradoc/html/converters/paragraph.rb +0 -46
  119. data/lib/coradoc/html/converters/quote.rb +0 -113
  120. data/lib/coradoc/html/converters/reviewer_comment.rb +0 -74
  121. data/lib/coradoc/html/converters/reviewer_note.rb +0 -134
  122. data/lib/coradoc/html/converters/section.rb +0 -90
  123. data/lib/coradoc/html/converters/sidebar.rb +0 -113
  124. data/lib/coradoc/html/converters/source.rb +0 -137
  125. data/lib/coradoc/html/converters/source_code.rb +0 -16
  126. data/lib/coradoc/html/converters/span.rb +0 -61
  127. data/lib/coradoc/html/converters/strikethrough.rb +0 -34
  128. data/lib/coradoc/html/converters/subscript.rb +0 -34
  129. data/lib/coradoc/html/converters/superscript.rb +0 -34
  130. data/lib/coradoc/html/converters/table.rb +0 -85
  131. data/lib/coradoc/html/converters/table_cell.rb +0 -203
  132. data/lib/coradoc/html/converters/table_row.rb +0 -45
  133. data/lib/coradoc/html/converters/template_html_converter.rb +0 -105
  134. data/lib/coradoc/html/converters/term.rb +0 -58
  135. data/lib/coradoc/html/converters/text_element.rb +0 -44
  136. data/lib/coradoc/html/converters/underline.rb +0 -34
  137. data/lib/coradoc/html/converters/unordered.rb +0 -47
  138. data/lib/coradoc/html/converters/verse.rb +0 -105
  139. data/lib/coradoc/html/converters/video.rb +0 -179
  140. data/lib/coradoc/html/element_mapping.rb +0 -210
  141. data/lib/coradoc/html/entity.rb +0 -137
  142. data/lib/coradoc/html/input/converters/ignore.rb +0 -22
  143. data/lib/coradoc/html/input/converters/th.rb +0 -20
  144. data/lib/coradoc/html/theme/base.rb +0 -231
  145. data/lib/coradoc/html/theme/classic_renderer.rb +0 -390
  146. data/lib/coradoc/html/theme/modern/components/ui_components.rb +0 -344
  147. data/lib/coradoc/html/theme/modern/css_generator.rb +0 -311
  148. data/lib/coradoc/html/theme/modern/javascript_generator.rb +0 -314
  149. data/lib/coradoc/html/theme/modern/serializers/document_serializer.rb +0 -382
  150. data/lib/coradoc/html/theme/modern/tailwind_config_builder.rb +0 -164
  151. data/lib/coradoc/html/theme/modern/vue_template_generator.rb +0 -374
  152. data/lib/coradoc/html/theme/modern_renderer.rb +0 -250
  153. data/lib/coradoc/html/theme/registry.rb +0 -153
data/lib/coradoc/html.rb CHANGED
@@ -1,5 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module Coradoc
4
+ module Html
5
+ HTML_EXTENSIONS = %w[.html .htm].freeze
6
+
7
+ module FormatDetection
8
+ def html_extension?(filename)
9
+ HTML_EXTENSIONS.any? { |ext| filename.downcase.end_with?(ext) }
10
+ end
11
+ end
12
+ end
13
+ end
14
+
3
15
  # Load HTML input module to register with Coradoc::Input
4
16
  require 'coradoc/html/input'
5
17
  # Load HTML output module to register with Coradoc::Output
@@ -7,75 +19,31 @@ require 'coradoc/html/output'
7
19
 
8
20
  module Coradoc
9
21
  module Html
10
- module Converters
11
- # Autoload HTML converters - they will be loaded when accessed
12
- autoload :Base, 'coradoc/html/converters/base'
13
- autoload :Admonition, 'coradoc/html/converters/admonition'
14
- autoload :AttributeReference, 'coradoc/html/converters/attribute_reference'
15
- autoload :Attribute, 'coradoc/html/converters/attribute'
16
- autoload :Audio, 'coradoc/html/converters/audio'
17
- autoload :BibliographyEntry, 'coradoc/html/converters/bibliography_entry'
18
- autoload :Bibliography, 'coradoc/html/converters/bibliography'
19
- autoload :BlockImage, 'coradoc/html/converters/block_image'
20
- autoload :Bold, 'coradoc/html/converters/bold'
21
- autoload :Break, 'coradoc/html/converters/break'
22
- autoload :CommentBlock, 'coradoc/html/converters/comment_block'
23
- autoload :CommentLine, 'coradoc/html/converters/comment_line'
24
- autoload :CrossReference, 'coradoc/html/converters/cross_reference'
25
- autoload :Document, 'coradoc/html/converters/document'
26
- autoload :Example, 'coradoc/html/converters/example'
27
- autoload :Highlight, 'coradoc/html/converters/highlight'
28
- autoload :Include, 'coradoc/html/converters/include'
29
- autoload :InlineImage, 'coradoc/html/converters/inline_image'
30
- autoload :Italic, 'coradoc/html/converters/italic'
31
- autoload :LineBreak, 'coradoc/html/converters/line_break'
32
- autoload :Link, 'coradoc/html/converters/link'
33
- autoload :ListItem, 'coradoc/html/converters/list_item'
34
- autoload :Listing, 'coradoc/html/converters/listing'
35
- autoload :Literal, 'coradoc/html/converters/literal'
36
- autoload :Monospace, 'coradoc/html/converters/monospace'
37
- autoload :Ordered, 'coradoc/html/converters/ordered'
38
- autoload :Open, 'coradoc/html/converters/open'
39
- autoload :Paragraph, 'coradoc/html/converters/paragraph'
40
- autoload :Quote, 'coradoc/html/converters/quote'
41
- autoload :ReviewerComment, 'coradoc/html/converters/reviewer_comment'
42
- autoload :ReviewerNote, 'coradoc/html/converters/reviewer_note'
43
- autoload :Section, 'coradoc/html/converters/section'
44
- autoload :Sidebar, 'coradoc/html/converters/sidebar'
45
- autoload :Source, 'coradoc/html/converters/source'
46
- autoload :SourceCode, 'coradoc/html/converters/source_code'
47
- autoload :Span, 'coradoc/html/converters/span'
48
- autoload :Strikethrough, 'coradoc/html/converters/strikethrough'
49
- autoload :Subscript, 'coradoc/html/converters/subscript'
50
- autoload :Superscript, 'coradoc/html/converters/superscript'
51
- autoload :TableCell, 'coradoc/html/converters/table_cell'
52
- autoload :TableRow, 'coradoc/html/converters/table_row'
53
- autoload :Table, 'coradoc/html/converters/table'
54
- autoload :Term, 'coradoc/html/converters/term'
55
- autoload :TextElement, 'coradoc/html/converters/text_element'
56
- autoload :Underline, 'coradoc/html/converters/underline'
57
- autoload :Unordered, 'coradoc/html/converters/unordered'
58
- autoload :Verse, 'coradoc/html/converters/verse'
59
- autoload :Video, 'coradoc/html/converters/video'
60
- end
61
-
62
22
  # Autoload HTML components
63
23
  autoload :Config, 'coradoc/html/config'
64
- autoload :Base, 'coradoc/html/base'
65
- autoload :Entity, 'coradoc/html/entity'
66
- autoload :ElementMapping, 'coradoc/html/element_mapping'
24
+ autoload :Escape, 'coradoc/html/escape'
25
+ autoload :SectionNumberable, 'coradoc/html/section_numberable'
26
+ autoload :TemplateCaching, 'coradoc/html/template_caching'
27
+ autoload :TitleText, 'coradoc/html/title_text'
28
+
29
+ # Drop layer — self-registering drops loaded via parent namespace file
30
+ require 'coradoc/html/drop'
67
31
 
68
32
  # Autoload HTML output converters
69
33
  autoload :ConverterBase, 'coradoc/html/converter_base'
70
34
  autoload :Static, 'coradoc/html/static'
71
35
  autoload :Spa, 'coradoc/html/spa'
36
+ autoload :TocBuilder, 'coradoc/html/toc_builder'
72
37
 
73
38
  # Theme system
74
39
  autoload :Theme, 'coradoc/html/theme'
75
40
  autoload :TemplateLocator, 'coradoc/html/template_locator'
76
41
  autoload :TemplateConfig, 'coradoc/html/template_config'
77
- autoload :TemplateHelpers, 'coradoc/html/template_helpers'
42
+ # Side-effect: registers Liquid filters on load
43
+ require 'coradoc/html/template_helpers'
78
44
  autoload :Renderer, 'coradoc/html/renderer'
45
+ autoload :LayoutRenderer, 'coradoc/html/layout_renderer'
46
+ autoload :TocSerializer, 'coradoc/html/toc_serializer'
79
47
 
80
48
  # CoreModel transformers
81
49
  module Transform
@@ -103,19 +71,18 @@ module Coradoc
103
71
 
104
72
  # Parse HTML content and return CoreModel elements (may be an Array)
105
73
  def self.parse(html, options = {})
106
- # Input::Html is autoloaded via Coradoc::Input
107
- ::Coradoc::Html::Input.to_coradoc(html, options)
74
+ ::Coradoc::Input::Html.to_coradoc(html, options)
108
75
  end
109
76
 
110
77
  # Parse HTML content directly into a CoreModel document
111
78
  #
112
79
  # Unlike #parse which returns an Array of CoreModel elements,
113
- # this wraps the result into a top-level StructuralElement document
80
+ # this wraps the result into a top-level DocumentElement document
114
81
  # suitable for use with Coradoc.serialize and other CoreModel pipelines.
115
82
  #
116
83
  # @param html [String] HTML content
117
84
  # @param options [Hash] Parse options
118
- # @return [Coradoc::CoreModel::StructuralElement] CoreModel document
85
+ # @return [Coradoc::CoreModel::DocumentElement] CoreModel document
119
86
  def self.parse_to_core(html, options = {})
120
87
  elements = parse(html, options)
121
88
 
@@ -133,39 +100,31 @@ module Coradoc
133
100
  end
134
101
  end
135
102
 
136
- Coradoc::CoreModel::StructuralElement.new(
137
- element_type: 'document',
103
+ Coradoc::CoreModel::DocumentElement.new(
138
104
  title: title,
139
105
  children: Array(children)
140
106
  )
141
107
  end
142
108
 
143
109
  # Parse HTML file
144
- def self.from_file(filename, **options)
110
+ def self.from_file(filename, **)
145
111
  content = File.read(filename)
146
- parse(content, **options)
112
+ parse(content, **)
147
113
  end
148
114
 
149
115
  # Serialize CoreModel document to HTML
150
116
  #
151
- # Uses the theme system to render HTML. Default theme is :classic.
117
+ # Uses the unified Liquid template renderer.
152
118
  #
153
119
  # @param document [Coradoc::CoreModel::Base] CoreModel document to serialize
154
120
  # @param options [Hash] Output options
155
121
  # @return [String] HTML output
156
122
  def self.serialize(document, options = {})
157
- # Validate input is CoreModel
158
123
  validate_core_model!(document)
159
124
 
160
- # Trigger theme autoloads to ensure renderers are registered
161
- Theme::ClassicRenderer if options[:theme].nil? || options[:theme] == :classic
162
- Theme::ModernRenderer if options[:theme] == :modern
163
-
164
- # Use theme registry to find and use the appropriate renderer
165
- theme = options[:theme] || :classic
166
- renderer_class = Theme::Registry.find(theme)
167
- renderer = renderer_class.new(document, options)
168
- renderer.render_html5
125
+ layout = options.delete(:layout) || :static
126
+ renderer = Renderer.new(template_dirs: options.delete(:template_dirs))
127
+ renderer.render_html5(document, layout: layout, **options)
169
128
  end
170
129
 
171
130
  # Serialize CoreModel document to static HTML
@@ -176,9 +135,6 @@ module Coradoc
176
135
  # @param config [Hash, Static::Configuration] Static converter configuration
177
136
  # @return [String] HTML output
178
137
  def self.serialize_static(document, config = {})
179
- # Validate input is CoreModel
180
- validate_core_model!(document)
181
-
182
138
  Static.convert(document, config)
183
139
  end
184
140
 
@@ -190,9 +146,6 @@ module Coradoc
190
146
  # @param config [Hash, Spa::Configuration] SPA converter configuration
191
147
  # @return [String] HTML output
192
148
  def self.serialize_spa(document, config = {})
193
- # Validate input is CoreModel
194
- validate_core_model!(document)
195
-
196
149
  Spa.convert(document, config)
197
150
  end
198
151
 
@@ -203,9 +156,6 @@ module Coradoc
203
156
  # @param options [Hash] Converter options
204
157
  # @return [String] HTML output
205
158
  def self.serialize_as(document, format, options = {})
206
- # Validate input is CoreModel
207
- validate_core_model!(document)
208
-
209
159
  case format.to_sym
210
160
  when :static, :html_static, :classic
211
161
  serialize_static(document, options)
@@ -213,7 +163,7 @@ module Coradoc
213
163
  serialize_spa(document, options)
214
164
  else
215
165
  raise ArgumentError, "Unknown output format: #{format}. " \
216
- 'Valid formats: :static, :spa'
166
+ 'Valid formats: :static, :spa'
217
167
  end
218
168
  end
219
169
 
@@ -227,12 +177,15 @@ module Coradoc
227
177
 
228
178
  # Check if this format can transform the given model to CoreModel
229
179
  #
230
- # HTML produces CoreModel directly, so it only handles already-CoreModel objects.
180
+ # HTML uses Nokogiri as its model layer. Accepts Nokogiri nodes
181
+ # and CoreModel objects (pass-through).
231
182
  #
232
183
  # @param model [Object] The model to check
233
- # @return [Boolean] true if the model is already CoreModel
184
+ # @return [Boolean] true if the model is a Nokogiri node or CoreModel
234
185
  def self.handles_model?(model)
235
- model.is_a?(Coradoc::CoreModel::Base)
186
+ model.is_a?(Nokogiri::XML::Node) ||
187
+ model.is_a?(Nokogiri::XML::Document) ||
188
+ model.is_a?(Coradoc::CoreModel::Base)
236
189
  end
237
190
 
238
191
  def self.to_core(document)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coradoc-html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -13,16 +13,16 @@ dependencies:
13
13
  name: coradoc
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ">="
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
18
+ version: '2.0'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - ">="
23
+ - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0'
25
+ version: '2.0'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: coradoc-adoc
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -117,60 +117,31 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - LICENSE.txt
119
119
  - lib/coradoc/html.rb
120
- - lib/coradoc/html/base.rb
121
120
  - lib/coradoc/html/config.rb
122
121
  - lib/coradoc/html/converter_base.rb
123
- - lib/coradoc/html/converters/admonition.rb
124
- - lib/coradoc/html/converters/attribute.rb
125
- - lib/coradoc/html/converters/attribute_reference.rb
126
- - lib/coradoc/html/converters/audio.rb
127
- - lib/coradoc/html/converters/base.rb
128
- - lib/coradoc/html/converters/bibliography.rb
129
- - lib/coradoc/html/converters/bibliography_entry.rb
130
- - lib/coradoc/html/converters/block_image.rb
131
- - lib/coradoc/html/converters/bold.rb
132
- - lib/coradoc/html/converters/break.rb
133
- - lib/coradoc/html/converters/comment_block.rb
134
- - lib/coradoc/html/converters/comment_line.rb
135
- - lib/coradoc/html/converters/cross_reference.rb
136
- - lib/coradoc/html/converters/document.rb
137
- - lib/coradoc/html/converters/example.rb
138
- - lib/coradoc/html/converters/highlight.rb
139
- - lib/coradoc/html/converters/include.rb
140
- - lib/coradoc/html/converters/inline_image.rb
141
- - lib/coradoc/html/converters/italic.rb
142
- - lib/coradoc/html/converters/line_break.rb
143
- - lib/coradoc/html/converters/link.rb
144
- - lib/coradoc/html/converters/list_item.rb
145
- - lib/coradoc/html/converters/listing.rb
146
- - lib/coradoc/html/converters/literal.rb
147
- - lib/coradoc/html/converters/monospace.rb
148
- - lib/coradoc/html/converters/open.rb
149
- - lib/coradoc/html/converters/ordered.rb
150
- - lib/coradoc/html/converters/paragraph.rb
151
- - lib/coradoc/html/converters/quote.rb
152
- - lib/coradoc/html/converters/reviewer_comment.rb
153
- - lib/coradoc/html/converters/reviewer_note.rb
154
- - lib/coradoc/html/converters/section.rb
155
- - lib/coradoc/html/converters/sidebar.rb
156
- - lib/coradoc/html/converters/source.rb
157
- - lib/coradoc/html/converters/source_code.rb
158
- - lib/coradoc/html/converters/span.rb
159
- - lib/coradoc/html/converters/strikethrough.rb
160
- - lib/coradoc/html/converters/subscript.rb
161
- - lib/coradoc/html/converters/superscript.rb
162
- - lib/coradoc/html/converters/table.rb
163
- - lib/coradoc/html/converters/table_cell.rb
164
- - lib/coradoc/html/converters/table_row.rb
165
- - lib/coradoc/html/converters/template_html_converter.rb
166
- - lib/coradoc/html/converters/term.rb
167
- - lib/coradoc/html/converters/text_element.rb
168
- - lib/coradoc/html/converters/underline.rb
169
- - lib/coradoc/html/converters/unordered.rb
170
- - lib/coradoc/html/converters/verse.rb
171
- - lib/coradoc/html/converters/video.rb
172
- - lib/coradoc/html/element_mapping.rb
173
- - lib/coradoc/html/entity.rb
122
+ - lib/coradoc/html/drop.rb
123
+ - lib/coradoc/html/drop/annotation_drop.rb
124
+ - lib/coradoc/html/drop/base.rb
125
+ - lib/coradoc/html/drop/bibliography_drop.rb
126
+ - lib/coradoc/html/drop/bibliography_entry_drop.rb
127
+ - lib/coradoc/html/drop/block_drop.rb
128
+ - lib/coradoc/html/drop/definition_item_drop.rb
129
+ - lib/coradoc/html/drop/definition_list_drop.rb
130
+ - lib/coradoc/html/drop/document_drop.rb
131
+ - lib/coradoc/html/drop/drop_factory.rb
132
+ - lib/coradoc/html/drop/footnote_drop.rb
133
+ - lib/coradoc/html/drop/image_drop.rb
134
+ - lib/coradoc/html/drop/inline_element_drop.rb
135
+ - lib/coradoc/html/drop/list_block_drop.rb
136
+ - lib/coradoc/html/drop/list_item_drop.rb
137
+ - lib/coradoc/html/drop/table_cell_drop.rb
138
+ - lib/coradoc/html/drop/table_drop.rb
139
+ - lib/coradoc/html/drop/table_row_drop.rb
140
+ - lib/coradoc/html/drop/term_drop.rb
141
+ - lib/coradoc/html/drop/text_content_drop.rb
142
+ - lib/coradoc/html/drop/toc_drop.rb
143
+ - lib/coradoc/html/drop/toc_entry_drop.rb
144
+ - lib/coradoc/html/escape.rb
174
145
  - lib/coradoc/html/input.rb
175
146
  - lib/coradoc/html/input/cleaner.rb
176
147
  - lib/coradoc/html/input/config.rb
@@ -191,15 +162,16 @@ files:
191
162
  - lib/coradoc/html/input/converters/h.rb
192
163
  - lib/coradoc/html/input/converters/head.rb
193
164
  - lib/coradoc/html/input/converters/hr.rb
194
- - lib/coradoc/html/input/converters/ignore.rb
195
165
  - lib/coradoc/html/input/converters/img.rb
196
166
  - lib/coradoc/html/input/converters/li.rb
197
167
  - lib/coradoc/html/input/converters/mark.rb
198
168
  - lib/coradoc/html/input/converters/markup.rb
199
169
  - lib/coradoc/html/input/converters/math.rb
170
+ - lib/coradoc/html/input/converters/media_base.rb
200
171
  - lib/coradoc/html/input/converters/ol.rb
201
172
  - lib/coradoc/html/input/converters/p.rb
202
173
  - lib/coradoc/html/input/converters/pass_through.rb
174
+ - lib/coradoc/html/input/converters/positional_formatting.rb
203
175
  - lib/coradoc/html/input/converters/pre.rb
204
176
  - lib/coradoc/html/input/converters/q.rb
205
177
  - lib/coradoc/html/input/converters/strong.rb
@@ -208,7 +180,6 @@ files:
208
180
  - lib/coradoc/html/input/converters/table.rb
209
181
  - lib/coradoc/html/input/converters/td.rb
210
182
  - lib/coradoc/html/input/converters/text.rb
211
- - lib/coradoc/html/input/converters/th.rb
212
183
  - lib/coradoc/html/input/converters/tr.rb
213
184
  - lib/coradoc/html/input/converters/video.rb
214
185
  - lib/coradoc/html/input/errors.rb
@@ -216,24 +187,20 @@ files:
216
187
  - lib/coradoc/html/input/plugin.rb
217
188
  - lib/coradoc/html/input/plugins/plateau.rb
218
189
  - lib/coradoc/html/input/postprocessor.rb
190
+ - lib/coradoc/html/layout_renderer.rb
219
191
  - lib/coradoc/html/output.rb
220
192
  - lib/coradoc/html/renderer.rb
193
+ - lib/coradoc/html/section_numberable.rb
221
194
  - lib/coradoc/html/spa.rb
222
195
  - lib/coradoc/html/static.rb
196
+ - lib/coradoc/html/template_caching.rb
223
197
  - lib/coradoc/html/template_config.rb
224
198
  - lib/coradoc/html/template_helpers.rb
225
199
  - lib/coradoc/html/template_locator.rb
226
200
  - lib/coradoc/html/theme.rb
227
- - lib/coradoc/html/theme/base.rb
228
- - lib/coradoc/html/theme/classic_renderer.rb
229
- - lib/coradoc/html/theme/modern/components/ui_components.rb
230
- - lib/coradoc/html/theme/modern/css_generator.rb
231
- - lib/coradoc/html/theme/modern/javascript_generator.rb
232
- - lib/coradoc/html/theme/modern/serializers/document_serializer.rb
233
- - lib/coradoc/html/theme/modern/tailwind_config_builder.rb
234
- - lib/coradoc/html/theme/modern/vue_template_generator.rb
235
- - lib/coradoc/html/theme/modern_renderer.rb
236
- - lib/coradoc/html/theme/registry.rb
201
+ - lib/coradoc/html/title_text.rb
202
+ - lib/coradoc/html/toc_builder.rb
203
+ - lib/coradoc/html/toc_serializer.rb
237
204
  - lib/coradoc/html/transform/from_core_model.rb
238
205
  - lib/coradoc/html/transform/to_core_model.rb
239
206
  - lib/coradoc/html/version.rb
@@ -244,6 +211,7 @@ metadata:
244
211
  homepage_uri: https://github.com/metanorma/coradoc
245
212
  source_code_uri: https://github.com/metanorma/coradoc
246
213
  changelog_uri: https://github.com/metanorma/coradoc/releases
214
+ rubygems_mfa_required: 'true'
247
215
  rdoc_options: []
248
216
  require_paths:
249
217
  - lib
@@ -251,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
219
  requirements:
252
220
  - - ">="
253
221
  - !ruby/object:Gem::Version
254
- version: 3.0.0
222
+ version: 3.3.0
255
223
  required_rubygems_version: !ruby/object:Gem::Requirement
256
224
  requirements:
257
225
  - - ">="
@@ -1,157 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Coradoc
4
- module Html
5
- # Base module for HTML processing utilities
6
- module Base
7
- class << self
8
- # Convert content to HTML, handling various input types
9
- def convert_content(content, state = {})
10
- return '' if content.nil?
11
-
12
- case content
13
- when String
14
- return '' if content.empty?
15
-
16
- escape_html(content)
17
- when Array
18
- return '' if content.empty?
19
-
20
- content.map { |item| convert_content(item, state) }.join
21
- else
22
- # If content responds to a converter, use it
23
- converter = find_converter(content.class)
24
- if converter
25
- converter.to_html(content, state)
26
- else
27
- content.to_s
28
- end
29
- end
30
- end
31
-
32
- # Find the appropriate converter for a model class
33
- def find_converter(model_class)
34
- return nil unless defined?(Coradoc::Html::Converters)
35
-
36
- converter_name = model_class.name.split('::').last
37
-
38
- # Use const_get on the Converters module to trigger autoload
39
- begin
40
- klass = Coradoc::Html::Converters.const_get(converter_name, false)
41
- # Return nil if this is the Base class itself (not a real converter)
42
- # or if it doesn't inherit from Converters::Base
43
- return nil if klass == Coradoc::Html::Converters::Base
44
- return nil unless klass <= Coradoc::Html::Converters::Base
45
-
46
- klass
47
- rescue NameError
48
- nil
49
- end
50
- end
51
-
52
- # Escape HTML special characters
53
- def escape_html(text)
54
- return '' if text.nil?
55
- return text unless text.is_a?(String)
56
-
57
- text
58
- .gsub('&', '&amp;')
59
- .gsub('<', '&lt;')
60
- .gsub('>', '&gt;')
61
- .gsub('"', '&quot;')
62
- .gsub("'", '&#39;')
63
- end
64
-
65
- # Unescape HTML entities
66
- def unescape_html(text)
67
- return '' if text.nil?
68
- return text unless text.is_a?(String)
69
-
70
- text
71
- .gsub('&amp;', '&')
72
- .gsub('&lt;', '<')
73
- .gsub('&gt;', '>')
74
- .gsub('&quot;', '"')
75
- .gsub('&#39;', "'")
76
- .gsub('&#x27;', "'")
77
- end
78
-
79
- # Build HTML element with attributes
80
- def build_element(tag, content = nil, attributes = {})
81
- attrs = build_attributes(attributes)
82
- attr_string = attrs.empty? ? '' : " #{attrs}"
83
-
84
- # Handle empty content (String, Array, or nil)
85
- content_empty = case content
86
- when nil, String, Array
87
- content.nil? || content.empty?
88
- else
89
- false
90
- end
91
-
92
- if content_empty
93
- # Self-closing for void elements
94
- if void_element?(tag)
95
- "<#{tag}#{attr_string}>"
96
- else
97
- "<#{tag}#{attr_string}></#{tag}>"
98
- end
99
- else
100
- "<#{tag}#{attr_string}>#{content}</#{tag}>"
101
- end
102
- end
103
-
104
- # Build HTML attributes string
105
- def build_attributes(attributes)
106
- return '' if attributes.nil? || attributes.empty?
107
-
108
- attributes.map do |key, value|
109
- next if value.nil?
110
-
111
- escaped_value = escape_html(value.to_s)
112
- %(#{key}="#{escaped_value}")
113
- end.compact.join(' ')
114
- end
115
-
116
- # Check if element is a void element (self-closing)
117
- def void_element?(tag)
118
- %w[area base br col embed hr img input link meta param source track wbr].include?(tag.to_s)
119
- end
120
-
121
- # Extract attributes from a CoreModel
122
- #
123
- # @param model [Coradoc::CoreModel::Base] Model to extract attributes from
124
- # @return [Hash] Attributes hash
125
- def extract_attributes(model)
126
- attrs = {}
127
-
128
- attrs[:id] = model.id if model.id
129
- attrs[:title] = model.title if model.title
130
-
131
- if model.is_a?(Coradoc::CoreModel::StructuralElement) && model.metadata
132
- attrs[:class] = model.metadata[:class] || model.metadata[:role]
133
- attrs.merge!(model.metadata.except(:class, :role))
134
- end
135
-
136
- attrs
137
- end
138
-
139
- # Wrap content with line breaks if needed
140
- def wrap_lines(content)
141
- return content unless content.is_a?(String)
142
-
143
- content.split("\n").join("<br>\n")
144
- end
145
-
146
- # Process children of a node (common operation)
147
- def treat_children(children, state = {})
148
- return [] if children.nil? || children.empty?
149
-
150
- Array(children).map do |child|
151
- convert_content(child, state)
152
- end
153
- end
154
- end
155
- end
156
- end
157
- end