metanorma-document 0.2.8 → 0.2.12

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 (418) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -66
  3. data/CLAUDE.md +26 -0
  4. data/README.adoc +144 -0
  5. data/Rakefile +14 -2
  6. data/TODO.finalize/01-split-multi-class-files.md +8 -0
  7. data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +6 -0
  8. data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +11 -0
  9. data/TODO.finalize/04-theme-per-flavor-config-driven.md +9 -0
  10. data/TODO.finalize/05-migrate-all-html-to-liquid.md +16 -0
  11. data/TODO.finalize/06-integrate-pubid-library.md +16 -0
  12. data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +39 -0
  13. data/TODO.finalize/08-refactor-renderer-architecture.md +25 -0
  14. data/TODO.finalize/09-eliminate-code-smells.md +14 -0
  15. data/TODO.finalize/10-comprehensive-spec-coverage.md +24 -0
  16. data/TODO.finalize/11-config-driven-flavor-metadata.md +20 -0
  17. data/TODO.finalize/12-add-frozen-string-literal.md +6 -0
  18. data/TODO.finalize/13-extract-composition-from-god-class.md +96 -0
  19. data/TODO.finalize/14-config-driven-section-ordering.md +31 -0
  20. data/TODO.finalize/15-theme-directories-per-flavor.md +46 -0
  21. data/TODO.finalize/16-theme-lutaml-model-schema.md +44 -0
  22. data/data/javascripts/components/mn-footnotes.js +68 -0
  23. data/data/javascripts/components/mn-lightbox.js +18 -2
  24. data/data/javascripts/components/mn-shortcuts.js +2 -0
  25. data/data/javascripts/core/mn-navigation.js +8 -0
  26. data/data/javascripts/core/mn-theme.js +9 -9
  27. data/data/logos/oiml-logo-full-dark.svg +1 -0
  28. data/data/logos/oiml-logo-full-light.svg +1 -0
  29. data/data/logos/oiml-logo-icon-dark.svg +1 -0
  30. data/data/logos/oiml-logo-icon-light.svg +1 -0
  31. data/data/logos/oiml-logo.svg +1 -0
  32. data/data/logos/pdfa-logo.svg +31 -94
  33. data/data/stylesheets/base/_layout.css +3 -0
  34. data/data/stylesheets/base/_reset.css +3 -3
  35. data/data/stylesheets/base/_typography.css +0 -5
  36. data/data/stylesheets/components/bibliography.css +3 -3
  37. data/data/stylesheets/components/cover.css +3 -1
  38. data/data/stylesheets/components/figure.css +13 -1
  39. data/data/stylesheets/components/footnote.css +65 -5
  40. data/data/stylesheets/components/formula.css +44 -0
  41. data/data/stylesheets/components/header.css +17 -2
  42. data/data/stylesheets/components/inline.css +1 -1
  43. data/data/stylesheets/components/table.css +15 -2
  44. data/data/stylesheets/components/term.css +0 -1
  45. data/data/themes/bipm.yaml +60 -0
  46. data/data/themes/cc.yaml +43 -0
  47. data/data/themes/icc.yaml +39 -0
  48. data/data/themes/iec.yaml +44 -0
  49. data/data/themes/ieee.yaml +43 -0
  50. data/data/themes/ietf.yaml +45 -0
  51. data/data/themes/iho.yaml +46 -0
  52. data/data/themes/iso.yaml +40 -0
  53. data/data/themes/itu.yaml +45 -0
  54. data/data/themes/ogc.yaml +51 -0
  55. data/data/themes/oiml.yaml +56 -0
  56. data/data/themes/pdfa.yaml +44 -0
  57. data/data/themes/ribose.yaml +43 -0
  58. data/exe/metanorma-document +11 -0
  59. data/frontend/e2e/sample-html.test.ts +256 -0
  60. data/frontend/index.html +12 -0
  61. data/frontend/package-lock.json +4725 -0
  62. data/frontend/package.json +32 -0
  63. data/frontend/postcss.config.js +6 -0
  64. data/frontend/src/App.vue +79 -0
  65. data/frontend/src/app.ts +21 -0
  66. data/frontend/src/components/AppSidebar.vue +77 -0
  67. data/frontend/src/components/DocumentReader.vue +180 -0
  68. data/frontend/src/components/MirrorRenderer.vue +23 -0
  69. data/frontend/src/components/ReadingProgressBar.vue +29 -0
  70. data/frontend/src/components/TextRenderer.vue +131 -0
  71. data/frontend/src/components/TocItem.vue +57 -0
  72. data/frontend/src/components/TopBar.vue +49 -0
  73. data/frontend/src/components/__tests__/MirrorRenderer.test.ts +178 -0
  74. data/frontend/src/components/blocks/AdmonitionBlock.vue +74 -0
  75. data/frontend/src/components/blocks/ClauseBlock.vue +53 -0
  76. data/frontend/src/components/blocks/ExampleBlock.vue +21 -0
  77. data/frontend/src/components/blocks/FallbackBlock.vue +18 -0
  78. data/frontend/src/components/blocks/FigureBlock.vue +26 -0
  79. data/frontend/src/components/blocks/FootnotesBlock.vue +25 -0
  80. data/frontend/src/components/blocks/ListBlocks.vue +62 -0
  81. data/frontend/src/components/blocks/NoteBlock.vue +21 -0
  82. data/frontend/src/components/blocks/ParagraphBlock.vue +25 -0
  83. data/frontend/src/components/blocks/QuoteBlock.vue +25 -0
  84. data/frontend/src/components/blocks/ReviewBlock.vue +39 -0
  85. data/frontend/src/components/blocks/SourcecodeBlock.vue +52 -0
  86. data/frontend/src/components/blocks/TableBlock.vue +48 -0
  87. data/frontend/src/components/blocks/index.ts +36 -0
  88. data/frontend/src/stores/__tests__/documentStore.fixture.test.ts +272 -0
  89. data/frontend/src/stores/__tests__/documentStore.test.ts +143 -0
  90. data/frontend/src/stores/__tests__/ebookStore.test.ts +145 -0
  91. data/frontend/src/stores/__tests__/uiStore.test.ts +42 -0
  92. data/frontend/src/stores/documentStore.ts +153 -0
  93. data/frontend/src/stores/ebookStore.ts +179 -0
  94. data/frontend/src/stores/uiStore.ts +32 -0
  95. data/frontend/src/styles.css +156 -0
  96. data/frontend/src/types/__tests__/rendering-contract.test.ts +172 -0
  97. data/frontend/src/types/rendering-contract.ts +209 -0
  98. data/frontend/src/utils/__tests__/typeMetadata.test.ts +102 -0
  99. data/frontend/src/utils/typeMetadata.ts +121 -0
  100. data/frontend/tailwind.config.js +18 -0
  101. data/frontend/test/fixtures/iso-document.json +271 -0
  102. data/frontend/tmp/debug_e2e.cjs +46 -0
  103. data/frontend/tsconfig.json +25 -0
  104. data/frontend/tsconfig.node.json +11 -0
  105. data/frontend/vite.config.ts +37 -0
  106. data/frontend/vitest.e2e.config.ts +9 -0
  107. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +0 -14
  108. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +18 -0
  109. data/lib/metanorma/bipm_document/metadata.rb +1 -1
  110. data/lib/metanorma/document/cli.rb +116 -0
  111. data/lib/metanorma/document/components/ancillary_blocks/callout_annotation.rb +27 -0
  112. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +0 -65
  113. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +18 -0
  114. data/lib/metanorma/document/components/ancillary_blocks.rb +4 -0
  115. data/lib/metanorma/document/components/bib_data/bib_data.rb +7 -0
  116. data/lib/metanorma/document/components/blocks/classification_value.rb +21 -0
  117. data/lib/metanorma/document/components/blocks/note_block.rb +1 -1
  118. data/lib/metanorma/document/components/blocks/permission_model.rb +28 -0
  119. data/lib/metanorma/document/components/blocks/recommendation_model.rb +28 -0
  120. data/lib/metanorma/document/components/blocks/requirement_base.rb +30 -0
  121. data/lib/metanorma/document/components/blocks/requirement_classification.rb +20 -0
  122. data/lib/metanorma/document/components/blocks/requirement_description.rb +43 -0
  123. data/lib/metanorma/document/components/blocks/requirement_inherit.rb +24 -0
  124. data/lib/metanorma/document/components/blocks/requirement_model.rb +0 -131
  125. data/lib/metanorma/document/components/blocks.rb +8 -7
  126. data/lib/metanorma/document/components/id_elements/image.rb +2 -0
  127. data/lib/metanorma/document/components/inline/asciimath_element.rb +2 -0
  128. data/lib/metanorma/document/components/inline/attribution_element.rb +2 -0
  129. data/lib/metanorma/document/components/inline/bcp14_element.rb +2 -0
  130. data/lib/metanorma/document/components/inline/biblio_tag_element.rb +2 -0
  131. data/lib/metanorma/document/components/inline/br_element.rb +2 -0
  132. data/lib/metanorma/document/components/inline/comma_element.rb +2 -0
  133. data/lib/metanorma/document/components/inline/concept_element.rb +2 -0
  134. data/lib/metanorma/document/components/inline/display_text_element.rb +2 -0
  135. data/lib/metanorma/document/components/inline/em_raw_element.rb +2 -0
  136. data/lib/metanorma/document/components/inline/enum_comma_element.rb +2 -0
  137. data/lib/metanorma/document/components/inline/eref_element.rb +3 -1
  138. data/lib/metanorma/document/components/inline/fmt_admitted_element.rb +4 -0
  139. data/lib/metanorma/document/components/inline/fmt_annotation_body_element.rb +4 -0
  140. data/lib/metanorma/document/components/inline/fmt_annotation_end_element.rb +4 -0
  141. data/lib/metanorma/document/components/inline/fmt_annotation_start_element.rb +4 -0
  142. data/lib/metanorma/document/components/inline/fmt_concept_element.rb +4 -0
  143. data/lib/metanorma/document/components/inline/fmt_definition_element.rb +4 -0
  144. data/lib/metanorma/document/components/inline/fmt_fn_body_element.rb +4 -0
  145. data/lib/metanorma/document/components/inline/fmt_fn_label_element.rb +4 -0
  146. data/lib/metanorma/document/components/inline/fmt_footnote_container_element.rb +4 -0
  147. data/lib/metanorma/document/components/inline/fmt_identifier_element.rb +4 -0
  148. data/lib/metanorma/document/components/inline/fmt_name_element.rb +4 -0
  149. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +4 -0
  150. data/lib/metanorma/document/components/inline/fmt_sourcecode_element.rb +4 -0
  151. data/lib/metanorma/document/components/inline/fmt_stem_element.rb +10 -0
  152. data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +4 -0
  153. data/lib/metanorma/document/components/inline/fmt_title_element.rb +4 -0
  154. data/lib/metanorma/document/components/inline/fmt_xref_element.rb +4 -0
  155. data/lib/metanorma/document/components/inline/fmt_xref_label_element.rb +4 -0
  156. data/lib/metanorma/document/components/inline/fn_element.rb +3 -1
  157. data/lib/metanorma/document/components/inline/link_element.rb +2 -0
  158. data/lib/metanorma/document/components/inline/localized_string_element.rb +2 -0
  159. data/lib/metanorma/document/components/inline/localized_strings_element.rb +2 -0
  160. data/lib/metanorma/document/components/inline/location_element.rb +24 -0
  161. data/lib/metanorma/document/components/inline/math_element.rb +2 -0
  162. data/lib/metanorma/document/components/inline/name_with_id_element.rb +4 -0
  163. data/lib/metanorma/document/components/inline/rendered_display.rb +23 -0
  164. data/lib/metanorma/document/components/inline/rendered_math_element.rb +21 -0
  165. data/lib/metanorma/document/components/inline/semantic_content.rb +51 -0
  166. data/lib/metanorma/document/components/inline/semantic_math_element.rb +20 -0
  167. data/lib/metanorma/document/components/inline/semx_child_element.rb +2 -0
  168. data/lib/metanorma/document/components/inline/semx_element.rb +13 -1
  169. data/lib/metanorma/document/components/inline/small_cap_element.rb +2 -0
  170. data/lib/metanorma/document/components/inline/span_element.rb +10 -15
  171. data/lib/metanorma/document/components/inline/stem_inline_element.rb +7 -1
  172. data/lib/metanorma/document/components/inline/strong_raw_element.rb +2 -0
  173. data/lib/metanorma/document/components/inline/sub_element.rb +2 -0
  174. data/lib/metanorma/document/components/inline/sup_element.rb +2 -0
  175. data/lib/metanorma/document/components/inline/tab_element.rb +2 -0
  176. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +4 -0
  177. data/lib/metanorma/document/components/inline/tt_element.rb +2 -0
  178. data/lib/metanorma/document/components/inline/variant_title_element.rb +2 -0
  179. data/lib/metanorma/document/components/inline/vocabulary.rb +184 -0
  180. data/lib/metanorma/document/components/inline/xref_element.rb +10 -0
  181. data/lib/metanorma/document/components/inline.rb +12 -0
  182. data/lib/metanorma/document/components/lists/unordered_list.rb +2 -2
  183. data/lib/metanorma/document/components/multi_paragraph/admonition_block.rb +5 -2
  184. data/lib/metanorma/document/components/multi_paragraph/quote_author_element.rb +20 -0
  185. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +0 -29
  186. data/lib/metanorma/document/components/multi_paragraph.rb +2 -0
  187. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +2 -2
  188. data/lib/metanorma/document/components/reference_elements/source_element.rb +0 -31
  189. data/lib/metanorma/document/components/reference_elements/source_modification.rb +21 -0
  190. data/lib/metanorma/document/components/reference_elements/source_origin.rb +28 -0
  191. data/lib/metanorma/document/components/reference_elements.rb +2 -2
  192. data/lib/metanorma/document/components/tables/col_element.rb +18 -0
  193. data/lib/metanorma/document/components/tables/col_group_element.rb +18 -0
  194. data/lib/metanorma/document/components/tables/table_block.rb +0 -22
  195. data/lib/metanorma/document/components/tables/table_body_section.rb +16 -0
  196. data/lib/metanorma/document/components/tables/table_foot_section.rb +16 -0
  197. data/lib/metanorma/document/components/tables/table_head_section.rb +16 -0
  198. data/lib/metanorma/document/components/tables/table_section.rb +0 -25
  199. data/lib/metanorma/document/components/tables.rb +5 -3
  200. data/lib/metanorma/document/relaton/address.rb +0 -27
  201. data/lib/metanorma/document/relaton/bib_item_locality.rb +3 -12
  202. data/lib/metanorma/document/relaton/copyright_association.rb +0 -10
  203. data/lib/metanorma/document/relaton/copyright_owner.rb +16 -0
  204. data/lib/metanorma/document/relaton/edition.rb +4 -7
  205. data/lib/metanorma/document/relaton/formatted_address.rb +29 -0
  206. data/lib/metanorma/document/relaton/logo_element.rb +18 -0
  207. data/lib/metanorma/document/relaton/organization.rb +0 -14
  208. data/lib/metanorma/document/relaton/phone.rb +3 -9
  209. data/lib/metanorma/document/relaton/place_type.rb +0 -13
  210. data/lib/metanorma/document/relaton/price_type.rb +3 -9
  211. data/lib/metanorma/document/relaton/region_element.rb +18 -0
  212. data/lib/metanorma/document/relaton.rb +6 -1
  213. data/lib/metanorma/document/version.rb +1 -1
  214. data/lib/metanorma/document.rb +2 -0
  215. data/lib/metanorma/html/asset_pipeline.rb +1 -0
  216. data/lib/metanorma/html/base_renderer.rb +261 -1008
  217. data/lib/metanorma/html/bipm_renderer.rb +15 -144
  218. data/lib/metanorma/html/cc_renderer.rb +1 -45
  219. data/lib/metanorma/html/component/base.rb +2 -7
  220. data/lib/metanorma/html/component/index_section.rb +41 -43
  221. data/lib/metanorma/html/drops/admonition_drop.rb +1 -4
  222. data/lib/metanorma/html/drops/biblio_entry_drop.rb +50 -0
  223. data/lib/metanorma/html/drops/block_element_drop.rb +7 -2
  224. data/lib/metanorma/html/drops/example_drop.rb +1 -4
  225. data/lib/metanorma/html/drops/figure_drop.rb +31 -22
  226. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  227. data/lib/metanorma/html/drops/formula_drop.rb +45 -16
  228. data/lib/metanorma/html/drops/note_drop.rb +9 -7
  229. data/lib/metanorma/html/drops/sourcecode_drop.rb +12 -5
  230. data/lib/metanorma/html/drops.rb +2 -0
  231. data/lib/metanorma/html/generator.rb +2 -2
  232. data/lib/metanorma/html/icc_renderer.rb +0 -39
  233. data/lib/metanorma/html/iec_renderer.rb +1 -44
  234. data/lib/metanorma/html/ieee_renderer.rb +1 -45
  235. data/lib/metanorma/html/ietf_renderer.rb +1 -48
  236. data/lib/metanorma/html/iho_renderer.rb +1 -46
  237. data/lib/metanorma/html/iso_renderer.rb +291 -321
  238. data/lib/metanorma/html/itu_renderer.rb +1 -45
  239. data/lib/metanorma/html/ogc_renderer.rb +15 -76
  240. data/lib/metanorma/html/oiml_renderer.rb +18 -38
  241. data/lib/metanorma/html/pdfa_renderer.rb +0 -39
  242. data/lib/metanorma/html/renderers/block_renderer.rb +372 -0
  243. data/lib/metanorma/html/renderers/inline_renderer.rb +655 -0
  244. data/lib/metanorma/html/renderers/pubid_renderer.rb +69 -0
  245. data/lib/metanorma/html/renderers/section_renderer.rb +193 -0
  246. data/lib/metanorma/html/renderers.rb +8 -0
  247. data/lib/metanorma/html/ribose_renderer.rb +1 -45
  248. data/lib/metanorma/html/standard_renderer.rb +341 -229
  249. data/lib/metanorma/html/templates/_audio.html.liquid +1 -0
  250. data/lib/metanorma/html/templates/_biblio_entry.html.liquid +1 -0
  251. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +27 -0
  252. data/lib/metanorma/html/templates/_boilerplate.html.liquid +1 -0
  253. data/lib/metanorma/html/templates/_bookmark.html.liquid +1 -0
  254. data/lib/metanorma/html/templates/_br.html.liquid +1 -0
  255. data/lib/metanorma/html/templates/_definition_list.html.liquid +6 -0
  256. data/lib/metanorma/html/templates/_element.html.liquid +1 -0
  257. data/lib/metanorma/html/templates/_fn_marker.html.liquid +1 -0
  258. data/lib/metanorma/html/templates/_footnotes.html.liquid +6 -6
  259. data/lib/metanorma/html/templates/_formula.html.liquid +1 -1
  260. data/lib/metanorma/html/templates/_header.html.liquid +1 -1
  261. data/lib/metanorma/html/templates/_heading.html.liquid +1 -0
  262. data/lib/metanorma/html/templates/_image.html.liquid +1 -0
  263. data/lib/metanorma/html/templates/_inline_span.html.liquid +1 -0
  264. data/lib/metanorma/html/templates/_iso_cover.html.liquid +1 -1
  265. data/lib/metanorma/html/templates/_link.html.liquid +1 -0
  266. data/lib/metanorma/html/templates/_list.html.liquid +3 -0
  267. data/lib/metanorma/html/templates/_list_item.html.liquid +1 -0
  268. data/lib/metanorma/html/templates/_main_content.html.liquid +1 -0
  269. data/lib/metanorma/html/templates/_math_container.html.liquid +1 -0
  270. data/lib/metanorma/html/templates/_paragraph.html.liquid +1 -0
  271. data/lib/metanorma/html/templates/_prefatory_section.html.liquid +1 -0
  272. data/lib/metanorma/html/templates/_pubid_identifier.html.liquid +1 -0
  273. data/lib/metanorma/html/templates/_quote.html.liquid +4 -0
  274. data/lib/metanorma/html/templates/_ref_date.html.liquid +1 -0
  275. data/lib/metanorma/html/templates/_ref_title.html.liquid +1 -0
  276. data/lib/metanorma/html/templates/_section.html.liquid +5 -0
  277. data/lib/metanorma/html/templates/_standard_cover.html.liquid +31 -0
  278. data/lib/metanorma/html/templates/_standard_doc_title.html.liquid +3 -0
  279. data/lib/metanorma/html/templates/_stem_span.html.liquid +1 -0
  280. data/lib/metanorma/html/templates/_table.html.liquid +9 -0
  281. data/lib/metanorma/html/templates/_term_domain.html.liquid +1 -0
  282. data/lib/metanorma/html/templates/_term_example.html.liquid +1 -0
  283. data/lib/metanorma/html/templates/_term_note.html.liquid +1 -0
  284. data/lib/metanorma/html/templates/_term_number.html.liquid +1 -0
  285. data/lib/metanorma/html/templates/_term_source.html.liquid +1 -0
  286. data/lib/metanorma/html/templates/_term_text_note.html.liquid +1 -0
  287. data/lib/metanorma/html/templates/_video.html.liquid +1 -0
  288. data/lib/metanorma/html/templates/_wrapped_preface.html.liquid +1 -0
  289. data/lib/metanorma/html/templates/document.html.liquid +4 -0
  290. data/lib/metanorma/html/theme.rb +180 -107
  291. data/lib/metanorma/html.rb +13 -0
  292. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -25
  293. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +32 -0
  294. data/lib/metanorma/ietf_document/metadata.rb +2 -0
  295. data/lib/metanorma/ietf_document/sections/ietf_annex_section.rb +1 -1
  296. data/lib/metanorma/ietf_document/sections/ietf_clause_section.rb +1 -1
  297. data/lib/metanorma/ietf_document/sections/ietf_content_section.rb +1 -1
  298. data/lib/metanorma/iso_document/metadata/doc_identifier.rb +1 -1
  299. data/lib/metanorma/iso_document/metadata/doctype_element.rb +20 -0
  300. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +0 -48
  301. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +0 -72
  302. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +0 -30
  303. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +4 -1
  304. data/lib/metanorma/iso_document/metadata/language_element.rb +18 -0
  305. data/lib/metanorma/iso_document/metadata/project_number.rb +22 -0
  306. data/lib/metanorma/iso_document/metadata/script_element.rb +18 -0
  307. data/lib/metanorma/iso_document/metadata/stage_element.rb +26 -0
  308. data/lib/metanorma/iso_document/metadata/stagename_element.rb +18 -0
  309. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +0 -17
  310. data/lib/metanorma/iso_document/metadata/title_collection.rb +1 -0
  311. data/lib/metanorma/iso_document/metadata.rb +9 -4
  312. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +4 -3
  313. data/lib/metanorma/iso_document/terms/iso_term.rb +0 -13
  314. data/lib/metanorma/iso_document/terms/term_domain_element.rb +18 -0
  315. data/lib/metanorma/iso_document/terms/term_example.rb +2 -1
  316. data/lib/metanorma/iso_document/terms/term_note.rb +2 -1
  317. data/lib/metanorma/iso_document/terms/verbal_definition.rb +2 -1
  318. data/lib/metanorma/iso_document/terms.rb +1 -0
  319. data/lib/metanorma/iso_document.rb +0 -1
  320. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +0 -37
  321. data/lib/metanorma/itu_document/metadata/meeting_date.rb +18 -0
  322. data/lib/metanorma/itu_document/metadata/meeting_element.rb +18 -0
  323. data/lib/metanorma/itu_document/metadata/study_period.rb +18 -0
  324. data/lib/metanorma/itu_document/metadata.rb +3 -4
  325. data/lib/metanorma/jis_document/sections/jis_annex_section.rb +1 -1
  326. data/lib/metanorma/mirror/default_registry.rb +170 -0
  327. data/lib/metanorma/mirror/handler_registry.rb +60 -0
  328. data/lib/metanorma/mirror/handler_result.rb +37 -0
  329. data/lib/metanorma/mirror/handlers/admonition.rb +18 -0
  330. data/lib/metanorma/mirror/handlers/example.rb +21 -0
  331. data/lib/metanorma/mirror/handlers/figure.rb +53 -0
  332. data/lib/metanorma/mirror/handlers/formula.rb +35 -0
  333. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +159 -0
  334. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +116 -0
  335. data/lib/metanorma/mirror/handlers/inline.rb +225 -0
  336. data/lib/metanorma/mirror/handlers/list.rb +110 -0
  337. data/lib/metanorma/mirror/handlers/note.rb +26 -0
  338. data/lib/metanorma/mirror/handlers/paragraph.rb +19 -0
  339. data/lib/metanorma/mirror/handlers/quote.rb +16 -0
  340. data/lib/metanorma/mirror/handlers/review.rb +19 -0
  341. data/lib/metanorma/mirror/handlers/section.rb +149 -0
  342. data/lib/metanorma/mirror/handlers/sourcecode.rb +27 -0
  343. data/lib/metanorma/mirror/handlers/structural.rb +68 -0
  344. data/lib/metanorma/mirror/handlers/table.rb +81 -0
  345. data/lib/metanorma/mirror/handlers/term.rb +100 -0
  346. data/lib/metanorma/mirror/handlers.rb +60 -0
  347. data/lib/metanorma/mirror/id_strategy/positional.rb +166 -0
  348. data/lib/metanorma/mirror/id_strategy/preserve.rb +12 -0
  349. data/lib/metanorma/mirror/id_strategy.rb +34 -0
  350. data/lib/metanorma/mirror/math_util.rb +53 -0
  351. data/lib/metanorma/mirror/metadata.rb +37 -0
  352. data/lib/metanorma/mirror/metanorma_to_mirror.rb +101 -0
  353. data/lib/metanorma/mirror/model/container.rb +47 -0
  354. data/lib/metanorma/mirror/model/factory.rb +52 -0
  355. data/lib/metanorma/mirror/model/guide.rb +25 -0
  356. data/lib/metanorma/mirror/model/leaf.rb +17 -0
  357. data/lib/metanorma/mirror/model/mark.rb +53 -0
  358. data/lib/metanorma/mirror/model/node.rb +47 -0
  359. data/lib/metanorma/mirror/model/soft_break.rb +33 -0
  360. data/lib/metanorma/mirror/model/text.rb +34 -0
  361. data/lib/metanorma/mirror/model.rb +16 -0
  362. data/lib/metanorma/mirror/output/builder.rb +39 -0
  363. data/lib/metanorma/mirror/output/formats/base_format.rb +90 -0
  364. data/lib/metanorma/mirror/output/formats/inline_format.rb +81 -0
  365. data/lib/metanorma/mirror/output/formats.rb +53 -0
  366. data/lib/metanorma/mirror/output/html_renderer.rb +95 -0
  367. data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +178 -0
  368. data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +61 -0
  369. data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +96 -0
  370. data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +64 -0
  371. data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +129 -0
  372. data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +80 -0
  373. data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +87 -0
  374. data/lib/metanorma/mirror/output/html_renderers.rb +76 -0
  375. data/lib/metanorma/mirror/output/pipeline.rb +92 -0
  376. data/lib/metanorma/mirror/output/pipeline_context.rb +22 -0
  377. data/lib/metanorma/mirror/output.rb +14 -0
  378. data/lib/metanorma/mirror/rewriter.rb +121 -0
  379. data/lib/metanorma/mirror/safe_attr.rb +16 -0
  380. data/lib/metanorma/mirror/serialization/json_serializer.rb +25 -0
  381. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +20 -0
  382. data/lib/metanorma/mirror/serialization.rb +10 -0
  383. data/lib/metanorma/mirror/transformer.rb +22 -0
  384. data/lib/metanorma/mirror.rb +32 -0
  385. data/lib/metanorma/standard_document/annotation.rb +37 -0
  386. data/lib/metanorma/standard_document/annotation_container.rb +25 -2
  387. data/lib/metanorma/standard_document/block_attributes.rb +15 -2
  388. data/lib/metanorma/standard_document/blocks/amend_content_block.rb +21 -3
  389. data/lib/metanorma/standard_document/blocks/block_source.rb +0 -23
  390. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +23 -0
  391. data/lib/metanorma/standard_document/blocks/standard_block_no_notes.rb +2 -2
  392. data/lib/metanorma/standard_document/blocks.rb +1 -1
  393. data/lib/metanorma/standard_document/boilerplate.rb +20 -2
  394. data/lib/metanorma/standard_document/sections/annex_section.rb +2 -2
  395. data/lib/metanorma/standard_document/sections/clause_hierarchical_section.rb +1 -1
  396. data/lib/metanorma/standard_document/sections/clause_section.rb +2 -2
  397. data/lib/metanorma/standard_document/sections/definition_section.rb +2 -2
  398. data/lib/metanorma/standard_document/sections/standard_content_section.rb +2 -2
  399. data/lib/metanorma/standard_document/sections/standard_hierarchical_section.rb +1 -1
  400. data/lib/metanorma/standard_document/sections/standard_references_section.rb +2 -2
  401. data/lib/metanorma/standard_document/sections/standard_section.rb +1 -1
  402. data/lib/metanorma/standard_document/sections/terms_section.rb +2 -2
  403. data/lib/metanorma/standard_document/terms/term_expression.rb +0 -31
  404. data/lib/metanorma/standard_document/terms/term_name_element.rb +29 -0
  405. data/lib/metanorma/standard_document/terms.rb +1 -0
  406. data/script/render_both.rb +18 -0
  407. metadata +262 -14
  408. data/.github/workflows/rake.yml +0 -21
  409. data/.github/workflows/release.yml +0 -25
  410. data/.github/workflows/roundtrip-samples.yml +0 -132
  411. data/.gitignore +0 -19
  412. data/.rspec +0 -3
  413. data/.rubocop.yml +0 -22
  414. data/Gemfile +0 -28
  415. data/bin/console +0 -15
  416. data/bin/setup +0 -8
  417. data/lib/metanorma/iso_document/raw_paragraph.rb +0 -23
  418. data/metanorma-document.gemspec +0 -35
@@ -3,11 +3,34 @@
3
3
  module Metanorma
4
4
  module StandardDocument
5
5
  class AnnotationContainer < Lutaml::Model::Serializable
6
- attribute :content, :string
6
+ class Annotation < Lutaml::Model::Serializable
7
+ attribute :id, :string
8
+ attribute :reviewer, :string
9
+ attribute :from, :string
10
+ attribute :to, :string
11
+ attribute :type, :string
12
+ attribute :date, :string
13
+ attribute :paragraphs,
14
+ Metanorma::Document::Components::Paragraphs::ParagraphBlock,
15
+ collection: true
16
+
17
+ xml do
18
+ element "annotation"
19
+ map_attribute "id", to: :id
20
+ map_attribute "reviewer", to: :reviewer
21
+ map_attribute "from", to: :from
22
+ map_attribute "to", to: :to
23
+ map_attribute "type", to: :type
24
+ map_attribute "date", to: :date
25
+ map_element "p", to: :paragraphs
26
+ end
27
+ end
28
+
29
+ attribute :annotations, Annotation, collection: true
7
30
 
8
31
  xml do
9
32
  element "annotation-container"
10
- map_all_content to: :content
33
+ map_element "annotation", to: :annotations
11
34
  end
12
35
  end
13
36
  end
@@ -52,14 +52,27 @@ module Metanorma
52
52
  end
53
53
 
54
54
  # Provides `blocks` method for ordered-content section types.
55
- # Returns child nodes in document order via `each_mixed_content`.
55
+ # Returns child block-level nodes in document order via `each_mixed_content`,
56
+ # excluding metadata/inline elements like titles and annotations.
56
57
  module OrderedContent
58
+ NON_BLOCK_TYPES = [
59
+ Metanorma::Document::Components::Inline::TitleWithAnnotationElement,
60
+ Metanorma::Document::Components::Inline::FmtTitleElement,
61
+ Metanorma::Document::Components::Inline::VariantTitleElement,
62
+ Metanorma::Document::Components::Inline::FmtXrefLabelElement,
63
+ Metanorma::Document::Components::Inline::FmtAnnotationStartElement,
64
+ Metanorma::Document::Components::Inline::FmtAnnotationEndElement,
65
+ ].freeze
66
+
57
67
  def blocks
58
68
  @blocks ||=
59
69
  begin
60
70
  result = []
61
71
  each_mixed_content do |node|
62
- result << node unless node.is_a?(String)
72
+ next if node.is_a?(String)
73
+ next if NON_BLOCK_TYPES.any? { |t| node.is_a?(t) }
74
+
75
+ result << node
63
76
  end
64
77
  result
65
78
  end
@@ -4,12 +4,30 @@ module Metanorma
4
4
  module StandardDocument
5
5
  module Blocks
6
6
  # Content block for amend description and new-content elements.
7
- # Uses map_all_content to preserve all children (p, ol, ul, table, etc.)
7
+ # Contains block-level content: paragraphs, notes, lists, tables, etc.
8
8
  class AmendContentBlock < Lutaml::Model::Serializable
9
- attribute :content, :string
9
+ attribute :paragraphs,
10
+ Metanorma::Document::Components::Paragraphs::ParagraphBlock,
11
+ collection: true
12
+ attribute :note,
13
+ Metanorma::Document::Components::Blocks::NoteBlock,
14
+ collection: true
15
+ attribute :ol,
16
+ Metanorma::Document::Components::Lists::OrderedList,
17
+ collection: true
18
+ attribute :ul,
19
+ Metanorma::Document::Components::Lists::UnorderedList,
20
+ collection: true
21
+ attribute :dl,
22
+ Metanorma::Document::Components::Lists::DefinitionList,
23
+ collection: true
10
24
 
11
25
  xml do
12
- map_all_content to: :content
26
+ map_element "p", to: :paragraphs
27
+ map_element "note", to: :note
28
+ map_element "ol", to: :ol
29
+ map_element "ul", to: :ul
30
+ map_element "dl", to: :dl
13
31
  end
14
32
  end
15
33
  end
@@ -3,29 +3,6 @@
3
3
  module Metanorma
4
4
  module StandardDocument
5
5
  module Blocks
6
- # Reference origin within a block source: <origin bibitemid="..." citeas="...">
7
- # Schema: isodoc.rnc — origin = element origin { erefType | termref }
8
- class SourceOriginElement < Lutaml::Model::Serializable
9
- attribute :bibitemid, :string
10
- attribute :type, :string
11
- attribute :citeas, :string
12
- attribute :locality_stack, Metanorma::Document::Relaton::LocalityStack,
13
- collection: true
14
-
15
- xml do
16
- element "origin"
17
- map_attribute "bibitemid", to: :bibitemid
18
- map_attribute "type", to: :type
19
- map_attribute "citeas", to: :citeas
20
- map_element "localityStack", to: :locality_stack
21
- end
22
- end
23
-
24
- # Bibliographic source for a block: <source status="..." type="...">
25
- # <origin bibitemid="..." citeas="..."/>
26
- # <modification>...</modification>?
27
- # </source>
28
- # Schema: isodoc.rnc BlockSource = source*
29
6
  class BlockSourceElement < Lutaml::Model::Serializable
30
7
  attribute :status, :string
31
8
  attribute :type, :string
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module StandardDocument
5
+ module Blocks
6
+ class SourceOriginElement < Lutaml::Model::Serializable
7
+ attribute :bibitemid, :string
8
+ attribute :type, :string
9
+ attribute :citeas, :string
10
+ attribute :locality_stack, Metanorma::Document::Relaton::LocalityStack,
11
+ collection: true
12
+
13
+ xml do
14
+ element "origin"
15
+ map_attribute "bibitemid", to: :bibitemid
16
+ map_attribute "type", to: :type
17
+ map_attribute "citeas", to: :citeas
18
+ map_element "localityStack", to: :locality_stack
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -4,8 +4,8 @@ module Metanorma
4
4
  module StandardDocument
5
5
  module Blocks
6
6
  class StandardBlockNoNotes < Metanorma::Document::Components::Blocks::BasicBlockNoNotes
7
- attribute :keep_with_next, :string
8
- attribute :keep_lines_together, :string
7
+ attribute :keep_with_next, :boolean
8
+ attribute :keep_lines_together, :boolean
9
9
  attribute :tag, :string
10
10
  attribute :multilingual_rendering, :string
11
11
  attribute :columns, :string
@@ -6,7 +6,7 @@ module Metanorma
6
6
  autoload :AmendBlock, "#{__dir__}/blocks/amend_block"
7
7
  autoload :AmendContentBlock, "#{__dir__}/blocks/amend_content_block"
8
8
  autoload :BlockSourceElement, "#{__dir__}/blocks/block_source"
9
- autoload :SourceOriginElement, "#{__dir__}/blocks/block_source"
9
+ autoload :SourceOriginElement, "#{__dir__}/blocks/source_origin_element"
10
10
  autoload :AutoNumber, "#{__dir__}/blocks/auto_number"
11
11
  autoload :ChangeType, "#{__dir__}/blocks/change_type"
12
12
  autoload :ElementName, "#{__dir__}/blocks/element_name"
@@ -3,11 +3,29 @@
3
3
  module Metanorma
4
4
  module StandardDocument
5
5
  class Boilerplate < Lutaml::Model::Serializable
6
- attribute :content, :string
6
+ attribute :copyright_statement,
7
+ Metanorma::StandardDocument::Sections::ContentSection,
8
+ collection: true
9
+ attribute :license_statement,
10
+ Metanorma::StandardDocument::Sections::ContentSection,
11
+ collection: true
12
+ attribute :legal_statement,
13
+ Metanorma::StandardDocument::Sections::ContentSection,
14
+ collection: true
15
+ attribute :feedback_statement,
16
+ Metanorma::StandardDocument::Sections::ContentSection,
17
+ collection: true
18
+ attribute :clause,
19
+ Metanorma::StandardDocument::Sections::ContentSection,
20
+ collection: true
7
21
 
8
22
  xml do
9
23
  element "boilerplate"
10
- map_all_content to: :content
24
+ map_element "copyright-statement", to: :copyright_statement
25
+ map_element "license-statement", to: :license_statement
26
+ map_element "legal-statement", to: :legal_statement
27
+ map_element "feedback-statement", to: :feedback_statement
28
+ map_element "clause", to: :clause
11
29
  end
12
30
  end
13
31
  end
@@ -19,9 +19,9 @@ module Metanorma
19
19
  attribute :id, :string
20
20
  attribute :number, :string
21
21
  attribute :obligation, :string
22
- attribute :unnumbered, :string
22
+ attribute :unnumbered, :boolean
23
23
  attribute :toc, :string
24
- attribute :inline_header, :string
24
+ attribute :inline_header, :boolean
25
25
  attribute :title,
26
26
  Metanorma::Document::Components::Inline::TitleWithAnnotationElement
27
27
 
@@ -14,7 +14,7 @@ module Metanorma
14
14
  attribute :original_id, :string
15
15
  attribute :autonum, :string
16
16
  attribute :displayorder, :integer
17
- attribute :inline_header, :string
17
+ attribute :inline_header, :boolean
18
18
 
19
19
  xml do
20
20
  element "clause-hierarchical-section"
@@ -20,8 +20,8 @@ module Metanorma
20
20
  attribute :type, :string
21
21
  attribute :number, :string
22
22
  attribute :obligation, :string
23
- attribute :inline_header, :string
24
- attribute :unnumbered, :string
23
+ attribute :inline_header, :boolean
24
+ attribute :unnumbered, :boolean
25
25
  attribute :toc, :string
26
26
  attribute :class_attr, :string
27
27
  attribute :title,
@@ -20,8 +20,8 @@ module Metanorma
20
20
  attribute :type, :string
21
21
  attribute :number, :string
22
22
  attribute :obligation, :string
23
- attribute :inline_header, :string
24
- attribute :unnumbered, :string
23
+ attribute :inline_header, :boolean
24
+ attribute :unnumbered, :boolean
25
25
  attribute :toc, :string
26
26
  attribute :class_attr, :string
27
27
  attribute :title,
@@ -18,8 +18,8 @@ module Metanorma
18
18
  attribute :type, :string
19
19
  attribute :number, :string
20
20
  attribute :obligation, :string
21
- attribute :inline_header, :string
22
- attribute :unnumbered, :string
21
+ attribute :inline_header, :boolean
22
+ attribute :unnumbered, :boolean
23
23
  attribute :toc, :string
24
24
  attribute :class_attr, :string
25
25
  attribute :title,
@@ -12,7 +12,7 @@ module Metanorma
12
12
  attribute :original_id, :string
13
13
  attribute :autonum, :string
14
14
  attribute :displayorder, :integer
15
- attribute :inline_header, :string
15
+ attribute :inline_header, :boolean
16
16
 
17
17
  xml do
18
18
  element "standard-hierarchical-section"
@@ -17,9 +17,9 @@ module Metanorma
17
17
  # bibliographical references (as modelled in Relaton), along with
18
18
  # any prefatory text.
19
19
  class StandardReferencesSection < Metanorma::StandardDocument::Sections::StandardSection
20
- attribute :normative, :string
20
+ attribute :normative, :boolean
21
21
  attribute :obligation, :string
22
- attribute :hidden, :string
22
+ attribute :hidden, :boolean
23
23
  attribute :references, Metanorma::Document::Components::BibData::BibliographicItem,
24
24
  collection: true
25
25
  attribute :passthrough, Metanorma::StandardDocument::Blocks::Passthrough,
@@ -10,7 +10,7 @@ module Metanorma
10
10
  attribute :amend, Metanorma::StandardDocument::Blocks::AmendBlock
11
11
  attribute :number, :string
12
12
  attribute :branch_number, :string
13
- attribute :unnumbered, :string
13
+ attribute :unnumbered, :boolean
14
14
  attribute :obligation, :string
15
15
 
16
16
  attribute :semx_id, :string
@@ -19,8 +19,8 @@ module Metanorma
19
19
  attribute :type, :string
20
20
  attribute :number, :string
21
21
  attribute :obligation, :string
22
- attribute :inline_header, :string
23
- attribute :unnumbered, :string
22
+ attribute :inline_header, :boolean
23
+ attribute :unnumbered, :boolean
24
24
  attribute :toc, :string
25
25
  attribute :class_attr, :string
26
26
  attribute :title,
@@ -3,37 +3,6 @@
3
3
  module Metanorma
4
4
  module StandardDocument
5
5
  module Terms
6
- class TermNameElement < Lutaml::Model::Serializable
7
- attribute :id, :string
8
- attribute :semx_id, :string
9
- attribute :lang, :string
10
- attribute :text, :string, collection: true
11
- attribute :strike, Metanorma::Document::Components::TextElements::StrikeElement,
12
- collection: true
13
- attribute :em, Metanorma::Document::Components::Inline::EmRawElement,
14
- collection: true
15
- attribute :strong, Metanorma::Document::Components::Inline::StrongRawElement,
16
- collection: true
17
- attribute :sup, Metanorma::Document::Components::Inline::SupElement,
18
- collection: true
19
- attribute :sub, Metanorma::Document::Components::Inline::SubElement,
20
- collection: true
21
-
22
- xml do
23
- element "name"
24
- map_attribute "id", to: :id
25
- map_attribute "semx-id", to: :semx_id
26
- map_attribute "lang", to: :lang
27
- mixed_content
28
- map_content to: :text
29
- map_element "strike", to: :strike
30
- map_element "em", to: :em
31
- map_element "strong", to: :strong
32
- map_element "sup", to: :sup
33
- map_element "sub", to: :sub
34
- end
35
- end
36
-
37
6
  class TermExpression < Lutaml::Model::Serializable
38
7
  attribute :name, TermNameElement, collection: true
39
8
  attribute :usage, :string
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module StandardDocument
5
+ module Terms
6
+ # A `<name>` element contains the rendered form of a term's
7
+ # designation. It accepts arbitrary inline content (formatting,
8
+ # math symbols, footnotes) — see `Inline::Vocabulary` for the
9
+ # full set.
10
+ class TermNameElement < Lutaml::Model::Serializable
11
+ include Metanorma::Document::Components::Inline::Vocabulary
12
+
13
+ attribute :id, :string
14
+ attribute :semx_id, :string
15
+ attribute :lang, :string
16
+
17
+ xml do
18
+ element "name"
19
+ map_attribute "id", to: :id
20
+ map_attribute "semx-id", to: :semx_id
21
+ map_attribute "lang", to: :lang
22
+ mixed_content
23
+ Metanorma::Document::Components::Inline::Vocabulary::VocabularyXmlMapping
24
+ .apply_inline_mappings(self)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -23,6 +23,7 @@ module Metanorma
23
23
  autoload :TermCollection, "#{__dir__}/terms/term_collection"
24
24
  autoload :TermDefinition, "#{__dir__}/terms/term_definition"
25
25
  autoload :TermExpression, "#{__dir__}/terms/term_expression"
26
+ autoload :TermNameElement, "#{__dir__}/terms/term_name_element"
26
27
  autoload :TermSource, "#{__dir__}/terms/term_source"
27
28
  autoload :TermSourceStatus, "#{__dir__}/terms/term_source_status"
28
29
  autoload :TermSourceType, "#{__dir__}/terms/term_source_type"
@@ -0,0 +1,18 @@
1
+ require "metanorma/document"
2
+ require "metanorma/iso_document"
3
+ require "metanorma/ogc_document"
4
+ require "metanorma/html"
5
+
6
+ # ISO
7
+ iso_xml = File.read("spec/fixtures/iso/is/document-en.presentation.xml")
8
+ iso_doc = Metanorma::IsoDocument::Root.from_xml(iso_xml)
9
+ iso_output = Metanorma::Html::Generator.generate(iso_doc)
10
+ File.write("/tmp/iso_output.html", iso_output)
11
+ puts "ISO: #{iso_output.size} chars written to /tmp/iso_output.html"
12
+
13
+ # OGC
14
+ ogc_xml = File.read("spec/fixtures/ogc/00-027/document.presentation.xml")
15
+ ogc_doc = Metanorma::OgcDocument::Root.from_xml(ogc_xml)
16
+ ogc_output = Metanorma::Html::Generator.generate(ogc_doc)
17
+ File.write("/tmp/ogc_output.html", ogc_output)
18
+ puts "OGC: #{ogc_output.size} chars written to /tmp/ogc_output.html"