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
@@ -4,23 +4,26 @@ module Metanorma
4
4
  module Html
5
5
  module Drops
6
6
  class SourcecodeDrop < BlockElementDrop
7
- attr_reader :lang, :name_html, :code_html
7
+ attr_reader :lang, :name_html, :code_html, :annotations_html
8
8
 
9
9
  def initialize(id: nil, lang: nil, name_html: nil, code_html: nil,
10
- css_class: nil)
10
+ css_class: nil, annotations_html: nil)
11
11
  @id = id
12
12
  @lang = lang
13
13
  @name_html = name_html
14
14
  @code_html = code_html
15
15
  @css_class = css_class
16
+ @annotations_html = annotations_html
16
17
  end
17
18
 
18
19
  def self.from_model(sc, renderer:)
19
20
  id = renderer.safe_attr(sc, :id)
20
21
  lang = renderer.safe_attr(sc, :lang)
21
22
 
22
- name_html = if sc.name
23
- renderer.render_inline_element(sc.name)
23
+ name_html = if renderer.safe_attr(sc, :fmt_name) || sc.name
24
+ renderer.render_inline_element(
25
+ renderer.safe_attr(sc, :fmt_name) || sc.name,
26
+ )
24
27
  end
25
28
 
26
29
  code_text = if sc.body
@@ -37,8 +40,23 @@ css_class: nil)
37
40
  name_html: name_html,
38
41
  code_html: renderer.escape_html(code_text),
39
42
  css_class: "sourcecode",
43
+ annotations_html: annotations_key_html(sc, renderer),
40
44
  )
41
45
  end
46
+
47
+ # Callout annotations render as a Key definition list under the
48
+ # code, like the native isodoc figdl block. Callouts are numbered
49
+ # in document order.
50
+ def self.annotations_key_html(sc, renderer)
51
+ annotations = Array(renderer.safe_attr(sc, :callout_annotations))
52
+ return nil if annotations.empty?
53
+
54
+ rows = annotations.each_with_index.map do |ann, i|
55
+ dd = Array(ann.p).map { |para| renderer.render_paragraph(para) }.join
56
+ %(<dt><span class="c">#{i + 1}</span></dt><dd>#{dd}</dd>)
57
+ end
58
+ rows.join
59
+ end
42
60
  end
43
61
  end
44
62
  end
@@ -3,197 +3,21 @@
3
3
  module Metanorma
4
4
  module Html
5
5
  class Generator
6
- @tastes = []
7
- @setup = false
8
-
9
6
  class << self
10
- # Returns the full FlavorRegistry built from setup!. Read-only
11
- # access for BaseRenderer, PubidRenderer, and any consumer that
12
- # needs flavor identity.
13
- def flavors
14
- setup! unless @setup
15
- @flavors
16
- end
17
-
18
- # Register a taste: same document model, different renderer based
19
- # on publisher. When the document's first author publisher
20
- # abbreviation matches, the taste renderer takes precedence over
21
- # the model-based renderer.
22
- def register_taste(model_class, publisher_abbrev, renderer_class)
23
- @tastes << [model_class, publisher_abbrev, renderer_class]
24
- end
25
-
7
+ # The HTML format adapter over the central flavor registry.
8
+ # Renderer selection: the most-specific matching flavor that
9
+ # provides an :html renderer wins (Proc values are flavor-owned
10
+ # variant resolvers — publisher/doctype/profile selection); with
11
+ # no flavor match, the harness default by ancestry. Options are
12
+ # per-call runtime knobs threaded to the resolver.
26
13
  def generate(document, **)
27
- setup! unless @setup
28
- renderer_for(document).new.generate_full_document(document, **)
29
- end
30
-
31
- def renderer_for(document)
32
- setup! unless @setup
33
-
34
- taste_renderer = find_taste(document)
35
- return taste_renderer if taste_renderer
36
-
37
- flavor = @flavors.find_for(document.class)
38
- flavor&.renderer_class || BaseRenderer
39
- end
40
-
41
- private
42
-
43
- def find_taste(document)
44
- @tastes.each do |model_class, publisher_abbrev, renderer_class|
45
- next unless document.is_a?(model_class)
46
- return renderer_class if taste_publisher?(document,
47
- publisher_abbrev)
48
- end
49
- nil
50
- end
51
-
52
- def taste_publisher?(document, abbrev)
53
- bibdata = document.bibdata if document.is_a?(Lutaml::Model::Serializable)
54
- return false unless bibdata
55
-
56
- contributors = bibdata.contributor
57
- return false unless contributors
58
-
59
- contributors.any? do |c|
60
- roles = c.role
61
- next false unless roles.is_a?(Array)
62
- next false unless roles.any? { |r| r&.type == "author" }
63
-
64
- org = c.organization
65
- next false unless org
66
-
67
- org_abbrev = org.abbreviation
68
- if org_abbrev.is_a?(String)
69
- org_abbrev == abbrev
70
- elsif org_abbrev.is_a?(Lutaml::Model::Serializable)
71
- safe_attr(org_abbrev, :content) == abbrev
72
- else
73
- org_abbrev.to_s == abbrev
74
- end
75
- end
14
+ renderer_for(document, **)
15
+ .new.generate_full_document(document, **)
76
16
  end
77
17
 
78
- def setup!
79
- return if @setup
80
-
81
- @setup = true
82
- @flavors = build_flavor_registry
83
-
84
- # Trigger autoloads by referencing constants
85
- BaseRenderer
86
- StandardRenderer
87
- IsoRenderer
88
- BipmRenderer
89
- CcRenderer
90
- CsaRenderer
91
- IccRenderer
92
- IecRenderer
93
- IeeeRenderer
94
- IetfRenderer
95
- IhoRenderer
96
- ItuRenderer
97
- OgcRenderer
98
- PdfaRenderer
99
- RiboseRenderer
100
-
101
- # Register tastes (publisher-based dispatch within same model)
102
- register_taste Metanorma::IsoDocument::Root, "ICC", IccRenderer
103
- register_taste Metanorma::RiboseDocument::Root, "PDF Association",
104
- PdfaRenderer
105
- end
106
-
107
- # Single source of truth for flavor identity. Each Flavor ties
108
- # together the model class, the renderer, the symbolic name, and
109
- # (if applicable) the Pubid module. Adding a new flavor = one
110
- # entry here.
111
- def build_flavor_registry
112
- FlavorRegistry.new.tap do |registry|
113
- registry.register(Flavor.new(
114
- name: nil,
115
- model_class: Metanorma::Document::Root,
116
- renderer_class: BaseRenderer,
117
- ))
118
- registry.register(Flavor.new(
119
- name: nil,
120
- model_class: Metanorma::StandardDocument::Root,
121
- renderer_class: StandardRenderer,
122
- ))
123
- registry.register(Flavor.new(
124
- name: :iso,
125
- model_class: Metanorma::IsoDocument::Root,
126
- renderer_class: IsoRenderer,
127
- pubid_module: :"Pubid::Iso",
128
- ))
129
- registry.register(Flavor.new(
130
- name: :bipm,
131
- model_class: Metanorma::BipmDocument::Root,
132
- renderer_class: BipmRenderer,
133
- ))
134
- registry.register(Flavor.new(
135
- name: :cc,
136
- model_class: Metanorma::CcDocument::Root,
137
- renderer_class: CcRenderer,
138
- ))
139
- registry.register(Flavor.new(
140
- name: :csa,
141
- model_class: Metanorma::CsaDocument::Root,
142
- renderer_class: CsaRenderer,
143
- pubid_module: :"Pubid::Csa",
144
- ))
145
- registry.register(Flavor.new(
146
- name: :iec,
147
- model_class: Metanorma::IecDocument::Root,
148
- renderer_class: IecRenderer,
149
- pubid_module: :"Pubid::Iec",
150
- ))
151
- registry.register(Flavor.new(
152
- name: :ieee,
153
- model_class: Metanorma::IeeeDocument::Root,
154
- renderer_class: IeeeRenderer,
155
- pubid_module: :"Pubid::Ieee",
156
- ))
157
- registry.register(Flavor.new(
158
- name: :ietf,
159
- model_class: Metanorma::IetfDocument::Root,
160
- renderer_class: IetfRenderer,
161
- ))
162
- registry.register(Flavor.new(
163
- name: :iho,
164
- model_class: Metanorma::IhoDocument::Root,
165
- renderer_class: IhoRenderer,
166
- pubid_module: :"Pubid::Iho",
167
- ))
168
- registry.register(Flavor.new(
169
- name: :itu,
170
- model_class: Metanorma::ItuDocument::Root,
171
- renderer_class: ItuRenderer,
172
- pubid_module: :"Pubid::Itu",
173
- ))
174
- registry.register(Flavor.new(
175
- name: :ogc,
176
- model_class: Metanorma::OgcDocument::Root,
177
- renderer_class: OgcRenderer,
178
- ))
179
- registry.register(Flavor.new(
180
- name: :pdfa,
181
- model_class: Metanorma::RiboseDocument::Root,
182
- renderer_class: PdfaRenderer,
183
- ))
184
- registry.register(Flavor.new(
185
- name: :ribose,
186
- model_class: Metanorma::RiboseDocument::Root,
187
- renderer_class: RiboseRenderer,
188
- ))
189
- end
190
- end
191
-
192
- def safe_attr(node, attr_name)
193
- return nil unless node.is_a?(Lutaml::Model::Serializable)
194
- return nil unless node.class.attributes.key?(attr_name)
195
-
196
- node.public_send(attr_name)
18
+ def renderer_for(document, **)
19
+ Metanorma::Core::Flavors.renderer_for(document, format: :html,
20
+ **) || BaseRenderer
197
21
  end
198
22
  end
199
23
  end
@@ -12,9 +12,9 @@ module Metanorma
12
12
  module RendererDelegation
13
13
  def safe_attr(...) = @renderer.safe_attr(...)
14
14
  def escape_html(...) = @renderer.escape_html(...)
15
- def extract_block_label(...)= @renderer.extract_block_label(...)
15
+ def extract_block_label(...) = @renderer.extract_block_label(...)
16
16
  def extract_plain_text(...) = @renderer.extract_plain_text(...)
17
- def render_mixed_inline(...)= @renderer.render_mixed_inline(...)
17
+ def render_mixed_inline(...) = @renderer.render_mixed_inline(...)
18
18
  def render_liquid(...) = @renderer.render_liquid(...)
19
19
  end
20
20
  end
@@ -16,6 +16,9 @@ module Metanorma
16
16
  figure: :render_figure,
17
17
  quote: :render_quote,
18
18
  formula: :render_formula,
19
+ requirement: :render_nested_requirement,
20
+ recommendation: :render_nested_requirement,
21
+ permission: :render_nested_requirement,
19
22
  }.freeze
20
23
 
21
24
  SIMPLE_CHILDREN = {
@@ -24,12 +27,35 @@ module Metanorma
24
27
 
25
28
  NOTE_CHILDREN = {
26
29
  paragraphs: :render_paragraph,
30
+ semx: :render_note_semx_content,
27
31
  ul: :render_unordered_list,
28
32
  ol: :render_ordered_list,
29
33
  dl: :render_definition_list,
30
34
  quote: :render_quote,
31
35
  }.freeze
32
36
 
37
+ # Admonitions carry the full block range (BSI commentary lists,
38
+ # NIST historical quotes with attributions).
39
+ ADMONITION_CHILDREN = {
40
+ paragraphs: :render_paragraph,
41
+ semx: :render_note_semx_content,
42
+ ul: :render_unordered_list,
43
+ ol: :render_ordered_list,
44
+ dl: :render_definition_list,
45
+ quote: :render_quote,
46
+ table: :render_table,
47
+ formula: :render_formula,
48
+ }.freeze
49
+
50
+ def render_admonition_children(model)
51
+ render_block_children(model, children: ADMONITION_CHILDREN)
52
+ end
53
+
54
+ # Presentation notes whose body arrives wrapped in a semx slice.
55
+ def render_note_semx_content(semx)
56
+ coordinator.render_semx_content(semx)
57
+ end
58
+
33
59
  def initialize(coordinator)
34
60
  @coordinator = coordinator
35
61
  end
@@ -78,27 +104,25 @@ module Metanorma
78
104
  render_table_colgroup(table.colgroup)
79
105
  end
80
106
 
81
- thead_html = if table.thead
82
- render_table_section(table.thead, "thead")
83
- end
84
-
85
- tbody_html = if table.tbody
86
- render_table_section(table.tbody, "tbody")
87
- end
88
-
89
- tfoot_html = nil
90
- if table.tfoot || (table.note && !table.note.empty?)
91
- tfoot_inner = render_table_section_rows(table.tfoot) if table.tfoot
92
- notes_html = nil
93
- if table.note && !table.note.empty?
94
- notes_inner = table.note.filter_map { |n| render_note(n) }.join
95
- notes_html = render_liquid("_element.html.liquid", "tag" => "tr", "extra_attrs" => "",
96
- "content" => render_liquid("_element.html.liquid", "tag" => "td", "extra_attrs" => %( colspan="#{col_count}" class="table-notes"), "content" => notes_inner))
97
- end
98
- tfoot_html = render_liquid("_element.html.liquid", "tag" => "tfoot", "extra_attrs" => "",
99
- "content" => "#{tfoot_inner}#{notes_html}")
107
+ # <fn>s inside cells collect here while the sections render,
108
+ # then lift into a visible tfoot block like the native render.
109
+ table_fns = []
110
+ saved_ctx = coordinator.table_fn_context
111
+ coordinator.table_fn_context = { fns: table_fns }
112
+ begin
113
+ thead_html = if table.thead
114
+ render_table_section(table.thead, "thead")
115
+ end
116
+
117
+ tbody_html = if table.tbody
118
+ render_table_section(table.tbody, "tbody")
119
+ end
120
+ ensure
121
+ coordinator.table_fn_context = saved_ctx
100
122
  end
101
123
 
124
+ tfoot_html = table_tfoot_html(table, table_fns, col_count)
125
+
102
126
  render_liquid("_table.html.liquid", {
103
127
  "attrs" => attrs,
104
128
  "caption" => caption_html,
@@ -109,6 +133,45 @@ module Metanorma
109
133
  })
110
134
  end
111
135
 
136
+ def table_tfoot_html(table, table_fns, col_count)
137
+ return nil unless table.tfoot || (table.note && !table.note.empty?) ||
138
+ table_fns.any?
139
+
140
+ tfoot_inner = render_table_section_rows(table.tfoot) if table.tfoot
141
+ notes_html = table_notes_row(table, col_count)
142
+ table_fn_html = table_footnotes_row(table_fns, col_count)
143
+ render_liquid("_element.html.liquid", "tag" => "tfoot", "extra_attrs" => "",
144
+ "content" => "#{tfoot_inner}#{notes_html}#{table_fn_html}")
145
+ end
146
+
147
+ def table_notes_row(table, col_count)
148
+ return nil unless table.note && !table.note.empty?
149
+
150
+ notes_inner = table.note.filter_map { |n| render_note(n) }.join
151
+ render_liquid("_element.html.liquid", "tag" => "tr", "extra_attrs" => "",
152
+ "content" => render_liquid("_element.html.liquid", "tag" => "td", "extra_attrs" => %( colspan="#{col_count}" class="table-notes"), "content" => notes_inner))
153
+ end
154
+
155
+ # Native parity: <fn>s used inside a table render as visible
156
+ # TableFootnote blocks in a spanning tfoot row.
157
+ def table_footnotes_row(fns, col_count)
158
+ items = fns.filter_map do |fn|
159
+ label = coordinator.footnote_label_text(fn) ||
160
+ safe_attr(fn, :reference)
161
+ next unless label
162
+
163
+ body = coordinator.fn_content_html(fn)
164
+ next if body.to_s.empty?
165
+
166
+ %(<p class="TableFootnote"><span><span class="TableFootnoteRef">#{escape_html(label.to_s)}</span>&#xA0; </span>#{body}</p>)
167
+ end
168
+ return nil if items.empty?
169
+
170
+ inner = %(<div class="TableFootnote">#{items.join}</div>)
171
+ render_liquid("_element.html.liquid", "tag" => "tr", "extra_attrs" => "",
172
+ "content" => render_liquid("_element.html.liquid", "tag" => "td", "extra_attrs" => %( colspan="#{col_count}" class="table-footnotes"), "content" => inner))
173
+ end
174
+
112
175
  def table_column_count(table)
113
176
  if table.colgroup&.col && !table.colgroup.col.empty?
114
177
  return table.colgroup.col.size
@@ -175,11 +238,7 @@ module Metanorma
175
238
  items = ul.listitem&.filter_map do |li|
176
239
  render_list_item_content(li, labeled: labeled)
177
240
  end || []
178
- render_liquid("_list.html.liquid", {
179
- "list_tag" => "ul",
180
- "attrs" => attrs,
181
- "items" => items,
182
- })
241
+ render_list_with_attached_notes(ul, items, "ul", attrs)
183
242
  end
184
243
 
185
244
  def render_table_cell(cell, force_tag = nil)
@@ -206,11 +265,30 @@ module Metanorma
206
265
  items = ol.listitem&.filter_map do |li|
207
266
  render_list_item_content(li, labeled: labeled)
208
267
  end || []
209
- render_liquid("_list.html.liquid", {
210
- "list_tag" => "ol",
211
- "attrs" => attrs,
212
- "items" => items,
213
- })
268
+ render_list_with_attached_notes(ol, items, "ol", attrs)
269
+ end
270
+
271
+ # Lists can carry attached notes (e.g. <note> siblings of the
272
+ # <li> children); render them after the list items so they are
273
+ # not dropped.
274
+ def render_list_with_attached_notes(list, items, list_tag, attrs)
275
+ items_html = render_liquid("_list.html.liquid", {
276
+ "list_tag" => list_tag,
277
+ "attrs" => attrs,
278
+ "items" => items,
279
+ })
280
+ notes = safe_attr(list, :note)
281
+ note_parts = Array(notes).filter_map { |note| coordinator.render(note) || "" }
282
+ return items_html if note_parts.empty?
283
+
284
+ note_html = render_liquid("_element.html.liquid", {
285
+ "tag" => "div",
286
+ "extra_attrs" => element_attrs(
287
+ class: "list-attached-notes",
288
+ ),
289
+ "content" => note_parts.join,
290
+ })
291
+ items_html + note_html
214
292
  end
215
293
 
216
294
  def render_list_item_content(li, labeled: false)
@@ -251,10 +329,27 @@ module Metanorma
251
329
  dd_html = dd ? coordinator.render_mixed_inline(dd) : nil
252
330
  { "dt" => dt_html, "dd" => dd_html }
253
331
  end || []
254
- render_liquid("_definition_list.html.liquid", {
255
- "attrs" => attrs,
256
- "terms" => terms,
257
- })
332
+ html = render_liquid("_definition_list.html.liquid", {
333
+ "attrs" => attrs,
334
+ "terms" => terms,
335
+ })
336
+ attached_notes_html(dl, html)
337
+ end
338
+
339
+ # Notes attached to a rendered list container (dl notes are not
340
+ # list items); emitted after the list body so they are not dropped.
341
+ def attached_notes_html(list, html)
342
+ note_parts = Array(safe_attr(list, :note))
343
+ .filter_map { |note| coordinator.render(note) || "" }
344
+ return html if note_parts.empty?
345
+
346
+ html + render_liquid("_element.html.liquid", {
347
+ "tag" => "div",
348
+ "extra_attrs" => element_attrs(
349
+ class: "list-attached-notes",
350
+ ),
351
+ "content" => note_parts.join,
352
+ })
258
353
  end
259
354
 
260
355
  def render_figure(figure, **_opts)
@@ -263,11 +358,41 @@ module Metanorma
263
358
  render_liquid("_figure.html.liquid", { "block" => drop })
264
359
  end
265
360
 
361
+ # Image maps render as their wrapped figure(s): the href
362
+ # rewriting they carry is an SVG asset transformation, not
363
+ # page markup.
364
+ def render_svgmap(svgmap, **)
365
+ render_wrapped_figures(svgmap, **)
366
+ end
367
+
368
+ def render_imagemap(imagemap, **)
369
+ render_wrapped_figures(imagemap, **)
370
+ end
371
+
372
+ def render_wrapped_figures(container, **opts)
373
+ Array(safe_attr(container, :figure)).map do |fig|
374
+ render_figure(fig, **opts)
375
+ end.join
376
+ end
377
+
266
378
  def render_image(image)
267
- src_val = image_source(image)
379
+ svg_xml = safe_attr(image, :inline_svg)
380
+ if svg_xml && !svg_xml.empty?
381
+ # Native parity: isodoc inlines embedded SVG markup (its text
382
+ # nodes are page text), not a base64 <img> data URI.
383
+ return render_liquid("_element.html.liquid", {
384
+ "tag" => "span",
385
+ "extra_attrs" => element_attrs(
386
+ id: safe_attr(image, :id),
387
+ class: "figure-svg",
388
+ ),
389
+ "content" => svg_xml,
390
+ })
391
+ end
392
+
268
393
  attrs = element_attrs(
269
394
  id: safe_attr(image, :id),
270
- src: src_val,
395
+ src: image_source(image),
271
396
  alt: safe_attr(image, :alt),
272
397
  height: safe_attr(image, :height),
273
398
  width: safe_attr(image, :width),
@@ -334,21 +459,24 @@ module Metanorma
334
459
  render_liquid("_formula.html.liquid", { "block" => drop })
335
460
  end
336
461
 
462
+ QUOTE_CHILDREN = {
463
+ paragraphs: %i[self render_paragraph],
464
+ ul: %i[self render_unordered_list],
465
+ ol: %i[self render_ordered_list],
466
+ dl: %i[self render_definition_list],
467
+ table: %i[self render_table],
468
+ formula: %i[self render_formula],
469
+ note: %i[coordinator render_note],
470
+ bookmark: %i[coordinator render_bookmark],
471
+ }.freeze
472
+
337
473
  def render_quote(quote, **_opts)
338
474
  attrs = element_attrs(id: safe_attr(quote, :id), class: "quote")
339
- content_parts = []
340
- quote.paragraphs&.each do |para|
341
- content_parts << (render_paragraph(para) || "")
342
- end
343
- quote.ul&.each do |ul|
344
- content_parts << (render_unordered_list(ul) || "")
345
- end
346
- quote.ol&.each do |ol|
347
- content_parts << (render_ordered_list(ol) || "")
348
- end
349
- content = content_parts.join
475
+ content = quote_children_html(quote)
350
476
  attribution_html = if quote.attribution
351
477
  coordinator.render_mixed_inline(quote.attribution)
478
+ else
479
+ quote_author_source_attribution(quote)
352
480
  end
353
481
  render_liquid("_quote.html.liquid", {
354
482
  "attrs" => attrs,
@@ -357,6 +485,31 @@ module Metanorma
357
485
  })
358
486
  end
359
487
 
488
+ def quote_children_html(quote)
489
+ QUOTE_CHILDREN.flat_map do |attr, (receiver, method)|
490
+ values = safe_attr(quote, attr)
491
+ next [] unless values
492
+
493
+ target = receiver == :coordinator ? coordinator : self
494
+ Array(values).map { |child| target.public_send(method, child) || "" }
495
+ end.join
496
+ end
497
+
498
+ # Quotes carry the attribution as author + source children
499
+ # (native: "— {author}, {source}").
500
+ def quote_author_source_attribution(quote)
501
+ author = safe_attr(safe_attr(quote, :author), :text)
502
+ source = safe_attr(quote, :source)
503
+ source_text = if source
504
+ rendered = coordinator.render_mixed_inline(source)
505
+ rendered.to_s.gsub(/<[^>]+>/, "").strip
506
+ end
507
+ parts = [author, source_text].compact.reject(&:empty?)
508
+ return nil if parts.empty?
509
+
510
+ "— #{parts.join(', ')}"
511
+ end
512
+
360
513
  def render_admonition(admonition, **_opts)
361
514
  drop = Drops::AdmonitionDrop.from_model(admonition,
362
515
  renderer: coordinator.renderer_context)
@@ -407,6 +560,13 @@ module Metanorma
407
560
  render_block_children(model, children: SIMPLE_CHILDREN)
408
561
  end
409
562
 
563
+ # Requirements nested in a block container (conformance-class
564
+ # requirements inside annex examples) dispatch through the main
565
+ # renderer's registered requirement render.
566
+ def render_nested_requirement(req)
567
+ coordinator.render(req)
568
+ end
569
+
410
570
  def render_full_block_children(model, first_paragraph_label: nil,
411
571
  first_paragraph_label_class: nil)
412
572
  render_block_children(model, children: BLOCK_CHILDREN,