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
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,33 @@ 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
+ # Autoload Drop namespace (DropFactory loads Base + all drops)
30
+ module Drop
31
+ autoload :DropFactory, 'coradoc/html/drop/drop_factory'
32
+ autoload :Base, 'coradoc/html/drop/base'
33
+ end
67
34
 
68
35
  # Autoload HTML output converters
69
36
  autoload :ConverterBase, 'coradoc/html/converter_base'
70
37
  autoload :Static, 'coradoc/html/static'
71
38
  autoload :Spa, 'coradoc/html/spa'
39
+ autoload :TocBuilder, 'coradoc/html/toc_builder'
72
40
 
73
41
  # Theme system
74
42
  autoload :Theme, 'coradoc/html/theme'
75
43
  autoload :TemplateLocator, 'coradoc/html/template_locator'
76
44
  autoload :TemplateConfig, 'coradoc/html/template_config'
77
- autoload :TemplateHelpers, 'coradoc/html/template_helpers'
45
+ autoload :TemplateFilters, 'coradoc/html/template_helpers'
78
46
  autoload :Renderer, 'coradoc/html/renderer'
47
+ autoload :LayoutRenderer, 'coradoc/html/layout_renderer'
48
+ autoload :TocSerializer, 'coradoc/html/toc_serializer'
79
49
 
80
50
  # CoreModel transformers
81
51
  module Transform
@@ -103,19 +73,18 @@ module Coradoc
103
73
 
104
74
  # Parse HTML content and return CoreModel elements (may be an Array)
105
75
  def self.parse(html, options = {})
106
- # Input::Html is autoloaded via Coradoc::Input
107
- ::Coradoc::Html::Input.to_coradoc(html, options)
76
+ ::Coradoc::Input::Html.to_coradoc(html, options)
108
77
  end
109
78
 
110
79
  # Parse HTML content directly into a CoreModel document
111
80
  #
112
81
  # Unlike #parse which returns an Array of CoreModel elements,
113
- # this wraps the result into a top-level StructuralElement document
82
+ # this wraps the result into a top-level DocumentElement document
114
83
  # suitable for use with Coradoc.serialize and other CoreModel pipelines.
115
84
  #
116
85
  # @param html [String] HTML content
117
86
  # @param options [Hash] Parse options
118
- # @return [Coradoc::CoreModel::StructuralElement] CoreModel document
87
+ # @return [Coradoc::CoreModel::DocumentElement] CoreModel document
119
88
  def self.parse_to_core(html, options = {})
120
89
  elements = parse(html, options)
121
90
 
@@ -133,39 +102,31 @@ module Coradoc
133
102
  end
134
103
  end
135
104
 
136
- Coradoc::CoreModel::StructuralElement.new(
137
- element_type: 'document',
105
+ Coradoc::CoreModel::DocumentElement.new(
138
106
  title: title,
139
107
  children: Array(children)
140
108
  )
141
109
  end
142
110
 
143
111
  # Parse HTML file
144
- def self.from_file(filename, **options)
112
+ def self.from_file(filename, **)
145
113
  content = File.read(filename)
146
- parse(content, **options)
114
+ parse(content, **)
147
115
  end
148
116
 
149
117
  # Serialize CoreModel document to HTML
150
118
  #
151
- # Uses the theme system to render HTML. Default theme is :classic.
119
+ # Uses the unified Liquid template renderer.
152
120
  #
153
121
  # @param document [Coradoc::CoreModel::Base] CoreModel document to serialize
154
122
  # @param options [Hash] Output options
155
123
  # @return [String] HTML output
156
124
  def self.serialize(document, options = {})
157
- # Validate input is CoreModel
158
125
  validate_core_model!(document)
159
126
 
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
127
+ layout = options.delete(:layout) || :static
128
+ renderer = Renderer.new(template_dirs: options.delete(:template_dirs))
129
+ renderer.render_html5(document, layout: layout, **options)
169
130
  end
170
131
 
171
132
  # Serialize CoreModel document to static HTML
@@ -176,9 +137,6 @@ module Coradoc
176
137
  # @param config [Hash, Static::Configuration] Static converter configuration
177
138
  # @return [String] HTML output
178
139
  def self.serialize_static(document, config = {})
179
- # Validate input is CoreModel
180
- validate_core_model!(document)
181
-
182
140
  Static.convert(document, config)
183
141
  end
184
142
 
@@ -190,9 +148,6 @@ module Coradoc
190
148
  # @param config [Hash, Spa::Configuration] SPA converter configuration
191
149
  # @return [String] HTML output
192
150
  def self.serialize_spa(document, config = {})
193
- # Validate input is CoreModel
194
- validate_core_model!(document)
195
-
196
151
  Spa.convert(document, config)
197
152
  end
198
153
 
@@ -203,9 +158,6 @@ module Coradoc
203
158
  # @param options [Hash] Converter options
204
159
  # @return [String] HTML output
205
160
  def self.serialize_as(document, format, options = {})
206
- # Validate input is CoreModel
207
- validate_core_model!(document)
208
-
209
161
  case format.to_sym
210
162
  when :static, :html_static, :classic
211
163
  serialize_static(document, options)
@@ -213,7 +165,7 @@ module Coradoc
213
165
  serialize_spa(document, options)
214
166
  else
215
167
  raise ArgumentError, "Unknown output format: #{format}. " \
216
- 'Valid formats: :static, :spa'
168
+ 'Valid formats: :static, :spa'
217
169
  end
218
170
  end
219
171
 
@@ -227,12 +179,15 @@ module Coradoc
227
179
 
228
180
  # Check if this format can transform the given model to CoreModel
229
181
  #
230
- # HTML produces CoreModel directly, so it only handles already-CoreModel objects.
182
+ # HTML uses Nokogiri as its model layer. Accepts Nokogiri nodes
183
+ # and CoreModel objects (pass-through).
231
184
  #
232
185
  # @param model [Object] The model to check
233
- # @return [Boolean] true if the model is already CoreModel
186
+ # @return [Boolean] true if the model is a Nokogiri node or CoreModel
234
187
  def self.handles_model?(model)
235
- model.is_a?(Coradoc::CoreModel::Base)
188
+ model.is_a?(Nokogiri::XML::Node) ||
189
+ model.is_a?(Nokogiri::XML::Document) ||
190
+ model.is_a?(Coradoc::CoreModel::Base)
236
191
  end
237
192
 
238
193
  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.13
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,30 @@ 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/annotation_drop.rb
123
+ - lib/coradoc/html/drop/base.rb
124
+ - lib/coradoc/html/drop/bibliography_drop.rb
125
+ - lib/coradoc/html/drop/bibliography_entry_drop.rb
126
+ - lib/coradoc/html/drop/block_drop.rb
127
+ - lib/coradoc/html/drop/definition_item_drop.rb
128
+ - lib/coradoc/html/drop/definition_list_drop.rb
129
+ - lib/coradoc/html/drop/document_drop.rb
130
+ - lib/coradoc/html/drop/drop_factory.rb
131
+ - lib/coradoc/html/drop/footnote_drop.rb
132
+ - lib/coradoc/html/drop/image_drop.rb
133
+ - lib/coradoc/html/drop/inline_element_drop.rb
134
+ - lib/coradoc/html/drop/list_block_drop.rb
135
+ - lib/coradoc/html/drop/list_item_drop.rb
136
+ - lib/coradoc/html/drop/table_cell_drop.rb
137
+ - lib/coradoc/html/drop/table_drop.rb
138
+ - lib/coradoc/html/drop/table_row_drop.rb
139
+ - lib/coradoc/html/drop/term_drop.rb
140
+ - lib/coradoc/html/drop/text_content_drop.rb
141
+ - lib/coradoc/html/drop/toc_drop.rb
142
+ - lib/coradoc/html/drop/toc_entry_drop.rb
143
+ - lib/coradoc/html/escape.rb
174
144
  - lib/coradoc/html/input.rb
175
145
  - lib/coradoc/html/input/cleaner.rb
176
146
  - lib/coradoc/html/input/config.rb
@@ -191,15 +161,16 @@ files:
191
161
  - lib/coradoc/html/input/converters/h.rb
192
162
  - lib/coradoc/html/input/converters/head.rb
193
163
  - lib/coradoc/html/input/converters/hr.rb
194
- - lib/coradoc/html/input/converters/ignore.rb
195
164
  - lib/coradoc/html/input/converters/img.rb
196
165
  - lib/coradoc/html/input/converters/li.rb
197
166
  - lib/coradoc/html/input/converters/mark.rb
198
167
  - lib/coradoc/html/input/converters/markup.rb
199
168
  - lib/coradoc/html/input/converters/math.rb
169
+ - lib/coradoc/html/input/converters/media_base.rb
200
170
  - lib/coradoc/html/input/converters/ol.rb
201
171
  - lib/coradoc/html/input/converters/p.rb
202
172
  - lib/coradoc/html/input/converters/pass_through.rb
173
+ - lib/coradoc/html/input/converters/positional_formatting.rb
203
174
  - lib/coradoc/html/input/converters/pre.rb
204
175
  - lib/coradoc/html/input/converters/q.rb
205
176
  - lib/coradoc/html/input/converters/strong.rb
@@ -208,7 +179,6 @@ files:
208
179
  - lib/coradoc/html/input/converters/table.rb
209
180
  - lib/coradoc/html/input/converters/td.rb
210
181
  - lib/coradoc/html/input/converters/text.rb
211
- - lib/coradoc/html/input/converters/th.rb
212
182
  - lib/coradoc/html/input/converters/tr.rb
213
183
  - lib/coradoc/html/input/converters/video.rb
214
184
  - lib/coradoc/html/input/errors.rb
@@ -216,24 +186,20 @@ files:
216
186
  - lib/coradoc/html/input/plugin.rb
217
187
  - lib/coradoc/html/input/plugins/plateau.rb
218
188
  - lib/coradoc/html/input/postprocessor.rb
189
+ - lib/coradoc/html/layout_renderer.rb
219
190
  - lib/coradoc/html/output.rb
220
191
  - lib/coradoc/html/renderer.rb
192
+ - lib/coradoc/html/section_numberable.rb
221
193
  - lib/coradoc/html/spa.rb
222
194
  - lib/coradoc/html/static.rb
195
+ - lib/coradoc/html/template_caching.rb
223
196
  - lib/coradoc/html/template_config.rb
224
197
  - lib/coradoc/html/template_helpers.rb
225
198
  - lib/coradoc/html/template_locator.rb
226
199
  - 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
200
+ - lib/coradoc/html/title_text.rb
201
+ - lib/coradoc/html/toc_builder.rb
202
+ - lib/coradoc/html/toc_serializer.rb
237
203
  - lib/coradoc/html/transform/from_core_model.rb
238
204
  - lib/coradoc/html/transform/to_core_model.rb
239
205
  - lib/coradoc/html/version.rb
@@ -244,6 +210,7 @@ metadata:
244
210
  homepage_uri: https://github.com/metanorma/coradoc
245
211
  source_code_uri: https://github.com/metanorma/coradoc
246
212
  changelog_uri: https://github.com/metanorma/coradoc/releases
213
+ rubygems_mfa_required: 'true'
247
214
  rdoc_options: []
248
215
  require_paths:
249
216
  - lib
@@ -251,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
218
  requirements:
252
219
  - - ">="
253
220
  - !ruby/object:Gem::Version
254
- version: 3.0.0
221
+ version: 3.3.0
255
222
  required_rubygems_version: !ruby/object:Gem::Requirement
256
223
  requirements:
257
224
  - - ">="
@@ -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