metanorma-document 0.5.1 → 0.5.2.pre.alpha.1

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 (534) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +81 -0
  3. data/Rakefile +3 -7
  4. data/data/themes/ogc.yaml +5 -0
  5. data/lib/metanorma/basic_document/ancillary_blocks/figure_block.rb +2 -2
  6. data/lib/metanorma/basic_document/multi_paragraph/admonition_block.rb +2 -2
  7. data/lib/metanorma/document/cli.rb +134 -0
  8. data/lib/metanorma/document/components/ancillary_blocks/figure_block.rb +5 -0
  9. data/lib/metanorma/document/components/ancillary_blocks/fmt_figure_element.rb +47 -0
  10. data/lib/metanorma/document/components/ancillary_blocks/formula_block.rb +2 -0
  11. data/lib/metanorma/document/components/ancillary_blocks/imagemap_element.rb +73 -0
  12. data/lib/metanorma/document/components/ancillary_blocks/literal_block.rb +2 -0
  13. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +2 -0
  14. data/lib/metanorma/document/components/ancillary_blocks/svg_target_element.rb +27 -0
  15. data/lib/metanorma/document/components/ancillary_blocks/svgmap_element.rb +28 -0
  16. data/lib/metanorma/document/components/ancillary_blocks.rb +4 -0
  17. data/lib/metanorma/document/components/bib_data/bibliographic_item.rb +4 -0
  18. data/lib/metanorma/document/components/blocks/fmt_provision.rb +25 -0
  19. data/lib/metanorma/document/components/blocks/note_block.rb +8 -0
  20. data/lib/metanorma/document/components/blocks/permission_model.rb +9 -0
  21. data/lib/metanorma/document/components/blocks/recommendation_model.rb +9 -0
  22. data/lib/metanorma/document/components/blocks/requirement_base.rb +12 -0
  23. data/lib/metanorma/document/components/blocks/requirement_import.rb +23 -0
  24. data/lib/metanorma/document/components/blocks/requirement_measurement_target.rb +23 -0
  25. data/lib/metanorma/document/components/blocks/requirement_model.rb +9 -0
  26. data/lib/metanorma/document/components/blocks/requirement_specification.rb +23 -0
  27. data/lib/metanorma/document/components/blocks/requirement_verification.rb +23 -0
  28. data/lib/metanorma/document/components/blocks.rb +8 -0
  29. data/lib/metanorma/document/components/data_types/formatted_string.rb +9 -0
  30. data/lib/metanorma/document/components/id_elements/image.rb +4 -0
  31. data/lib/metanorma/document/components/inline/columnbreak_element.rb +17 -0
  32. data/lib/metanorma/document/components/inline/concept_element.rb +18 -0
  33. data/lib/metanorma/document/components/inline/date_element.rb +29 -0
  34. data/lib/metanorma/document/components/inline/display_text_element.rb +2 -0
  35. data/lib/metanorma/document/components/inline/em_raw_element.rb +6 -7
  36. data/lib/metanorma/document/components/inline/eref_element.rb +48 -22
  37. data/lib/metanorma/document/components/inline/eref_stack.rb +23 -0
  38. data/lib/metanorma/document/components/inline/error_message.rb +28 -0
  39. data/lib/metanorma/document/components/inline/fmt_date_element.rb +28 -0
  40. data/lib/metanorma/document/components/inline/fmt_date_inline_element.rb +26 -0
  41. data/lib/metanorma/document/components/inline/fmt_eref_element.rb +25 -0
  42. data/lib/metanorma/document/components/inline/fmt_origin_element.rb +24 -0
  43. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +3 -0
  44. data/lib/metanorma/document/components/inline/fmt_source_element.rb +31 -0
  45. data/lib/metanorma/document/components/inline/fn_element.rb +11 -0
  46. data/lib/metanorma/document/components/inline/link_element.rb +8 -0
  47. data/lib/metanorma/document/components/inline/name_with_id_element.rb +2 -0
  48. data/lib/metanorma/document/components/inline/refterm_element.rb +21 -0
  49. data/lib/metanorma/document/components/inline/semx_element.rb +22 -0
  50. data/lib/metanorma/document/components/inline/sourcelocality_stack_element.rb +27 -0
  51. data/lib/metanorma/document/components/inline/span_element.rb +2 -0
  52. data/lib/metanorma/document/components/inline/stem_inline_element.rb +2 -0
  53. data/lib/metanorma/document/components/inline/strong_raw_element.rb +6 -9
  54. data/lib/metanorma/document/components/inline/sub_element.rb +2 -0
  55. data/lib/metanorma/document/components/inline/termref_element.rb +24 -0
  56. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +10 -31
  57. data/lib/metanorma/document/components/inline/variant_title_element.rb +2 -0
  58. data/lib/metanorma/document/components/inline/vocabulary.rb +36 -0
  59. data/lib/metanorma/document/components/inline.rb +23 -0
  60. data/lib/metanorma/document/components/lists/dd_element.rb +6 -1
  61. data/lib/metanorma/document/components/lists/definition.rb +2 -0
  62. data/lib/metanorma/document/components/lists/definition_list.rb +3 -0
  63. data/lib/metanorma/document/components/lists/dt_element.rb +3 -0
  64. data/lib/metanorma/document/components/lists/fmt_list_element.rb +73 -0
  65. data/lib/metanorma/document/components/lists/list_item.rb +3 -0
  66. data/lib/metanorma/document/components/lists/ordered_list.rb +4 -2
  67. data/lib/metanorma/document/components/lists/unordered_list.rb +2 -0
  68. data/lib/metanorma/document/components/lists.rb +2 -0
  69. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +16 -0
  70. data/lib/metanorma/document/components/multi_paragraph/review_block.rb +2 -2
  71. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +15 -0
  72. data/lib/metanorma/document/components/reference_elements/citation.rb +7 -0
  73. data/lib/metanorma/document/components/reference_elements/source_element.rb +4 -0
  74. data/lib/metanorma/document/components/semantic/node.rb +46 -0
  75. data/lib/metanorma/document/components/semantic.rb +11 -0
  76. data/lib/metanorma/document/components/tables/header_table_cell.rb +1 -0
  77. data/lib/metanorma/document/components/tables/table_cell.rb +70 -44
  78. data/lib/metanorma/document/components/tables/text_table_cell.rb +1 -0
  79. data/lib/metanorma/document/components/tables/text_table_row.rb +2 -0
  80. data/lib/metanorma/document/components/text_elements/ruby_annotation_element.rb +26 -0
  81. data/lib/metanorma/document/components/text_elements/ruby_element.rb +41 -6
  82. data/lib/metanorma/document/components/text_elements/ruby_pronunciation_element.rb +25 -0
  83. data/lib/metanorma/document/components/text_elements/strike_element.rb +3 -0
  84. data/lib/metanorma/document/components/text_elements/underline_element.rb +3 -0
  85. data/lib/metanorma/document/components/text_elements.rb +2 -0
  86. data/lib/metanorma/document/components.rb +1 -0
  87. data/lib/metanorma/document/grammar_vocabulary.rb +109 -0
  88. data/lib/metanorma/document/mirror_seed.rb +253 -0
  89. data/lib/metanorma/document/mko/collection.rb +168 -0
  90. data/lib/metanorma/document/mko/exporter.rb +17 -0
  91. data/lib/metanorma/document/mko/project.rb +1110 -0
  92. data/lib/metanorma/document/mko.rb +122 -0
  93. data/lib/metanorma/document/model_access.rb +44 -0
  94. data/lib/metanorma/document/native_models.rb +319 -0
  95. data/lib/metanorma/document/plain_text.rb +39 -0
  96. data/lib/metanorma/document/relaton/version_info.rb +4 -0
  97. data/lib/metanorma/document/version.rb +1 -1
  98. data/lib/metanorma/document.rb +19 -26
  99. data/lib/metanorma/{collection → document_collection}/directive.rb +1 -1
  100. data/lib/metanorma/{collection → document_collection}/doc_container.rb +6 -2
  101. data/lib/metanorma/{collection → document_collection}/entry.rb +2 -2
  102. data/lib/metanorma/{collection → document_collection}/root.rb +2 -2
  103. data/lib/metanorma/document_collection.rb +10 -0
  104. data/lib/metanorma/html/base_renderer.rb +94 -25
  105. data/lib/metanorma/html/component/footnote_collector.rb +21 -20
  106. data/lib/metanorma/html/concerns/metadata_extraction.rb +8 -3
  107. data/lib/metanorma/html/concerns/presentation_validation.rb +1 -2
  108. data/lib/metanorma/html/concerns/text_extraction.rb +154 -35
  109. data/lib/metanorma/html/concerns.rb +19 -0
  110. data/lib/metanorma/html/drops/admonition_drop.rb +1 -1
  111. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  112. data/lib/metanorma/html/drops/sourcecode_drop.rb +22 -4
  113. data/lib/metanorma/html/generator.rb +11 -187
  114. data/lib/metanorma/html/renderer_delegation.rb +2 -2
  115. data/lib/metanorma/html/renderers/block_renderer.rb +206 -46
  116. data/lib/metanorma/html/renderers/inline_renderer.rb +144 -17
  117. data/lib/metanorma/html/renderers/section_renderer.rb +12 -2
  118. data/lib/metanorma/html/renderers/semantic_renderer.rb +487 -0
  119. data/lib/metanorma/html/renderers.rb +2 -0
  120. data/lib/metanorma/html/standard_renderer.rb +732 -76
  121. data/lib/metanorma/html/templates/_agency_cover.html.liquid +30 -0
  122. data/lib/metanorma/html/templates/_columnbreak.html.liquid +1 -0
  123. data/lib/metanorma/html/templates/_cover.html.liquid +3 -0
  124. data/lib/metanorma/html/templates/_main_content.html.liquid +1 -1
  125. data/lib/metanorma/html/templates/_ruby.html.liquid +1 -0
  126. data/lib/metanorma/html/templates/_sourcecode.html.liquid +4 -3
  127. data/lib/metanorma/html/templates/_standard_cover.html.liquid +54 -3
  128. data/lib/metanorma/html.rb +30 -15
  129. data/tasks/flavors.rake +116 -0
  130. data/tasks/grammar.rake +28 -0
  131. data/tasks/roundtrip_samples.rake +48 -34
  132. metadata +121 -416
  133. data/frontend/dist/app.css +0 -1
  134. data/frontend/dist/app.iife.js +0 -24
  135. data/lib/metanorma/bipm_document/metadata/bipm_bib_data_extension_type.rb +0 -20
  136. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +0 -17
  137. data/lib/metanorma/bipm_document/metadata/bipm_structured_identifier.rb +0 -21
  138. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +0 -18
  139. data/lib/metanorma/bipm_document/metadata.rb +0 -15
  140. data/lib/metanorma/bipm_document/root.rb +0 -25
  141. data/lib/metanorma/bipm_document.rb +0 -8
  142. data/lib/metanorma/bsi_document/metadata/bsi_bib_data_extension_type.rb +0 -10
  143. data/lib/metanorma/bsi_document/metadata/bsi_bibliographic_item.rb +0 -15
  144. data/lib/metanorma/bsi_document/metadata.rb +0 -12
  145. data/lib/metanorma/bsi_document/root.rb +0 -29
  146. data/lib/metanorma/bsi_document/sections/bsi_annex_section.rb +0 -25
  147. data/lib/metanorma/bsi_document/sections/bsi_clause_section.rb +0 -25
  148. data/lib/metanorma/bsi_document/sections/bsi_sections.rb +0 -27
  149. data/lib/metanorma/bsi_document/sections.rb +0 -11
  150. data/lib/metanorma/bsi_document.rb +0 -11
  151. data/lib/metanorma/cc_document/metadata/cc_bib_data_extension_type.rb +0 -12
  152. data/lib/metanorma/cc_document/metadata/cc_bibliographic_item.rb +0 -17
  153. data/lib/metanorma/cc_document/metadata.rb +0 -11
  154. data/lib/metanorma/cc_document/root.rb +0 -25
  155. data/lib/metanorma/cc_document.rb +0 -8
  156. data/lib/metanorma/collection.rb +0 -10
  157. data/lib/metanorma/csa_document/root.rb +0 -27
  158. data/lib/metanorma/csa_document.rb +0 -9
  159. data/lib/metanorma/gb_document/metadata/gb_bib_data_extension_type.rb +0 -10
  160. data/lib/metanorma/gb_document/metadata/gb_bibliographic_item.rb +0 -15
  161. data/lib/metanorma/gb_document/metadata.rb +0 -12
  162. data/lib/metanorma/gb_document/root.rb +0 -29
  163. data/lib/metanorma/gb_document.rb +0 -10
  164. data/lib/metanorma/generic_document/root.rb +0 -31
  165. data/lib/metanorma/generic_document.rb +0 -7
  166. data/lib/metanorma/html/bipm_renderer.rb +0 -23
  167. data/lib/metanorma/html/cc_renderer.rb +0 -9
  168. data/lib/metanorma/html/csa_renderer.rb +0 -9
  169. data/lib/metanorma/html/flavor.rb +0 -50
  170. data/lib/metanorma/html/flavor_registry.rb +0 -49
  171. data/lib/metanorma/html/icc_renderer.rb +0 -10
  172. data/lib/metanorma/html/iec_renderer.rb +0 -9
  173. data/lib/metanorma/html/ieee_renderer.rb +0 -9
  174. data/lib/metanorma/html/ietf_renderer.rb +0 -9
  175. data/lib/metanorma/html/iho_renderer.rb +0 -9
  176. data/lib/metanorma/html/iso_renderer.rb +0 -535
  177. data/lib/metanorma/html/itu_renderer.rb +0 -9
  178. data/lib/metanorma/html/ogc_renderer.rb +0 -23
  179. data/lib/metanorma/html/pdfa_renderer.rb +0 -10
  180. data/lib/metanorma/html/ribose_renderer.rb +0 -9
  181. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +0 -27
  182. data/lib/metanorma/html/templates/_iso_cover.html.liquid +0 -31
  183. data/lib/metanorma/html/templates/_iso_doc_title.html.liquid +0 -3
  184. data/lib/metanorma/iec_document/root.rb +0 -27
  185. data/lib/metanorma/iec_document.rb +0 -9
  186. data/lib/metanorma/ieee_document/metadata/ieee_bib_data_extension_type.rb +0 -18
  187. data/lib/metanorma/ieee_document/metadata/ieee_bibliographic_item.rb +0 -20
  188. data/lib/metanorma/ieee_document/metadata/ieee_structured_identifier.rb +0 -25
  189. data/lib/metanorma/ieee_document/metadata.rb +0 -14
  190. data/lib/metanorma/ieee_document/root.rb +0 -29
  191. data/lib/metanorma/ieee_document/sections/ieee_sections.rb +0 -31
  192. data/lib/metanorma/ieee_document/sections.rb +0 -9
  193. data/lib/metanorma/ieee_document.rb +0 -11
  194. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -31
  195. data/lib/metanorma/ietf_document/metadata/ietf_bibliographic_item.rb +0 -51
  196. data/lib/metanorma/ietf_document/metadata/ietf_editorial_group.rb +0 -17
  197. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +0 -32
  198. data/lib/metanorma/ietf_document/metadata.rb +0 -16
  199. data/lib/metanorma/ietf_document/root.rb +0 -30
  200. data/lib/metanorma/ietf_document/sections/ietf_annex_section.rb +0 -26
  201. data/lib/metanorma/ietf_document/sections/ietf_clause_section.rb +0 -26
  202. data/lib/metanorma/ietf_document/sections/ietf_content_section.rb +0 -25
  203. data/lib/metanorma/ietf_document/sections/ietf_sections.rb +0 -35
  204. data/lib/metanorma/ietf_document/sections.rb +0 -12
  205. data/lib/metanorma/ietf_document.rb +0 -11
  206. data/lib/metanorma/iho_document/metadata/iho_bib_data_extension_type.rb +0 -23
  207. data/lib/metanorma/iho_document/metadata/iho_bibliographic_item.rb +0 -20
  208. data/lib/metanorma/iho_document/metadata/iho_editorial_group.rb +0 -19
  209. data/lib/metanorma/iho_document/metadata/iho_series.rb +0 -22
  210. data/lib/metanorma/iho_document/metadata/iho_sub_group.rb +0 -18
  211. data/lib/metanorma/iho_document/metadata.rb +0 -15
  212. data/lib/metanorma/iho_document/root.rb +0 -25
  213. data/lib/metanorma/iho_document.rb +0 -8
  214. data/lib/metanorma/iso_document/annotation_container.rb +0 -7
  215. data/lib/metanorma/iso_document/blocks/iso_admonition_block.rb +0 -27
  216. data/lib/metanorma/iso_document/blocks/iso_admonition_type.rb +0 -25
  217. data/lib/metanorma/iso_document/blocks.rb +0 -12
  218. data/lib/metanorma/iso_document/boilerplate.rb +0 -7
  219. data/lib/metanorma/iso_document/metadata/abstract_title.rb +0 -36
  220. data/lib/metanorma/iso_document/metadata/doc_identifier.rb +0 -26
  221. data/lib/metanorma/iso_document/metadata/doctype_element.rb +0 -20
  222. data/lib/metanorma/iso_document/metadata/ics.rb +0 -19
  223. data/lib/metanorma/iso_document/metadata/iec_document_category.rb +0 -23
  224. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +0 -38
  225. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +0 -103
  226. data/lib/metanorma/iso_document/metadata/iso_document_id.rb +0 -46
  227. data/lib/metanorma/iso_document/metadata/iso_document_stage_codes.rb +0 -26
  228. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +0 -26
  229. data/lib/metanorma/iso_document/metadata/iso_document_substage_codes.rb +0 -26
  230. data/lib/metanorma/iso_document/metadata/iso_document_type.rb +0 -25
  231. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +0 -61
  232. data/lib/metanorma/iso_document/metadata/iso_project_group.rb +0 -32
  233. data/lib/metanorma/iso_document/metadata/iso_sub_group.rb +0 -38
  234. data/lib/metanorma/iso_document/metadata/language_element.rb +0 -18
  235. data/lib/metanorma/iso_document/metadata/metanorma_extension.rb +0 -9
  236. data/lib/metanorma/iso_document/metadata/project_number.rb +0 -22
  237. data/lib/metanorma/iso_document/metadata/script_element.rb +0 -18
  238. data/lib/metanorma/iso_document/metadata/stage_element.rb +0 -26
  239. data/lib/metanorma/iso_document/metadata/stagename_element.rb +0 -18
  240. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +0 -16
  241. data/lib/metanorma/iso_document/metadata/title_amd.rb +0 -12
  242. data/lib/metanorma/iso_document/metadata/title_amendment_prefix.rb +0 -12
  243. data/lib/metanorma/iso_document/metadata/title_collection.rb +0 -47
  244. data/lib/metanorma/iso_document/metadata/title_full.rb +0 -12
  245. data/lib/metanorma/iso_document/metadata/title_intro.rb +0 -12
  246. data/lib/metanorma/iso_document/metadata/title_main.rb +0 -12
  247. data/lib/metanorma/iso_document/metadata/title_part.rb +0 -12
  248. data/lib/metanorma/iso_document/metadata/title_part_prefix.rb +0 -12
  249. data/lib/metanorma/iso_document/metadata.rb +0 -44
  250. data/lib/metanorma/iso_document/root.rb +0 -26
  251. data/lib/metanorma/iso_document/sections/colophon.rb +0 -3
  252. data/lib/metanorma/iso_document/sections/iso_abstract_section.rb +0 -15
  253. data/lib/metanorma/iso_document/sections/iso_amendment_clause.rb +0 -24
  254. data/lib/metanorma/iso_document/sections/iso_annex_section.rb +0 -50
  255. data/lib/metanorma/iso_document/sections/iso_clause_section.rb +0 -49
  256. data/lib/metanorma/iso_document/sections/iso_foreword_section.rb +0 -33
  257. data/lib/metanorma/iso_document/sections/iso_preface.rb +0 -51
  258. data/lib/metanorma/iso_document/sections/iso_sections.rb +0 -51
  259. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +0 -76
  260. data/lib/metanorma/iso_document/sections.rb +0 -17
  261. data/lib/metanorma/iso_document/terms/iso_term.rb +0 -71
  262. data/lib/metanorma/iso_document/terms/iso_term_collection.rb +0 -20
  263. data/lib/metanorma/iso_document/terms/term_definition.rb +0 -30
  264. data/lib/metanorma/iso_document/terms/term_designation.rb +0 -44
  265. data/lib/metanorma/iso_document/terms/term_domain_element.rb +0 -18
  266. data/lib/metanorma/iso_document/terms/term_example.rb +0 -40
  267. data/lib/metanorma/iso_document/terms/term_expression.rb +0 -10
  268. data/lib/metanorma/iso_document/terms/term_note.rb +0 -42
  269. data/lib/metanorma/iso_document/terms/term_origin.rb +0 -4
  270. data/lib/metanorma/iso_document/terms/term_source.rb +0 -21
  271. data/lib/metanorma/iso_document/terms/verbal_definition.rb +0 -42
  272. data/lib/metanorma/iso_document/terms.rb +0 -21
  273. data/lib/metanorma/iso_document.rb +0 -15
  274. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +0 -26
  275. data/lib/metanorma/itu_document/metadata/itu_bibliographic_item.rb +0 -21
  276. data/lib/metanorma/itu_document/metadata/itu_series.rb +0 -22
  277. data/lib/metanorma/itu_document/metadata/itu_structured_identifier.rb +0 -23
  278. data/lib/metanorma/itu_document/metadata/meeting_date.rb +0 -18
  279. data/lib/metanorma/itu_document/metadata/meeting_element.rb +0 -18
  280. data/lib/metanorma/itu_document/metadata/study_period.rb +0 -18
  281. data/lib/metanorma/itu_document/metadata.rb +0 -18
  282. data/lib/metanorma/itu_document/root.rb +0 -25
  283. data/lib/metanorma/itu_document.rb +0 -8
  284. data/lib/metanorma/jis_document/metadata/jis_bib_data_extension_type.rb +0 -10
  285. data/lib/metanorma/jis_document/metadata/jis_bibliographic_item.rb +0 -15
  286. data/lib/metanorma/jis_document/metadata.rb +0 -12
  287. data/lib/metanorma/jis_document/root.rb +0 -29
  288. data/lib/metanorma/jis_document/sections/jis_annex_section.rb +0 -20
  289. data/lib/metanorma/jis_document/sections.rb +0 -9
  290. data/lib/metanorma/jis_document.rb +0 -11
  291. data/lib/metanorma/m3d_document/metadata/m3d_bib_data_extension_type.rb +0 -10
  292. data/lib/metanorma/m3d_document/metadata/m3d_bibliographic_item.rb +0 -15
  293. data/lib/metanorma/m3d_document/metadata.rb +0 -12
  294. data/lib/metanorma/m3d_document/root.rb +0 -29
  295. data/lib/metanorma/m3d_document.rb +0 -10
  296. data/lib/metanorma/mirror/default_registry.rb +0 -191
  297. data/lib/metanorma/mirror/handler_registry.rb +0 -60
  298. data/lib/metanorma/mirror/handler_result.rb +0 -37
  299. data/lib/metanorma/mirror/handlers/admonition.rb +0 -18
  300. data/lib/metanorma/mirror/handlers/example.rb +0 -21
  301. data/lib/metanorma/mirror/handlers/figure.rb +0 -53
  302. data/lib/metanorma/mirror/handlers/formula.rb +0 -35
  303. data/lib/metanorma/mirror/handlers/inline/catalog.rb +0 -52
  304. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +0 -158
  305. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +0 -116
  306. data/lib/metanorma/mirror/handlers/inline.rb +0 -226
  307. data/lib/metanorma/mirror/handlers/list.rb +0 -110
  308. data/lib/metanorma/mirror/handlers/note.rb +0 -26
  309. data/lib/metanorma/mirror/handlers/paragraph.rb +0 -19
  310. data/lib/metanorma/mirror/handlers/quote.rb +0 -16
  311. data/lib/metanorma/mirror/handlers/review.rb +0 -19
  312. data/lib/metanorma/mirror/handlers/section.rb +0 -149
  313. data/lib/metanorma/mirror/handlers/sourcecode.rb +0 -27
  314. data/lib/metanorma/mirror/handlers/structural.rb +0 -68
  315. data/lib/metanorma/mirror/handlers/table.rb +0 -81
  316. data/lib/metanorma/mirror/handlers/term.rb +0 -100
  317. data/lib/metanorma/mirror/handlers.rb +0 -60
  318. data/lib/metanorma/mirror/id_strategy/positional.rb +0 -166
  319. data/lib/metanorma/mirror/id_strategy/preserve.rb +0 -12
  320. data/lib/metanorma/mirror/id_strategy.rb +0 -34
  321. data/lib/metanorma/mirror/math_util.rb +0 -53
  322. data/lib/metanorma/mirror/metadata.rb +0 -37
  323. data/lib/metanorma/mirror/model/container.rb +0 -47
  324. data/lib/metanorma/mirror/model/factory.rb +0 -52
  325. data/lib/metanorma/mirror/model/guide.rb +0 -26
  326. data/lib/metanorma/mirror/model/leaf.rb +0 -17
  327. data/lib/metanorma/mirror/model/mark.rb +0 -53
  328. data/lib/metanorma/mirror/model/node.rb +0 -47
  329. data/lib/metanorma/mirror/model/soft_break.rb +0 -33
  330. data/lib/metanorma/mirror/model/text.rb +0 -34
  331. data/lib/metanorma/mirror/model.rb +0 -16
  332. data/lib/metanorma/mirror/output/builder.rb +0 -39
  333. data/lib/metanorma/mirror/output/formats/base_format.rb +0 -90
  334. data/lib/metanorma/mirror/output/formats/inline_format.rb +0 -142
  335. data/lib/metanorma/mirror/output/formats.rb +0 -53
  336. data/lib/metanorma/mirror/output/pipeline.rb +0 -93
  337. data/lib/metanorma/mirror/output/pipeline_context.rb +0 -22
  338. data/lib/metanorma/mirror/output.rb +0 -12
  339. data/lib/metanorma/mirror/rewriter.rb +0 -123
  340. data/lib/metanorma/mirror/safe_attr.rb +0 -16
  341. data/lib/metanorma/mirror/serialization/json_serializer.rb +0 -25
  342. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +0 -20
  343. data/lib/metanorma/mirror/serialization.rb +0 -10
  344. data/lib/metanorma/mirror/transformer.rb +0 -110
  345. data/lib/metanorma/mirror.rb +0 -31
  346. data/lib/metanorma/nist_document/metadata/nist_bib_data_extension_type.rb +0 -10
  347. data/lib/metanorma/nist_document/metadata/nist_bibliographic_item.rb +0 -15
  348. data/lib/metanorma/nist_document/metadata.rb +0 -12
  349. data/lib/metanorma/nist_document/root.rb +0 -29
  350. data/lib/metanorma/nist_document/sections/errata.rb +0 -16
  351. data/lib/metanorma/nist_document/sections/errata_clause.rb +0 -20
  352. data/lib/metanorma/nist_document/sections/errata_row.rb +0 -22
  353. data/lib/metanorma/nist_document/sections/nist_preface.rb +0 -30
  354. data/lib/metanorma/nist_document/sections.rb +0 -12
  355. data/lib/metanorma/nist_document.rb +0 -11
  356. data/lib/metanorma/ogc_document/metadata/ogc_bib_data_extension_type.rb +0 -12
  357. data/lib/metanorma/ogc_document/metadata/ogc_bibliographic_item.rb +0 -19
  358. data/lib/metanorma/ogc_document/metadata.rb +0 -12
  359. data/lib/metanorma/ogc_document/root.rb +0 -25
  360. data/lib/metanorma/ogc_document.rb +0 -8
  361. data/lib/metanorma/plateau_document/metadata/plateau_bibliographic_item.rb +0 -13
  362. data/lib/metanorma/plateau_document/metadata.rb +0 -10
  363. data/lib/metanorma/plateau_document/root.rb +0 -29
  364. data/lib/metanorma/plateau_document.rb +0 -10
  365. data/lib/metanorma/registers/setup.rb +0 -166
  366. data/lib/metanorma/registers.rb +0 -7
  367. data/lib/metanorma/ribose_document/metadata/ribose_bib_data_extension_type.rb +0 -20
  368. data/lib/metanorma/ribose_document/metadata/ribose_bibliographic_item.rb +0 -18
  369. data/lib/metanorma/ribose_document/metadata.rb +0 -12
  370. data/lib/metanorma/ribose_document/root.rb +0 -26
  371. data/lib/metanorma/ribose_document.rb +0 -8
  372. data/lib/metanorma/standard_document/annotation_container.rb +0 -39
  373. data/lib/metanorma/standard_document/block_attributes.rb +0 -281
  374. data/lib/metanorma/standard_document/blocks/amend_block.rb +0 -50
  375. data/lib/metanorma/standard_document/blocks/amend_content_block.rb +0 -35
  376. data/lib/metanorma/standard_document/blocks/auto_number.rb +0 -20
  377. data/lib/metanorma/standard_document/blocks/block_source.rb +0 -22
  378. data/lib/metanorma/standard_document/blocks/change_type.rb +0 -21
  379. data/lib/metanorma/standard_document/blocks/element_name.rb +0 -22
  380. data/lib/metanorma/standard_document/blocks/form.rb +0 -38
  381. data/lib/metanorma/standard_document/blocks/image_map_area_type.rb +0 -24
  382. data/lib/metanorma/standard_document/blocks/image_map_area_type_type.rb +0 -21
  383. data/lib/metanorma/standard_document/blocks/image_map_block.rb +0 -32
  384. data/lib/metanorma/standard_document/blocks/image_map_coords.rb +0 -19
  385. data/lib/metanorma/standard_document/blocks/image_map_radius.rb +0 -19
  386. data/lib/metanorma/standard_document/blocks/multilingual_rendering_type.rb +0 -21
  387. data/lib/metanorma/standard_document/blocks/passthrough.rb +0 -3
  388. data/lib/metanorma/standard_document/blocks/requirement_model.rb +0 -20
  389. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +0 -23
  390. data/lib/metanorma/standard_document/blocks/standard_admonition_block.rb +0 -32
  391. data/lib/metanorma/standard_document/blocks/standard_block.rb +0 -28
  392. data/lib/metanorma/standard_document/blocks/standard_block_no_notes.rb +0 -34
  393. data/lib/metanorma/standard_document/blocks/standard_example_block.rb +0 -30
  394. data/lib/metanorma/standard_document/blocks/standard_figure_block.rb +0 -32
  395. data/lib/metanorma/standard_document/blocks/standard_formula_block.rb +0 -30
  396. data/lib/metanorma/standard_document/blocks/standard_note_block.rb +0 -64
  397. data/lib/metanorma/standard_document/blocks/standard_paragraph_block.rb +0 -25
  398. data/lib/metanorma/standard_document/blocks/standard_quote_block.rb +0 -29
  399. data/lib/metanorma/standard_document/blocks/standard_sourcecode_block.rb +0 -32
  400. data/lib/metanorma/standard_document/blocks/standard_table_block.rb +0 -39
  401. data/lib/metanorma/standard_document/blocks/svg_map_block.rb +0 -23
  402. data/lib/metanorma/standard_document/blocks/svg_target_type.rb +0 -20
  403. data/lib/metanorma/standard_document/blocks/table_col.rb +0 -16
  404. data/lib/metanorma/standard_document/blocks/to_c.rb +0 -17
  405. data/lib/metanorma/standard_document/blocks.rb +0 -60
  406. data/lib/metanorma/standard_document/boilerplate.rb +0 -32
  407. data/lib/metanorma/standard_document/elements/add.rb +0 -3
  408. data/lib/metanorma/standard_document/elements/del.rb +0 -3
  409. data/lib/metanorma/standard_document/elements/form_input.rb +0 -27
  410. data/lib/metanorma/standard_document/elements/input.rb +0 -12
  411. data/lib/metanorma/standard_document/elements/input_type.rb +0 -27
  412. data/lib/metanorma/standard_document/elements/label.rb +0 -19
  413. data/lib/metanorma/standard_document/elements/option.rb +0 -27
  414. data/lib/metanorma/standard_document/elements/orientation_type.rb +0 -27
  415. data/lib/metanorma/standard_document/elements/select.rb +0 -32
  416. data/lib/metanorma/standard_document/elements/standard_page_break_element.rb +0 -22
  417. data/lib/metanorma/standard_document/elements/textarea.rb +0 -25
  418. data/lib/metanorma/standard_document/elements.rb +0 -20
  419. data/lib/metanorma/standard_document/lists/standard_definition.rb +0 -24
  420. data/lib/metanorma/standard_document/lists/standard_definition_list.rb +0 -30
  421. data/lib/metanorma/standard_document/lists/standard_definition_term.rb +0 -27
  422. data/lib/metanorma/standard_document/lists/standard_unordered_list.rb +0 -28
  423. data/lib/metanorma/standard_document/lists/unordered_checkable_list_item.rb +0 -26
  424. data/lib/metanorma/standard_document/lists.rb +0 -17
  425. data/lib/metanorma/standard_document/metadata/editorial_group_type.rb +0 -25
  426. data/lib/metanorma/standard_document/metadata/ics_type.rb +0 -26
  427. data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +0 -26
  428. data/lib/metanorma/standard_document/metadata/presentation_metadata.rb +0 -107
  429. data/lib/metanorma/standard_document/metadata/semantic_metadata.rb +0 -18
  430. data/lib/metanorma/standard_document/metadata/standard_bib_data.rb +0 -25
  431. data/lib/metanorma/standard_document/metadata/standard_bib_data_extension_type.rb +0 -37
  432. data/lib/metanorma/standard_document/metadata/structured_identifier_type.rb +0 -48
  433. data/lib/metanorma/standard_document/metadata/technical_committee_type.rb +0 -27
  434. data/lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb +0 -19
  435. data/lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb +0 -34
  436. data/lib/metanorma/standard_document/metadata/unitsml/dimension.rb +0 -39
  437. data/lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb +0 -19
  438. data/lib/metanorma/standard_document/metadata/unitsml/electric_current.rb +0 -19
  439. data/lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb +0 -23
  440. data/lib/metanorma/standard_document/metadata/unitsml/length.rb +0 -19
  441. data/lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb +0 -19
  442. data/lib/metanorma/standard_document/metadata/unitsml/mass.rb +0 -19
  443. data/lib/metanorma/standard_document/metadata/unitsml/namespace.rb +0 -17
  444. data/lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb +0 -19
  445. data/lib/metanorma/standard_document/metadata/unitsml/prefix.rb +0 -30
  446. data/lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb +0 -21
  447. data/lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb +0 -19
  448. data/lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb +0 -21
  449. data/lib/metanorma/standard_document/metadata/unitsml/quantity.rb +0 -28
  450. data/lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb +0 -21
  451. data/lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb +0 -19
  452. data/lib/metanorma/standard_document/metadata/unitsml/root_units.rb +0 -19
  453. data/lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb +0 -19
  454. data/lib/metanorma/standard_document/metadata/unitsml/time.rb +0 -19
  455. data/lib/metanorma/standard_document/metadata/unitsml/unit.rb +0 -32
  456. data/lib/metanorma/standard_document/metadata/unitsml/unit_name.rb +0 -21
  457. data/lib/metanorma/standard_document/metadata/unitsml/unit_set.rb +0 -19
  458. data/lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb +0 -36
  459. data/lib/metanorma/standard_document/metadata/unitsml/unit_system.rb +0 -23
  460. data/lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb +0 -28
  461. data/lib/metanorma/standard_document/metadata/unitsml.rb +0 -39
  462. data/lib/metanorma/standard_document/metadata.rb +0 -23
  463. data/lib/metanorma/standard_document/namespace.rb +0 -11
  464. data/lib/metanorma/standard_document/refs/reference_to_term.rb +0 -26
  465. data/lib/metanorma/standard_document/refs/reference_to_termbase.rb +0 -27
  466. data/lib/metanorma/standard_document/refs/standoc_locality_stack.rb +0 -24
  467. data/lib/metanorma/standard_document/refs/standoc_reference_to_citation_element.rb +0 -27
  468. data/lib/metanorma/standard_document/refs/standoc_reference_to_id_element.rb +0 -36
  469. data/lib/metanorma/standard_document/refs/xref_case_type.rb +0 -27
  470. data/lib/metanorma/standard_document/refs/xref_connective_type.rb +0 -27
  471. data/lib/metanorma/standard_document/refs/xref_target_type.rb +0 -25
  472. data/lib/metanorma/standard_document/refs.rb +0 -18
  473. data/lib/metanorma/standard_document/root.rb +0 -10
  474. data/lib/metanorma/standard_document/root_attributes.rb +0 -78
  475. data/lib/metanorma/standard_document/sections/abstract.rb +0 -19
  476. data/lib/metanorma/standard_document/sections/acknowledgements.rb +0 -19
  477. data/lib/metanorma/standard_document/sections/annex_section.rb +0 -69
  478. data/lib/metanorma/standard_document/sections/bibliography_section.rb +0 -20
  479. data/lib/metanorma/standard_document/sections/boilerplate_type.rb +0 -32
  480. data/lib/metanorma/standard_document/sections/clause_hierarchical_section.rb +0 -32
  481. data/lib/metanorma/standard_document/sections/clause_section.rb +0 -91
  482. data/lib/metanorma/standard_document/sections/colophon.rb +0 -16
  483. data/lib/metanorma/standard_document/sections/definition_section.rb +0 -72
  484. data/lib/metanorma/standard_document/sections/floating_section_title.rb +0 -23
  485. data/lib/metanorma/standard_document/sections/floating_title.rb +0 -27
  486. data/lib/metanorma/standard_document/sections/foreword.rb +0 -19
  487. data/lib/metanorma/standard_document/sections/introduction.rb +0 -20
  488. data/lib/metanorma/standard_document/sections/misc_container.rb +0 -31
  489. data/lib/metanorma/standard_document/sections/normative_type.rb +0 -29
  490. data/lib/metanorma/standard_document/sections/preface.rb +0 -36
  491. data/lib/metanorma/standard_document/sections/sections.rb +0 -47
  492. data/lib/metanorma/standard_document/sections/standard_content_section.rb +0 -41
  493. data/lib/metanorma/standard_document/sections/standard_hierarchical_section.rb +0 -30
  494. data/lib/metanorma/standard_document/sections/standard_references_section.rb +0 -74
  495. data/lib/metanorma/standard_document/sections/standard_section.rb +0 -39
  496. data/lib/metanorma/standard_document/sections/terms_section.rb +0 -61
  497. data/lib/metanorma/standard_document/sections.rb +0 -34
  498. data/lib/metanorma/standard_document/standard_document_type.rb +0 -15
  499. data/lib/metanorma/standard_document/terms/abbreviation_type.rb +0 -27
  500. data/lib/metanorma/standard_document/terms/concept.rb +0 -42
  501. data/lib/metanorma/standard_document/terms/definition_collection.rb +0 -24
  502. data/lib/metanorma/standard_document/terms/designation.rb +0 -31
  503. data/lib/metanorma/standard_document/terms/expression_designation.rb +0 -38
  504. data/lib/metanorma/standard_document/terms/expression_type.rb +0 -27
  505. data/lib/metanorma/standard_document/terms/grammar_gender.rb +0 -27
  506. data/lib/metanorma/standard_document/terms/grammar_info.rb +0 -36
  507. data/lib/metanorma/standard_document/terms/graphical_symbol_designation.rb +0 -25
  508. data/lib/metanorma/standard_document/terms/letter_symbol_designation.rb +0 -27
  509. data/lib/metanorma/standard_document/terms/non_verbal_representation.rb +0 -33
  510. data/lib/metanorma/standard_document/terms/related_term.rb +0 -31
  511. data/lib/metanorma/standard_document/terms/related_term_type.rb +0 -28
  512. data/lib/metanorma/standard_document/terms/term.rb +0 -66
  513. data/lib/metanorma/standard_document/terms/term_collection.rb +0 -24
  514. data/lib/metanorma/standard_document/terms/term_definition.rb +0 -29
  515. data/lib/metanorma/standard_document/terms/term_expression.rb +0 -20
  516. data/lib/metanorma/standard_document/terms/term_name_element.rb +0 -29
  517. data/lib/metanorma/standard_document/terms/term_source.rb +0 -29
  518. data/lib/metanorma/standard_document/terms/term_source_status.rb +0 -29
  519. data/lib/metanorma/standard_document/terms/term_source_type.rb +0 -21
  520. data/lib/metanorma/standard_document/terms/verbal_expression.rb +0 -35
  521. data/lib/metanorma/standard_document/terms.rb +0 -33
  522. data/lib/metanorma/standard_document.rb +0 -27
  523. data/lib/metanorma/un_document/blocks/un_admonition_block.rb +0 -86
  524. data/lib/metanorma/un_document/blocks.rb +0 -9
  525. data/lib/metanorma/un_document/metadata/un_bib_data_extension_type.rb +0 -10
  526. data/lib/metanorma/un_document/metadata/un_bibliographic_item.rb +0 -15
  527. data/lib/metanorma/un_document/metadata.rb +0 -12
  528. data/lib/metanorma/un_document/root.rb +0 -37
  529. data/lib/metanorma/un_document/sections/un_abstract_section.rb +0 -48
  530. data/lib/metanorma/un_document/sections/un_preface.rb +0 -40
  531. data/lib/metanorma/un_document/sections/un_sections.rb +0 -24
  532. data/lib/metanorma/un_document/sections.rb +0 -11
  533. data/lib/metanorma/un_document/un_text_element.rb +0 -116
  534. data/lib/metanorma/un_document.rb +0 -13
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Handlers
6
- module Inline
7
- # Shared declarative table of inline marks whose HTML rendering is
8
- # a fixed tag with optional static attrs. It is consumed by
9
- # RichHtmlRenderer, which renders Metanorma XML elements to HTML
10
- # directly (the fallback / attribute-value path) during the
11
- # forward transform into the mirror IR.
12
- #
13
- # Marks whose attrs vary per instance (link, xref, eref, span)
14
- # carry data in mark.attrs and are not in this table; each
15
- # consumer keeps custom handlers for those.
16
- module Catalog
17
- SIMPLE_WRAPS = {
18
- "emphasis" => { tag: :em },
19
- "strong" => { tag: :strong },
20
- "subscript" => { tag: :sub },
21
- "superscript" => { tag: :sup },
22
- "code" => { tag: :code },
23
- "underline" => { tag: :u },
24
- "strike" => { tag: :s },
25
- "smallcap" => { tag: :span, style: "font-variant: small-caps" },
26
- "concept" => { tag: :span, class: "concept" },
27
- "bcp14" => { tag: :span, class: "bcp14" },
28
- "footnote" => { tag: :sup, class: "footnote-inline" },
29
- "stem" => { tag: :span, class: "stem" },
30
- }.freeze
31
-
32
- # XML element classes that render via SIMPLE_WRAPS without
33
- # per-instance attrs. Maps element class → mark type (catalog
34
- # key). RichHtmlRenderer uses this to dispatch simple elements
35
- # through the shared table.
36
- SIMPLE_ELEMENTS = {
37
- Metanorma::Document::Components::Inline::EmRawElement => "emphasis",
38
- Metanorma::Document::Components::Inline::StrongRawElement => "strong",
39
- Metanorma::Document::Components::Inline::SubElement => "subscript",
40
- Metanorma::Document::Components::Inline::SupElement => "superscript",
41
- Metanorma::Document::Components::Inline::TtElement => "code",
42
- Metanorma::Document::Components::TextElements::UnderlineElement => "underline",
43
- Metanorma::Document::Components::TextElements::StrikeElement => "strike",
44
- Metanorma::Document::Components::Inline::SmallCapElement => "smallcap",
45
- Metanorma::Document::Components::Inline::Bcp14Element => "bcp14",
46
- Metanorma::Document::Components::Inline::ConceptElement => "concept",
47
- }.freeze
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,158 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "nokogiri"
4
-
5
- module Metanorma
6
- module Mirror
7
- module Handlers
8
- module Inline
9
- # Renders inline Metanorma elements as HTML strings. Used when an HTML
10
- # representation of inline content is required (e.g., attribute values,
11
- # fallback rendering). All HTML construction goes through
12
- # Nokogiri::HTML5::Builder to guarantee well-formed, escaped output.
13
- #
14
- # Simple-wrap elements (em, strong, sub, sup, code, u, s, smallcap,
15
- # bcp14, concept) take their tag-and-attrs mapping from the shared
16
- # Inline::Catalog table.
17
- module RichHtmlRenderer
18
- # Complex element handlers — these have per-instance attrs or
19
- # multi-step rendering and bypass the shared Catalog.
20
- COMPLEX_RENDERERS = {
21
- Metanorma::Document::Components::Inline::StemInlineElement => ->(el) {
22
- for_stem(el)
23
- },
24
- Metanorma::Document::Components::TextElements::StemElement => ->(el) {
25
- for_stem(el)
26
- },
27
- Metanorma::Document::Components::Inline::XrefElement => ->(el) {
28
- for_xref(el)
29
- },
30
- Metanorma::Document::Components::Inline::LinkElement => ->(el) {
31
- for_link(el)
32
- },
33
- Metanorma::Document::Components::Inline::ErefElement => ->(el) {
34
- for_eref(el)
35
- },
36
- Metanorma::Document::Components::Inline::FnElement => ->(el) {
37
- for_fn(el)
38
- },
39
- Metanorma::Document::Components::Inline::SpanElement => ->(el) {
40
- for_span(el)
41
- },
42
- Metanorma::Document::Components::Inline::BrElement => ->(_el) {
43
- wrap(&:br)
44
- },
45
- }.freeze
46
-
47
- def self.extract(element)
48
- return "" unless element
49
-
50
- unless element.is_a?(Lutaml::Model::Serializable)
51
- return CGI.escapeHTML(element.to_s)
52
- end
53
-
54
- parts = []
55
- element.each_mixed_content { |node| parts << render_node(node) }
56
- result = parts.join.strip
57
- result.empty? ? TextExtractor.extract_element_text(element) : result
58
- end
59
-
60
- def self.render_node(node)
61
- case node
62
- when String
63
- CGI.escapeHTML(node)
64
- when Lutaml::Model::Serializable
65
- render_element(node)
66
- else
67
- ""
68
- end
69
- end
70
-
71
- def self.render_element(element)
72
- complex = COMPLEX_RENDERERS[element.class]
73
- return complex.call(element) if complex
74
-
75
- mark_type = Catalog::SIMPLE_ELEMENTS[element.class]
76
- return render_simple(mark_type, element) if mark_type
77
-
78
- extract(element)
79
- end
80
-
81
- def self.render_simple(mark_type, element)
82
- spec = Catalog::SIMPLE_WRAPS[mark_type]
83
- attrs = spec.except(:tag)
84
- wrap do |d|
85
- if attrs.empty?
86
- d.public_send(spec[:tag]) { d << raw(extract(element)) }
87
- else
88
- d.public_send(spec[:tag], attrs) { d << raw(extract(element)) }
89
- end
90
- end
91
- end
92
-
93
- def self.for_stem(element)
94
- math = SafeAttr.read(element, :math)
95
- return TextExtractor.extract_element_text(element) unless math
96
-
97
- mathml = MathUtil.mathml_from_math(math)
98
- .sub(/\s*xmlns(:\w+)?="[^"]*"\s*/, " ")
99
- .gsub(/\s+/, " ")
100
- .strip
101
- spec = Catalog::SIMPLE_WRAPS["stem"]
102
- wrap do |d|
103
- d.public_send(spec[:tag], spec.except(:tag)) { d << raw(mathml) }
104
- end
105
- end
106
-
107
- def self.for_xref(element)
108
- target = SafeAttr.read(element, :target) || ""
109
- label = TextExtractor.extract_formatted_text(element)
110
- label = target if label.strip.empty?
111
- wrap { |d| d.a(href: "##{target}") { d.text label } }
112
- end
113
-
114
- def self.for_link(element)
115
- href = SafeAttr.read(element,
116
- :target) || SafeAttr.read(element, :href) || ""
117
- label = TextExtractor.extract_formatted_text(element)
118
- wrap { |d| d.a(href: href) { d.text label } }
119
- end
120
-
121
- def self.for_eref(element)
122
- citeas = SafeAttr.read(element, :citeas) || ""
123
- label = TextExtractor.extract_formatted_text(element)
124
- wrap { |d| d.a(class: "eref", cite: citeas) { d.text label } }
125
- end
126
-
127
- def self.for_fn(element)
128
- reference = SafeAttr.read(element, :reference) || ""
129
- spec = Catalog::SIMPLE_WRAPS["footnote"]
130
- wrap do |d|
131
- d.public_send(spec[:tag], spec.except(:tag)) { d.text reference }
132
- end
133
- end
134
-
135
- def self.for_span(element)
136
- cls = SafeAttr.read(element, :class_attr)
137
- inner = extract(element)
138
- wrap do |d|
139
- if cls
140
- d.span(class: cls) { d << raw(inner) }
141
- else
142
- d.span { d << raw(inner) }
143
- end
144
- end
145
- end
146
-
147
- def self.wrap(&)
148
- Nokogiri::HTML5::Builder.new(&).doc.root.to_html
149
- end
150
-
151
- def self.raw(html_string)
152
- Nokogiri::HTML5::DocumentFragment.parse(html_string.to_s)
153
- end
154
- end
155
- end
156
- end
157
- end
158
- end
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Handlers
6
- module Inline
7
- module TextExtractor
8
- def self.extract_element_text(element)
9
- return "" unless element.is_a?(Lutaml::Model::Serializable)
10
-
11
- text = SafeAttr.read(element, :text)
12
- if text.is_a?(Array)
13
- joined = text.join.strip
14
- return joined unless joined.empty?
15
- elsif text.is_a?(String) && !text.strip.empty?
16
- return text
17
- end
18
-
19
- content = SafeAttr.read(element, :content)
20
- if content.is_a?(Array)
21
- parts = content.filter_map do |c|
22
- next c.to_s if c.is_a?(String)
23
- next extract_element_text(c) if c.is_a?(Lutaml::Model::Serializable)
24
-
25
- nil
26
- end
27
- joined = parts.join.strip
28
- return joined unless joined.empty?
29
- elsif content.is_a?(String) && !content.strip.empty?
30
- return content
31
- end
32
-
33
- ""
34
- end
35
-
36
- def self.extract_formatted_text(element)
37
- return "" unless element
38
- return element.to_s unless element.is_a?(Lutaml::Model::Serializable)
39
-
40
- parts = []
41
- element.each_mixed_content do |node|
42
- case node
43
- when String
44
- parts << node
45
- when Lutaml::Model::Serializable
46
- inner = extract_formatted_text(node)
47
- parts << inner if inner && !inner.empty?
48
- end
49
- end
50
- result = parts.join.strip
51
- result.empty? ? extract_element_text(element) : result
52
- end
53
-
54
- def self.extract_text_from_model(node)
55
- case node
56
- when Metanorma::Document::Components::Inline::TabElement
57
- " "
58
- when Metanorma::Document::Components::Inline::BrElement
59
- "\n"
60
- else
61
- text = extract_formatted_text(node)
62
- text.empty? ? extract_element_text(node) : text
63
- end
64
- end
65
-
66
- def self.extract_fn_label(element)
67
- label = SafeAttr.read(element, :fmt_fn_label)
68
- return extract_element_text(element) unless label
69
-
70
- extract_formatted_text(label)
71
- end
72
-
73
- def self.extract_stem_text(element)
74
- asciimath = MathUtil.asciimath_from_stem(element)
75
- return asciimath if asciimath
76
-
77
- extract_element_text(element)
78
- end
79
-
80
- def self.extract_span_text(element)
81
- text = extract_element_text(element)
82
- return text unless text.strip.empty?
83
-
84
- extract_formatted_text(element)
85
- end
86
-
87
- def self.extract_name_text(name)
88
- return name if name.is_a?(String)
89
-
90
- text = SafeAttr.read(name, :text)
91
- return text.to_s if text.is_a?(String) && !text.strip.empty?
92
-
93
- stems = SafeAttr.read(name, :stem)
94
- if stems.is_a?(Array) && !stems.empty?
95
- parts = Array(text).dup
96
- stems.each_with_index do |s, i|
97
- stem_text = MathUtil.text_from_stem(s)
98
- parts.insert(i + 1, stem_text) if stem_text && !stem_text.empty?
99
- end
100
- joined = parts.join.strip
101
- return joined unless joined.empty?
102
- end
103
-
104
- return Array(text).join if text.is_a?(Array) && !text.empty?
105
-
106
- ""
107
- end
108
-
109
- def self.extract_bibdata_title(bibdata)
110
- Metadata.title_from_bibdata(bibdata)
111
- end
112
- end
113
- end
114
- end
115
- end
116
- end
@@ -1,226 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Handlers
6
- module Inline
7
- autoload :TextExtractor, "#{__dir__}/inline/text_extractor"
8
- autoload :RichHtmlRenderer, "#{__dir__}/inline/rich_html_renderer"
9
- autoload :Catalog, "#{__dir__}/inline/catalog"
10
-
11
- MARK_BUILDERS = {
12
- Metanorma::Document::Components::Inline::EmRawElement => ->(_el) {
13
- Handlers.build_mark("emphasis")
14
- },
15
- Metanorma::Document::Components::Inline::StrongRawElement => ->(_el) {
16
- Handlers.build_mark("strong")
17
- },
18
- Metanorma::Document::Components::Inline::SubElement => ->(_el) {
19
- Handlers.build_mark("subscript")
20
- },
21
- Metanorma::Document::Components::Inline::SupElement => ->(_el) {
22
- Handlers.build_mark("superscript")
23
- },
24
- Metanorma::Document::Components::Inline::TtElement => ->(_el) {
25
- Handlers.build_mark("code")
26
- },
27
- Metanorma::Document::Components::TextElements::UnderlineElement => ->(_el) {
28
- Handlers.build_mark("underline")
29
- },
30
- Metanorma::Document::Components::TextElements::StrikeElement => ->(_el) {
31
- Handlers.build_mark("strike")
32
- },
33
- Metanorma::Document::Components::Inline::SmallCapElement => ->(_el) {
34
- Handlers.build_mark("smallcap")
35
- },
36
- Metanorma::Document::Components::Inline::Bcp14Element => ->(_el) {
37
- Handlers.build_mark("bcp14")
38
- },
39
- Metanorma::Document::Components::Inline::LinkElement => ->(el) {
40
- attrs = {
41
- href: SafeAttr.read(el, :target) || SafeAttr.read(el, :href),
42
- }.compact
43
- Handlers.build_mark("link", attrs: attrs)
44
- },
45
- Metanorma::Document::Components::Inline::XrefElement => ->(el) {
46
- attrs = { target: SafeAttr.read(el, :target) }.compact
47
- Handlers.build_mark("xref", attrs: attrs)
48
- },
49
- Metanorma::Document::Components::Inline::ErefElement => ->(el) {
50
- attrs = {
51
- bibitemid: SafeAttr.read(el, :bibitemid),
52
- citeas: SafeAttr.read(el, :citeas),
53
- }.compact
54
- Handlers.build_mark("eref", attrs: attrs)
55
- },
56
- Metanorma::Document::Components::Inline::FnElement => ->(el) {
57
- attrs = {
58
- id: SafeAttr.read(el, :id),
59
- reference: SafeAttr.read(el, :reference),
60
- }.compact
61
- Handlers.build_mark("footnote", attrs: attrs)
62
- },
63
- Metanorma::Document::Components::Inline::StemInlineElement => ->(el) {
64
- attrs = { stem_type: SafeAttr.read(el, :stem_type) || "MathML" }
65
- math = SafeAttr.read(el, :math)
66
- attrs[:mathml] = MathUtil.mathml_from_math(math) if math
67
- Handlers.build_mark("stem", attrs: attrs.compact)
68
- },
69
- Metanorma::Document::Components::Inline::ConceptElement => ->(el) {
70
- attrs = {
71
- refterm: SafeAttr.read(el, :refterm),
72
- renderterm: SafeAttr.read(el, :renderterm),
73
- }.compact
74
- Handlers.build_mark("concept", attrs: attrs)
75
- },
76
- Metanorma::Document::Components::Inline::SpanElement => ->(el) {
77
- attrs = {
78
- class_attr: SafeAttr.read(el, :class_attr),
79
- style: SafeAttr.read(el, :style),
80
- }.compact
81
- Handlers.build_mark("span", attrs: attrs)
82
- },
83
- }.freeze
84
-
85
- SEMX_MARK_CONFIG = {
86
- "xref" => { mark_type: "xref", target_attr: :target,
87
- fmt_attr: :fmt_xref },
88
- "eref" => { mark_type: "eref", target_attr: :target,
89
- fmt_attr: :fmt_xref },
90
- "link" => { mark_type: "link", target_attr: :target,
91
- fmt_attr: :fmt_link },
92
- }.freeze
93
-
94
- CROSSREF_MARKS = %w[xref eref link].to_set.freeze
95
-
96
- # Delegates to TextExtractor
97
- def self.extract_element_text(element)
98
- TextExtractor.extract_element_text(element)
99
- end
100
-
101
- def self.extract_formatted_text(element)
102
- TextExtractor.extract_formatted_text(element)
103
- end
104
-
105
- def self.extract_text_from_model(node)
106
- TextExtractor.extract_text_from_model(node)
107
- end
108
-
109
- # Delegates to RichHtmlRenderer
110
- def self.extract_rich_html(element)
111
- RichHtmlRenderer.extract(element)
112
- end
113
-
114
- # Primary entry point: extract inline content from a mixed-content element.
115
- # Iterates semantic children only — `fmt-*` rendered siblings are skipped
116
- # to avoid emitting duplicate marks for the same logical content.
117
- def self.extract_inline(element, context:)
118
- nodes = []
119
- Metanorma::Document::Components::Inline::SemanticContent.each(element) do |node|
120
- case node
121
- when String
122
- nodes << context.text_node(node) unless node.empty?
123
- else
124
- handle_inline_element(node, nodes, context:)
125
- end
126
- end
127
- filter_empty_crossrefs(nodes)
128
- end
129
-
130
- def self.handle_inline_element(element, nodes, context:)
131
- if semx_element?(element)
132
- handle_semx(element, nodes, context:)
133
- return
134
- end
135
-
136
- if block_in_inline?(element, context)
137
- handle_block_in_inline(element, nodes, context:)
138
- return
139
- end
140
-
141
- mark_builder = MARK_BUILDERS[element.class]
142
- if mark_builder
143
- mark = mark_builder.call(element)
144
- text = extract_marked_text(mark.type, element)
145
- nodes << context.text_node(text, marks: [mark])
146
- else
147
- handle_structured_inline(element, nodes, context:)
148
- end
149
- end
150
-
151
- def self.handle_semx(element, nodes, context:)
152
- config = SEMX_MARK_CONFIG[element.element_attr]
153
- if config
154
- handle_semx_crossref(element, config, nodes, context:)
155
- else
156
- handle_structured_inline(element, nodes, context:)
157
- end
158
- end
159
-
160
- def self.handle_semx_crossref(element, config, nodes, context:)
161
- fmt_children = SafeAttr.read(element, config[:fmt_attr])
162
- fmt_child = fmt_children&.first
163
-
164
- mark_attrs = {}
165
- if fmt_child && config[:target_attr]
166
- mark_attrs[config[:target_attr]] = SafeAttr.read(fmt_child, :target)
167
- end
168
-
169
- if element.element_attr == "eref" && fmt_child
170
- mark_attrs[:citeas] = extract_formatted_text(fmt_child)
171
- end
172
-
173
- text = extract_formatted_text(fmt_child || element)
174
- mark = Handlers.build_mark(config[:mark_type],
175
- attrs: mark_attrs.compact)
176
- nodes << context.text_node(text, marks: [mark])
177
- end
178
-
179
- def self.handle_block_in_inline(element, nodes, context:)
180
- result = context.registry.handle(element, context: context)
181
- result.append_to(nodes)
182
- end
183
-
184
- def self.handle_structured_inline(element, nodes, context:)
185
- if element.is_a?(Lutaml::Model::Serializable)
186
- inner_nodes = extract_inline(element, context:)
187
- nodes.concat(inner_nodes)
188
- else
189
- text = element.text
190
- nodes << context.text_node(text) if text.is_a?(String) && !text.strip.empty?
191
- end
192
- end
193
-
194
- def self.mark_text_extractors
195
- @mark_text_extractors ||= {
196
- "footnote" => TextExtractor.method(:extract_fn_label),
197
- "stem" => TextExtractor.method(:extract_stem_text),
198
- "span" => TextExtractor.method(:extract_span_text),
199
- }
200
- end
201
-
202
- def self.extract_marked_text(mark_type, element)
203
- extractor = mark_text_extractors[mark_type]
204
- return extractor.call(element) if extractor
205
-
206
- TextExtractor.extract_element_text(element)
207
- end
208
-
209
- def self.semx_element?(element)
210
- element.is_a?(Metanorma::Document::Components::Inline::SemxElement)
211
- end
212
-
213
- def self.block_in_inline?(element, context)
214
- context.registry.registered?(element.class)
215
- end
216
-
217
- def self.filter_empty_crossrefs(nodes)
218
- nodes.reject do |n|
219
- n.is_a?(Model::Text) && n.text.strip.empty? &&
220
- n.marks.any? { |m| CROSSREF_MARKS.include?(m.type) }
221
- end
222
- end
223
- end
224
- end
225
- end
226
- end
@@ -1,110 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Handlers
6
- module List
7
- def self.bullet(element, context:)
8
- attrs = list_attrs(element)
9
- items = extract_items(element, context:)
10
-
11
- Handlers.build_node("bullet_list", attrs: attrs, content: items)
12
- end
13
-
14
- def self.ordered(element, context:)
15
- attrs = list_attrs(element)
16
- attrs[:type] = SafeAttr.read(element, :type)
17
- attrs[:start] = SafeAttr.read(element, :start)
18
- attrs[:group] = SafeAttr.read(element, :group)
19
- items = extract_items(element, context:)
20
-
21
- Handlers.build_node("ordered_list", attrs: attrs.compact,
22
- content: items)
23
- end
24
-
25
- def self.definition(element, context:)
26
- attrs = list_attrs(element)
27
- attrs[:key] = SafeAttr.read(element, :key)
28
- items = extract_definition_items(element, context:)
29
-
30
- Handlers.build_node("dl", attrs: attrs.compact, content: items)
31
- end
32
-
33
- def self.list_item(element, context:)
34
- attrs = {}
35
- attrs[:id] = SafeAttr.read(element, :id)
36
- attrs[:checkbox] = SafeAttr.read(element, :checkbox)
37
- attrs[:checkedcheckbox] = SafeAttr.read(element, :checkedcheckbox)
38
-
39
- content = []
40
- text = SafeAttr.read(element, :text)
41
- if text.is_a?(Array)
42
- text.each do |t|
43
- next if t.is_a?(String) && t.strip.empty?
44
-
45
- content << context.text_node(t.to_s)
46
- end
47
- end
48
-
49
- %i[paragraphs unordered_lists ordered_lists sourcecode figure example
50
- note quote table].each do |attr|
51
- collection = SafeAttr.read(element, attr)
52
- next unless collection
53
-
54
- collection.each do |child|
55
- result = context.registry.handle(child, context: context)
56
- result.append_to(content)
57
- end
58
- end
59
-
60
- Handlers.build_node("list_item", attrs: attrs.compact,
61
- content: content)
62
- end
63
-
64
- def self.extract_items(element, context:)
65
- Array(element.listitem).filter_map do |li|
66
- result = context.registry.handle(li, context: context)
67
- result.nodes
68
- end
69
- end
70
-
71
- def self.extract_definition_items(element, context:)
72
- items = []
73
- dts = Array(element.dt)
74
- dds = Array(element.dd)
75
-
76
- dts.each_with_index do |dt, idx|
77
- dt_attrs = {}
78
- dt_attrs[:id] = SafeAttr.read(dt, :id)
79
- dt_content = Inline.extract_inline(dt, context:)
80
- items << Handlers.build_node("dt", attrs: dt_attrs.compact,
81
- content: dt_content)
82
-
83
- dd = dds[idx]
84
- next unless dd
85
-
86
- dd_attrs = {}
87
- dd_attrs[:id] = SafeAttr.read(dd, :id)
88
- dd_content = context.extract_named_collections(dd,
89
- %i[p ul ol
90
- sourcecode figure example note table formula quote dl])
91
- items << Handlers.build_node("dd", attrs: dd_attrs.compact,
92
- content: dd_content)
93
- end
94
- items
95
- end
96
-
97
- def self.list_attrs(element)
98
- attrs = {}
99
- attrs[:id] = SafeAttr.read(element, :id)
100
- attrs[:nobullet] = SafeAttr.read(element, :nobullet)
101
- attrs[:bare] = SafeAttr.read(element, :bare)
102
- attrs[:spacing] = SafeAttr.read(element, :spacing)
103
- attrs[:indent] = SafeAttr.read(element, :indent)
104
- attrs[:semx_id] = SafeAttr.read(element, :semx_id)
105
- attrs.compact
106
- end
107
- end
108
- end
109
- end
110
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Handlers
6
- module Note
7
- EXTRA = { type_attr: :type_attr, remove_in_rfc: nil }.freeze
8
-
9
- def self.call(element, context:)
10
- attrs = Handlers.extract_attrs(element, extra_attrs: EXTRA)
11
-
12
- content = []
13
- element_content = SafeAttr.read(element, :content)
14
- if element_content.is_a?(Array)
15
- element_content.each do |p|
16
- result = context.registry.handle(p, context: context)
17
- result.append_to(content)
18
- end
19
- end
20
-
21
- Handlers.build_node("note", attrs: attrs, content: content)
22
- end
23
- end
24
- end
25
- end
26
- end