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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module DocumentCollection
5
+ autoload :Root, "metanorma/document_collection/root"
6
+ autoload :Directive, "metanorma/document_collection/directive"
7
+ autoload :Entry, "metanorma/document_collection/entry"
8
+ autoload :DocContainer, "metanorma/document_collection/doc_container"
9
+ end
10
+ end
@@ -13,16 +13,8 @@ module Metanorma
13
13
  autoload :PubidRenderer, "metanorma/html/renderers/pubid_renderer"
14
14
  autoload :ElementOrderTraversal,
15
15
  "metanorma/html/renderers/element_order_traversal"
16
- end
17
-
18
- module Concerns
19
- autoload :MetadataExtraction,
20
- "metanorma/html/concerns/metadata_extraction"
21
- autoload :PresentationValidation,
22
- "metanorma/html/concerns/presentation_validation"
23
- autoload :SvgProcessing, "metanorma/html/concerns/svg_processing"
24
- autoload :TextExtraction, "metanorma/html/concerns/text_extraction"
25
- autoload :TocRegistry, "metanorma/html/concerns/toc_registry"
16
+ autoload :SemanticRenderer,
17
+ "metanorma/html/renderers/semantic_renderer"
26
18
  end
27
19
 
28
20
  class BaseRenderer
@@ -69,7 +61,8 @@ module Metanorma
69
61
  end
70
62
 
71
63
  def register_render(type_class, method_name)
72
- render_registry[type_class] = method_name
64
+ resolved = resolve_type(type_class)
65
+ render_registry[resolved] = method_name if resolved
73
66
  end
74
67
 
75
68
  def inline_registry
@@ -77,12 +70,32 @@ module Metanorma
77
70
  end
78
71
 
79
72
  def register_inline_render(type_class, method_name)
80
- inline_registry[type_class] = method_name
73
+ resolved = resolve_type(type_class)
74
+ inline_registry[resolved] = method_name if resolved
75
+ end
76
+
77
+ # type_class may be a Class or a String constant name. String form
78
+ # requires the owning flavor gem, then resolves; if the gem is not
79
+ # installed the registration is skipped (that flavor cannot be
80
+ # rendered in this process anyway).
81
+ def resolve_type(type_class)
82
+ return type_class unless type_class.is_a?(String)
83
+
84
+ flavor = type_class.split("::")[1].to_s.downcase
85
+ begin
86
+ require "metanorma/#{flavor}/document"
87
+ rescue LoadError
88
+ nil
89
+ end
90
+ Object.const_defined?(type_class) ? Object.const_get(type_class) : nil
81
91
  end
82
92
  end
83
93
 
84
94
  attr_reader :inline_renderer, :block_renderer, :section_renderer,
85
95
  :pubid_renderer, :index_term_collector, :footnote_collector
96
+ # While a table renders: table-scoped <fn>s collect here and lift
97
+ # into the table's visible footnotes row instead of endnote popups.
98
+ attr_accessor :table_fn_context
86
99
  private :inline_renderer, :block_renderer, :section_renderer,
87
100
  :pubid_renderer
88
101
 
@@ -109,10 +122,10 @@ module Metanorma
109
122
  end
110
123
 
111
124
  def render_paragraph(...) = @renderer.render_paragraph(...)
112
- def render_inline_element(...)= @renderer.render_inline_element(...)
113
- def render_unordered_list(...)= @renderer.render_unordered_list(...)
114
- def render_ordered_list(...)= @renderer.render_ordered_list(...)
115
- def render_definition_list(...)= @renderer.render_definition_list(...)
125
+ def render_inline_element(...) = @renderer.render_inline_element(...)
126
+ def render_unordered_list(...) = @renderer.render_unordered_list(...)
127
+ def render_ordered_list(...) = @renderer.render_ordered_list(...)
128
+ def render_definition_list(...) = @renderer.render_definition_list(...)
116
129
  def render_sourcecode(...) = @renderer.render_sourcecode(...)
117
130
  def render_table(...) = @renderer.render_table(...)
118
131
  def render_figure(...) = @renderer.render_figure(...)
@@ -120,10 +133,11 @@ module Metanorma
120
133
  def render_formula(...) = @renderer.render_formula(...)
121
134
  def render_note(...) = @renderer.render_note(...)
122
135
  def render_image(...) = @renderer.render_image(...)
123
- def render_stem_content(...)= @renderer.render_stem_content(...)
124
- def register_figure_entry(...)= @renderer.register_figure_entry(...)
136
+ def render_stem_content(...) = @renderer.render_stem_content(...)
137
+ def register_figure_entry(...) = @renderer.register_figure_entry(...)
125
138
  def render_note_children(...) = @renderer.render_note_children(...)
126
139
  def render_simple_children(...) = @renderer.render_simple_children(...)
140
+ def render_admonition_children(...) = @renderer.render_admonition_children(...)
127
141
  def render_full_block_children(...) = @renderer.render_full_block_children(...)
128
142
  def render_label_paragraph(...) = @renderer.render_label_paragraph(...)
129
143
  end
@@ -135,6 +149,7 @@ module Metanorma
135
149
  attr_writer :document, :theme
136
150
 
137
151
  def generate_full_document(document, theme: nil, **)
152
+ Metanorma::Html.seed_flavors!
138
153
  @document = document
139
154
  @theme_override = theme
140
155
  validate_presentation_xml!
@@ -183,7 +198,7 @@ module Metanorma
183
198
  def flavor_name
184
199
  return nil unless defined?(@document) && @document
185
200
 
186
- Metanorma::Html::Generator.flavors.name_for(@document.class)
201
+ Metanorma::Core::Flavors.flavor_for(@document)&.name
187
202
  end
188
203
 
189
204
  # Pubid module for the current document's flavor, or nil if the
@@ -191,7 +206,7 @@ module Metanorma
191
206
  def pubid_module
192
207
  return nil unless defined?(@document) && @document
193
208
 
194
- Metanorma::Html::Generator.flavors.pubid_module_for(@document.class)
209
+ Metanorma::Core::Flavors.flavor_for(@document)&.pubid_module_const
195
210
  end
196
211
 
197
212
  def flavor_publishers(_doc_id)
@@ -382,7 +397,7 @@ module Metanorma
382
397
  :render_note
383
398
  register_render Metanorma::Document::Components::AncillaryBlocks::ExampleBlock,
384
399
  :render_example
385
- register_render Metanorma::StandardDocument::Blocks::Form,
400
+ register_render "Metanorma::Standoc::Document::Blocks::Form",
386
401
  :render_form
387
402
  register_render Metanorma::Document::Components::AncillaryBlocks::SourcecodeBlock,
388
403
  :render_sourcecode
@@ -404,6 +419,12 @@ module Metanorma
404
419
  :render_bookmark
405
420
  register_render Metanorma::Document::Components::Inline::SemxElement,
406
421
  :render_semx_content
422
+ register_render Metanorma::Document::Components::Inline::ColumnbreakElement,
423
+ :render_columnbreak
424
+ register_render Metanorma::Document::Components::AncillaryBlocks::SvgmapElement,
425
+ :render_svgmap
426
+ register_render Metanorma::Document::Components::AncillaryBlocks::ImagemapElement,
427
+ :render_imagemap
407
428
 
408
429
  register_inline_render Metanorma::Document::Components::Inline::EmRawElement,
409
430
  :render_em
@@ -423,14 +444,18 @@ module Metanorma
423
444
  :render_strike
424
445
  register_inline_render Metanorma::Document::Components::Inline::BrElement,
425
446
  :render_br
447
+ register_inline_render Metanorma::Document::Components::TextElements::RubyElement,
448
+ :render_ruby
449
+ register_inline_render Metanorma::Document::Components::Inline::ColumnbreakElement,
450
+ :render_columnbreak
426
451
  register_inline_render Metanorma::Document::Components::Inline::TabElement,
427
452
  :render_tab
428
453
  register_inline_render Metanorma::Document::Components::Inline::LinkElement,
429
454
  :render_link
430
455
  register_inline_render Metanorma::Document::Components::Inline::XrefElement,
431
- :render_noop_inline
456
+ :render_xref
432
457
  register_inline_render Metanorma::Document::Components::Inline::ErefElement,
433
- :render_noop_inline
458
+ :render_eref
434
459
  register_inline_render Metanorma::Document::Components::Inline::SpanElement,
435
460
  :render_span
436
461
  register_inline_render Metanorma::Document::Components::Inline::FnElement,
@@ -438,7 +463,7 @@ module Metanorma
438
463
  register_inline_render Metanorma::Document::Components::Inline::ConceptElement,
439
464
  :render_concept
440
465
  register_inline_render Metanorma::Document::Components::Inline::StemInlineElement,
441
- :render_noop_inline
466
+ :render_stem_inline
442
467
  register_inline_render Metanorma::Document::Components::TextElements::StemElement,
443
468
  :render_stem
444
469
  register_inline_render Metanorma::Document::Components::Inline::SemxElement,
@@ -449,7 +474,11 @@ module Metanorma
449
474
  :render_fmt_stem
450
475
  register_inline_render Metanorma::Document::Components::Inline::CommaElement,
451
476
  :render_comma
452
- register_inline_render Metanorma::StandardDocument::Elements::Input,
477
+ register_inline_render Metanorma::Document::Components::Inline::ReftermElement,
478
+ :render_refterm
479
+ register_inline_render Metanorma::Document::Components::Inline::FmtPreferredElement,
480
+ :render_fmt_preferred_inline
481
+ register_inline_render "Metanorma::Standoc::Document::Elements::Input",
453
482
  :render_input
454
483
  register_inline_render Metanorma::Document::Components::Inline::EnumCommaElement,
455
484
  :render_comma
@@ -473,6 +502,8 @@ module Metanorma
473
502
  # Grouped here so adding a new transparent wrapper is one entry,
474
503
  # not another register_inline_render line. Classes with a more
475
504
  # specific handler register themselves above.
505
+ FN_BLOCK_ATTRS = %i[ul ol table].freeze
506
+
476
507
  TRANSPARENT_INLINE_WRAPPERS = [
477
508
  Metanorma::Document::Components::Inline::FmtNameElement,
478
509
  Metanorma::Document::Components::Inline::FmtTitleElement,
@@ -514,6 +545,12 @@ module Metanorma
514
545
  # through when it appears in block context.
515
546
  register_render Metanorma::Document::Components::Inline::FmtXrefLabelElement,
516
547
  :render_block_inline_content
548
+ # Annotation boundary markers fence an annotated region; they carry
549
+ # no renderable content of their own at block dispatch.
550
+ register_render Metanorma::Document::Components::Inline::FmtAnnotationStartElement,
551
+ :render_noop
552
+ register_render Metanorma::Document::Components::Inline::FmtAnnotationEndElement,
553
+ :render_noop
517
554
 
518
555
  def lookup_dispatch(type_class, registry_method)
519
556
  # Registry contents are fixed once renderer classes are loaded, so
@@ -541,6 +578,10 @@ module Metanorma
541
578
  ""
542
579
  end
543
580
 
581
+ def render_columnbreak(*)
582
+ render_liquid("_columnbreak.html.liquid", {})
583
+ end
584
+
544
585
  # Block-dispatch entry point for inline content reached as a direct
545
586
  # child of a block container (render passes keyword args; the inline
546
587
  # pipeline does not accept them).
@@ -559,6 +600,9 @@ module Metanorma
559
600
  @inline_renderer.walk_ordered(node, allow_filter: allow_filter, &)
560
601
  end
561
602
 
603
+ def footnote_label_text(fn) = @inline_renderer.footnote_label_text(fn)
604
+ def fn_content_html(fn) = @inline_renderer.fn_content_html(fn)
605
+
562
606
  def render_mixed_inline(node)
563
607
  @inline_renderer.render_mixed_inline(node)
564
608
  end
@@ -573,11 +617,15 @@ module Metanorma
573
617
  def render_underline(el) = @inline_renderer.render_underline(el)
574
618
  def render_strike(el) = @inline_renderer.render_strike(el)
575
619
  def render_br(*) = @inline_renderer.render_br
620
+ def render_ruby(el) = @inline_renderer.render_ruby(el)
576
621
  def render_tab(*) = @inline_renderer.render_tab
577
622
  def render_span(el) = @inline_renderer.render_span(el)
578
623
  def render_fn_inline(el) = @inline_renderer.render_fn_inline(el)
579
624
  def render_stem(el) = @inline_renderer.render_stem(el)
625
+ def render_stem_inline(el) = @inline_renderer.render_stem_inline(el)
580
626
  def render_semx_inline(el) = @inline_renderer.render_semx_inline(el)
627
+ def render_refterm(el) = @inline_renderer.render_refterm(el)
628
+ def render_fmt_preferred_inline(el) = @inline_renderer.render_fmt_preferred_inline(el)
581
629
  def render_fmt_xref(el) = @inline_renderer.render_fmt_xref(el)
582
630
  def render_comma(*) = @inline_renderer.render_comma
583
631
  def render_input(el) = @inline_renderer.render_input(el)
@@ -626,6 +674,16 @@ module Metanorma
626
674
  @block_renderer.render_definition_list(dl, **)
627
675
  end
628
676
 
677
+ def render_svgmap(svgmap,
678
+ **)
679
+ @block_renderer.render_svgmap(svgmap, **)
680
+ end
681
+
682
+ def render_imagemap(imagemap,
683
+ **)
684
+ @block_renderer.render_imagemap(imagemap, **)
685
+ end
686
+
629
687
  def render_figure(figure,
630
688
  **)
631
689
  @block_renderer.render_figure(figure, **)
@@ -675,6 +733,7 @@ children:, **)
675
733
 
676
734
  def render_note_children(model) = @block_renderer.render_note_children(model)
677
735
  def render_simple_children(model) = @block_renderer.render_simple_children(model)
736
+ def render_admonition_children(model) = @block_renderer.render_admonition_children(model)
678
737
 
679
738
  def render_full_block_children(model, **)
680
739
  @block_renderer.render_full_block_children(model, **)
@@ -832,6 +891,16 @@ level = 1)
832
891
  render_paragraph(p)
833
892
  end.join
834
893
  end
894
+ # Footnotes may carry list/table block children (OIML R 7's
895
+ # bibliography lives inside footnote 3) — the native aside
896
+ # renders them, so the end-of-document entry must too.
897
+ FN_BLOCK_ATTRS.each do |attr|
898
+ next unless entry.source_fn.respond_to?(attr)
899
+
900
+ Array(entry.source_fn.public_send(attr)).each do |block|
901
+ content_html << (render(block) || "")
902
+ end
903
+ end
835
904
  Drops::FootnoteDrop.new(entry, content_html)
836
905
  end
837
906
 
@@ -4,37 +4,38 @@ module Metanorma
4
4
  module Html
5
5
  module Component
6
6
  # Collects footnote content encountered during rendering.
7
- # Deduplicates by reference letter/number so each footnote definition
8
- # appears once, even when referenced from multiple locations.
7
+ # Deduplicates by footnote definition (target id, falling back to the
8
+ # fn id/reference) so each definition appears once, even when several
9
+ # <fn> references with differing reference attrs point at it.
9
10
  class FootnoteCollector
10
11
  def initialize
11
12
  @footnotes = []
12
- @ref_map = {}
13
- @id_map = {}
13
+ @entries_by_key = {}
14
14
  end
15
15
 
16
- # Register a footnote and return its sequential number.
17
- # Deduplicates by reference: same reference = same footnote number.
18
- def register(fn)
16
+ # Register a footnote and return its FootnoteEntry.
17
+ # +label_text+ is the fn's presentation autonum label; the first
18
+ # registration's label wins.
19
+ def register(fn, label_text: nil)
19
20
  fn_id = fn.id || fn.reference.to_s
20
- ref = fn.reference.to_s
21
+ key = fn.respond_to?(:target) && fn.target && !fn.target.empty? ? fn.target : fn_id
21
22
 
22
- # If we've seen this reference before, reuse its number
23
- if @ref_map.key?(ref)
24
- return @ref_map[ref]
23
+ if (seen = @entries_by_key[key])
24
+ seen.fmt_label ||= label_text
25
+ return seen
25
26
  end
26
27
 
27
- number = @footnotes.size + 1
28
- @ref_map[ref] = number
29
- @id_map[fn_id] = number
30
- @footnotes << FootnoteEntry.new(
28
+ entry = FootnoteEntry.new(
31
29
  id: fn_id,
32
- number: number,
33
- reference: ref,
30
+ number: @footnotes.size + 1,
31
+ reference: fn.reference.to_s,
34
32
  content: fn.p,
35
- fmt_label: fn.fmt_fn_label,
33
+ fmt_label: label_text,
34
+ source_fn: fn,
36
35
  )
37
- number
36
+ @footnotes << entry
37
+ @entries_by_key[key] = entry
38
+ entry
38
39
  end
39
40
 
40
41
  def empty?
@@ -51,7 +52,7 @@ module Metanorma
51
52
  end
52
53
 
53
54
  FootnoteEntry = Struct.new(:id, :number, :reference, :content, :fmt_label,
54
- keyword_init: true)
55
+ :source_fn, keyword_init: true)
55
56
  end
56
57
  end
57
58
  end
@@ -13,8 +13,11 @@ module Metanorma
13
13
 
14
14
  langs = bibdata.language
15
15
  if langs && !langs.empty?
16
- lang = langs.find { |l| l.current == "true" } || langs.first
17
- lang.value || lang.to_s
16
+ # Base bibdata carries plain Iso639Code entries (no
17
+ # `current` marker); flavor bibdata models mark one current.
18
+ lang = langs.find { |l| l.respond_to?(:current) && l.current == "true" } ||
19
+ langs.first
20
+ lang.respond_to?(:value) ? (lang.value || lang.to_s) : lang.to_s
18
21
  else
19
22
  "en"
20
23
  end
@@ -42,7 +45,9 @@ module Metanorma
42
45
  bibdata = @document.bibdata
43
46
  return nil unless bibdata
44
47
 
45
- identifiers = bibdata.doc_identifier
48
+ # Flavor bibdata shapes diverge (e.g. IETF carries no ISO-ish
49
+ # doc_identifier): no id rather than a method error.
50
+ identifiers = safe_attr(bibdata, :doc_identifier)
46
51
  return nil unless identifiers && !identifiers.empty?
47
52
 
48
53
  first_id = identifiers.first
@@ -20,7 +20,7 @@ module Metanorma
20
20
 
21
21
  # Name kept for API stability (public renderer API); the boolean
22
22
  # return predates the Naming/PredicateMethod convention.
23
- # rubocop:disable Naming/PredicateMethod
23
+ # rubocop:disable-next Naming/PredicateMethod
24
24
  def check_presentation_markers(node)
25
25
  return false unless node
26
26
  return false if node.is_a?(String)
@@ -54,7 +54,6 @@ module Metanorma
54
54
 
55
55
  false
56
56
  end
57
- # rubocop:enable Naming/PredicateMethod
58
57
  end
59
58
  end
60
59
  end
@@ -9,55 +9,171 @@ module Metanorma
9
9
  # attributes directly on the model — never strips tags from
10
10
  # rendered HTML.
11
11
  module TextExtraction
12
+ # Invisible MathML operators and joiners (word joiner, invisible
13
+ # times / function application, zero-width space): markup, not
14
+ # display text.
15
+ INVISIBLE_MATH_CHARS = "\u2060\u2061\u2062\u2063\u2064\u200b"
16
+
17
+ # Rendered fmt-* twins never contribute plain text alongside
18
+ # their semantic siblings — the pair linearizes one logical
19
+ # content (#51). Sibling-keyed twins skip only when the
20
+ # semantic element parsed; the always-skipped set are
21
+ # whole-block re-renderings (rendered to the exclusion of the
22
+ # semantic children by the overlay's own contract).
23
+ RENDERED_TWIN_SIBLING = {
24
+ "fmt-stem" => :stem,
25
+ "fmt-eref" => :eref,
26
+ "fmt-origin" => :origin,
27
+ }.freeze
28
+ RENDERED_TWIN_ALWAYS_SKIP = %w[
29
+ fmt-figure fmt-ul fmt-ol fmt-source fmt-date-inline
30
+ ].freeze
31
+
32
+ # The quoted unitsml(...) macro reference names a unit symbol;
33
+ # its linear form is the symbol itself ("unitsml(mV/V)" ->
34
+ # "mV/V"). One nesting level for grouped exponents.
35
+ UNITSML_MACRO =
36
+ /"?unitsml\(([^()]*(?:\([^()]*\)[^()]*)*)\)"?/
37
+
38
+ # The source linear forms spell operators as words (AsciiMath
39
+ # "pm", LaTeX "\pm"); extracted display text carries the glyphs.
40
+ # AsciiMath reserves these tokens as operators, so a bare "pm"
41
+ # in an expression IS the operator; inside a larger word ("rpm")
42
+ # the token boundaries hold the mapping off.
43
+ MATH_OPERATOR_GLYPHS = {
44
+ asciimath: [[/\bpm\b/, "±"], [/\bmp\b/, "∓"]],
45
+ latexmath: [[/\\pm\b/, "±"], [/\\mp\b/, "∓"]],
46
+ }.freeze
47
+
12
48
  def extract_plain_text(node)
13
49
  return node.to_s if node.is_a?(String)
14
50
  return extract_text_value(node).to_s unless node.is_a?(Lutaml::Model::Serializable)
15
51
 
16
- parts = []
52
+ # nil = not a populated stem (e.g. a semx autonum slice also
53
+ # declares these attributes): fall through to the walk.
54
+ stem = stem_text(node)
55
+ return stem unless stem.nil?
56
+
57
+ parts = ordered_content_parts(node)
58
+ if parts.join.strip.empty?
59
+ t = safe_attr(node, :text)
60
+ parts << (t.is_a?(Array) ? t.join : t.to_s) if t
61
+ end
62
+
63
+ parts.join.strip.gsub(" ", " ")
64
+ end
65
+
66
+ def ordered_content_parts(node)
67
+ return [] unless node.element_order.is_a?(Array)
68
+
17
69
  xml_mapping = node.class.mappings_for(:xml, node.lutaml_register)
70
+ return [] unless xml_mapping
18
71
 
19
- if node.element_order.is_a?(Array) && xml_mapping
20
- element_to_attr =
21
- Renderers::ElementOrderTraversal.element_to_attr_map(xml_mapping)
72
+ element_to_attr =
73
+ Renderers::ElementOrderTraversal.element_to_attr_map(xml_mapping)
22
74
 
23
- indices = Hash.new(0)
24
- node.element_order.each do |el|
25
- next unless el.is_a?(Lutaml::Xml::Element)
75
+ parts = []
76
+ indices = Hash.new(0)
77
+ node.element_order.each do |el|
78
+ next unless el.is_a?(Lutaml::Xml::Element)
26
79
 
27
- if el.text?
28
- parts << el.text_content.to_s
29
- elsif el.name == "tab"
30
- parts << " "
31
- # rubocop:disable Lint/DuplicateBranch
32
- elsif el.name == "br"
80
+ if el.text?
81
+ parts << el.text_content.to_s
82
+ elsif el.name == "tab"
83
+ parts << " "
84
+ # rubocop:disable Lint/DuplicateBranch
85
+ elsif el.name == "br"
86
+ parts << " "
87
+ # rubocop:enable Lint/DuplicateBranch
88
+ elsif el.name == "rt"
89
+ # ruby annotation (pronunciation) rides along the base
90
+ # text, it is not content: display text is the base alone
91
+ next
92
+ elsif el.element?
93
+ next if rendered_twin?(el.name, node)
94
+
95
+ attr_name = element_to_attr[el.name]
96
+ if attr_name
97
+ coll = node.public_send(attr_name)
98
+ obj = if coll.is_a?(Array)
99
+ idx = indices[attr_name]
100
+ indices[attr_name] += 1
101
+ coll[idx]
102
+ else
103
+ coll
104
+ end
105
+ text = extract_plain_text(obj)
106
+ parts << (text.empty? ? " " : text)
107
+ elsif el.name == "span"
33
108
  parts << " "
34
- # rubocop:enable Lint/DuplicateBranch
35
- elsif el.element?
36
- attr_name = element_to_attr[el.name]
37
- if attr_name
38
- coll = node.public_send(attr_name)
39
- obj = if coll.is_a?(Array)
40
- idx = indices[attr_name]
41
- indices[attr_name] += 1
42
- coll[idx]
43
- else
44
- coll
45
- end
46
- text = extract_plain_text(obj)
47
- parts << (text.empty? ? " " : text)
48
- elsif el.name == "span"
49
- parts << " "
50
- end
51
109
  end
52
110
  end
53
111
  end
112
+ parts
113
+ end
54
114
 
55
- if parts.join.strip.empty?
56
- t = safe_attr(node, :text)
57
- parts << (t.is_a?(Array) ? t.join : t.to_s) if t
115
+ # A stem (or a semx slice of one) carries up to three
116
+ # serializations of a single expression: the AsciiMath source,
117
+ # the MathML rendering, the LaTeX source. Linearizing more than
118
+ # one concatenates duplicates — "30003000", 'n LCn_{"LC"}'
119
+ # (#51). Preference: the source linear form, then the MathML
120
+ # token walk. Returns nil when no form is populated — the node
121
+ # is then not stem-shaped content (an empty semx slice), and
122
+ # the caller falls back to the element_order walk.
123
+ def stem_text(stem)
124
+ return nil unless math_carrier?(stem)
125
+
126
+ populated = false
127
+ %i[asciimath math latexmath].each do |form|
128
+ value = safe_attr(stem, form)
129
+ next if value.nil? || (value.respond_to?(:empty?) && value.empty?)
130
+
131
+ populated = true
132
+ text = if form == :math
133
+ Array(value).map { |m| extract_plain_text(m) }.join(" ")
134
+ else
135
+ display_math_text(extract_text_value(value), form)
136
+ end
137
+ text = normalize_math_text(text)
138
+ return text unless text.empty?
58
139
  end
140
+ populated ? "" : nil
141
+ end
59
142
 
60
- parts.join.strip.gsub(" ", " ")
143
+ def display_math_text(text, form)
144
+ MATH_OPERATOR_GLYPHS.fetch(form, []).reduce(text.to_s) do |acc, (pattern, glyph)|
145
+ acc.gsub(pattern, glyph)
146
+ end
147
+ end
148
+
149
+ # Duck-typed stem check: any model declaring both an asciimath
150
+ # and a math attribute serializes one expression in multiple
151
+ # forms (StemInlineElement, StemElement, SemxElement).
152
+ def math_carrier?(node)
153
+ attrs = node.class.attributes
154
+ attrs.key?(:asciimath) && attrs.key?(:math)
155
+ end
156
+
157
+ def rendered_twin?(name, node)
158
+ return true if RENDERED_TWIN_ALWAYS_SKIP.include?(name)
159
+
160
+ sibling = RENDERED_TWIN_SIBLING[name] or return false
161
+
162
+ values = safe_attr(node, sibling)
163
+ siblings = Array(values).compact
164
+ return false if siblings.empty?
165
+
166
+ # The semantic form is authoritative when it carries text; an
167
+ # empty semantic element defers its label to the rendered
168
+ # twin (the overlay resolves empty erefs into fmt-eref).
169
+ siblings.any? { |s| !extract_plain_text(s).to_s.strip.empty? }
170
+ end
171
+
172
+ def normalize_math_text(text)
173
+ text.to_s
174
+ .tr(INVISIBLE_MATH_CHARS, "")
175
+ .gsub(UNITSML_MACRO) { Regexp.last_match(1) }
176
+ .strip
61
177
  end
62
178
 
63
179
  def extract_text_value(val)
@@ -79,7 +195,10 @@ module Metanorma
79
195
  if v
80
196
  extract_text_value(v)
81
197
  else
82
- val.to_s
198
+ # NEVER fall back to val.to_s here: Serializable#to_s
199
+ # serializes the whole XML subtree, which over large
200
+ # documents costs quadratic time and memory.
201
+ extract_plain_text(val) || ""
83
202
  end
84
203
  end
85
204
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module Html
5
+ # Renderer concerns. Lives in its own file so any consumer (the
6
+ # model layer's PlainText extractor includes TextExtraction) can
7
+ # resolve it through the html.rb autoload — independent of whether
8
+ # BaseRenderer has loaded yet.
9
+ module Concerns
10
+ autoload :MetadataExtraction,
11
+ "metanorma/html/concerns/metadata_extraction"
12
+ autoload :PresentationValidation,
13
+ "metanorma/html/concerns/presentation_validation"
14
+ autoload :SvgProcessing, "metanorma/html/concerns/svg_processing"
15
+ autoload :TextExtraction, "metanorma/html/concerns/text_extraction"
16
+ autoload :TocRegistry, "metanorma/html/concerns/toc_registry"
17
+ end
18
+ end
19
+ end
@@ -8,7 +8,7 @@ module Metanorma
8
8
  type = renderer.safe_attr(admonition, :type) || "note"
9
9
  id = renderer.safe_attr(admonition, :id)
10
10
 
11
- content_html = renderer.render_simple_children(admonition) || ""
11
+ content_html = renderer.render_admonition_children(admonition) || ""
12
12
 
13
13
  new(
14
14
  id: id,
@@ -14,7 +14,7 @@ module Metanorma
14
14
  end
15
15
 
16
16
  def label
17
- @entry.reference
17
+ @entry.fmt_label.to_s.empty? ? @entry.reference : @entry.fmt_label
18
18
  end
19
19
 
20
20
  def content_html