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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +81 -0
  3. data/Rakefile +3 -7
  4. data/data/themes/ogc.yaml +5 -0
  5. data/lib/metanorma/basic_document/ancillary_blocks/figure_block.rb +2 -2
  6. data/lib/metanorma/basic_document/multi_paragraph/admonition_block.rb +2 -2
  7. data/lib/metanorma/document/cli.rb +134 -0
  8. data/lib/metanorma/document/components/ancillary_blocks/figure_block.rb +5 -0
  9. data/lib/metanorma/document/components/ancillary_blocks/fmt_figure_element.rb +47 -0
  10. data/lib/metanorma/document/components/ancillary_blocks/formula_block.rb +2 -0
  11. data/lib/metanorma/document/components/ancillary_blocks/imagemap_element.rb +73 -0
  12. data/lib/metanorma/document/components/ancillary_blocks/literal_block.rb +2 -0
  13. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +2 -0
  14. data/lib/metanorma/document/components/ancillary_blocks/svg_target_element.rb +27 -0
  15. data/lib/metanorma/document/components/ancillary_blocks/svgmap_element.rb +28 -0
  16. data/lib/metanorma/document/components/ancillary_blocks.rb +4 -0
  17. data/lib/metanorma/document/components/bib_data/bibliographic_item.rb +4 -0
  18. data/lib/metanorma/document/components/blocks/fmt_provision.rb +25 -0
  19. data/lib/metanorma/document/components/blocks/note_block.rb +8 -0
  20. data/lib/metanorma/document/components/blocks/permission_model.rb +9 -0
  21. data/lib/metanorma/document/components/blocks/recommendation_model.rb +9 -0
  22. data/lib/metanorma/document/components/blocks/requirement_base.rb +12 -0
  23. data/lib/metanorma/document/components/blocks/requirement_import.rb +23 -0
  24. data/lib/metanorma/document/components/blocks/requirement_measurement_target.rb +23 -0
  25. data/lib/metanorma/document/components/blocks/requirement_model.rb +9 -0
  26. data/lib/metanorma/document/components/blocks/requirement_specification.rb +23 -0
  27. data/lib/metanorma/document/components/blocks/requirement_verification.rb +23 -0
  28. data/lib/metanorma/document/components/blocks.rb +8 -0
  29. data/lib/metanorma/document/components/data_types/formatted_string.rb +9 -0
  30. data/lib/metanorma/document/components/id_elements/image.rb +4 -0
  31. data/lib/metanorma/document/components/inline/columnbreak_element.rb +17 -0
  32. data/lib/metanorma/document/components/inline/concept_element.rb +18 -0
  33. data/lib/metanorma/document/components/inline/date_element.rb +29 -0
  34. data/lib/metanorma/document/components/inline/display_text_element.rb +2 -0
  35. data/lib/metanorma/document/components/inline/em_raw_element.rb +6 -7
  36. data/lib/metanorma/document/components/inline/eref_element.rb +48 -22
  37. data/lib/metanorma/document/components/inline/eref_stack.rb +23 -0
  38. data/lib/metanorma/document/components/inline/error_message.rb +28 -0
  39. data/lib/metanorma/document/components/inline/fmt_date_element.rb +28 -0
  40. data/lib/metanorma/document/components/inline/fmt_date_inline_element.rb +26 -0
  41. data/lib/metanorma/document/components/inline/fmt_eref_element.rb +25 -0
  42. data/lib/metanorma/document/components/inline/fmt_origin_element.rb +24 -0
  43. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +3 -0
  44. data/lib/metanorma/document/components/inline/fmt_source_element.rb +31 -0
  45. data/lib/metanorma/document/components/inline/fn_element.rb +11 -0
  46. data/lib/metanorma/document/components/inline/link_element.rb +8 -0
  47. data/lib/metanorma/document/components/inline/name_with_id_element.rb +2 -0
  48. data/lib/metanorma/document/components/inline/refterm_element.rb +21 -0
  49. data/lib/metanorma/document/components/inline/semx_element.rb +22 -0
  50. data/lib/metanorma/document/components/inline/sourcelocality_stack_element.rb +27 -0
  51. data/lib/metanorma/document/components/inline/span_element.rb +2 -0
  52. data/lib/metanorma/document/components/inline/stem_inline_element.rb +2 -0
  53. data/lib/metanorma/document/components/inline/strong_raw_element.rb +6 -9
  54. data/lib/metanorma/document/components/inline/sub_element.rb +2 -0
  55. data/lib/metanorma/document/components/inline/termref_element.rb +24 -0
  56. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +10 -31
  57. data/lib/metanorma/document/components/inline/variant_title_element.rb +2 -0
  58. data/lib/metanorma/document/components/inline/vocabulary.rb +36 -0
  59. data/lib/metanorma/document/components/inline.rb +23 -0
  60. data/lib/metanorma/document/components/lists/dd_element.rb +6 -1
  61. data/lib/metanorma/document/components/lists/definition.rb +2 -0
  62. data/lib/metanorma/document/components/lists/definition_list.rb +3 -0
  63. data/lib/metanorma/document/components/lists/dt_element.rb +3 -0
  64. data/lib/metanorma/document/components/lists/fmt_list_element.rb +73 -0
  65. data/lib/metanorma/document/components/lists/list_item.rb +3 -0
  66. data/lib/metanorma/document/components/lists/ordered_list.rb +4 -2
  67. data/lib/metanorma/document/components/lists/unordered_list.rb +2 -0
  68. data/lib/metanorma/document/components/lists.rb +2 -0
  69. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +16 -0
  70. data/lib/metanorma/document/components/multi_paragraph/review_block.rb +2 -2
  71. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +15 -0
  72. data/lib/metanorma/document/components/reference_elements/citation.rb +7 -0
  73. data/lib/metanorma/document/components/reference_elements/source_element.rb +4 -0
  74. data/lib/metanorma/document/components/semantic/node.rb +46 -0
  75. data/lib/metanorma/document/components/semantic.rb +11 -0
  76. data/lib/metanorma/document/components/tables/header_table_cell.rb +1 -0
  77. data/lib/metanorma/document/components/tables/table_cell.rb +70 -44
  78. data/lib/metanorma/document/components/tables/text_table_cell.rb +1 -0
  79. data/lib/metanorma/document/components/tables/text_table_row.rb +2 -0
  80. data/lib/metanorma/document/components/text_elements/ruby_annotation_element.rb +26 -0
  81. data/lib/metanorma/document/components/text_elements/ruby_element.rb +41 -6
  82. data/lib/metanorma/document/components/text_elements/ruby_pronunciation_element.rb +25 -0
  83. data/lib/metanorma/document/components/text_elements/strike_element.rb +3 -0
  84. data/lib/metanorma/document/components/text_elements/underline_element.rb +3 -0
  85. data/lib/metanorma/document/components/text_elements.rb +2 -0
  86. data/lib/metanorma/document/components.rb +1 -0
  87. data/lib/metanorma/document/grammar_vocabulary.rb +109 -0
  88. data/lib/metanorma/document/mirror_seed.rb +253 -0
  89. data/lib/metanorma/document/mko/collection.rb +168 -0
  90. data/lib/metanorma/document/mko/exporter.rb +17 -0
  91. data/lib/metanorma/document/mko/project.rb +1110 -0
  92. data/lib/metanorma/document/mko.rb +122 -0
  93. data/lib/metanorma/document/model_access.rb +44 -0
  94. data/lib/metanorma/document/native_models.rb +319 -0
  95. data/lib/metanorma/document/plain_text.rb +39 -0
  96. data/lib/metanorma/document/relaton/version_info.rb +4 -0
  97. data/lib/metanorma/document/version.rb +1 -1
  98. data/lib/metanorma/document.rb +19 -26
  99. data/lib/metanorma/{collection → document_collection}/directive.rb +1 -1
  100. data/lib/metanorma/{collection → document_collection}/doc_container.rb +6 -2
  101. data/lib/metanorma/{collection → document_collection}/entry.rb +2 -2
  102. data/lib/metanorma/{collection → document_collection}/root.rb +2 -2
  103. data/lib/metanorma/document_collection.rb +10 -0
  104. data/lib/metanorma/html/base_renderer.rb +94 -25
  105. data/lib/metanorma/html/component/footnote_collector.rb +21 -20
  106. data/lib/metanorma/html/concerns/metadata_extraction.rb +8 -3
  107. data/lib/metanorma/html/concerns/presentation_validation.rb +1 -2
  108. data/lib/metanorma/html/concerns/text_extraction.rb +154 -35
  109. data/lib/metanorma/html/concerns.rb +19 -0
  110. data/lib/metanorma/html/drops/admonition_drop.rb +1 -1
  111. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  112. data/lib/metanorma/html/drops/sourcecode_drop.rb +22 -4
  113. data/lib/metanorma/html/generator.rb +11 -187
  114. data/lib/metanorma/html/renderer_delegation.rb +2 -2
  115. data/lib/metanorma/html/renderers/block_renderer.rb +206 -46
  116. data/lib/metanorma/html/renderers/inline_renderer.rb +144 -17
  117. data/lib/metanorma/html/renderers/section_renderer.rb +12 -2
  118. data/lib/metanorma/html/renderers/semantic_renderer.rb +487 -0
  119. data/lib/metanorma/html/renderers.rb +2 -0
  120. data/lib/metanorma/html/standard_renderer.rb +732 -76
  121. data/lib/metanorma/html/templates/_agency_cover.html.liquid +30 -0
  122. data/lib/metanorma/html/templates/_columnbreak.html.liquid +1 -0
  123. data/lib/metanorma/html/templates/_cover.html.liquid +3 -0
  124. data/lib/metanorma/html/templates/_main_content.html.liquid +1 -1
  125. data/lib/metanorma/html/templates/_ruby.html.liquid +1 -0
  126. data/lib/metanorma/html/templates/_sourcecode.html.liquid +4 -3
  127. data/lib/metanorma/html/templates/_standard_cover.html.liquid +54 -3
  128. data/lib/metanorma/html.rb +30 -15
  129. data/tasks/flavors.rake +116 -0
  130. data/tasks/grammar.rake +28 -0
  131. data/tasks/roundtrip_samples.rake +48 -34
  132. metadata +121 -416
  133. data/frontend/dist/app.css +0 -1
  134. data/frontend/dist/app.iife.js +0 -24
  135. data/lib/metanorma/bipm_document/metadata/bipm_bib_data_extension_type.rb +0 -20
  136. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +0 -17
  137. data/lib/metanorma/bipm_document/metadata/bipm_structured_identifier.rb +0 -21
  138. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +0 -18
  139. data/lib/metanorma/bipm_document/metadata.rb +0 -15
  140. data/lib/metanorma/bipm_document/root.rb +0 -25
  141. data/lib/metanorma/bipm_document.rb +0 -8
  142. data/lib/metanorma/bsi_document/metadata/bsi_bib_data_extension_type.rb +0 -10
  143. data/lib/metanorma/bsi_document/metadata/bsi_bibliographic_item.rb +0 -15
  144. data/lib/metanorma/bsi_document/metadata.rb +0 -12
  145. data/lib/metanorma/bsi_document/root.rb +0 -29
  146. data/lib/metanorma/bsi_document/sections/bsi_annex_section.rb +0 -25
  147. data/lib/metanorma/bsi_document/sections/bsi_clause_section.rb +0 -25
  148. data/lib/metanorma/bsi_document/sections/bsi_sections.rb +0 -27
  149. data/lib/metanorma/bsi_document/sections.rb +0 -11
  150. data/lib/metanorma/bsi_document.rb +0 -11
  151. data/lib/metanorma/cc_document/metadata/cc_bib_data_extension_type.rb +0 -12
  152. data/lib/metanorma/cc_document/metadata/cc_bibliographic_item.rb +0 -17
  153. data/lib/metanorma/cc_document/metadata.rb +0 -11
  154. data/lib/metanorma/cc_document/root.rb +0 -25
  155. data/lib/metanorma/cc_document.rb +0 -8
  156. data/lib/metanorma/collection.rb +0 -10
  157. data/lib/metanorma/csa_document/root.rb +0 -27
  158. data/lib/metanorma/csa_document.rb +0 -9
  159. data/lib/metanorma/gb_document/metadata/gb_bib_data_extension_type.rb +0 -10
  160. data/lib/metanorma/gb_document/metadata/gb_bibliographic_item.rb +0 -15
  161. data/lib/metanorma/gb_document/metadata.rb +0 -12
  162. data/lib/metanorma/gb_document/root.rb +0 -29
  163. data/lib/metanorma/gb_document.rb +0 -10
  164. data/lib/metanorma/generic_document/root.rb +0 -31
  165. data/lib/metanorma/generic_document.rb +0 -7
  166. data/lib/metanorma/html/bipm_renderer.rb +0 -23
  167. data/lib/metanorma/html/cc_renderer.rb +0 -9
  168. data/lib/metanorma/html/csa_renderer.rb +0 -9
  169. data/lib/metanorma/html/flavor.rb +0 -50
  170. data/lib/metanorma/html/flavor_registry.rb +0 -49
  171. data/lib/metanorma/html/icc_renderer.rb +0 -10
  172. data/lib/metanorma/html/iec_renderer.rb +0 -9
  173. data/lib/metanorma/html/ieee_renderer.rb +0 -9
  174. data/lib/metanorma/html/ietf_renderer.rb +0 -9
  175. data/lib/metanorma/html/iho_renderer.rb +0 -9
  176. data/lib/metanorma/html/iso_renderer.rb +0 -535
  177. data/lib/metanorma/html/itu_renderer.rb +0 -9
  178. data/lib/metanorma/html/ogc_renderer.rb +0 -23
  179. data/lib/metanorma/html/pdfa_renderer.rb +0 -10
  180. data/lib/metanorma/html/ribose_renderer.rb +0 -9
  181. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +0 -27
  182. data/lib/metanorma/html/templates/_iso_cover.html.liquid +0 -31
  183. data/lib/metanorma/html/templates/_iso_doc_title.html.liquid +0 -3
  184. data/lib/metanorma/iec_document/root.rb +0 -27
  185. data/lib/metanorma/iec_document.rb +0 -9
  186. data/lib/metanorma/ieee_document/metadata/ieee_bib_data_extension_type.rb +0 -18
  187. data/lib/metanorma/ieee_document/metadata/ieee_bibliographic_item.rb +0 -20
  188. data/lib/metanorma/ieee_document/metadata/ieee_structured_identifier.rb +0 -25
  189. data/lib/metanorma/ieee_document/metadata.rb +0 -14
  190. data/lib/metanorma/ieee_document/root.rb +0 -29
  191. data/lib/metanorma/ieee_document/sections/ieee_sections.rb +0 -31
  192. data/lib/metanorma/ieee_document/sections.rb +0 -9
  193. data/lib/metanorma/ieee_document.rb +0 -11
  194. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -31
  195. data/lib/metanorma/ietf_document/metadata/ietf_bibliographic_item.rb +0 -51
  196. data/lib/metanorma/ietf_document/metadata/ietf_editorial_group.rb +0 -17
  197. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +0 -32
  198. data/lib/metanorma/ietf_document/metadata.rb +0 -16
  199. data/lib/metanorma/ietf_document/root.rb +0 -30
  200. data/lib/metanorma/ietf_document/sections/ietf_annex_section.rb +0 -26
  201. data/lib/metanorma/ietf_document/sections/ietf_clause_section.rb +0 -26
  202. data/lib/metanorma/ietf_document/sections/ietf_content_section.rb +0 -25
  203. data/lib/metanorma/ietf_document/sections/ietf_sections.rb +0 -35
  204. data/lib/metanorma/ietf_document/sections.rb +0 -12
  205. data/lib/metanorma/ietf_document.rb +0 -11
  206. data/lib/metanorma/iho_document/metadata/iho_bib_data_extension_type.rb +0 -23
  207. data/lib/metanorma/iho_document/metadata/iho_bibliographic_item.rb +0 -20
  208. data/lib/metanorma/iho_document/metadata/iho_editorial_group.rb +0 -19
  209. data/lib/metanorma/iho_document/metadata/iho_series.rb +0 -22
  210. data/lib/metanorma/iho_document/metadata/iho_sub_group.rb +0 -18
  211. data/lib/metanorma/iho_document/metadata.rb +0 -15
  212. data/lib/metanorma/iho_document/root.rb +0 -25
  213. data/lib/metanorma/iho_document.rb +0 -8
  214. data/lib/metanorma/iso_document/annotation_container.rb +0 -7
  215. data/lib/metanorma/iso_document/blocks/iso_admonition_block.rb +0 -27
  216. data/lib/metanorma/iso_document/blocks/iso_admonition_type.rb +0 -25
  217. data/lib/metanorma/iso_document/blocks.rb +0 -12
  218. data/lib/metanorma/iso_document/boilerplate.rb +0 -7
  219. data/lib/metanorma/iso_document/metadata/abstract_title.rb +0 -36
  220. data/lib/metanorma/iso_document/metadata/doc_identifier.rb +0 -26
  221. data/lib/metanorma/iso_document/metadata/doctype_element.rb +0 -20
  222. data/lib/metanorma/iso_document/metadata/ics.rb +0 -19
  223. data/lib/metanorma/iso_document/metadata/iec_document_category.rb +0 -23
  224. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +0 -38
  225. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +0 -103
  226. data/lib/metanorma/iso_document/metadata/iso_document_id.rb +0 -46
  227. data/lib/metanorma/iso_document/metadata/iso_document_stage_codes.rb +0 -26
  228. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +0 -26
  229. data/lib/metanorma/iso_document/metadata/iso_document_substage_codes.rb +0 -26
  230. data/lib/metanorma/iso_document/metadata/iso_document_type.rb +0 -25
  231. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +0 -61
  232. data/lib/metanorma/iso_document/metadata/iso_project_group.rb +0 -32
  233. data/lib/metanorma/iso_document/metadata/iso_sub_group.rb +0 -38
  234. data/lib/metanorma/iso_document/metadata/language_element.rb +0 -18
  235. data/lib/metanorma/iso_document/metadata/metanorma_extension.rb +0 -9
  236. data/lib/metanorma/iso_document/metadata/project_number.rb +0 -22
  237. data/lib/metanorma/iso_document/metadata/script_element.rb +0 -18
  238. data/lib/metanorma/iso_document/metadata/stage_element.rb +0 -26
  239. data/lib/metanorma/iso_document/metadata/stagename_element.rb +0 -18
  240. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +0 -16
  241. data/lib/metanorma/iso_document/metadata/title_amd.rb +0 -12
  242. data/lib/metanorma/iso_document/metadata/title_amendment_prefix.rb +0 -12
  243. data/lib/metanorma/iso_document/metadata/title_collection.rb +0 -47
  244. data/lib/metanorma/iso_document/metadata/title_full.rb +0 -12
  245. data/lib/metanorma/iso_document/metadata/title_intro.rb +0 -12
  246. data/lib/metanorma/iso_document/metadata/title_main.rb +0 -12
  247. data/lib/metanorma/iso_document/metadata/title_part.rb +0 -12
  248. data/lib/metanorma/iso_document/metadata/title_part_prefix.rb +0 -12
  249. data/lib/metanorma/iso_document/metadata.rb +0 -44
  250. data/lib/metanorma/iso_document/root.rb +0 -26
  251. data/lib/metanorma/iso_document/sections/colophon.rb +0 -3
  252. data/lib/metanorma/iso_document/sections/iso_abstract_section.rb +0 -15
  253. data/lib/metanorma/iso_document/sections/iso_amendment_clause.rb +0 -24
  254. data/lib/metanorma/iso_document/sections/iso_annex_section.rb +0 -50
  255. data/lib/metanorma/iso_document/sections/iso_clause_section.rb +0 -49
  256. data/lib/metanorma/iso_document/sections/iso_foreword_section.rb +0 -33
  257. data/lib/metanorma/iso_document/sections/iso_preface.rb +0 -51
  258. data/lib/metanorma/iso_document/sections/iso_sections.rb +0 -51
  259. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +0 -76
  260. data/lib/metanorma/iso_document/sections.rb +0 -17
  261. data/lib/metanorma/iso_document/terms/iso_term.rb +0 -71
  262. data/lib/metanorma/iso_document/terms/iso_term_collection.rb +0 -20
  263. data/lib/metanorma/iso_document/terms/term_definition.rb +0 -30
  264. data/lib/metanorma/iso_document/terms/term_designation.rb +0 -44
  265. data/lib/metanorma/iso_document/terms/term_domain_element.rb +0 -18
  266. data/lib/metanorma/iso_document/terms/term_example.rb +0 -40
  267. data/lib/metanorma/iso_document/terms/term_expression.rb +0 -10
  268. data/lib/metanorma/iso_document/terms/term_note.rb +0 -42
  269. data/lib/metanorma/iso_document/terms/term_origin.rb +0 -4
  270. data/lib/metanorma/iso_document/terms/term_source.rb +0 -21
  271. data/lib/metanorma/iso_document/terms/verbal_definition.rb +0 -42
  272. data/lib/metanorma/iso_document/terms.rb +0 -21
  273. data/lib/metanorma/iso_document.rb +0 -15
  274. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +0 -26
  275. data/lib/metanorma/itu_document/metadata/itu_bibliographic_item.rb +0 -21
  276. data/lib/metanorma/itu_document/metadata/itu_series.rb +0 -22
  277. data/lib/metanorma/itu_document/metadata/itu_structured_identifier.rb +0 -23
  278. data/lib/metanorma/itu_document/metadata/meeting_date.rb +0 -18
  279. data/lib/metanorma/itu_document/metadata/meeting_element.rb +0 -18
  280. data/lib/metanorma/itu_document/metadata/study_period.rb +0 -18
  281. data/lib/metanorma/itu_document/metadata.rb +0 -18
  282. data/lib/metanorma/itu_document/root.rb +0 -25
  283. data/lib/metanorma/itu_document.rb +0 -8
  284. data/lib/metanorma/jis_document/metadata/jis_bib_data_extension_type.rb +0 -10
  285. data/lib/metanorma/jis_document/metadata/jis_bibliographic_item.rb +0 -15
  286. data/lib/metanorma/jis_document/metadata.rb +0 -12
  287. data/lib/metanorma/jis_document/root.rb +0 -29
  288. data/lib/metanorma/jis_document/sections/jis_annex_section.rb +0 -20
  289. data/lib/metanorma/jis_document/sections.rb +0 -9
  290. data/lib/metanorma/jis_document.rb +0 -11
  291. data/lib/metanorma/m3d_document/metadata/m3d_bib_data_extension_type.rb +0 -10
  292. data/lib/metanorma/m3d_document/metadata/m3d_bibliographic_item.rb +0 -15
  293. data/lib/metanorma/m3d_document/metadata.rb +0 -12
  294. data/lib/metanorma/m3d_document/root.rb +0 -29
  295. data/lib/metanorma/m3d_document.rb +0 -10
  296. data/lib/metanorma/mirror/default_registry.rb +0 -191
  297. data/lib/metanorma/mirror/handler_registry.rb +0 -60
  298. data/lib/metanorma/mirror/handler_result.rb +0 -37
  299. data/lib/metanorma/mirror/handlers/admonition.rb +0 -18
  300. data/lib/metanorma/mirror/handlers/example.rb +0 -21
  301. data/lib/metanorma/mirror/handlers/figure.rb +0 -53
  302. data/lib/metanorma/mirror/handlers/formula.rb +0 -35
  303. data/lib/metanorma/mirror/handlers/inline/catalog.rb +0 -52
  304. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +0 -158
  305. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +0 -116
  306. data/lib/metanorma/mirror/handlers/inline.rb +0 -226
  307. data/lib/metanorma/mirror/handlers/list.rb +0 -110
  308. data/lib/metanorma/mirror/handlers/note.rb +0 -26
  309. data/lib/metanorma/mirror/handlers/paragraph.rb +0 -19
  310. data/lib/metanorma/mirror/handlers/quote.rb +0 -16
  311. data/lib/metanorma/mirror/handlers/review.rb +0 -19
  312. data/lib/metanorma/mirror/handlers/section.rb +0 -149
  313. data/lib/metanorma/mirror/handlers/sourcecode.rb +0 -27
  314. data/lib/metanorma/mirror/handlers/structural.rb +0 -68
  315. data/lib/metanorma/mirror/handlers/table.rb +0 -81
  316. data/lib/metanorma/mirror/handlers/term.rb +0 -100
  317. data/lib/metanorma/mirror/handlers.rb +0 -60
  318. data/lib/metanorma/mirror/id_strategy/positional.rb +0 -166
  319. data/lib/metanorma/mirror/id_strategy/preserve.rb +0 -12
  320. data/lib/metanorma/mirror/id_strategy.rb +0 -34
  321. data/lib/metanorma/mirror/math_util.rb +0 -53
  322. data/lib/metanorma/mirror/metadata.rb +0 -37
  323. data/lib/metanorma/mirror/model/container.rb +0 -47
  324. data/lib/metanorma/mirror/model/factory.rb +0 -52
  325. data/lib/metanorma/mirror/model/guide.rb +0 -26
  326. data/lib/metanorma/mirror/model/leaf.rb +0 -17
  327. data/lib/metanorma/mirror/model/mark.rb +0 -53
  328. data/lib/metanorma/mirror/model/node.rb +0 -47
  329. data/lib/metanorma/mirror/model/soft_break.rb +0 -33
  330. data/lib/metanorma/mirror/model/text.rb +0 -34
  331. data/lib/metanorma/mirror/model.rb +0 -16
  332. data/lib/metanorma/mirror/output/builder.rb +0 -39
  333. data/lib/metanorma/mirror/output/formats/base_format.rb +0 -90
  334. data/lib/metanorma/mirror/output/formats/inline_format.rb +0 -142
  335. data/lib/metanorma/mirror/output/formats.rb +0 -53
  336. data/lib/metanorma/mirror/output/pipeline.rb +0 -93
  337. data/lib/metanorma/mirror/output/pipeline_context.rb +0 -22
  338. data/lib/metanorma/mirror/output.rb +0 -12
  339. data/lib/metanorma/mirror/rewriter.rb +0 -123
  340. data/lib/metanorma/mirror/safe_attr.rb +0 -16
  341. data/lib/metanorma/mirror/serialization/json_serializer.rb +0 -25
  342. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +0 -20
  343. data/lib/metanorma/mirror/serialization.rb +0 -10
  344. data/lib/metanorma/mirror/transformer.rb +0 -110
  345. data/lib/metanorma/mirror.rb +0 -31
  346. data/lib/metanorma/nist_document/metadata/nist_bib_data_extension_type.rb +0 -10
  347. data/lib/metanorma/nist_document/metadata/nist_bibliographic_item.rb +0 -15
  348. data/lib/metanorma/nist_document/metadata.rb +0 -12
  349. data/lib/metanorma/nist_document/root.rb +0 -29
  350. data/lib/metanorma/nist_document/sections/errata.rb +0 -16
  351. data/lib/metanorma/nist_document/sections/errata_clause.rb +0 -20
  352. data/lib/metanorma/nist_document/sections/errata_row.rb +0 -22
  353. data/lib/metanorma/nist_document/sections/nist_preface.rb +0 -30
  354. data/lib/metanorma/nist_document/sections.rb +0 -12
  355. data/lib/metanorma/nist_document.rb +0 -11
  356. data/lib/metanorma/ogc_document/metadata/ogc_bib_data_extension_type.rb +0 -12
  357. data/lib/metanorma/ogc_document/metadata/ogc_bibliographic_item.rb +0 -19
  358. data/lib/metanorma/ogc_document/metadata.rb +0 -12
  359. data/lib/metanorma/ogc_document/root.rb +0 -25
  360. data/lib/metanorma/ogc_document.rb +0 -8
  361. data/lib/metanorma/plateau_document/metadata/plateau_bibliographic_item.rb +0 -13
  362. data/lib/metanorma/plateau_document/metadata.rb +0 -10
  363. data/lib/metanorma/plateau_document/root.rb +0 -29
  364. data/lib/metanorma/plateau_document.rb +0 -10
  365. data/lib/metanorma/registers/setup.rb +0 -166
  366. data/lib/metanorma/registers.rb +0 -7
  367. data/lib/metanorma/ribose_document/metadata/ribose_bib_data_extension_type.rb +0 -20
  368. data/lib/metanorma/ribose_document/metadata/ribose_bibliographic_item.rb +0 -18
  369. data/lib/metanorma/ribose_document/metadata.rb +0 -12
  370. data/lib/metanorma/ribose_document/root.rb +0 -26
  371. data/lib/metanorma/ribose_document.rb +0 -8
  372. data/lib/metanorma/standard_document/annotation_container.rb +0 -39
  373. data/lib/metanorma/standard_document/block_attributes.rb +0 -281
  374. data/lib/metanorma/standard_document/blocks/amend_block.rb +0 -50
  375. data/lib/metanorma/standard_document/blocks/amend_content_block.rb +0 -35
  376. data/lib/metanorma/standard_document/blocks/auto_number.rb +0 -20
  377. data/lib/metanorma/standard_document/blocks/block_source.rb +0 -22
  378. data/lib/metanorma/standard_document/blocks/change_type.rb +0 -21
  379. data/lib/metanorma/standard_document/blocks/element_name.rb +0 -22
  380. data/lib/metanorma/standard_document/blocks/form.rb +0 -38
  381. data/lib/metanorma/standard_document/blocks/image_map_area_type.rb +0 -24
  382. data/lib/metanorma/standard_document/blocks/image_map_area_type_type.rb +0 -21
  383. data/lib/metanorma/standard_document/blocks/image_map_block.rb +0 -32
  384. data/lib/metanorma/standard_document/blocks/image_map_coords.rb +0 -19
  385. data/lib/metanorma/standard_document/blocks/image_map_radius.rb +0 -19
  386. data/lib/metanorma/standard_document/blocks/multilingual_rendering_type.rb +0 -21
  387. data/lib/metanorma/standard_document/blocks/passthrough.rb +0 -3
  388. data/lib/metanorma/standard_document/blocks/requirement_model.rb +0 -20
  389. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +0 -23
  390. data/lib/metanorma/standard_document/blocks/standard_admonition_block.rb +0 -32
  391. data/lib/metanorma/standard_document/blocks/standard_block.rb +0 -28
  392. data/lib/metanorma/standard_document/blocks/standard_block_no_notes.rb +0 -34
  393. data/lib/metanorma/standard_document/blocks/standard_example_block.rb +0 -30
  394. data/lib/metanorma/standard_document/blocks/standard_figure_block.rb +0 -32
  395. data/lib/metanorma/standard_document/blocks/standard_formula_block.rb +0 -30
  396. data/lib/metanorma/standard_document/blocks/standard_note_block.rb +0 -64
  397. data/lib/metanorma/standard_document/blocks/standard_paragraph_block.rb +0 -25
  398. data/lib/metanorma/standard_document/blocks/standard_quote_block.rb +0 -29
  399. data/lib/metanorma/standard_document/blocks/standard_sourcecode_block.rb +0 -32
  400. data/lib/metanorma/standard_document/blocks/standard_table_block.rb +0 -39
  401. data/lib/metanorma/standard_document/blocks/svg_map_block.rb +0 -23
  402. data/lib/metanorma/standard_document/blocks/svg_target_type.rb +0 -20
  403. data/lib/metanorma/standard_document/blocks/table_col.rb +0 -16
  404. data/lib/metanorma/standard_document/blocks/to_c.rb +0 -17
  405. data/lib/metanorma/standard_document/blocks.rb +0 -60
  406. data/lib/metanorma/standard_document/boilerplate.rb +0 -32
  407. data/lib/metanorma/standard_document/elements/add.rb +0 -3
  408. data/lib/metanorma/standard_document/elements/del.rb +0 -3
  409. data/lib/metanorma/standard_document/elements/form_input.rb +0 -27
  410. data/lib/metanorma/standard_document/elements/input.rb +0 -12
  411. data/lib/metanorma/standard_document/elements/input_type.rb +0 -27
  412. data/lib/metanorma/standard_document/elements/label.rb +0 -19
  413. data/lib/metanorma/standard_document/elements/option.rb +0 -27
  414. data/lib/metanorma/standard_document/elements/orientation_type.rb +0 -27
  415. data/lib/metanorma/standard_document/elements/select.rb +0 -32
  416. data/lib/metanorma/standard_document/elements/standard_page_break_element.rb +0 -22
  417. data/lib/metanorma/standard_document/elements/textarea.rb +0 -25
  418. data/lib/metanorma/standard_document/elements.rb +0 -20
  419. data/lib/metanorma/standard_document/lists/standard_definition.rb +0 -24
  420. data/lib/metanorma/standard_document/lists/standard_definition_list.rb +0 -30
  421. data/lib/metanorma/standard_document/lists/standard_definition_term.rb +0 -27
  422. data/lib/metanorma/standard_document/lists/standard_unordered_list.rb +0 -28
  423. data/lib/metanorma/standard_document/lists/unordered_checkable_list_item.rb +0 -26
  424. data/lib/metanorma/standard_document/lists.rb +0 -17
  425. data/lib/metanorma/standard_document/metadata/editorial_group_type.rb +0 -25
  426. data/lib/metanorma/standard_document/metadata/ics_type.rb +0 -26
  427. data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +0 -26
  428. data/lib/metanorma/standard_document/metadata/presentation_metadata.rb +0 -107
  429. data/lib/metanorma/standard_document/metadata/semantic_metadata.rb +0 -18
  430. data/lib/metanorma/standard_document/metadata/standard_bib_data.rb +0 -25
  431. data/lib/metanorma/standard_document/metadata/standard_bib_data_extension_type.rb +0 -37
  432. data/lib/metanorma/standard_document/metadata/structured_identifier_type.rb +0 -48
  433. data/lib/metanorma/standard_document/metadata/technical_committee_type.rb +0 -27
  434. data/lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb +0 -19
  435. data/lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb +0 -34
  436. data/lib/metanorma/standard_document/metadata/unitsml/dimension.rb +0 -39
  437. data/lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb +0 -19
  438. data/lib/metanorma/standard_document/metadata/unitsml/electric_current.rb +0 -19
  439. data/lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb +0 -23
  440. data/lib/metanorma/standard_document/metadata/unitsml/length.rb +0 -19
  441. data/lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb +0 -19
  442. data/lib/metanorma/standard_document/metadata/unitsml/mass.rb +0 -19
  443. data/lib/metanorma/standard_document/metadata/unitsml/namespace.rb +0 -17
  444. data/lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb +0 -19
  445. data/lib/metanorma/standard_document/metadata/unitsml/prefix.rb +0 -30
  446. data/lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb +0 -21
  447. data/lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb +0 -19
  448. data/lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb +0 -21
  449. data/lib/metanorma/standard_document/metadata/unitsml/quantity.rb +0 -28
  450. data/lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb +0 -21
  451. data/lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb +0 -19
  452. data/lib/metanorma/standard_document/metadata/unitsml/root_units.rb +0 -19
  453. data/lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb +0 -19
  454. data/lib/metanorma/standard_document/metadata/unitsml/time.rb +0 -19
  455. data/lib/metanorma/standard_document/metadata/unitsml/unit.rb +0 -32
  456. data/lib/metanorma/standard_document/metadata/unitsml/unit_name.rb +0 -21
  457. data/lib/metanorma/standard_document/metadata/unitsml/unit_set.rb +0 -19
  458. data/lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb +0 -36
  459. data/lib/metanorma/standard_document/metadata/unitsml/unit_system.rb +0 -23
  460. data/lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb +0 -28
  461. data/lib/metanorma/standard_document/metadata/unitsml.rb +0 -39
  462. data/lib/metanorma/standard_document/metadata.rb +0 -23
  463. data/lib/metanorma/standard_document/namespace.rb +0 -11
  464. data/lib/metanorma/standard_document/refs/reference_to_term.rb +0 -26
  465. data/lib/metanorma/standard_document/refs/reference_to_termbase.rb +0 -27
  466. data/lib/metanorma/standard_document/refs/standoc_locality_stack.rb +0 -24
  467. data/lib/metanorma/standard_document/refs/standoc_reference_to_citation_element.rb +0 -27
  468. data/lib/metanorma/standard_document/refs/standoc_reference_to_id_element.rb +0 -36
  469. data/lib/metanorma/standard_document/refs/xref_case_type.rb +0 -27
  470. data/lib/metanorma/standard_document/refs/xref_connective_type.rb +0 -27
  471. data/lib/metanorma/standard_document/refs/xref_target_type.rb +0 -25
  472. data/lib/metanorma/standard_document/refs.rb +0 -18
  473. data/lib/metanorma/standard_document/root.rb +0 -10
  474. data/lib/metanorma/standard_document/root_attributes.rb +0 -78
  475. data/lib/metanorma/standard_document/sections/abstract.rb +0 -19
  476. data/lib/metanorma/standard_document/sections/acknowledgements.rb +0 -19
  477. data/lib/metanorma/standard_document/sections/annex_section.rb +0 -69
  478. data/lib/metanorma/standard_document/sections/bibliography_section.rb +0 -20
  479. data/lib/metanorma/standard_document/sections/boilerplate_type.rb +0 -32
  480. data/lib/metanorma/standard_document/sections/clause_hierarchical_section.rb +0 -32
  481. data/lib/metanorma/standard_document/sections/clause_section.rb +0 -91
  482. data/lib/metanorma/standard_document/sections/colophon.rb +0 -16
  483. data/lib/metanorma/standard_document/sections/definition_section.rb +0 -72
  484. data/lib/metanorma/standard_document/sections/floating_section_title.rb +0 -23
  485. data/lib/metanorma/standard_document/sections/floating_title.rb +0 -27
  486. data/lib/metanorma/standard_document/sections/foreword.rb +0 -19
  487. data/lib/metanorma/standard_document/sections/introduction.rb +0 -20
  488. data/lib/metanorma/standard_document/sections/misc_container.rb +0 -31
  489. data/lib/metanorma/standard_document/sections/normative_type.rb +0 -29
  490. data/lib/metanorma/standard_document/sections/preface.rb +0 -36
  491. data/lib/metanorma/standard_document/sections/sections.rb +0 -47
  492. data/lib/metanorma/standard_document/sections/standard_content_section.rb +0 -41
  493. data/lib/metanorma/standard_document/sections/standard_hierarchical_section.rb +0 -30
  494. data/lib/metanorma/standard_document/sections/standard_references_section.rb +0 -74
  495. data/lib/metanorma/standard_document/sections/standard_section.rb +0 -39
  496. data/lib/metanorma/standard_document/sections/terms_section.rb +0 -61
  497. data/lib/metanorma/standard_document/sections.rb +0 -34
  498. data/lib/metanorma/standard_document/standard_document_type.rb +0 -15
  499. data/lib/metanorma/standard_document/terms/abbreviation_type.rb +0 -27
  500. data/lib/metanorma/standard_document/terms/concept.rb +0 -42
  501. data/lib/metanorma/standard_document/terms/definition_collection.rb +0 -24
  502. data/lib/metanorma/standard_document/terms/designation.rb +0 -31
  503. data/lib/metanorma/standard_document/terms/expression_designation.rb +0 -38
  504. data/lib/metanorma/standard_document/terms/expression_type.rb +0 -27
  505. data/lib/metanorma/standard_document/terms/grammar_gender.rb +0 -27
  506. data/lib/metanorma/standard_document/terms/grammar_info.rb +0 -36
  507. data/lib/metanorma/standard_document/terms/graphical_symbol_designation.rb +0 -25
  508. data/lib/metanorma/standard_document/terms/letter_symbol_designation.rb +0 -27
  509. data/lib/metanorma/standard_document/terms/non_verbal_representation.rb +0 -33
  510. data/lib/metanorma/standard_document/terms/related_term.rb +0 -31
  511. data/lib/metanorma/standard_document/terms/related_term_type.rb +0 -28
  512. data/lib/metanorma/standard_document/terms/term.rb +0 -66
  513. data/lib/metanorma/standard_document/terms/term_collection.rb +0 -24
  514. data/lib/metanorma/standard_document/terms/term_definition.rb +0 -29
  515. data/lib/metanorma/standard_document/terms/term_expression.rb +0 -20
  516. data/lib/metanorma/standard_document/terms/term_name_element.rb +0 -29
  517. data/lib/metanorma/standard_document/terms/term_source.rb +0 -29
  518. data/lib/metanorma/standard_document/terms/term_source_status.rb +0 -29
  519. data/lib/metanorma/standard_document/terms/term_source_type.rb +0 -21
  520. data/lib/metanorma/standard_document/terms/verbal_expression.rb +0 -35
  521. data/lib/metanorma/standard_document/terms.rb +0 -33
  522. data/lib/metanorma/standard_document.rb +0 -27
  523. data/lib/metanorma/un_document/blocks/un_admonition_block.rb +0 -86
  524. data/lib/metanorma/un_document/blocks.rb +0 -9
  525. data/lib/metanorma/un_document/metadata/un_bib_data_extension_type.rb +0 -10
  526. data/lib/metanorma/un_document/metadata/un_bibliographic_item.rb +0 -15
  527. data/lib/metanorma/un_document/metadata.rb +0 -12
  528. data/lib/metanorma/un_document/root.rb +0 -37
  529. data/lib/metanorma/un_document/sections/un_abstract_section.rb +0 -48
  530. data/lib/metanorma/un_document/sections/un_preface.rb +0 -40
  531. data/lib/metanorma/un_document/sections/un_sections.rb +0 -24
  532. data/lib/metanorma/un_document/sections.rb +0 -11
  533. data/lib/metanorma/un_document/un_text_element.rb +0 -116
  534. data/lib/metanorma/un_document.rb +0 -13
@@ -1,166 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module IdStrategy
6
- # Assign positional IDs (sec-X.Y.Z, table-N, fig-N, anx-X) to elements
7
- # that have UUID IDs. Elements with author-assigned explicit IDs are
8
- # preserved. Cross-reference targets are translated to use the new IDs.
9
- #
10
- # Positional IDs are derived from the element's resolved section number
11
- # (the "number" attribute on the presentation XML element), which
12
- # represents the document's structural position.
13
- #
14
- # Example:
15
- # UUID element with number "5.4" → id: "sec-5.4"
16
- # UUID element with number "A.2" → id: "anx-A.2"
17
- # Explicit id "sec-3.1.3.4" → id: "sec-3.1.3.4" (unchanged)
18
- class Positional < Base
19
- @categories = {}
20
-
21
- class << self
22
- # Registry of Metanorma model classes → positional-ID category
23
- # (:section, :annex, :figure, :table). Adding new flavors or new
24
- # model types requires only a new register_category call — no
25
- # edits to derive/element_category (OCP).
26
- def categories
27
- @categories
28
- end
29
-
30
- def register_category(model_class, category)
31
- categories[model_class] = category
32
- self
33
- end
34
-
35
- def unregister_category(model_class)
36
- categories.delete(model_class)
37
- self
38
- end
39
-
40
- def category_for(element)
41
- return categories[element.class] if categories.key?(element.class)
42
-
43
- categories.each do |klass, category|
44
- return category if element.is_a?(klass)
45
- end
46
- nil
47
- end
48
- end
49
-
50
- register_category Metanorma::StandardDocument::Sections::ClauseSection,
51
- :section
52
- register_category Metanorma::StandardDocument::Sections::ContentSection,
53
- :section
54
- register_category Metanorma::StandardDocument::Sections::TermsSection,
55
- :section
56
- register_category Metanorma::StandardDocument::Sections::DefinitionSection,
57
- :section
58
- register_category Metanorma::StandardDocument::Sections::AnnexSection,
59
- :annex
60
- register_category Metanorma::Document::Components::AncillaryBlocks::FigureBlock,
61
- :figure
62
- register_category Metanorma::Document::Components::Tables::TableBlock,
63
- :table
64
-
65
- def initialize
66
- @id_map = {}
67
- end
68
-
69
- def assign_id(element)
70
- raw = raw_id(element)
71
- return raw unless uuid?(raw)
72
-
73
- positional = derive(element)
74
- return raw unless positional
75
-
76
- @id_map[raw] = positional
77
- positional
78
- end
79
-
80
- def finalize!(document)
81
- translate_targets(document)
82
- document
83
- end
84
-
85
- private
86
-
87
- def raw_id(element)
88
- SafeAttr.read(element, :id)
89
- end
90
-
91
- def uuid?(id)
92
- id&.start_with?("_")
93
- end
94
-
95
- def derive(element)
96
- number = extract_number(element)
97
- return nil unless number && !number.strip.empty?
98
-
99
- case self.class.category_for(element)
100
- when :section
101
- number.match?(/\A[\d.]+\z/) ? "sec-#{number}" : nil
102
- when :annex
103
- number.match?(/\A[A-Z]/) ? "anx-#{number}" : nil
104
- when :figure
105
- "fig-#{number}"
106
- when :table
107
- "table-#{number}"
108
- end
109
- end
110
-
111
- def extract_number(element)
112
- number = SafeAttr.read(element, :number)
113
- return number if number && !number.strip.empty?
114
-
115
- attrs = element.class.attributes
116
- return nil unless attrs.key?(:fmt_title)
117
-
118
- fmt_title = element.fmt_title
119
- return nil unless fmt_title
120
-
121
- parts = collect_autonum_text(fmt_title)
122
- parts.empty? ? nil : parts.join(".")
123
- end
124
-
125
- def collect_autonum_text(node)
126
- parts = []
127
- attrs = node.class.attributes
128
-
129
- if attrs.key?(:semx) && node.semx
130
- node.semx.each do |s|
131
- next unless s.element_attr == "autonum"
132
-
133
- text = s.text&.join
134
- parts << text if text && !text.empty?
135
- end
136
- end
137
-
138
- if attrs.key?(:span) && node.span
139
- node.span.each { |sp| parts.concat(collect_autonum_text(sp)) }
140
- end
141
-
142
- parts
143
- end
144
-
145
- def translate_targets(node)
146
- case node
147
- when Model::Text
148
- node.marks.each { |mark| translate_mark_target(mark) }
149
- when Model::Container
150
- node.content.each { |child| translate_targets(child) }
151
- end
152
- end
153
-
154
- def translate_mark_target(mark)
155
- return unless mark.type == "xref"
156
-
157
- target = mark["target"]
158
- return unless target
159
-
160
- translated = @id_map[target]
161
- mark["target"] = translated if translated
162
- end
163
- end
164
- end
165
- end
166
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module IdStrategy
6
- # Preserve all IDs as-is (default behavior).
7
- # UUID elements keep their UUID IDs. Explicit IDs are unchanged.
8
- class Preserve < Base
9
- end
10
- end
11
- end
12
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module IdStrategy
6
- autoload :Preserve, "#{__dir__}/id_strategy/preserve"
7
- autoload :Positional, "#{__dir__}/id_strategy/positional"
8
-
9
- # Base class for ID assignment strategies.
10
- #
11
- # A strategy controls how element IDs are assigned during mirror
12
- # generation. Subclasses override assign_id and finalize!.
13
- #
14
- # assign_id(element) — called per element during node construction
15
- # finalize!(document) — called once after the full mirror tree is built
16
- #
17
- # Adding a new strategy = adding a new class. No changes to handlers
18
- # or the converter (OCP).
19
- class Base
20
- # Returns the ID string to assign to the mirror node for this element.
21
- def assign_id(element)
22
- SafeAttr.read(element, :id)
23
- end
24
-
25
- # Post-process the completed mirror document after all IDs are assigned.
26
- # Use this to translate cross-reference targets, etc.
27
- # Returns the (possibly modified) document.
28
- def finalize!(document)
29
- document
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- # MathUtil is the single home for math-content extraction helpers.
6
- #
7
- # These helpers convert mathML XML objects into strings (stripped of
8
- # XML declarations) and extract asciimath from stem elements. They
9
- # are used by handlers and renderers that need to carry math content
10
- # through the mirror pipeline.
11
- module MathUtil
12
- STRIP_XML_DECL_PATTERN = /\A<\?xml[^?]*\?>\s?/
13
- private_constant :STRIP_XML_DECL_PATTERN
14
-
15
- def self.strip_xml_decl(math_xml)
16
- math_xml.sub(STRIP_XML_DECL_PATTERN, "")
17
- end
18
-
19
- def self.mathml_from_math(math)
20
- xml = math.is_a?(Array) ? math.map(&:to_xml).join : math.to_xml
21
- strip_xml_decl(xml)
22
- end
23
-
24
- # Extract asciimath text from a stem element. Returns nil if no
25
- # asciimath is present.
26
- def self.asciimath_from_stem(stem)
27
- asciimath = SafeAttr.read(stem, :asciimath)
28
- return nil unless asciimath.is_a?(Array)
29
-
30
- parts = asciimath.filter_map do |a|
31
- next a if a.is_a?(String)
32
- next SafeAttr.read(a, :text).to_s if a.is_a?(Lutaml::Model::Serializable)
33
-
34
- nil
35
- end
36
- joined = parts.join.strip
37
- joined.empty? ? nil : joined
38
- end
39
-
40
- # Best-effort plain-text extraction from a stem element. Tries
41
- # asciimath first; falls back to SafeAttr :text.
42
- def self.text_from_stem(stem)
43
- asciimath = asciimath_from_stem(stem)
44
- return asciimath if asciimath
45
-
46
- text = SafeAttr.read(stem, :text)
47
- return text.to_s if text.is_a?(String) && !text.strip.empty?
48
-
49
- ""
50
- end
51
- end
52
- end
53
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- # Extracts metadata (title, etc.) from a parsed Metanorma document's
6
- # bibdata. This is a standalone service that the pipeline and other
7
- # consumers can use without depending on the Handlers layer.
8
- module Metadata
9
- # Returns the first title string from a bibdata object, or nil.
10
- # The bibdata must respond to `title` and return a String, an Array
11
- # of Strings, or an Array of Lutaml::Model::Serializables with
12
- # `content`.
13
- def self.title_from_bibdata(bibdata)
14
- return nil unless bibdata
15
-
16
- title = bibdata.title
17
- return nil unless title
18
-
19
- case title
20
- when String then title
21
- when Array
22
- first = title.first
23
- return nil unless first
24
-
25
- if first.is_a?(String)
26
- first
27
- elsif first.is_a?(Lutaml::Model::Serializable)
28
- Array(first.content).join
29
- else
30
- first.to_s
31
- end
32
- else title.to_s
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Container < Node
7
- attr_reader :content
8
-
9
- def initialize(type:, attrs: {}, content: [])
10
- super(type: type, attrs: attrs)
11
- @content = Array(content)
12
- end
13
-
14
- def container?
15
- true
16
- end
17
-
18
- def to_h
19
- h = super
20
- unless @content.empty?
21
- h["content"] = @content.map { |c| serialize_child(c) }
22
- end
23
- h
24
- end
25
-
26
- def text_content
27
- @content.map do |item|
28
- item.is_a?(String) ? item : item.text_content
29
- end.join
30
- end
31
-
32
- def accept_rewriter(rewriter)
33
- rewriter.rewrite_container(self)
34
- end
35
-
36
- private
37
-
38
- def serialize_child(child)
39
- case child
40
- when String then child
41
- else child.to_h
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Factory
7
- INVALID_INPUT = "Factory.from_h expects a Hash, got %<class>s"
8
-
9
- def self.from_h(hash)
10
- unless hash.is_a?(Hash)
11
- raise ArgumentError,
12
- format(INVALID_INPUT, class: hash.class)
13
- end
14
-
15
- type = hash["type"]
16
-
17
- case type
18
- when "text"
19
- build_text(hash)
20
- when "soft_break"
21
- SoftBreak.new
22
- when nil
23
- raise ArgumentError,
24
- "Factory.from_h requires a 'type' key, got #{hash.inspect}"
25
- else
26
- build_node(hash, type)
27
- end
28
- end
29
-
30
- class << self
31
- private
32
-
33
- def build_text(hash)
34
- marks = Array(hash["marks"]).map { |m| Mark.from_h(m) }
35
- Text.new(text: hash["text"] || "", marks: marks)
36
- end
37
-
38
- def build_node(hash, type)
39
- content = hash["content"]
40
- if content.is_a?(Array)
41
- children = content.map { |c| c.is_a?(Hash) ? from_h(c) : c }
42
- Container.new(type: type, attrs: hash["attrs"] || {},
43
- content: children)
44
- else
45
- Leaf.new(type: type, attrs: hash["attrs"] || {})
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Guide
7
- attr_reader :content, :meta, :title, :document
8
-
9
- def initialize(content:, meta: {}, title: nil, document: nil)
10
- @content = content
11
- @meta = meta
12
- @title = title
13
- @document = document
14
- end
15
-
16
- def to_h
17
- h = {}
18
- h["content"] = @content.is_a?(Container) ? @content.to_h : @content
19
- h["meta"] = @meta unless @meta.nil? || @meta.empty?
20
- h["title"] = @title if @title
21
- h
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Leaf < Node
7
- def leaf?
8
- true
9
- end
10
-
11
- def accept_rewriter(rewriter)
12
- rewriter.rewrite_leaf(self)
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Mark
7
- attr_reader :type, :attrs
8
-
9
- def initialize(type:, attrs: {})
10
- @type = type
11
- @attrs = normalize_attrs(attrs)
12
- end
13
-
14
- def to_h
15
- h = { "type" => type }
16
- h["attrs"] = @attrs.dup unless @attrs.empty?
17
- h
18
- end
19
-
20
- def [](key)
21
- @attrs[key.to_s]
22
- end
23
-
24
- def []=(key, value)
25
- @attrs[key.to_s] = value
26
- end
27
-
28
- def set_attr(key, value)
29
- @attrs[key.to_s] = value
30
- self
31
- end
32
-
33
- def fetch(key, default = nil, &)
34
- @attrs.fetch(key.to_s, default, &)
35
- end
36
-
37
- def self.from_h(hash)
38
- return nil unless hash
39
-
40
- new(type: hash["type"], attrs: hash["attrs"] || {})
41
- end
42
-
43
- private
44
-
45
- def normalize_attrs(attrs)
46
- return {} if attrs.nil?
47
-
48
- attrs.transform_keys(&:to_s)
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Node
7
- attr_reader :type, :attrs
8
-
9
- def initialize(type:, attrs: {})
10
- @type = type
11
- @attrs = normalize_attrs(attrs)
12
- end
13
-
14
- def to_h
15
- h = { "type" => type }
16
- h["attrs"] = @attrs.dup unless @attrs.empty?
17
- h
18
- end
19
-
20
- def leaf?
21
- false
22
- end
23
-
24
- def container?
25
- false
26
- end
27
-
28
- def text_content
29
- ""
30
- end
31
-
32
- def accept_rewriter(_rewriter)
33
- raise NotImplementedError,
34
- "#{self.class}#accept_rewriter not implemented"
35
- end
36
-
37
- private
38
-
39
- def normalize_attrs(attrs)
40
- return {} if attrs.nil?
41
-
42
- attrs.transform_keys(&:to_s)
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class SoftBreak
7
- def type
8
- "soft_break"
9
- end
10
-
11
- def to_h
12
- { "type" => "soft_break" }
13
- end
14
-
15
- def attrs
16
- {}
17
- end
18
-
19
- def content
20
- []
21
- end
22
-
23
- def text_content
24
- ""
25
- end
26
-
27
- def accept_rewriter(rewriter)
28
- rewriter.rewrite_soft_break(self)
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- class Text
7
- attr_reader :text, :marks
8
-
9
- def initialize(text:, marks: [])
10
- @text = text.to_s
11
- @marks = Array(marks)
12
- end
13
-
14
- def type
15
- "text"
16
- end
17
-
18
- def to_h
19
- h = { "type" => "text", "text" => @text }
20
- h["marks"] = @marks.map(&:to_h) unless @marks.empty?
21
- h
22
- end
23
-
24
- def text_content
25
- @text
26
- end
27
-
28
- def accept_rewriter(rewriter)
29
- rewriter.rewrite_text(self)
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Metanorma
4
- module Mirror
5
- module Model
6
- autoload :Node, "#{__dir__}/model/node"
7
- autoload :Container, "#{__dir__}/model/container"
8
- autoload :Leaf, "#{__dir__}/model/leaf"
9
- autoload :Text, "#{__dir__}/model/text"
10
- autoload :SoftBreak, "#{__dir__}/model/soft_break"
11
- autoload :Mark, "#{__dir__}/model/mark"
12
- autoload :Guide, "#{__dir__}/model/guide"
13
- autoload :Factory, "#{__dir__}/model/factory"
14
- end
15
- end
16
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "fileutils"
4
-
5
- module Metanorma
6
- module Mirror
7
- module Output
8
- class Builder
9
- attr_reader :xml_path, :output_path, :format, :options
10
-
11
- def initialize(xml_path:, output_path:, format: :inline, **options)
12
- @xml_path = xml_path
13
- @output_path = output_path
14
- @format = format
15
- @options = options
16
- end
17
-
18
- def build
19
- pipeline = Pipeline.new(
20
- xml_path: @xml_path,
21
- flavor: @options[:flavor],
22
- title: @options[:title] || File.basename(@xml_path, ".*"),
23
- id_strategy: @options[:id_strategy],
24
- )
25
-
26
- guide = pipeline.process
27
-
28
- format_class = Formats.lookup(@format)
29
- raise ArgumentError, "Unknown format: #{@format}" unless format_class
30
-
31
- formatter = format_class.new(dist_dir: @options[:dist_dir])
32
- formatter.write(@output_path, guide, title: @options[:title])
33
-
34
- @output_path
35
- end
36
- end
37
- end
38
- end
39
- end