metanorma-document 0.5.0 → 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 (543) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +81 -0
  3. data/Rakefile +3 -7
  4. data/data/stylesheets/base/_dark.css +3 -3
  5. data/data/stylesheets/base/_print.css +1 -1
  6. data/data/stylesheets/components/term.css +4 -2
  7. data/data/themes/ogc.yaml +5 -0
  8. data/lib/metanorma/basic_document/ancillary_blocks/figure_block.rb +2 -2
  9. data/lib/metanorma/basic_document/multi_paragraph/admonition_block.rb +2 -2
  10. data/lib/metanorma/document/cli.rb +134 -0
  11. data/lib/metanorma/document/components/ancillary_blocks/figure_block.rb +5 -0
  12. data/lib/metanorma/document/components/ancillary_blocks/fmt_figure_element.rb +47 -0
  13. data/lib/metanorma/document/components/ancillary_blocks/formula_block.rb +2 -0
  14. data/lib/metanorma/document/components/ancillary_blocks/imagemap_element.rb +73 -0
  15. data/lib/metanorma/document/components/ancillary_blocks/literal_block.rb +2 -0
  16. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +2 -0
  17. data/lib/metanorma/document/components/ancillary_blocks/svg_target_element.rb +27 -0
  18. data/lib/metanorma/document/components/ancillary_blocks/svgmap_element.rb +28 -0
  19. data/lib/metanorma/document/components/ancillary_blocks.rb +4 -0
  20. data/lib/metanorma/document/components/bib_data/bibliographic_item.rb +4 -0
  21. data/lib/metanorma/document/components/blocks/fmt_provision.rb +25 -0
  22. data/lib/metanorma/document/components/blocks/note_block.rb +8 -0
  23. data/lib/metanorma/document/components/blocks/permission_model.rb +9 -0
  24. data/lib/metanorma/document/components/blocks/recommendation_model.rb +9 -0
  25. data/lib/metanorma/document/components/blocks/requirement_base.rb +12 -0
  26. data/lib/metanorma/document/components/blocks/requirement_import.rb +23 -0
  27. data/lib/metanorma/document/components/blocks/requirement_measurement_target.rb +23 -0
  28. data/lib/metanorma/document/components/blocks/requirement_model.rb +9 -0
  29. data/lib/metanorma/document/components/blocks/requirement_specification.rb +23 -0
  30. data/lib/metanorma/document/components/blocks/requirement_verification.rb +23 -0
  31. data/lib/metanorma/document/components/blocks.rb +8 -0
  32. data/lib/metanorma/document/components/data_types/formatted_string.rb +9 -0
  33. data/lib/metanorma/document/components/id_elements/image.rb +4 -0
  34. data/lib/metanorma/document/components/inline/columnbreak_element.rb +17 -0
  35. data/lib/metanorma/document/components/inline/concept_element.rb +18 -0
  36. data/lib/metanorma/document/components/inline/date_element.rb +29 -0
  37. data/lib/metanorma/document/components/inline/display_text_element.rb +2 -0
  38. data/lib/metanorma/document/components/inline/em_raw_element.rb +6 -7
  39. data/lib/metanorma/document/components/inline/eref_element.rb +48 -22
  40. data/lib/metanorma/document/components/inline/eref_stack.rb +23 -0
  41. data/lib/metanorma/document/components/inline/error_message.rb +28 -0
  42. data/lib/metanorma/document/components/inline/fmt_date_element.rb +28 -0
  43. data/lib/metanorma/document/components/inline/fmt_date_inline_element.rb +26 -0
  44. data/lib/metanorma/document/components/inline/fmt_eref_element.rb +25 -0
  45. data/lib/metanorma/document/components/inline/fmt_origin_element.rb +24 -0
  46. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +3 -0
  47. data/lib/metanorma/document/components/inline/fmt_source_element.rb +31 -0
  48. data/lib/metanorma/document/components/inline/fn_element.rb +11 -0
  49. data/lib/metanorma/document/components/inline/link_element.rb +8 -0
  50. data/lib/metanorma/document/components/inline/name_with_id_element.rb +2 -0
  51. data/lib/metanorma/document/components/inline/refterm_element.rb +21 -0
  52. data/lib/metanorma/document/components/inline/semx_element.rb +22 -0
  53. data/lib/metanorma/document/components/inline/sourcelocality_stack_element.rb +27 -0
  54. data/lib/metanorma/document/components/inline/span_element.rb +2 -0
  55. data/lib/metanorma/document/components/inline/stem_inline_element.rb +2 -0
  56. data/lib/metanorma/document/components/inline/strong_raw_element.rb +6 -9
  57. data/lib/metanorma/document/components/inline/sub_element.rb +2 -0
  58. data/lib/metanorma/document/components/inline/termref_element.rb +24 -0
  59. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +10 -31
  60. data/lib/metanorma/document/components/inline/variant_title_element.rb +2 -0
  61. data/lib/metanorma/document/components/inline/vocabulary.rb +36 -0
  62. data/lib/metanorma/document/components/inline.rb +23 -0
  63. data/lib/metanorma/document/components/lists/dd_element.rb +6 -1
  64. data/lib/metanorma/document/components/lists/definition.rb +2 -0
  65. data/lib/metanorma/document/components/lists/definition_list.rb +3 -0
  66. data/lib/metanorma/document/components/lists/dt_element.rb +3 -0
  67. data/lib/metanorma/document/components/lists/fmt_list_element.rb +73 -0
  68. data/lib/metanorma/document/components/lists/list_item.rb +3 -0
  69. data/lib/metanorma/document/components/lists/ordered_list.rb +4 -2
  70. data/lib/metanorma/document/components/lists/unordered_list.rb +2 -0
  71. data/lib/metanorma/document/components/lists.rb +2 -0
  72. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +16 -0
  73. data/lib/metanorma/document/components/multi_paragraph/review_block.rb +2 -2
  74. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +15 -0
  75. data/lib/metanorma/document/components/reference_elements/citation.rb +7 -0
  76. data/lib/metanorma/document/components/reference_elements/source_element.rb +4 -0
  77. data/lib/metanorma/document/components/semantic/node.rb +46 -0
  78. data/lib/metanorma/document/components/semantic.rb +11 -0
  79. data/lib/metanorma/document/components/tables/header_table_cell.rb +1 -0
  80. data/lib/metanorma/document/components/tables/table_cell.rb +70 -44
  81. data/lib/metanorma/document/components/tables/text_table_cell.rb +1 -0
  82. data/lib/metanorma/document/components/tables/text_table_row.rb +2 -0
  83. data/lib/metanorma/document/components/text_elements/ruby_annotation_element.rb +26 -0
  84. data/lib/metanorma/document/components/text_elements/ruby_element.rb +41 -6
  85. data/lib/metanorma/document/components/text_elements/ruby_pronunciation_element.rb +25 -0
  86. data/lib/metanorma/document/components/text_elements/strike_element.rb +3 -0
  87. data/lib/metanorma/document/components/text_elements/underline_element.rb +3 -0
  88. data/lib/metanorma/document/components/text_elements.rb +2 -0
  89. data/lib/metanorma/document/components.rb +1 -0
  90. data/lib/metanorma/document/grammar_vocabulary.rb +109 -0
  91. data/lib/metanorma/document/mirror_seed.rb +253 -0
  92. data/lib/metanorma/document/mko/collection.rb +168 -0
  93. data/lib/metanorma/document/mko/exporter.rb +17 -0
  94. data/lib/metanorma/document/mko/project.rb +1110 -0
  95. data/lib/metanorma/document/mko.rb +122 -0
  96. data/lib/metanorma/document/model_access.rb +44 -0
  97. data/lib/metanorma/document/native_models.rb +319 -0
  98. data/lib/metanorma/document/plain_text.rb +39 -0
  99. data/lib/metanorma/document/relaton/version_info.rb +4 -0
  100. data/lib/metanorma/document/version.rb +1 -1
  101. data/lib/metanorma/document.rb +19 -26
  102. data/lib/metanorma/{collection → document_collection}/directive.rb +1 -1
  103. data/lib/metanorma/{collection → document_collection}/doc_container.rb +6 -2
  104. data/lib/metanorma/{collection → document_collection}/entry.rb +2 -2
  105. data/lib/metanorma/{collection → document_collection}/root.rb +2 -2
  106. data/lib/metanorma/document_collection.rb +10 -0
  107. data/lib/metanorma/html/base_renderer.rb +105 -28
  108. data/lib/metanorma/html/component/footnote_collector.rb +21 -20
  109. data/lib/metanorma/html/concerns/metadata_extraction.rb +8 -3
  110. data/lib/metanorma/html/concerns/presentation_validation.rb +1 -2
  111. data/lib/metanorma/html/concerns/text_extraction.rb +154 -35
  112. data/lib/metanorma/html/concerns.rb +19 -0
  113. data/lib/metanorma/html/drops/admonition_drop.rb +1 -1
  114. data/lib/metanorma/html/drops/example_drop.rb +8 -1
  115. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  116. data/lib/metanorma/html/drops/note_drop.rb +31 -4
  117. data/lib/metanorma/html/drops/sourcecode_drop.rb +22 -4
  118. data/lib/metanorma/html/generator.rb +11 -187
  119. data/lib/metanorma/html/renderer_delegation.rb +2 -2
  120. data/lib/metanorma/html/renderers/block_renderer.rb +246 -51
  121. data/lib/metanorma/html/renderers/inline_renderer.rb +144 -17
  122. data/lib/metanorma/html/renderers/section_renderer.rb +12 -2
  123. data/lib/metanorma/html/renderers/semantic_renderer.rb +487 -0
  124. data/lib/metanorma/html/renderers.rb +2 -0
  125. data/lib/metanorma/html/standard_renderer.rb +743 -81
  126. data/lib/metanorma/html/templates/_agency_cover.html.liquid +30 -0
  127. data/lib/metanorma/html/templates/_columnbreak.html.liquid +1 -0
  128. data/lib/metanorma/html/templates/_cover.html.liquid +3 -0
  129. data/lib/metanorma/html/templates/_example.html.liquid +1 -1
  130. data/lib/metanorma/html/templates/_main_content.html.liquid +1 -1
  131. data/lib/metanorma/html/templates/_note.html.liquid +1 -1
  132. data/lib/metanorma/html/templates/_paragraph.html.liquid +1 -1
  133. data/lib/metanorma/html/templates/_ruby.html.liquid +1 -0
  134. data/lib/metanorma/html/templates/_sourcecode.html.liquid +4 -3
  135. data/lib/metanorma/html/templates/_standard_cover.html.liquid +54 -3
  136. data/lib/metanorma/html/templates/_term_number.html.liquid +1 -1
  137. data/lib/metanorma/html.rb +30 -15
  138. data/tasks/flavors.rake +116 -0
  139. data/tasks/grammar.rake +28 -0
  140. data/tasks/roundtrip_samples.rake +48 -34
  141. metadata +121 -416
  142. data/frontend/dist/app.css +0 -1
  143. data/frontend/dist/app.iife.js +0 -24
  144. data/lib/metanorma/bipm_document/metadata/bipm_bib_data_extension_type.rb +0 -20
  145. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +0 -17
  146. data/lib/metanorma/bipm_document/metadata/bipm_structured_identifier.rb +0 -21
  147. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +0 -18
  148. data/lib/metanorma/bipm_document/metadata.rb +0 -15
  149. data/lib/metanorma/bipm_document/root.rb +0 -25
  150. data/lib/metanorma/bipm_document.rb +0 -8
  151. data/lib/metanorma/bsi_document/metadata/bsi_bib_data_extension_type.rb +0 -10
  152. data/lib/metanorma/bsi_document/metadata/bsi_bibliographic_item.rb +0 -15
  153. data/lib/metanorma/bsi_document/metadata.rb +0 -12
  154. data/lib/metanorma/bsi_document/root.rb +0 -29
  155. data/lib/metanorma/bsi_document/sections/bsi_annex_section.rb +0 -25
  156. data/lib/metanorma/bsi_document/sections/bsi_clause_section.rb +0 -25
  157. data/lib/metanorma/bsi_document/sections/bsi_sections.rb +0 -27
  158. data/lib/metanorma/bsi_document/sections.rb +0 -11
  159. data/lib/metanorma/bsi_document.rb +0 -11
  160. data/lib/metanorma/cc_document/metadata/cc_bib_data_extension_type.rb +0 -12
  161. data/lib/metanorma/cc_document/metadata/cc_bibliographic_item.rb +0 -17
  162. data/lib/metanorma/cc_document/metadata.rb +0 -11
  163. data/lib/metanorma/cc_document/root.rb +0 -25
  164. data/lib/metanorma/cc_document.rb +0 -8
  165. data/lib/metanorma/collection.rb +0 -10
  166. data/lib/metanorma/csa_document/root.rb +0 -27
  167. data/lib/metanorma/csa_document.rb +0 -9
  168. data/lib/metanorma/gb_document/metadata/gb_bib_data_extension_type.rb +0 -10
  169. data/lib/metanorma/gb_document/metadata/gb_bibliographic_item.rb +0 -15
  170. data/lib/metanorma/gb_document/metadata.rb +0 -12
  171. data/lib/metanorma/gb_document/root.rb +0 -29
  172. data/lib/metanorma/gb_document.rb +0 -10
  173. data/lib/metanorma/generic_document/root.rb +0 -31
  174. data/lib/metanorma/generic_document.rb +0 -7
  175. data/lib/metanorma/html/bipm_renderer.rb +0 -23
  176. data/lib/metanorma/html/cc_renderer.rb +0 -9
  177. data/lib/metanorma/html/csa_renderer.rb +0 -9
  178. data/lib/metanorma/html/flavor.rb +0 -50
  179. data/lib/metanorma/html/flavor_registry.rb +0 -49
  180. data/lib/metanorma/html/icc_renderer.rb +0 -10
  181. data/lib/metanorma/html/iec_renderer.rb +0 -9
  182. data/lib/metanorma/html/ieee_renderer.rb +0 -9
  183. data/lib/metanorma/html/ietf_renderer.rb +0 -9
  184. data/lib/metanorma/html/iho_renderer.rb +0 -9
  185. data/lib/metanorma/html/iso_renderer.rb +0 -535
  186. data/lib/metanorma/html/itu_renderer.rb +0 -9
  187. data/lib/metanorma/html/ogc_renderer.rb +0 -23
  188. data/lib/metanorma/html/pdfa_renderer.rb +0 -10
  189. data/lib/metanorma/html/ribose_renderer.rb +0 -9
  190. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +0 -27
  191. data/lib/metanorma/html/templates/_iso_cover.html.liquid +0 -31
  192. data/lib/metanorma/html/templates/_iso_doc_title.html.liquid +0 -3
  193. data/lib/metanorma/iec_document/root.rb +0 -27
  194. data/lib/metanorma/iec_document.rb +0 -9
  195. data/lib/metanorma/ieee_document/metadata/ieee_bib_data_extension_type.rb +0 -18
  196. data/lib/metanorma/ieee_document/metadata/ieee_bibliographic_item.rb +0 -20
  197. data/lib/metanorma/ieee_document/metadata/ieee_structured_identifier.rb +0 -25
  198. data/lib/metanorma/ieee_document/metadata.rb +0 -14
  199. data/lib/metanorma/ieee_document/root.rb +0 -29
  200. data/lib/metanorma/ieee_document/sections/ieee_sections.rb +0 -31
  201. data/lib/metanorma/ieee_document/sections.rb +0 -9
  202. data/lib/metanorma/ieee_document.rb +0 -11
  203. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -31
  204. data/lib/metanorma/ietf_document/metadata/ietf_bibliographic_item.rb +0 -51
  205. data/lib/metanorma/ietf_document/metadata/ietf_editorial_group.rb +0 -17
  206. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +0 -32
  207. data/lib/metanorma/ietf_document/metadata.rb +0 -16
  208. data/lib/metanorma/ietf_document/root.rb +0 -30
  209. data/lib/metanorma/ietf_document/sections/ietf_annex_section.rb +0 -26
  210. data/lib/metanorma/ietf_document/sections/ietf_clause_section.rb +0 -26
  211. data/lib/metanorma/ietf_document/sections/ietf_content_section.rb +0 -25
  212. data/lib/metanorma/ietf_document/sections/ietf_sections.rb +0 -35
  213. data/lib/metanorma/ietf_document/sections.rb +0 -12
  214. data/lib/metanorma/ietf_document.rb +0 -11
  215. data/lib/metanorma/iho_document/metadata/iho_bib_data_extension_type.rb +0 -23
  216. data/lib/metanorma/iho_document/metadata/iho_bibliographic_item.rb +0 -20
  217. data/lib/metanorma/iho_document/metadata/iho_editorial_group.rb +0 -19
  218. data/lib/metanorma/iho_document/metadata/iho_series.rb +0 -22
  219. data/lib/metanorma/iho_document/metadata/iho_sub_group.rb +0 -18
  220. data/lib/metanorma/iho_document/metadata.rb +0 -15
  221. data/lib/metanorma/iho_document/root.rb +0 -25
  222. data/lib/metanorma/iho_document.rb +0 -8
  223. data/lib/metanorma/iso_document/annotation_container.rb +0 -7
  224. data/lib/metanorma/iso_document/blocks/iso_admonition_block.rb +0 -27
  225. data/lib/metanorma/iso_document/blocks/iso_admonition_type.rb +0 -25
  226. data/lib/metanorma/iso_document/blocks.rb +0 -12
  227. data/lib/metanorma/iso_document/boilerplate.rb +0 -7
  228. data/lib/metanorma/iso_document/metadata/abstract_title.rb +0 -36
  229. data/lib/metanorma/iso_document/metadata/doc_identifier.rb +0 -26
  230. data/lib/metanorma/iso_document/metadata/doctype_element.rb +0 -20
  231. data/lib/metanorma/iso_document/metadata/ics.rb +0 -19
  232. data/lib/metanorma/iso_document/metadata/iec_document_category.rb +0 -23
  233. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +0 -38
  234. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +0 -103
  235. data/lib/metanorma/iso_document/metadata/iso_document_id.rb +0 -46
  236. data/lib/metanorma/iso_document/metadata/iso_document_stage_codes.rb +0 -26
  237. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +0 -26
  238. data/lib/metanorma/iso_document/metadata/iso_document_substage_codes.rb +0 -26
  239. data/lib/metanorma/iso_document/metadata/iso_document_type.rb +0 -25
  240. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +0 -61
  241. data/lib/metanorma/iso_document/metadata/iso_project_group.rb +0 -32
  242. data/lib/metanorma/iso_document/metadata/iso_sub_group.rb +0 -38
  243. data/lib/metanorma/iso_document/metadata/language_element.rb +0 -18
  244. data/lib/metanorma/iso_document/metadata/metanorma_extension.rb +0 -9
  245. data/lib/metanorma/iso_document/metadata/project_number.rb +0 -22
  246. data/lib/metanorma/iso_document/metadata/script_element.rb +0 -18
  247. data/lib/metanorma/iso_document/metadata/stage_element.rb +0 -26
  248. data/lib/metanorma/iso_document/metadata/stagename_element.rb +0 -18
  249. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +0 -16
  250. data/lib/metanorma/iso_document/metadata/title_amd.rb +0 -12
  251. data/lib/metanorma/iso_document/metadata/title_amendment_prefix.rb +0 -12
  252. data/lib/metanorma/iso_document/metadata/title_collection.rb +0 -47
  253. data/lib/metanorma/iso_document/metadata/title_full.rb +0 -12
  254. data/lib/metanorma/iso_document/metadata/title_intro.rb +0 -12
  255. data/lib/metanorma/iso_document/metadata/title_main.rb +0 -12
  256. data/lib/metanorma/iso_document/metadata/title_part.rb +0 -12
  257. data/lib/metanorma/iso_document/metadata/title_part_prefix.rb +0 -12
  258. data/lib/metanorma/iso_document/metadata.rb +0 -44
  259. data/lib/metanorma/iso_document/root.rb +0 -26
  260. data/lib/metanorma/iso_document/sections/colophon.rb +0 -3
  261. data/lib/metanorma/iso_document/sections/iso_abstract_section.rb +0 -15
  262. data/lib/metanorma/iso_document/sections/iso_amendment_clause.rb +0 -24
  263. data/lib/metanorma/iso_document/sections/iso_annex_section.rb +0 -50
  264. data/lib/metanorma/iso_document/sections/iso_clause_section.rb +0 -49
  265. data/lib/metanorma/iso_document/sections/iso_foreword_section.rb +0 -33
  266. data/lib/metanorma/iso_document/sections/iso_preface.rb +0 -51
  267. data/lib/metanorma/iso_document/sections/iso_sections.rb +0 -51
  268. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +0 -76
  269. data/lib/metanorma/iso_document/sections.rb +0 -17
  270. data/lib/metanorma/iso_document/terms/iso_term.rb +0 -71
  271. data/lib/metanorma/iso_document/terms/iso_term_collection.rb +0 -20
  272. data/lib/metanorma/iso_document/terms/term_definition.rb +0 -30
  273. data/lib/metanorma/iso_document/terms/term_designation.rb +0 -44
  274. data/lib/metanorma/iso_document/terms/term_domain_element.rb +0 -18
  275. data/lib/metanorma/iso_document/terms/term_example.rb +0 -40
  276. data/lib/metanorma/iso_document/terms/term_expression.rb +0 -10
  277. data/lib/metanorma/iso_document/terms/term_note.rb +0 -42
  278. data/lib/metanorma/iso_document/terms/term_origin.rb +0 -4
  279. data/lib/metanorma/iso_document/terms/term_source.rb +0 -21
  280. data/lib/metanorma/iso_document/terms/verbal_definition.rb +0 -42
  281. data/lib/metanorma/iso_document/terms.rb +0 -21
  282. data/lib/metanorma/iso_document.rb +0 -15
  283. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +0 -26
  284. data/lib/metanorma/itu_document/metadata/itu_bibliographic_item.rb +0 -21
  285. data/lib/metanorma/itu_document/metadata/itu_series.rb +0 -22
  286. data/lib/metanorma/itu_document/metadata/itu_structured_identifier.rb +0 -23
  287. data/lib/metanorma/itu_document/metadata/meeting_date.rb +0 -18
  288. data/lib/metanorma/itu_document/metadata/meeting_element.rb +0 -18
  289. data/lib/metanorma/itu_document/metadata/study_period.rb +0 -18
  290. data/lib/metanorma/itu_document/metadata.rb +0 -18
  291. data/lib/metanorma/itu_document/root.rb +0 -25
  292. data/lib/metanorma/itu_document.rb +0 -8
  293. data/lib/metanorma/jis_document/metadata/jis_bib_data_extension_type.rb +0 -10
  294. data/lib/metanorma/jis_document/metadata/jis_bibliographic_item.rb +0 -15
  295. data/lib/metanorma/jis_document/metadata.rb +0 -12
  296. data/lib/metanorma/jis_document/root.rb +0 -29
  297. data/lib/metanorma/jis_document/sections/jis_annex_section.rb +0 -20
  298. data/lib/metanorma/jis_document/sections.rb +0 -9
  299. data/lib/metanorma/jis_document.rb +0 -11
  300. data/lib/metanorma/m3d_document/metadata/m3d_bib_data_extension_type.rb +0 -10
  301. data/lib/metanorma/m3d_document/metadata/m3d_bibliographic_item.rb +0 -15
  302. data/lib/metanorma/m3d_document/metadata.rb +0 -12
  303. data/lib/metanorma/m3d_document/root.rb +0 -29
  304. data/lib/metanorma/m3d_document.rb +0 -10
  305. data/lib/metanorma/mirror/default_registry.rb +0 -191
  306. data/lib/metanorma/mirror/handler_registry.rb +0 -60
  307. data/lib/metanorma/mirror/handler_result.rb +0 -37
  308. data/lib/metanorma/mirror/handlers/admonition.rb +0 -18
  309. data/lib/metanorma/mirror/handlers/example.rb +0 -21
  310. data/lib/metanorma/mirror/handlers/figure.rb +0 -53
  311. data/lib/metanorma/mirror/handlers/formula.rb +0 -35
  312. data/lib/metanorma/mirror/handlers/inline/catalog.rb +0 -52
  313. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +0 -158
  314. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +0 -116
  315. data/lib/metanorma/mirror/handlers/inline.rb +0 -226
  316. data/lib/metanorma/mirror/handlers/list.rb +0 -110
  317. data/lib/metanorma/mirror/handlers/note.rb +0 -26
  318. data/lib/metanorma/mirror/handlers/paragraph.rb +0 -19
  319. data/lib/metanorma/mirror/handlers/quote.rb +0 -16
  320. data/lib/metanorma/mirror/handlers/review.rb +0 -19
  321. data/lib/metanorma/mirror/handlers/section.rb +0 -149
  322. data/lib/metanorma/mirror/handlers/sourcecode.rb +0 -27
  323. data/lib/metanorma/mirror/handlers/structural.rb +0 -68
  324. data/lib/metanorma/mirror/handlers/table.rb +0 -81
  325. data/lib/metanorma/mirror/handlers/term.rb +0 -100
  326. data/lib/metanorma/mirror/handlers.rb +0 -60
  327. data/lib/metanorma/mirror/id_strategy/positional.rb +0 -166
  328. data/lib/metanorma/mirror/id_strategy/preserve.rb +0 -12
  329. data/lib/metanorma/mirror/id_strategy.rb +0 -34
  330. data/lib/metanorma/mirror/math_util.rb +0 -53
  331. data/lib/metanorma/mirror/metadata.rb +0 -37
  332. data/lib/metanorma/mirror/model/container.rb +0 -47
  333. data/lib/metanorma/mirror/model/factory.rb +0 -52
  334. data/lib/metanorma/mirror/model/guide.rb +0 -26
  335. data/lib/metanorma/mirror/model/leaf.rb +0 -17
  336. data/lib/metanorma/mirror/model/mark.rb +0 -53
  337. data/lib/metanorma/mirror/model/node.rb +0 -47
  338. data/lib/metanorma/mirror/model/soft_break.rb +0 -33
  339. data/lib/metanorma/mirror/model/text.rb +0 -34
  340. data/lib/metanorma/mirror/model.rb +0 -16
  341. data/lib/metanorma/mirror/output/builder.rb +0 -39
  342. data/lib/metanorma/mirror/output/formats/base_format.rb +0 -90
  343. data/lib/metanorma/mirror/output/formats/inline_format.rb +0 -142
  344. data/lib/metanorma/mirror/output/formats.rb +0 -53
  345. data/lib/metanorma/mirror/output/pipeline.rb +0 -93
  346. data/lib/metanorma/mirror/output/pipeline_context.rb +0 -22
  347. data/lib/metanorma/mirror/output.rb +0 -12
  348. data/lib/metanorma/mirror/rewriter.rb +0 -123
  349. data/lib/metanorma/mirror/safe_attr.rb +0 -16
  350. data/lib/metanorma/mirror/serialization/json_serializer.rb +0 -25
  351. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +0 -20
  352. data/lib/metanorma/mirror/serialization.rb +0 -10
  353. data/lib/metanorma/mirror/transformer.rb +0 -110
  354. data/lib/metanorma/mirror.rb +0 -31
  355. data/lib/metanorma/nist_document/metadata/nist_bib_data_extension_type.rb +0 -10
  356. data/lib/metanorma/nist_document/metadata/nist_bibliographic_item.rb +0 -15
  357. data/lib/metanorma/nist_document/metadata.rb +0 -12
  358. data/lib/metanorma/nist_document/root.rb +0 -29
  359. data/lib/metanorma/nist_document/sections/errata.rb +0 -16
  360. data/lib/metanorma/nist_document/sections/errata_clause.rb +0 -20
  361. data/lib/metanorma/nist_document/sections/errata_row.rb +0 -22
  362. data/lib/metanorma/nist_document/sections/nist_preface.rb +0 -30
  363. data/lib/metanorma/nist_document/sections.rb +0 -12
  364. data/lib/metanorma/nist_document.rb +0 -11
  365. data/lib/metanorma/ogc_document/metadata/ogc_bib_data_extension_type.rb +0 -12
  366. data/lib/metanorma/ogc_document/metadata/ogc_bibliographic_item.rb +0 -19
  367. data/lib/metanorma/ogc_document/metadata.rb +0 -12
  368. data/lib/metanorma/ogc_document/root.rb +0 -25
  369. data/lib/metanorma/ogc_document.rb +0 -8
  370. data/lib/metanorma/plateau_document/metadata/plateau_bibliographic_item.rb +0 -13
  371. data/lib/metanorma/plateau_document/metadata.rb +0 -10
  372. data/lib/metanorma/plateau_document/root.rb +0 -29
  373. data/lib/metanorma/plateau_document.rb +0 -10
  374. data/lib/metanorma/registers/setup.rb +0 -166
  375. data/lib/metanorma/registers.rb +0 -7
  376. data/lib/metanorma/ribose_document/metadata/ribose_bib_data_extension_type.rb +0 -20
  377. data/lib/metanorma/ribose_document/metadata/ribose_bibliographic_item.rb +0 -18
  378. data/lib/metanorma/ribose_document/metadata.rb +0 -12
  379. data/lib/metanorma/ribose_document/root.rb +0 -26
  380. data/lib/metanorma/ribose_document.rb +0 -8
  381. data/lib/metanorma/standard_document/annotation_container.rb +0 -39
  382. data/lib/metanorma/standard_document/block_attributes.rb +0 -281
  383. data/lib/metanorma/standard_document/blocks/amend_block.rb +0 -50
  384. data/lib/metanorma/standard_document/blocks/amend_content_block.rb +0 -35
  385. data/lib/metanorma/standard_document/blocks/auto_number.rb +0 -20
  386. data/lib/metanorma/standard_document/blocks/block_source.rb +0 -22
  387. data/lib/metanorma/standard_document/blocks/change_type.rb +0 -21
  388. data/lib/metanorma/standard_document/blocks/element_name.rb +0 -22
  389. data/lib/metanorma/standard_document/blocks/form.rb +0 -38
  390. data/lib/metanorma/standard_document/blocks/image_map_area_type.rb +0 -24
  391. data/lib/metanorma/standard_document/blocks/image_map_area_type_type.rb +0 -21
  392. data/lib/metanorma/standard_document/blocks/image_map_block.rb +0 -32
  393. data/lib/metanorma/standard_document/blocks/image_map_coords.rb +0 -19
  394. data/lib/metanorma/standard_document/blocks/image_map_radius.rb +0 -19
  395. data/lib/metanorma/standard_document/blocks/multilingual_rendering_type.rb +0 -21
  396. data/lib/metanorma/standard_document/blocks/passthrough.rb +0 -3
  397. data/lib/metanorma/standard_document/blocks/requirement_model.rb +0 -20
  398. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +0 -23
  399. data/lib/metanorma/standard_document/blocks/standard_admonition_block.rb +0 -32
  400. data/lib/metanorma/standard_document/blocks/standard_block.rb +0 -28
  401. data/lib/metanorma/standard_document/blocks/standard_block_no_notes.rb +0 -34
  402. data/lib/metanorma/standard_document/blocks/standard_example_block.rb +0 -30
  403. data/lib/metanorma/standard_document/blocks/standard_figure_block.rb +0 -32
  404. data/lib/metanorma/standard_document/blocks/standard_formula_block.rb +0 -30
  405. data/lib/metanorma/standard_document/blocks/standard_note_block.rb +0 -64
  406. data/lib/metanorma/standard_document/blocks/standard_paragraph_block.rb +0 -25
  407. data/lib/metanorma/standard_document/blocks/standard_quote_block.rb +0 -29
  408. data/lib/metanorma/standard_document/blocks/standard_sourcecode_block.rb +0 -32
  409. data/lib/metanorma/standard_document/blocks/standard_table_block.rb +0 -39
  410. data/lib/metanorma/standard_document/blocks/svg_map_block.rb +0 -23
  411. data/lib/metanorma/standard_document/blocks/svg_target_type.rb +0 -20
  412. data/lib/metanorma/standard_document/blocks/table_col.rb +0 -16
  413. data/lib/metanorma/standard_document/blocks/to_c.rb +0 -17
  414. data/lib/metanorma/standard_document/blocks.rb +0 -60
  415. data/lib/metanorma/standard_document/boilerplate.rb +0 -32
  416. data/lib/metanorma/standard_document/elements/add.rb +0 -3
  417. data/lib/metanorma/standard_document/elements/del.rb +0 -3
  418. data/lib/metanorma/standard_document/elements/form_input.rb +0 -27
  419. data/lib/metanorma/standard_document/elements/input.rb +0 -12
  420. data/lib/metanorma/standard_document/elements/input_type.rb +0 -27
  421. data/lib/metanorma/standard_document/elements/label.rb +0 -19
  422. data/lib/metanorma/standard_document/elements/option.rb +0 -27
  423. data/lib/metanorma/standard_document/elements/orientation_type.rb +0 -27
  424. data/lib/metanorma/standard_document/elements/select.rb +0 -32
  425. data/lib/metanorma/standard_document/elements/standard_page_break_element.rb +0 -22
  426. data/lib/metanorma/standard_document/elements/textarea.rb +0 -25
  427. data/lib/metanorma/standard_document/elements.rb +0 -20
  428. data/lib/metanorma/standard_document/lists/standard_definition.rb +0 -24
  429. data/lib/metanorma/standard_document/lists/standard_definition_list.rb +0 -30
  430. data/lib/metanorma/standard_document/lists/standard_definition_term.rb +0 -27
  431. data/lib/metanorma/standard_document/lists/standard_unordered_list.rb +0 -28
  432. data/lib/metanorma/standard_document/lists/unordered_checkable_list_item.rb +0 -26
  433. data/lib/metanorma/standard_document/lists.rb +0 -17
  434. data/lib/metanorma/standard_document/metadata/editorial_group_type.rb +0 -25
  435. data/lib/metanorma/standard_document/metadata/ics_type.rb +0 -26
  436. data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +0 -26
  437. data/lib/metanorma/standard_document/metadata/presentation_metadata.rb +0 -107
  438. data/lib/metanorma/standard_document/metadata/semantic_metadata.rb +0 -18
  439. data/lib/metanorma/standard_document/metadata/standard_bib_data.rb +0 -25
  440. data/lib/metanorma/standard_document/metadata/standard_bib_data_extension_type.rb +0 -37
  441. data/lib/metanorma/standard_document/metadata/structured_identifier_type.rb +0 -48
  442. data/lib/metanorma/standard_document/metadata/technical_committee_type.rb +0 -27
  443. data/lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb +0 -19
  444. data/lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb +0 -34
  445. data/lib/metanorma/standard_document/metadata/unitsml/dimension.rb +0 -39
  446. data/lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb +0 -19
  447. data/lib/metanorma/standard_document/metadata/unitsml/electric_current.rb +0 -19
  448. data/lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb +0 -23
  449. data/lib/metanorma/standard_document/metadata/unitsml/length.rb +0 -19
  450. data/lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb +0 -19
  451. data/lib/metanorma/standard_document/metadata/unitsml/mass.rb +0 -19
  452. data/lib/metanorma/standard_document/metadata/unitsml/namespace.rb +0 -17
  453. data/lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb +0 -19
  454. data/lib/metanorma/standard_document/metadata/unitsml/prefix.rb +0 -30
  455. data/lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb +0 -21
  456. data/lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb +0 -19
  457. data/lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb +0 -21
  458. data/lib/metanorma/standard_document/metadata/unitsml/quantity.rb +0 -28
  459. data/lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb +0 -21
  460. data/lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb +0 -19
  461. data/lib/metanorma/standard_document/metadata/unitsml/root_units.rb +0 -19
  462. data/lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb +0 -19
  463. data/lib/metanorma/standard_document/metadata/unitsml/time.rb +0 -19
  464. data/lib/metanorma/standard_document/metadata/unitsml/unit.rb +0 -32
  465. data/lib/metanorma/standard_document/metadata/unitsml/unit_name.rb +0 -21
  466. data/lib/metanorma/standard_document/metadata/unitsml/unit_set.rb +0 -19
  467. data/lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb +0 -36
  468. data/lib/metanorma/standard_document/metadata/unitsml/unit_system.rb +0 -23
  469. data/lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb +0 -28
  470. data/lib/metanorma/standard_document/metadata/unitsml.rb +0 -39
  471. data/lib/metanorma/standard_document/metadata.rb +0 -23
  472. data/lib/metanorma/standard_document/namespace.rb +0 -11
  473. data/lib/metanorma/standard_document/refs/reference_to_term.rb +0 -26
  474. data/lib/metanorma/standard_document/refs/reference_to_termbase.rb +0 -27
  475. data/lib/metanorma/standard_document/refs/standoc_locality_stack.rb +0 -24
  476. data/lib/metanorma/standard_document/refs/standoc_reference_to_citation_element.rb +0 -27
  477. data/lib/metanorma/standard_document/refs/standoc_reference_to_id_element.rb +0 -36
  478. data/lib/metanorma/standard_document/refs/xref_case_type.rb +0 -27
  479. data/lib/metanorma/standard_document/refs/xref_connective_type.rb +0 -27
  480. data/lib/metanorma/standard_document/refs/xref_target_type.rb +0 -25
  481. data/lib/metanorma/standard_document/refs.rb +0 -18
  482. data/lib/metanorma/standard_document/root.rb +0 -10
  483. data/lib/metanorma/standard_document/root_attributes.rb +0 -78
  484. data/lib/metanorma/standard_document/sections/abstract.rb +0 -19
  485. data/lib/metanorma/standard_document/sections/acknowledgements.rb +0 -19
  486. data/lib/metanorma/standard_document/sections/annex_section.rb +0 -69
  487. data/lib/metanorma/standard_document/sections/bibliography_section.rb +0 -20
  488. data/lib/metanorma/standard_document/sections/boilerplate_type.rb +0 -32
  489. data/lib/metanorma/standard_document/sections/clause_hierarchical_section.rb +0 -32
  490. data/lib/metanorma/standard_document/sections/clause_section.rb +0 -91
  491. data/lib/metanorma/standard_document/sections/colophon.rb +0 -16
  492. data/lib/metanorma/standard_document/sections/definition_section.rb +0 -72
  493. data/lib/metanorma/standard_document/sections/floating_section_title.rb +0 -23
  494. data/lib/metanorma/standard_document/sections/floating_title.rb +0 -27
  495. data/lib/metanorma/standard_document/sections/foreword.rb +0 -19
  496. data/lib/metanorma/standard_document/sections/introduction.rb +0 -20
  497. data/lib/metanorma/standard_document/sections/misc_container.rb +0 -31
  498. data/lib/metanorma/standard_document/sections/normative_type.rb +0 -29
  499. data/lib/metanorma/standard_document/sections/preface.rb +0 -36
  500. data/lib/metanorma/standard_document/sections/sections.rb +0 -47
  501. data/lib/metanorma/standard_document/sections/standard_content_section.rb +0 -41
  502. data/lib/metanorma/standard_document/sections/standard_hierarchical_section.rb +0 -30
  503. data/lib/metanorma/standard_document/sections/standard_references_section.rb +0 -74
  504. data/lib/metanorma/standard_document/sections/standard_section.rb +0 -39
  505. data/lib/metanorma/standard_document/sections/terms_section.rb +0 -61
  506. data/lib/metanorma/standard_document/sections.rb +0 -34
  507. data/lib/metanorma/standard_document/standard_document_type.rb +0 -15
  508. data/lib/metanorma/standard_document/terms/abbreviation_type.rb +0 -27
  509. data/lib/metanorma/standard_document/terms/concept.rb +0 -42
  510. data/lib/metanorma/standard_document/terms/definition_collection.rb +0 -24
  511. data/lib/metanorma/standard_document/terms/designation.rb +0 -31
  512. data/lib/metanorma/standard_document/terms/expression_designation.rb +0 -38
  513. data/lib/metanorma/standard_document/terms/expression_type.rb +0 -27
  514. data/lib/metanorma/standard_document/terms/grammar_gender.rb +0 -27
  515. data/lib/metanorma/standard_document/terms/grammar_info.rb +0 -36
  516. data/lib/metanorma/standard_document/terms/graphical_symbol_designation.rb +0 -25
  517. data/lib/metanorma/standard_document/terms/letter_symbol_designation.rb +0 -27
  518. data/lib/metanorma/standard_document/terms/non_verbal_representation.rb +0 -33
  519. data/lib/metanorma/standard_document/terms/related_term.rb +0 -31
  520. data/lib/metanorma/standard_document/terms/related_term_type.rb +0 -28
  521. data/lib/metanorma/standard_document/terms/term.rb +0 -66
  522. data/lib/metanorma/standard_document/terms/term_collection.rb +0 -24
  523. data/lib/metanorma/standard_document/terms/term_definition.rb +0 -29
  524. data/lib/metanorma/standard_document/terms/term_expression.rb +0 -20
  525. data/lib/metanorma/standard_document/terms/term_name_element.rb +0 -29
  526. data/lib/metanorma/standard_document/terms/term_source.rb +0 -29
  527. data/lib/metanorma/standard_document/terms/term_source_status.rb +0 -29
  528. data/lib/metanorma/standard_document/terms/term_source_type.rb +0 -21
  529. data/lib/metanorma/standard_document/terms/verbal_expression.rb +0 -35
  530. data/lib/metanorma/standard_document/terms.rb +0 -33
  531. data/lib/metanorma/standard_document.rb +0 -27
  532. data/lib/metanorma/un_document/blocks/un_admonition_block.rb +0 -86
  533. data/lib/metanorma/un_document/blocks.rb +0 -9
  534. data/lib/metanorma/un_document/metadata/un_bib_data_extension_type.rb +0 -10
  535. data/lib/metanorma/un_document/metadata/un_bibliographic_item.rb +0 -15
  536. data/lib/metanorma/un_document/metadata.rb +0 -12
  537. data/lib/metanorma/un_document/root.rb +0 -37
  538. data/lib/metanorma/un_document/sections/un_abstract_section.rb +0 -48
  539. data/lib/metanorma/un_document/sections/un_preface.rb +0 -40
  540. data/lib/metanorma/un_document/sections/un_sections.rb +0 -24
  541. data/lib/metanorma/un_document/sections.rb +0 -11
  542. data/lib/metanorma/un_document/un_text_element.rb +0 -116
  543. data/lib/metanorma/un_document.rb +0 -13
@@ -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,17 +27,40 @@ 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
36
62
 
37
- def render_paragraph(p, **_opts)
63
+ def render_paragraph(p, label: nil, label_class: nil, **_opts)
38
64
  attrs = element_attrs(id: safe_attr(p, :id),
39
65
  style: coordinator.alignment_style(safe_attr(p,
40
66
  :alignment)))
@@ -42,6 +68,21 @@ module Metanorma
42
68
  render_liquid("_paragraph.html.liquid", {
43
69
  "attrs" => attrs,
44
70
  "content" => content,
71
+ "label" => label,
72
+ "label_class" => label_class,
73
+ })
74
+ end
75
+
76
+ # Wraps an already-rendered HTML fragment in a `<p>` opened by the
77
+ # given label span. Used by NoteDrop / ExampleDrop when a note has
78
+ # no paragraph child to host the label (e.g. inline-only content or
79
+ # an empty note). All markup is emitted by `_paragraph.html.liquid`.
80
+ def render_label_paragraph(content_html, label:, label_class:)
81
+ render_liquid("_paragraph.html.liquid", {
82
+ "attrs" => "",
83
+ "content" => content_html,
84
+ "label" => label,
85
+ "label_class" => label_class,
45
86
  })
46
87
  end
47
88
 
@@ -63,27 +104,25 @@ module Metanorma
63
104
  render_table_colgroup(table.colgroup)
64
105
  end
65
106
 
66
- thead_html = if table.thead
67
- render_table_section(table.thead, "thead")
68
- end
69
-
70
- tbody_html = if table.tbody
71
- render_table_section(table.tbody, "tbody")
72
- end
73
-
74
- tfoot_html = nil
75
- if table.tfoot || (table.note && !table.note.empty?)
76
- tfoot_inner = render_table_section_rows(table.tfoot) if table.tfoot
77
- notes_html = nil
78
- if table.note && !table.note.empty?
79
- notes_inner = table.note.filter_map { |n| render_note(n) }.join
80
- notes_html = render_liquid("_element.html.liquid", "tag" => "tr", "extra_attrs" => "",
81
- "content" => render_liquid("_element.html.liquid", "tag" => "td", "extra_attrs" => %( colspan="#{col_count}" class="table-notes"), "content" => notes_inner))
82
- end
83
- tfoot_html = render_liquid("_element.html.liquid", "tag" => "tfoot", "extra_attrs" => "",
84
- "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
85
122
  end
86
123
 
124
+ tfoot_html = table_tfoot_html(table, table_fns, col_count)
125
+
87
126
  render_liquid("_table.html.liquid", {
88
127
  "attrs" => attrs,
89
128
  "caption" => caption_html,
@@ -94,6 +133,45 @@ module Metanorma
94
133
  })
95
134
  end
96
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
+
97
175
  def table_column_count(table)
98
176
  if table.colgroup&.col && !table.colgroup.col.empty?
99
177
  return table.colgroup.col.size
@@ -160,11 +238,7 @@ module Metanorma
160
238
  items = ul.listitem&.filter_map do |li|
161
239
  render_list_item_content(li, labeled: labeled)
162
240
  end || []
163
- render_liquid("_list.html.liquid", {
164
- "list_tag" => "ul",
165
- "attrs" => attrs,
166
- "items" => items,
167
- })
241
+ render_list_with_attached_notes(ul, items, "ul", attrs)
168
242
  end
169
243
 
170
244
  def render_table_cell(cell, force_tag = nil)
@@ -191,11 +265,30 @@ module Metanorma
191
265
  items = ol.listitem&.filter_map do |li|
192
266
  render_list_item_content(li, labeled: labeled)
193
267
  end || []
194
- render_liquid("_list.html.liquid", {
195
- "list_tag" => "ol",
196
- "attrs" => attrs,
197
- "items" => items,
198
- })
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
199
292
  end
200
293
 
201
294
  def render_list_item_content(li, labeled: false)
@@ -236,10 +329,27 @@ module Metanorma
236
329
  dd_html = dd ? coordinator.render_mixed_inline(dd) : nil
237
330
  { "dt" => dt_html, "dd" => dd_html }
238
331
  end || []
239
- render_liquid("_definition_list.html.liquid", {
240
- "attrs" => attrs,
241
- "terms" => terms,
242
- })
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
+ })
243
353
  end
244
354
 
245
355
  def render_figure(figure, **_opts)
@@ -248,11 +358,41 @@ module Metanorma
248
358
  render_liquid("_figure.html.liquid", { "block" => drop })
249
359
  end
250
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
+
251
378
  def render_image(image)
252
- 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
+
253
393
  attrs = element_attrs(
254
394
  id: safe_attr(image, :id),
255
- src: src_val,
395
+ src: image_source(image),
256
396
  alt: safe_attr(image, :alt),
257
397
  height: safe_attr(image, :height),
258
398
  width: safe_attr(image, :width),
@@ -319,21 +459,24 @@ module Metanorma
319
459
  render_liquid("_formula.html.liquid", { "block" => drop })
320
460
  end
321
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
+
322
473
  def render_quote(quote, **_opts)
323
474
  attrs = element_attrs(id: safe_attr(quote, :id), class: "quote")
324
- content_parts = []
325
- quote.paragraphs&.each do |para|
326
- content_parts << (render_paragraph(para) || "")
327
- end
328
- quote.ul&.each do |ul|
329
- content_parts << (render_unordered_list(ul) || "")
330
- end
331
- quote.ol&.each do |ol|
332
- content_parts << (render_ordered_list(ol) || "")
333
- end
334
- content = content_parts.join
475
+ content = quote_children_html(quote)
335
476
  attribution_html = if quote.attribution
336
477
  coordinator.render_mixed_inline(quote.attribution)
478
+ else
479
+ quote_author_source_attribution(quote)
337
480
  end
338
481
  render_liquid("_quote.html.liquid", {
339
482
  "attrs" => attrs,
@@ -342,6 +485,31 @@ module Metanorma
342
485
  })
343
486
  end
344
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
+
345
513
  def render_admonition(admonition, **_opts)
346
514
  drop = Drops::AdmonitionDrop.from_model(admonition,
347
515
  renderer: coordinator.renderer_context)
@@ -354,16 +522,33 @@ module Metanorma
354
522
  })
355
523
  end
356
524
 
357
- def render_block_children(model, children:)
525
+ def render_block_children(model, children:, first_paragraph_label: nil,
526
+ first_paragraph_label_class: nil)
358
527
  parts = []
528
+ label_applied = first_paragraph_label.nil?
529
+
359
530
  children.each do |attr, render_method|
360
531
  values = safe_attr(model, attr)
361
532
  next if values.nil?
362
533
 
363
534
  Array(values).each do |v|
364
- parts << (public_send(render_method, v) || "")
535
+ if !label_applied && render_method == :render_paragraph
536
+ parts << (render_paragraph(v,
537
+ label: first_paragraph_label,
538
+ label_class: first_paragraph_label_class) || "")
539
+ label_applied = true
540
+ else
541
+ parts << (public_send(render_method, v) || "")
542
+ end
365
543
  end
366
544
  end
545
+
546
+ unless label_applied
547
+ parts.unshift(render_label_paragraph("",
548
+ label: first_paragraph_label,
549
+ label_class: first_paragraph_label_class))
550
+ end
551
+
367
552
  parts.join
368
553
  end
369
554
 
@@ -375,8 +560,18 @@ module Metanorma
375
560
  render_block_children(model, children: SIMPLE_CHILDREN)
376
561
  end
377
562
 
378
- def render_full_block_children(model)
379
- render_block_children(model, children: BLOCK_CHILDREN)
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
+
570
+ def render_full_block_children(model, first_paragraph_label: nil,
571
+ first_paragraph_label_class: nil)
572
+ render_block_children(model, children: BLOCK_CHILDREN,
573
+ first_paragraph_label: first_paragraph_label,
574
+ first_paragraph_label_class: first_paragraph_label_class)
380
575
  end
381
576
 
382
577
  private
@@ -64,6 +64,11 @@ module Metanorma
64
64
  "renderterm" => nil,
65
65
  "origin" => "semx",
66
66
  }
67
+ # refterm is semantic-only inside <concept>, but a related-term
68
+ # semx renders it as escaped literal text (native parity).
69
+ if node.is_a?(Metanorma::Document::Components::Inline::SemxElement)
70
+ skip_after = skip_after.except("refterm")
71
+ end
67
72
  skip = {}
68
73
  node.element_order.each_with_index do |el, i|
69
74
  next unless el.element?
@@ -183,6 +188,24 @@ module Metanorma
183
188
  render_liquid("_br.html.liquid", {})
184
189
  end
185
190
 
191
+ def render_ruby(ruby)
192
+ annotation = safe_attr(ruby, :pronunciation) ||
193
+ safe_attr(ruby, :annotation)
194
+ annotation_value = annotation && safe_attr(annotation, :value)
195
+ annotation_value ||= Array(safe_attr(ruby, :ruby_text)).join
196
+ render_liquid("_ruby.html.liquid",
197
+ "base" => ruby_base_text(ruby),
198
+ "annotation" => annotation_value)
199
+ end
200
+
201
+ # Semantic form: the annotated text is the ruby's own mixed
202
+ # content; presentation form: the rb element carries it.
203
+ def ruby_base_text(ruby)
204
+ base = safe_attr(ruby, :ruby_base)
205
+ source = base || ruby
206
+ Array(safe_attr(source, :text)).join
207
+ end
208
+
186
209
  def render_tab(*)
187
210
  "  "
188
211
  end
@@ -206,10 +229,53 @@ module Metanorma
206
229
  nil
207
230
  end
208
231
 
232
+ # Semantic <stem> blocks (StemInlineElement) carry canonical math;
233
+ # isodoc renders them as a stem span holding the MathML (whose
234
+ # text nodes stay part of the page text) or the AsciiMath source.
235
+ def render_stem_inline(el)
236
+ return nil if el.nil?
237
+
238
+ math = Array(el.math).filter_map do |m|
239
+ m.to_xml if m.respond_to?(:to_xml)
240
+ end.join
241
+ unless math.empty?
242
+ return render_liquid("_stem_span.html.liquid",
243
+ { "data_attrs" => "", "text" => math })
244
+ end
245
+
246
+ text = Array(el.asciimath).filter_map do |a|
247
+ a.is_a?(String) ? a : a.text
248
+ end.join
249
+ return nil if text.empty?
250
+
251
+ render_liquid("_stem_span.html.liquid",
252
+ { "data_attrs" => "", "text" => escape_html(text) })
253
+ end
254
+
209
255
  def render_semx_inline(el)
210
256
  render_semx_content(el)
211
257
  end
212
258
 
259
+ # Native parity: a <refterm> outside <concept> (failed related-term
260
+ # lookup) renders as escaped literal markup text.
261
+ def render_refterm(el)
262
+ text = safe_attr(el, :text).to_s
263
+ return "" if text.empty?
264
+
265
+ "&lt;refterm&gt;#{escape_html(text)}&lt;/refterm&gt;"
266
+ end
267
+
268
+ def render_fmt_preferred_inline(el)
269
+ parts = []
270
+ safe_attr(el, :semx)&.each do |s|
271
+ parts << (render_inline_element(s) || "")
272
+ end
273
+ safe_attr(el, :p)&.each do |p|
274
+ parts << (coordinator.render_paragraph(p) || "")
275
+ end
276
+ parts.join
277
+ end
278
+
213
279
  def render_fmt_xref(el)
214
280
  target = safe_attr(el, :target) || safe_attr(el, :to_attr)
215
281
  if target
@@ -307,7 +373,8 @@ module Metanorma
307
373
  parts = []
308
374
  display_attrs = %i[text fmt_xref fmt_link fmt_concept span strong em sup p semx
309
375
  asciimath math sub_child tt_child br_child tab_child
310
- stem_child figure_child formula_child sourcecode_child]
376
+ stem_child figure_child formula_child sourcecode_child
377
+ fn_child refterm fmt_preferred ol ul]
311
378
  label_stripped = false
312
379
 
313
380
  walked = walk_ordered(element,
@@ -323,6 +390,8 @@ module Metanorma
323
390
  when :element
324
391
  parts << if obj.is_a?(Metanorma::Document::Components::Paragraphs::ParagraphBlock)
325
392
  coordinator.render_paragraph(obj) || ""
393
+ elsif coordinator.block_element?(obj)
394
+ coordinator.render(obj) || ""
326
395
  else
327
396
  render_inline_element(obj) || ""
328
397
  end
@@ -374,9 +443,8 @@ module Metanorma
374
443
  def render_link(link)
375
444
  target = safe_attr(link, :target) || safe_attr(link, :href)
376
445
  attrs = element_attrs(href: target, id: safe_attr(link, :id))
377
- content = safe_attr(link, :content)
378
- if content && !Array(content).join.strip.empty?
379
- inner = render_mixed_inline(link)
446
+ inner = render_mixed_inline(link)
447
+ if inner && !inner.strip.empty?
380
448
  render_liquid("_link.html.liquid", {
381
449
  "attrs" => attrs,
382
450
  "content" => inner,
@@ -395,42 +463,96 @@ module Metanorma
395
463
  attrs = element_attrs(href: "##{escape_html(target)}",
396
464
  id: safe_attr(xref, :id))
397
465
  content = render_mixed_inline(xref)
466
+ # Cross-references carry no computed labels in this pipeline, so
467
+ # unresolvable targets keep isodoc's literal "[id]" fallback,
468
+ # emitted ahead of the link text like the native presentation.
469
+ text = if content.empty?
470
+ "[#{escape_html(target.to_s)}]"
471
+ else
472
+ "[#{escape_html(target.to_s)}] #{content}"
473
+ end
398
474
  render_liquid("_link.html.liquid", {
399
475
  "attrs" => attrs,
400
- "content" => content,
476
+ "content" => text,
401
477
  })
402
478
  end
403
479
 
404
480
  def render_eref(eref)
405
481
  citeas = safe_attr(eref, :citeas)
406
- if citeas
482
+ content = render_mixed_inline(eref)
483
+ if !content.empty?
484
+ content
485
+ elsif citeas
407
486
  escape_html(citeas)
408
- else
409
- render_mixed_inline(eref)
410
487
  end
411
488
  end
412
489
 
413
490
  def render_fn(fn)
414
- fn_id = safe_attr(fn, :id)
415
- number = coordinator.footnote_collector.register(fn)
416
-
417
- label = safe_attr(fn, :fn_label) || safe_attr(fn, :reference)
491
+ label = footnote_label_text(fn) || safe_attr(fn, :reference)
418
492
  return nil unless label
419
493
 
420
- popup_parts = Array(fn.p).map do |para|
421
- render_mixed_inline(para) || ""
494
+ if (ctx = coordinator.table_fn_context)
495
+ # Table-scoped <fn>: the native render shows the reference
496
+ # letter in the cell and lifts the definition into a visible
497
+ # tfoot block (TableFootnote), not an endnote popup.
498
+ ctx[:fns] << fn
499
+ assigns = {
500
+ "attrs" => element_attrs(
501
+ id: safe_attr(fn, :id) || "table-fn-#{ctx[:fns].size}",
502
+ class: "fn-marker",
503
+ ),
504
+ "number" => ctx[:fns].size,
505
+ "label" => escape_html(label.to_s),
506
+ "popup_html" => nil,
507
+ }
508
+ return render_liquid("_fn_marker.html.liquid", assigns)
422
509
  end
423
- popup_html = popup_parts.join
510
+
511
+ fn_id = safe_attr(fn, :id)
512
+ entry = coordinator.footnote_collector.register(
513
+ fn, label_text: footnote_label_text(fn)
514
+ )
515
+
516
+ label = entry.fmt_label || entry.reference || label
517
+ popup_html = fn_content_html(fn)
424
518
 
425
519
  assigns = {
426
520
  "attrs" => element_attrs(id: fn_id, class: "fn-marker"),
427
- "number" => number,
521
+ "number" => entry.number,
428
522
  "label" => escape_html(label.to_s),
429
523
  "popup_html" => popup_html.strip.empty? ? nil : popup_html,
430
524
  }
431
525
  render_liquid("_fn_marker.html.liquid", assigns)
432
526
  end
433
527
 
528
+ # The rendered body of a footnote: its paragraphs plus any block
529
+ # children (bibliography notes carry lists).
530
+ def fn_content_html(fn)
531
+ popup_parts = Array(fn.p).map do |para|
532
+ render_mixed_inline(para) || ""
533
+ end
534
+ %i[ul ol table].each do |attr|
535
+ next unless fn.respond_to?(attr)
536
+
537
+ Array(fn.send(attr)).each do |block|
538
+ popup_parts << (coordinator.render(block) || "")
539
+ end
540
+ end
541
+ popup_parts.join
542
+ end
543
+
544
+ # The presentation autonum label of a footnote ("19" for
545
+ # <fmt-fn-label><span><sup>19</sup></span></fmt-fn-label>), which
546
+ # native footnotes display instead of a renumbered sequence.
547
+ def footnote_label_text(fn)
548
+ fmt = safe_attr(fn, :fmt_fn_label)
549
+ return nil unless fmt
550
+
551
+ html = render_mixed_inline(fmt).to_s
552
+ text = html.gsub(/<[^>]+>/, "").strip
553
+ text.empty? ? nil : text
554
+ end
555
+
434
556
  def render_concept(concept)
435
557
  render_mixed_inline(concept)
436
558
  end
@@ -522,7 +644,12 @@ module Metanorma
522
644
  return escape_html(element)
523
645
  end
524
646
 
525
- method = coordinator.lookup_dispatch(element.class, :inline_registry)
647
+ # A block container nested in a mixed-content position (e.g. a
648
+ # definition list inside a <dd>) has no inline dispatch of its
649
+ # own; fall through to the block registry so it renders instead
650
+ # of being dropped.
651
+ method = coordinator.lookup_dispatch(element.class, :inline_registry) ||
652
+ coordinator.lookup_dispatch(element.class, :render_registry)
526
653
  if method
527
654
  coordinator.public_send(method, element)
528
655
  elsif element.is_a?(Lutaml::Model::Serializable) && element.mixed?
@@ -151,8 +151,18 @@ module Metanorma
151
151
 
152
152
  coordinator.register_toc_entry(id: "preface", level: 1,
153
153
  text: "Preface")
154
- content = clauses.filter_map do |cl|
155
- coordinator.render(cl, level: 2)
154
+ # Render in the theme's declared order: the named preface
155
+ # sections (foreword, introduction, abstract, ...) AND the
156
+ # clauses — the others were previously only emptiness-checked,
157
+ # silently dropping every non-clause preface section.
158
+ content = order.filter_map do |name|
159
+ if name == "clause"
160
+ clauses.filter_map { |cl| coordinator.render(cl, level: 2) }.join
161
+ else
162
+ out = Array(safe_attr(preface, name.to_sym))
163
+ .filter_map { |sec| coordinator.render(sec, level: 2) }.join
164
+ out.empty? ? nil : out
165
+ end
156
166
  end.join
157
167
  render_liquid("_wrapped_preface.html.liquid", content: content)
158
168
  end