metanorma-document 0.2.12 → 0.2.13

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 (391) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +21 -0
  3. data/.github/workflows/release.yml +25 -0
  4. data/.github/workflows/roundtrip-samples.yml +132 -0
  5. data/.gitignore +19 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +22 -0
  8. data/.rubocop_todo.yml +66 -164
  9. data/CHANGELOG.md +1 -0
  10. data/Gemfile +32 -0
  11. data/README.adoc +0 -144
  12. data/Rakefile +2 -14
  13. data/bin/console +15 -0
  14. data/bin/setup +8 -0
  15. data/data/javascripts/components/mn-lightbox.js +2 -18
  16. data/data/javascripts/components/mn-shortcuts.js +0 -2
  17. data/data/javascripts/core/mn-navigation.js +0 -8
  18. data/data/javascripts/core/mn-theme.js +9 -9
  19. data/data/logos/pdfa-logo.svg +94 -31
  20. data/data/stylesheets/base/_layout.css +0 -3
  21. data/data/stylesheets/base/_reset.css +3 -3
  22. data/data/stylesheets/base/_typography.css +5 -0
  23. data/data/stylesheets/components/bibliography.css +3 -3
  24. data/data/stylesheets/components/cover.css +1 -3
  25. data/data/stylesheets/components/figure.css +1 -13
  26. data/data/stylesheets/components/footnote.css +5 -65
  27. data/data/stylesheets/components/formula.css +0 -44
  28. data/data/stylesheets/components/header.css +2 -17
  29. data/data/stylesheets/components/inline.css +1 -1
  30. data/data/stylesheets/components/table.css +2 -15
  31. data/data/stylesheets/components/term.css +1 -0
  32. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +14 -0
  33. data/lib/metanorma/bipm_document/metadata.rb +1 -1
  34. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +65 -0
  35. data/lib/metanorma/document/components/ancillary_blocks.rb +0 -4
  36. data/lib/metanorma/document/components/bib_data/bib_data.rb +0 -7
  37. data/lib/metanorma/document/components/blocks/requirement_model.rb +131 -0
  38. data/lib/metanorma/document/components/blocks.rb +7 -8
  39. data/lib/metanorma/document/components/id_elements/image.rb +0 -2
  40. data/lib/metanorma/document/components/inline/asciimath_element.rb +0 -2
  41. data/lib/metanorma/document/components/inline/attribution_element.rb +0 -2
  42. data/lib/metanorma/document/components/inline/bcp14_element.rb +0 -2
  43. data/lib/metanorma/document/components/inline/biblio_tag_element.rb +0 -2
  44. data/lib/metanorma/document/components/inline/br_element.rb +0 -2
  45. data/lib/metanorma/document/components/inline/comma_element.rb +0 -2
  46. data/lib/metanorma/document/components/inline/concept_element.rb +0 -2
  47. data/lib/metanorma/document/components/inline/display_text_element.rb +0 -2
  48. data/lib/metanorma/document/components/inline/em_raw_element.rb +0 -2
  49. data/lib/metanorma/document/components/inline/enum_comma_element.rb +0 -2
  50. data/lib/metanorma/document/components/inline/eref_element.rb +0 -2
  51. data/lib/metanorma/document/components/inline/fmt_admitted_element.rb +0 -4
  52. data/lib/metanorma/document/components/inline/fmt_annotation_body_element.rb +0 -4
  53. data/lib/metanorma/document/components/inline/fmt_annotation_end_element.rb +0 -4
  54. data/lib/metanorma/document/components/inline/fmt_annotation_start_element.rb +0 -4
  55. data/lib/metanorma/document/components/inline/fmt_concept_element.rb +0 -4
  56. data/lib/metanorma/document/components/inline/fmt_definition_element.rb +0 -4
  57. data/lib/metanorma/document/components/inline/fmt_fn_body_element.rb +0 -4
  58. data/lib/metanorma/document/components/inline/fmt_fn_label_element.rb +0 -4
  59. data/lib/metanorma/document/components/inline/fmt_footnote_container_element.rb +0 -4
  60. data/lib/metanorma/document/components/inline/fmt_identifier_element.rb +0 -4
  61. data/lib/metanorma/document/components/inline/fmt_name_element.rb +0 -4
  62. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +0 -4
  63. data/lib/metanorma/document/components/inline/fmt_sourcecode_element.rb +0 -4
  64. data/lib/metanorma/document/components/inline/fmt_stem_element.rb +0 -10
  65. data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +0 -4
  66. data/lib/metanorma/document/components/inline/fmt_title_element.rb +0 -4
  67. data/lib/metanorma/document/components/inline/fmt_xref_element.rb +0 -4
  68. data/lib/metanorma/document/components/inline/fmt_xref_label_element.rb +0 -4
  69. data/lib/metanorma/document/components/inline/fn_element.rb +0 -2
  70. data/lib/metanorma/document/components/inline/link_element.rb +0 -2
  71. data/lib/metanorma/document/components/inline/localized_string_element.rb +0 -2
  72. data/lib/metanorma/document/components/inline/localized_strings_element.rb +0 -2
  73. data/lib/metanorma/document/components/inline/math_element.rb +0 -2
  74. data/lib/metanorma/document/components/inline/name_with_id_element.rb +0 -4
  75. data/lib/metanorma/document/components/inline/semx_child_element.rb +0 -2
  76. data/lib/metanorma/document/components/inline/semx_element.rb +1 -13
  77. data/lib/metanorma/document/components/inline/small_cap_element.rb +0 -2
  78. data/lib/metanorma/document/components/inline/span_element.rb +15 -10
  79. data/lib/metanorma/document/components/inline/stem_inline_element.rb +1 -7
  80. data/lib/metanorma/document/components/inline/strong_raw_element.rb +0 -2
  81. data/lib/metanorma/document/components/inline/sub_element.rb +0 -2
  82. data/lib/metanorma/document/components/inline/sup_element.rb +0 -2
  83. data/lib/metanorma/document/components/inline/tab_element.rb +0 -2
  84. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +0 -4
  85. data/lib/metanorma/document/components/inline/tt_element.rb +0 -2
  86. data/lib/metanorma/document/components/inline/variant_title_element.rb +0 -2
  87. data/lib/metanorma/document/components/inline/xref_element.rb +0 -10
  88. data/lib/metanorma/document/components/inline.rb +0 -12
  89. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +29 -0
  90. data/lib/metanorma/document/components/multi_paragraph.rb +0 -2
  91. data/lib/metanorma/document/components/reference_elements/source_element.rb +31 -0
  92. data/lib/metanorma/document/components/reference_elements.rb +2 -2
  93. data/lib/metanorma/document/components/tables/table_block.rb +22 -0
  94. data/lib/metanorma/document/components/tables/table_section.rb +25 -0
  95. data/lib/metanorma/document/components/tables.rb +3 -5
  96. data/lib/metanorma/document/relaton/address.rb +27 -0
  97. data/lib/metanorma/document/relaton/bib_item_locality.rb +12 -3
  98. data/lib/metanorma/document/relaton/copyright_association.rb +10 -0
  99. data/lib/metanorma/document/relaton/edition.rb +7 -4
  100. data/lib/metanorma/document/relaton/organization.rb +14 -0
  101. data/lib/metanorma/document/relaton/phone.rb +9 -3
  102. data/lib/metanorma/document/relaton/place_type.rb +13 -0
  103. data/lib/metanorma/document/relaton/price_type.rb +9 -3
  104. data/lib/metanorma/document/relaton.rb +1 -6
  105. data/lib/metanorma/document/version.rb +1 -1
  106. data/lib/metanorma/document.rb +0 -2
  107. data/lib/metanorma/html/asset_pipeline.rb +0 -1
  108. data/lib/metanorma/html/base_renderer.rb +1008 -261
  109. data/lib/metanorma/html/bipm_renderer.rb +144 -15
  110. data/lib/metanorma/html/cc_renderer.rb +45 -1
  111. data/lib/metanorma/html/component/base.rb +7 -2
  112. data/lib/metanorma/html/component/index_section.rb +43 -41
  113. data/lib/metanorma/html/drops/admonition_drop.rb +4 -1
  114. data/lib/metanorma/html/drops/block_element_drop.rb +2 -7
  115. data/lib/metanorma/html/drops/example_drop.rb +4 -1
  116. data/lib/metanorma/html/drops/figure_drop.rb +22 -31
  117. data/lib/metanorma/html/drops/footnote_drop.rb +1 -1
  118. data/lib/metanorma/html/drops/formula_drop.rb +16 -45
  119. data/lib/metanorma/html/drops/note_drop.rb +7 -9
  120. data/lib/metanorma/html/drops/sourcecode_drop.rb +5 -12
  121. data/lib/metanorma/html/drops.rb +0 -2
  122. data/lib/metanorma/html/generator.rb +2 -2
  123. data/lib/metanorma/html/icc_renderer.rb +39 -0
  124. data/lib/metanorma/html/iec_renderer.rb +44 -1
  125. data/lib/metanorma/html/ieee_renderer.rb +45 -1
  126. data/lib/metanorma/html/ietf_renderer.rb +48 -1
  127. data/lib/metanorma/html/iho_renderer.rb +46 -1
  128. data/lib/metanorma/html/iso_renderer.rb +343 -290
  129. data/lib/metanorma/html/itu_renderer.rb +45 -1
  130. data/lib/metanorma/html/ogc_renderer.rb +76 -15
  131. data/lib/metanorma/html/oiml_renderer.rb +38 -18
  132. data/lib/metanorma/html/pdfa_renderer.rb +39 -0
  133. data/lib/metanorma/html/ribose_renderer.rb +45 -1
  134. data/lib/metanorma/html/standard_renderer.rb +229 -341
  135. data/lib/metanorma/html/templates/_footnotes.html.liquid +6 -6
  136. data/lib/metanorma/html/templates/_formula.html.liquid +1 -1
  137. data/lib/metanorma/html/templates/_header.html.liquid +1 -1
  138. data/lib/metanorma/html/templates/_iso_cover.html.liquid +1 -1
  139. data/lib/metanorma/html/templates/document.html.liquid +0 -4
  140. data/lib/metanorma/html/theme.rb +107 -180
  141. data/lib/metanorma/html.rb +3 -14
  142. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +25 -0
  143. data/lib/metanorma/ietf_document/metadata.rb +0 -2
  144. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +48 -0
  145. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +72 -0
  146. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +30 -0
  147. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +1 -4
  148. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +17 -0
  149. data/lib/metanorma/iso_document/metadata/title_collection.rb +0 -1
  150. data/lib/metanorma/iso_document/metadata.rb +4 -9
  151. data/lib/metanorma/iso_document/terms/iso_term.rb +13 -0
  152. data/lib/metanorma/iso_document/terms.rb +0 -1
  153. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +37 -0
  154. data/lib/metanorma/itu_document/metadata.rb +4 -3
  155. data/lib/metanorma/standard_document/block_attributes.rb +9 -5
  156. data/lib/metanorma/standard_document/blocks/block_source.rb +23 -0
  157. data/lib/metanorma/standard_document/blocks.rb +1 -1
  158. data/lib/metanorma/standard_document/terms/term_expression.rb +31 -0
  159. data/lib/metanorma/standard_document/terms.rb +0 -1
  160. data/metanorma-document.gemspec +35 -0
  161. metadata +13 -262
  162. data/CLAUDE.md +0 -26
  163. data/TODO.finalize/01-split-multi-class-files.md +0 -8
  164. data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +0 -6
  165. data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +0 -11
  166. data/TODO.finalize/04-theme-per-flavor-config-driven.md +0 -9
  167. data/TODO.finalize/05-migrate-all-html-to-liquid.md +0 -16
  168. data/TODO.finalize/06-integrate-pubid-library.md +0 -16
  169. data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +0 -39
  170. data/TODO.finalize/08-refactor-renderer-architecture.md +0 -25
  171. data/TODO.finalize/09-eliminate-code-smells.md +0 -14
  172. data/TODO.finalize/10-comprehensive-spec-coverage.md +0 -24
  173. data/TODO.finalize/11-config-driven-flavor-metadata.md +0 -20
  174. data/TODO.finalize/12-add-frozen-string-literal.md +0 -6
  175. data/TODO.finalize/13-extract-composition-from-god-class.md +0 -96
  176. data/TODO.finalize/14-config-driven-section-ordering.md +0 -31
  177. data/TODO.finalize/15-theme-directories-per-flavor.md +0 -46
  178. data/TODO.finalize/16-theme-lutaml-model-schema.md +0 -44
  179. data/data/javascripts/components/mn-footnotes.js +0 -68
  180. data/data/logos/oiml-logo-full-dark.svg +0 -1
  181. data/data/logos/oiml-logo-full-light.svg +0 -1
  182. data/data/logos/oiml-logo-icon-dark.svg +0 -1
  183. data/data/logos/oiml-logo-icon-light.svg +0 -1
  184. data/data/logos/oiml-logo.svg +0 -1
  185. data/data/themes/bipm.yaml +0 -60
  186. data/data/themes/cc.yaml +0 -43
  187. data/data/themes/icc.yaml +0 -39
  188. data/data/themes/iec.yaml +0 -44
  189. data/data/themes/ieee.yaml +0 -43
  190. data/data/themes/ietf.yaml +0 -45
  191. data/data/themes/iho.yaml +0 -46
  192. data/data/themes/iso.yaml +0 -40
  193. data/data/themes/itu.yaml +0 -45
  194. data/data/themes/ogc.yaml +0 -51
  195. data/data/themes/oiml.yaml +0 -56
  196. data/data/themes/pdfa.yaml +0 -44
  197. data/data/themes/ribose.yaml +0 -43
  198. data/exe/metanorma-document +0 -11
  199. data/frontend/e2e/sample-html.test.ts +0 -256
  200. data/frontend/index.html +0 -12
  201. data/frontend/package-lock.json +0 -4725
  202. data/frontend/package.json +0 -32
  203. data/frontend/postcss.config.js +0 -6
  204. data/frontend/src/App.vue +0 -79
  205. data/frontend/src/app.ts +0 -21
  206. data/frontend/src/components/AppSidebar.vue +0 -77
  207. data/frontend/src/components/DocumentReader.vue +0 -180
  208. data/frontend/src/components/MirrorRenderer.vue +0 -23
  209. data/frontend/src/components/ReadingProgressBar.vue +0 -29
  210. data/frontend/src/components/TextRenderer.vue +0 -131
  211. data/frontend/src/components/TocItem.vue +0 -57
  212. data/frontend/src/components/TopBar.vue +0 -49
  213. data/frontend/src/components/__tests__/MirrorRenderer.test.ts +0 -178
  214. data/frontend/src/components/blocks/AdmonitionBlock.vue +0 -74
  215. data/frontend/src/components/blocks/ClauseBlock.vue +0 -53
  216. data/frontend/src/components/blocks/ExampleBlock.vue +0 -21
  217. data/frontend/src/components/blocks/FallbackBlock.vue +0 -18
  218. data/frontend/src/components/blocks/FigureBlock.vue +0 -26
  219. data/frontend/src/components/blocks/FootnotesBlock.vue +0 -25
  220. data/frontend/src/components/blocks/ListBlocks.vue +0 -62
  221. data/frontend/src/components/blocks/NoteBlock.vue +0 -21
  222. data/frontend/src/components/blocks/ParagraphBlock.vue +0 -25
  223. data/frontend/src/components/blocks/QuoteBlock.vue +0 -25
  224. data/frontend/src/components/blocks/ReviewBlock.vue +0 -39
  225. data/frontend/src/components/blocks/SourcecodeBlock.vue +0 -52
  226. data/frontend/src/components/blocks/TableBlock.vue +0 -48
  227. data/frontend/src/components/blocks/index.ts +0 -36
  228. data/frontend/src/stores/__tests__/documentStore.fixture.test.ts +0 -272
  229. data/frontend/src/stores/__tests__/documentStore.test.ts +0 -143
  230. data/frontend/src/stores/__tests__/ebookStore.test.ts +0 -145
  231. data/frontend/src/stores/__tests__/uiStore.test.ts +0 -42
  232. data/frontend/src/stores/documentStore.ts +0 -153
  233. data/frontend/src/stores/ebookStore.ts +0 -179
  234. data/frontend/src/stores/uiStore.ts +0 -32
  235. data/frontend/src/styles.css +0 -156
  236. data/frontend/src/types/__tests__/rendering-contract.test.ts +0 -172
  237. data/frontend/src/types/rendering-contract.ts +0 -209
  238. data/frontend/src/utils/__tests__/typeMetadata.test.ts +0 -102
  239. data/frontend/src/utils/typeMetadata.ts +0 -121
  240. data/frontend/tailwind.config.js +0 -18
  241. data/frontend/test/fixtures/iso-document.json +0 -271
  242. data/frontend/tmp/debug_e2e.cjs +0 -46
  243. data/frontend/tsconfig.json +0 -25
  244. data/frontend/tsconfig.node.json +0 -11
  245. data/frontend/vite.config.ts +0 -37
  246. data/frontend/vitest.e2e.config.ts +0 -9
  247. data/lib/metanorma/bipm_document/metadata/depiction_element.rb +0 -18
  248. data/lib/metanorma/document/cli.rb +0 -116
  249. data/lib/metanorma/document/components/ancillary_blocks/callout_annotation.rb +0 -27
  250. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +0 -18
  251. data/lib/metanorma/document/components/blocks/classification_value.rb +0 -21
  252. data/lib/metanorma/document/components/blocks/permission_model.rb +0 -28
  253. data/lib/metanorma/document/components/blocks/recommendation_model.rb +0 -28
  254. data/lib/metanorma/document/components/blocks/requirement_base.rb +0 -30
  255. data/lib/metanorma/document/components/blocks/requirement_classification.rb +0 -20
  256. data/lib/metanorma/document/components/blocks/requirement_description.rb +0 -43
  257. data/lib/metanorma/document/components/blocks/requirement_inherit.rb +0 -24
  258. data/lib/metanorma/document/components/inline/location_element.rb +0 -24
  259. data/lib/metanorma/document/components/inline/rendered_display.rb +0 -23
  260. data/lib/metanorma/document/components/inline/rendered_math_element.rb +0 -21
  261. data/lib/metanorma/document/components/inline/semantic_content.rb +0 -51
  262. data/lib/metanorma/document/components/inline/semantic_math_element.rb +0 -20
  263. data/lib/metanorma/document/components/inline/vocabulary.rb +0 -184
  264. data/lib/metanorma/document/components/multi_paragraph/quote_author_element.rb +0 -20
  265. data/lib/metanorma/document/components/reference_elements/source_modification.rb +0 -21
  266. data/lib/metanorma/document/components/reference_elements/source_origin.rb +0 -28
  267. data/lib/metanorma/document/components/tables/col_element.rb +0 -18
  268. data/lib/metanorma/document/components/tables/col_group_element.rb +0 -18
  269. data/lib/metanorma/document/components/tables/table_body_section.rb +0 -16
  270. data/lib/metanorma/document/components/tables/table_foot_section.rb +0 -16
  271. data/lib/metanorma/document/components/tables/table_head_section.rb +0 -16
  272. data/lib/metanorma/document/relaton/copyright_owner.rb +0 -16
  273. data/lib/metanorma/document/relaton/formatted_address.rb +0 -29
  274. data/lib/metanorma/document/relaton/logo_element.rb +0 -18
  275. data/lib/metanorma/document/relaton/region_element.rb +0 -18
  276. data/lib/metanorma/html/drops/biblio_entry_drop.rb +0 -50
  277. data/lib/metanorma/html/renderers/block_renderer.rb +0 -372
  278. data/lib/metanorma/html/renderers/inline_renderer.rb +0 -655
  279. data/lib/metanorma/html/renderers/pubid_renderer.rb +0 -69
  280. data/lib/metanorma/html/renderers/section_renderer.rb +0 -193
  281. data/lib/metanorma/html/renderers.rb +0 -8
  282. data/lib/metanorma/html/templates/_audio.html.liquid +0 -1
  283. data/lib/metanorma/html/templates/_biblio_entry.html.liquid +0 -1
  284. data/lib/metanorma/html/templates/_bipm_cover.html.liquid +0 -27
  285. data/lib/metanorma/html/templates/_boilerplate.html.liquid +0 -1
  286. data/lib/metanorma/html/templates/_bookmark.html.liquid +0 -1
  287. data/lib/metanorma/html/templates/_br.html.liquid +0 -1
  288. data/lib/metanorma/html/templates/_definition_list.html.liquid +0 -6
  289. data/lib/metanorma/html/templates/_element.html.liquid +0 -1
  290. data/lib/metanorma/html/templates/_fn_marker.html.liquid +0 -1
  291. data/lib/metanorma/html/templates/_heading.html.liquid +0 -1
  292. data/lib/metanorma/html/templates/_image.html.liquid +0 -1
  293. data/lib/metanorma/html/templates/_inline_span.html.liquid +0 -1
  294. data/lib/metanorma/html/templates/_link.html.liquid +0 -1
  295. data/lib/metanorma/html/templates/_list.html.liquid +0 -3
  296. data/lib/metanorma/html/templates/_list_item.html.liquid +0 -1
  297. data/lib/metanorma/html/templates/_main_content.html.liquid +0 -1
  298. data/lib/metanorma/html/templates/_math_container.html.liquid +0 -1
  299. data/lib/metanorma/html/templates/_paragraph.html.liquid +0 -1
  300. data/lib/metanorma/html/templates/_prefatory_section.html.liquid +0 -1
  301. data/lib/metanorma/html/templates/_pubid_identifier.html.liquid +0 -1
  302. data/lib/metanorma/html/templates/_quote.html.liquid +0 -4
  303. data/lib/metanorma/html/templates/_ref_date.html.liquid +0 -1
  304. data/lib/metanorma/html/templates/_ref_title.html.liquid +0 -1
  305. data/lib/metanorma/html/templates/_section.html.liquid +0 -5
  306. data/lib/metanorma/html/templates/_standard_cover.html.liquid +0 -31
  307. data/lib/metanorma/html/templates/_standard_doc_title.html.liquid +0 -3
  308. data/lib/metanorma/html/templates/_stem_span.html.liquid +0 -1
  309. data/lib/metanorma/html/templates/_table.html.liquid +0 -9
  310. data/lib/metanorma/html/templates/_term_domain.html.liquid +0 -1
  311. data/lib/metanorma/html/templates/_term_example.html.liquid +0 -1
  312. data/lib/metanorma/html/templates/_term_note.html.liquid +0 -1
  313. data/lib/metanorma/html/templates/_term_number.html.liquid +0 -1
  314. data/lib/metanorma/html/templates/_term_source.html.liquid +0 -1
  315. data/lib/metanorma/html/templates/_term_text_note.html.liquid +0 -1
  316. data/lib/metanorma/html/templates/_video.html.liquid +0 -1
  317. data/lib/metanorma/html/templates/_wrapped_preface.html.liquid +0 -1
  318. data/lib/metanorma/ietf_document/metadata/pi_settings.rb +0 -32
  319. data/lib/metanorma/iso_document/metadata/doctype_element.rb +0 -20
  320. data/lib/metanorma/iso_document/metadata/language_element.rb +0 -18
  321. data/lib/metanorma/iso_document/metadata/project_number.rb +0 -22
  322. data/lib/metanorma/iso_document/metadata/script_element.rb +0 -18
  323. data/lib/metanorma/iso_document/metadata/stage_element.rb +0 -26
  324. data/lib/metanorma/iso_document/metadata/stagename_element.rb +0 -18
  325. data/lib/metanorma/iso_document/terms/term_domain_element.rb +0 -18
  326. data/lib/metanorma/itu_document/metadata/meeting_date.rb +0 -18
  327. data/lib/metanorma/itu_document/metadata/meeting_element.rb +0 -18
  328. data/lib/metanorma/itu_document/metadata/study_period.rb +0 -18
  329. data/lib/metanorma/mirror/default_registry.rb +0 -170
  330. data/lib/metanorma/mirror/handler_registry.rb +0 -60
  331. data/lib/metanorma/mirror/handler_result.rb +0 -37
  332. data/lib/metanorma/mirror/handlers/admonition.rb +0 -18
  333. data/lib/metanorma/mirror/handlers/example.rb +0 -21
  334. data/lib/metanorma/mirror/handlers/figure.rb +0 -53
  335. data/lib/metanorma/mirror/handlers/formula.rb +0 -35
  336. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +0 -159
  337. data/lib/metanorma/mirror/handlers/inline/text_extractor.rb +0 -116
  338. data/lib/metanorma/mirror/handlers/inline.rb +0 -225
  339. data/lib/metanorma/mirror/handlers/list.rb +0 -110
  340. data/lib/metanorma/mirror/handlers/note.rb +0 -26
  341. data/lib/metanorma/mirror/handlers/paragraph.rb +0 -19
  342. data/lib/metanorma/mirror/handlers/quote.rb +0 -16
  343. data/lib/metanorma/mirror/handlers/review.rb +0 -19
  344. data/lib/metanorma/mirror/handlers/section.rb +0 -149
  345. data/lib/metanorma/mirror/handlers/sourcecode.rb +0 -27
  346. data/lib/metanorma/mirror/handlers/structural.rb +0 -68
  347. data/lib/metanorma/mirror/handlers/table.rb +0 -81
  348. data/lib/metanorma/mirror/handlers/term.rb +0 -100
  349. data/lib/metanorma/mirror/handlers.rb +0 -60
  350. data/lib/metanorma/mirror/id_strategy/positional.rb +0 -166
  351. data/lib/metanorma/mirror/id_strategy/preserve.rb +0 -12
  352. data/lib/metanorma/mirror/id_strategy.rb +0 -34
  353. data/lib/metanorma/mirror/math_util.rb +0 -53
  354. data/lib/metanorma/mirror/metadata.rb +0 -37
  355. data/lib/metanorma/mirror/metanorma_to_mirror.rb +0 -101
  356. data/lib/metanorma/mirror/model/container.rb +0 -47
  357. data/lib/metanorma/mirror/model/factory.rb +0 -52
  358. data/lib/metanorma/mirror/model/guide.rb +0 -25
  359. data/lib/metanorma/mirror/model/leaf.rb +0 -17
  360. data/lib/metanorma/mirror/model/mark.rb +0 -53
  361. data/lib/metanorma/mirror/model/node.rb +0 -47
  362. data/lib/metanorma/mirror/model/soft_break.rb +0 -33
  363. data/lib/metanorma/mirror/model/text.rb +0 -34
  364. data/lib/metanorma/mirror/model.rb +0 -16
  365. data/lib/metanorma/mirror/output/builder.rb +0 -39
  366. data/lib/metanorma/mirror/output/formats/base_format.rb +0 -90
  367. data/lib/metanorma/mirror/output/formats/inline_format.rb +0 -81
  368. data/lib/metanorma/mirror/output/formats.rb +0 -53
  369. data/lib/metanorma/mirror/output/html_renderer.rb +0 -95
  370. data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +0 -178
  371. data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +0 -61
  372. data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +0 -96
  373. data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +0 -64
  374. data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +0 -129
  375. data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +0 -80
  376. data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +0 -87
  377. data/lib/metanorma/mirror/output/html_renderers.rb +0 -76
  378. data/lib/metanorma/mirror/output/pipeline.rb +0 -92
  379. data/lib/metanorma/mirror/output/pipeline_context.rb +0 -22
  380. data/lib/metanorma/mirror/output.rb +0 -14
  381. data/lib/metanorma/mirror/rewriter.rb +0 -121
  382. data/lib/metanorma/mirror/safe_attr.rb +0 -16
  383. data/lib/metanorma/mirror/serialization/json_serializer.rb +0 -25
  384. data/lib/metanorma/mirror/serialization/yaml_serializer.rb +0 -20
  385. data/lib/metanorma/mirror/serialization.rb +0 -10
  386. data/lib/metanorma/mirror/transformer.rb +0 -22
  387. data/lib/metanorma/mirror.rb +0 -32
  388. data/lib/metanorma/standard_document/annotation.rb +0 -37
  389. data/lib/metanorma/standard_document/blocks/source_origin_element.rb +0 -23
  390. data/lib/metanorma/standard_document/terms/term_name_element.rb +0 -29
  391. data/script/render_both.rb +0 -18
@@ -1,11 +1,11 @@
1
1
  <section class="footnotes-section" aria-label="Footnotes">
2
2
  <h2 class="footnotes-title">Footnotes</h2>
3
- <div class="footnotes">
3
+ <ol class="footnotes">
4
4
  {% for entry in footnotes %}
5
- <div id="footnote-{{ entry.number }}" class="footnote">
6
- <a href="#fnref-{{ entry.number }}" class="footnote-backref" aria-label="Back to reference">&#x21A9;</a><span class="footnote-label">{{ entry.label }}</span>
7
- {{ entry.content_html }}
8
- </div>
5
+ <li id="footnote-{{ entry.number }}" class="footnote">
6
+ <a href="#fnref-{{ entry.number }}" class="footnote-backref">
7
+ <sup>{{ entry.reference | escape }}</sup></a> {{ entry.content_html }}
8
+ </li>
9
9
  {% endfor %}
10
- </div>
10
+ </ol>
11
11
  </section>
@@ -1,6 +1,6 @@
1
1
  <div{% if block.id %} id="{{ block.id }}"{% endif %} class="{{ block.css_class }}">
2
2
  {{ block.stem_html }}
3
- {% if block.where_label %}<p class="formula-where">where,</p>{% endif %}
3
+ {% if block.where_html %}<p class="formula-where">where</p>{% endif %}
4
4
  {{ block.where_html }}
5
5
  {% if block.number_html %}<span class="formula-number">{{ block.number_html }}</span>{% endif %}
6
6
  </div>
@@ -12,7 +12,7 @@
12
12
  </button>
13
13
  <div class="header-settings">
14
14
  <button class="reader-btn settings-toggle" id="settings-toggle" aria-label="Reader settings" title="Settings">
15
- <svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.84 1.804A1 1 0 0 1 8.82 1h2.36a1 1 0 0 1 .98.804l.331 1.652a6.994 6.994 0 0 1 1.929 1.115l1.598-.54a1 1 0 0 1 1.186.447l1.18 2.044a1 1 0 0 1-.205 1.251l-1.267 1.113a7.047 7.047 0 0 1 0 2.228l1.267 1.113a1 1 0 0 1 .206 1.25l-1.18 2.045a1 1 0 0 1-1.187.447l-1.598-.54a6.994 6.994 0 0 1-1.929 1.115l-.33 1.652a1 1 0 0 1-.98.804H8.82a1 1 0 0 1-.98-.804l-.331-1.652a6.994 6.994 0 0 1-1.929-1.115l-1.598.54a1 1 0 0 1-1.186-.447l-1.18-2.044a1 1 0 0 1 .205-1.251l1.267-1.114a7.05 7.05 0 0 1 0-2.227L1.821 7.773a1 1 0 0 1-.206-1.25l1.18-2.045a1 1 0 0 1 1.187-.447l1.598.54A6.994 6.994 0 0 1 7.51 3.456l.33-1.652ZM10 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" clip-rule="evenodd"/></svg>
15
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><circle cx="8" cy="8" r="1.5"/><path d="M8 1v2M8 13v2M1 8h2M13 8h2M3.05 3.05l1.41 1.41M11.54 11.54l1.41 1.41M3.05 12.95l1.41-1.41M11.54 4.46l1.41-1.41"/></svg>
16
16
  </button>
17
17
  <div class="settings-dropdown" id="settings-dropdown">
18
18
  <button class="reader-btn font-decrease" id="font-decrease" aria-label="Decrease font size" title="Smaller text">
@@ -4,7 +4,7 @@
4
4
  {% if publisher_logos %}
5
5
  <div class="cover-publishers">
6
6
  {% for logo in publisher_logos %}
7
- {{ logo }}
7
+ <span class="cover-logo">{{ logo }}</span>
8
8
  {% endfor %}
9
9
  </div>
10
10
  {% endif %}
@@ -35,10 +35,6 @@
35
35
  </div>
36
36
  <button class="toc-hamburger" id="toc-hamburger" aria-label="Open table of contents">&#9776;</button>
37
37
  <button class="back-to-top" id="back-to-top" aria-label="Back to top"><svg viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="3,8 6,4 9,8"/></svg></button>
38
- <div class="fn-annotation-pane" id="fn-annotation-pane">
39
- <div class="fn-annotation-header"><span class="fn-annotation-label" id="fn-annotation-label"></span></div>
40
- <div class="fn-annotation-body" id="fn-annotation-content"></div>
41
- </div>
42
38
  {{ scripts }}
43
39
  </body>
44
40
  </html>
@@ -2,186 +2,113 @@
2
2
 
3
3
  module Metanorma
4
4
  module Html
5
- class Theme < Lutaml::Model::Serializable
6
- THEMES_DIR = File.join(File.dirname(__FILE__), "..", "..", "..", "data",
7
- "themes")
8
- TEMPLATES_ROOT = File.join(File.dirname(__FILE__), "templates")
9
-
10
- # --- Primary palette ---
11
- attribute :primary, :string, default: -> { "#28388A" }
12
- attribute :accent, :string, default: -> { "#9C60C1" }
13
- attribute :gradient, :string, default: -> {
14
- "linear-gradient(135deg, #28388A 0%, #3a4ba0 50%, #9C60C1 100%)"
15
- }
16
- attribute :primary_light, :string, default: -> { "#eef0f8" }
17
- attribute :accent_light, :string, default: -> { "#f5eef9" }
18
- attribute :primary_dark, :string, default: -> { "#1c2660" }
19
- attribute :accent_deep, :string
20
- attribute :warm, :string
21
- attribute :warm_light, :string
22
-
23
- # --- Text & backgrounds ---
24
- attribute :text_color, :string, default: -> { "#1a1a2e" }
25
- attribute :text_light, :string, default: -> { "#4a4a6a" }
26
- attribute :text_muted, :string, default: -> { "#8888a0" }
27
- attribute :bg, :string, default: -> { "#fff" }
28
- attribute :bg_light, :string, default: -> { "#fafbff" }
29
- attribute :border, :string, default: -> { "#e0e2ee" }
30
- attribute :sidebar_bg, :string, default: -> { "#f7f7fc" }
31
-
32
- # --- Typography ---
33
- attribute :font_body, :string, default: -> {
34
- '"Source Serif 4", "Noto Serif", Georgia, "Times New Roman", serif'
35
- }
36
- attribute :font_sans, :string, default: -> {
37
- '"DM Sans", "Helvetica Neue", Arial, sans-serif'
38
- }
39
- attribute :font_mono, :string, default: -> {
40
- '"JetBrains Mono", "Fira Code", "Courier New", monospace'
41
- }
42
- attribute :font_url, :string, default: -> { "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&family=Source+Serif+4:ital,opsz,wght@0,8..60,300..700;1,8..60,300..700&family=JetBrains+Mono:wght@400;500&display=swap" }
43
-
44
- # --- Layout constants ---
45
- attribute :content_max_width, :string, default: -> { "50em" }
46
- attribute :sidebar_width, :string, default: -> { "260px" }
47
- attribute :header_height, :string, default: -> { "52px" }
48
- attribute :radius_sm, :string, default: -> { "4px" }
49
- attribute :radius_md, :string, default: -> { "8px" }
50
- attribute :shadow_sm, :string, default: -> {
51
- "0 1px 3px rgba(40,56,138,0.08)"
52
- }
53
- attribute :shadow_md, :string, default: -> {
54
- "0 4px 12px rgba(40,56,138,0.12)"
55
- }
56
-
57
- # --- Block element colors ---
58
- attribute :note_color, :string, default: -> { "var(--mn-accent)" }
59
- attribute :note_bg, :string, default: -> { "var(--mn-accent-light)" }
60
- attribute :note_border, :string, default: -> { "var(--mn-accent)" }
61
- attribute :example_color, :string, default: -> { "#0d9488" }
62
- attribute :example_bg, :string, default: -> { "rgba(232, 248, 245, 0.6)" }
63
- attribute :example_border, :string, default: -> { "#0d9488" }
64
- attribute :admonition_color, :string, default: -> { "#b8860b" }
65
- attribute :admonition_bg, :string, default: -> {
66
- "rgba(255, 252, 245, 0.8)"
67
- }
68
- attribute :admonition_border, :string, default: -> { "#e8a820" }
69
-
70
- # --- Footer & cover ---
71
- attribute :footer_border_color, :string
72
- attribute :cover_separator_color, :string
73
-
74
- # --- Computed CSS (gradients) ---
75
- attribute :header_background, :string
76
- attribute :cover_background, :string
77
- attribute :cover_after_bg, :string
78
- attribute :cover_before_bg, :string
79
- attribute :progress_bar_color, :string
80
-
81
- # --- Dark mode overrides ---
82
- attribute :dark_bg, :string, default: -> { "#0f1118" }
83
- attribute :dark_bg_light, :string, default: -> { "#1a1d2a" }
84
- attribute :dark_border, :string, default: -> { "#2e3248" }
85
- attribute :dark_sidebar, :string, default: -> { "#141620" }
86
- attribute :dark_text, :string, default: -> { "#e2e6f0" }
87
- attribute :dark_text_light, :string, default: -> { "#c0c8dc" }
88
- attribute :dark_text_muted, :string, default: -> { "#96a0b8" }
89
- attribute :dark_primary_light, :string, default: -> { "#1e2140" }
90
- attribute :dark_accent_light, :string, default: -> { "#2a2040" }
91
- attribute :dark_note_bg, :string
92
- attribute :dark_example_bg, :string
93
- attribute :dark_admonition_bg, :string
94
- attribute :dark_code_bg, :string
95
- attribute :dark_code_border, :string
96
-
97
- # --- Arbitrary per-element CSS overrides ---
98
- attribute :extra_css, :string
99
-
100
- # --- Publisher metadata ---
101
- attribute :publishers, :string, collection: true, default: -> { [] }
102
- attribute :publisher_name, :string
103
- attribute :logos_light, :hash, default: -> { {} }
104
- attribute :logos_dark, :hash, default: -> { {} }
105
- attribute :doctype_labels, :hash, default: -> { {} }
106
-
107
- # --- Document identifier formatting ---
108
- attribute :doc_id_strip_prefix, :string
109
-
110
- # --- Section ordering ---
111
- attribute :preface_order, :string, collection: true, default: -> {
112
- %w[foreword introduction abstract clause acknowledgements executivesummary]
113
- }
114
- attribute :clause_order, :string, collection: true, default: -> {
115
- %w[sections annex bibliography indexsect]
116
- }
117
- attribute :preface_wrap, :boolean, default: -> { false }
118
- attribute :toc_filter_types, :string, collection: true, default: -> { [] }
119
-
120
- # --- Non-YAML state (set programmatically) ---
121
- attr_accessor :theme_dir
122
-
123
- def self.load(flavor)
124
- dir_theme = File.join(THEMES_DIR, flavor.to_s, "theme.yaml")
125
- flat_theme = File.join(THEMES_DIR, "#{flavor}.yaml")
126
-
127
- if File.exist?(dir_theme)
128
- from_directory(dir_theme, flavor)
129
- elsif File.exist?(flat_theme)
130
- from_file(flat_theme)
131
- else
132
- new
133
- end
134
- end
135
-
136
- def self.from_file(path)
137
- from_yaml(File.read(path))
138
- end
139
-
140
- def self.from_directory(path, flavor)
141
- theme = from_yaml(File.read(path))
142
- theme.theme_dir = File.join(THEMES_DIR, flavor.to_s)
143
- theme
144
- end
145
-
146
- def logos
147
- logos_light
148
- end
149
-
150
- def theme_templates_dir
151
- return nil unless theme_dir
152
-
153
- dir = File.join(theme_dir, "templates")
154
- File.directory?(dir) ? dir : nil
155
- end
156
-
157
- def theme_assets_dir
158
- return nil unless theme_dir
159
-
160
- dir = File.join(theme_dir, "assets")
161
- File.directory?(dir) ? dir : nil
162
- end
163
-
164
- def theme_css_path
165
- return nil unless theme_dir
166
-
167
- path = File.join(theme_dir, "custom.css")
168
- File.exist?(path) ? path : nil
169
- end
170
-
171
- def resolve_template(template_name)
172
- if theme_templates_dir
173
- flavor_path = File.join(theme_templates_dir, template_name)
174
- return flavor_path if File.exist?(flavor_path)
175
- end
176
- File.join(TEMPLATES_ROOT, template_name)
177
- end
178
-
179
- def resolve_asset(filename)
180
- if theme_assets_dir
181
- flavor_path = File.join(theme_assets_dir, filename)
182
- return flavor_path if File.exist?(flavor_path)
183
- end
184
- nil
5
+ class Theme
6
+ # Primary palette
7
+ attr_accessor :primary, :accent, :gradient,
8
+ :primary_light, :accent_light, :primary_dark,
9
+ :accent_deep, :warm, :warm_light
10
+
11
+ # Text & backgrounds
12
+ attr_accessor :text_color, :text_light, :text_muted,
13
+ :bg, :bg_light, :border, :sidebar_bg
14
+
15
+ # Typography
16
+ attr_accessor :font_body, :font_sans, :font_mono, :font_url
17
+
18
+ # Layout constants
19
+ attr_accessor :content_max_width, :sidebar_width, :header_height,
20
+ :radius_sm, :radius_md, :shadow_sm, :shadow_md
21
+
22
+ # Block element colors (driven via CSS variables, eliminates extra_css)
23
+ attr_accessor :note_color, :note_bg, :note_border,
24
+ :example_color, :example_bg, :example_border,
25
+ :admonition_color, :admonition_bg, :admonition_border
26
+
27
+ # Footer accent
28
+ attr_accessor :footer_border_color
29
+
30
+ # Cover separator
31
+ attr_accessor :cover_separator_color
32
+
33
+ # Computed CSS (gradients cannot use CSS variables alone)
34
+ attr_accessor :header_background, :cover_background,
35
+ :cover_after_bg, :cover_before_bg,
36
+ :progress_bar_color
37
+
38
+ # Dark mode overrides
39
+ attr_accessor :dark_bg, :dark_bg_light, :dark_border, :dark_sidebar,
40
+ :dark_text, :dark_text_light, :dark_text_muted,
41
+ :dark_primary_light, :dark_accent_light,
42
+ :dark_note_bg, :dark_example_bg, :dark_admonition_bg,
43
+ :dark_code_bg, :dark_code_border
44
+
45
+ # Arbitrary per-element CSS overrides (search, sourcecode, etc.)
46
+ attr_accessor :extra_css
47
+
48
+ def initialize
49
+ @primary = "#28388A"
50
+ @accent = "#9C60C1"
51
+ @gradient = "linear-gradient(135deg, #28388A 0%, #3a4ba0 50%, #9C60C1 100%)"
52
+ @primary_light = "#eef0f8"
53
+ @accent_light = "#f5eef9"
54
+ @primary_dark = "#1c2660"
55
+ @accent_deep = nil
56
+ @warm = nil
57
+ @warm_light = nil
58
+ @text_color = "#1a1a2e"
59
+ @text_light = "#4a4a6a"
60
+ @text_muted = "#8888a0"
61
+ @bg = "#fff"
62
+ @bg_light = "#fafbff"
63
+ @border = "#e0e2ee"
64
+ @sidebar_bg = "#f7f7fc"
65
+ @font_body = '"Source Serif 4", "Noto Serif", Georgia, "Times New Roman", serif'
66
+ @font_sans = '"DM Sans", "Helvetica Neue", Arial, sans-serif'
67
+ @font_mono = '"JetBrains Mono", "Fira Code", "Courier New", monospace'
68
+ @font_url = "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&family=Source+Serif+4:ital,opsz,wght@0,8..60,300..700;1,8..60,300..700&family=JetBrains+Mono:wght@400;500&display=swap"
69
+ @content_max_width = "50em"
70
+ @sidebar_width = "260px"
71
+ @header_height = "52px"
72
+ @radius_sm = "4px"
73
+ @radius_md = "8px"
74
+ @shadow_sm = "0 1px 3px rgba(40,56,138,0.08)"
75
+ @shadow_md = "0 4px 12px rgba(40,56,138,0.12)"
76
+
77
+ # Block element defaults
78
+ @note_color = "var(--mn-accent)"
79
+ @note_bg = "var(--mn-accent-light)"
80
+ @note_border = "var(--mn-accent)"
81
+ @example_color = "#0d9488"
82
+ @example_bg = "rgba(232, 248, 245, 0.6)"
83
+ @example_border = "#0d9488"
84
+ @admonition_color = "#b8860b"
85
+ @admonition_bg = "rgba(255, 252, 245, 0.8)"
86
+ @admonition_border = "#e8a820"
87
+ @footer_border_color = nil
88
+ @cover_separator_color = nil
89
+
90
+ @header_background = nil
91
+ @cover_background = nil
92
+ @cover_after_bg = nil
93
+ @cover_before_bg = nil
94
+ @progress_bar_color = nil
95
+ @extra_css = nil
96
+
97
+ # Dark mode defaults
98
+ @dark_bg = "#0f1118"
99
+ @dark_bg_light = "#1a1d2a"
100
+ @dark_border = "#2e3248"
101
+ @dark_sidebar = "#141620"
102
+ @dark_text = "#e2e6f0"
103
+ @dark_text_light = "#c0c8dc"
104
+ @dark_text_muted = "#96a0b8"
105
+ @dark_primary_light = "#1e2140"
106
+ @dark_accent_light = "#2a2040"
107
+ @dark_note_bg = nil
108
+ @dark_example_bg = nil
109
+ @dark_admonition_bg = nil
110
+ @dark_code_bg = nil
111
+ @dark_code_border = nil
185
112
  end
186
113
 
187
114
  def to_css_root
@@ -18,24 +18,13 @@ module Metanorma
18
18
  remove_method :children
19
19
  end
20
20
 
21
- def self.children(node)
21
+ # moxml 0.5.36+ passes `entity_bearing:`. The Nokogiri adapter
22
+ # does not use it, so accept it and ignore it.
23
+ def self.children(node, **)
22
24
  node.children.to_a
23
25
  end
24
26
  end
25
- end
26
-
27
- # Patch missing Moxml module method used by lutaml-model XML serializer
28
- ::Moxml.class_eval do
29
- def self.preprocess_entities(text)
30
- if block_given?
31
- yield text
32
- else
33
- text
34
- end
35
- end
36
- end
37
27
 
38
- module Html
39
28
  Lutaml::Xml::XmlElement.class_eval do
40
29
  remove_method :order
41
30
 
@@ -3,6 +3,31 @@
3
3
  module Metanorma
4
4
  module IetfDocument
5
5
  module Metadata
6
+ class PiSettings < Lutaml::Model::Serializable
7
+ attribute :toc, :string
8
+ attribute :tocdepth, :string
9
+ attribute :symrefs, :string
10
+ attribute :sortrefs, :string
11
+ attribute :compact, :string
12
+ attribute :subcompact, :string
13
+ attribute :strict, :string
14
+ attribute :comments, :string
15
+ attribute :notedraftinprogress, :string
16
+
17
+ xml do
18
+ element "pi"
19
+ map_element "toc", to: :toc
20
+ map_element "tocdepth", to: :tocdepth
21
+ map_element "symrefs", to: :symrefs
22
+ map_element "sortrefs", to: :sortrefs
23
+ map_element "compact", to: :compact
24
+ map_element "subcompact", to: :subcompact
25
+ map_element "strict", to: :strict
26
+ map_element "comments", to: :comments
27
+ map_element "notedraftinprogress", to: :notedraftinprogress
28
+ end
29
+ end
30
+
6
31
  class IetfBibDataExtensionType < Lutaml::Model::Serializable
7
32
  attribute :doctype, :string
8
33
  attribute :flavor, :string
@@ -9,8 +9,6 @@ module Metanorma
9
9
  "metanorma/ietf_document/metadata/ietf_bibliographic_item"
10
10
  autoload :IetfEditorialGroup,
11
11
  "metanorma/ietf_document/metadata/ietf_editorial_group"
12
- autoload :PiSettings,
13
- "metanorma/ietf_document/metadata/pi_settings"
14
12
  end
15
13
  end
16
14
  end
@@ -3,18 +3,66 @@
3
3
  module Metanorma
4
4
  module IsoDocument
5
5
  module Metadata
6
+ # Extension point for bibliographical definitions of ISO/IEC documents.
7
+ # Document type element with language attribute.
8
+ class DoctypeElement < Lutaml::Model::Serializable
9
+ attribute :language, :string
10
+ attribute :abbreviation, :string
11
+ attribute :value, :string
12
+
13
+ xml do
14
+ element "doctype"
15
+ map_attribute "language", to: :language, render_empty: true
16
+ map_attribute "abbreviation", to: :abbreviation
17
+ map_content to: :value
18
+ end
19
+ end
20
+
21
+ # Stage name element with abbreviation attribute.
22
+ class StagenameElement < Lutaml::Model::Serializable
23
+ attribute :abbreviation, :string
24
+ attribute :value, :string
25
+
26
+ xml do
27
+ element "stagename"
28
+ map_attribute "abbreviation", to: :abbreviation
29
+ map_content to: :value
30
+ end
31
+ end
32
+
6
33
  class IsoBibDataExtensionType < Lutaml::Model::Serializable
34
+ # The document is a horizontal standard.
7
35
  attribute :horizontal, :boolean
36
+
37
+ # Editorial groups associated with the production of the document.
8
38
  attribute :editorial_group, IsoProjectGroup
39
+
40
+ # Name of the publication stage of the document.
9
41
  attribute :stage_name, :string
42
+
43
+ # Category of IEC Standard applicable.
10
44
  attribute :category, :string
45
+
46
+ # Type of document being updated by this document, if it is an amendment or technical corrigendum.
11
47
  attribute :updates_document_type, :string
12
48
  attribute :semx_id, :string
49
+
50
+ # Document type (e.g. "international-standard").
13
51
  attribute :doctype, DoctypeElement, collection: true
52
+
53
+ # Document flavor (e.g. "iso").
14
54
  attribute :flavor, :string
55
+
56
+ # ICS classification codes.
15
57
  attribute :ics, Ics, collection: true
58
+
59
+ # Structured identifier (project number, part).
16
60
  attribute :structuredidentifier, StructuredIdentifier
61
+
62
+ # Name of the publication stage.
17
63
  attribute :stagename, StagenameElement
64
+
65
+ # Sub-document type.
18
66
  attribute :subdoctype, :string
19
67
 
20
68
  xml do
@@ -3,34 +3,101 @@
3
3
  module Metanorma
4
4
  module IsoDocument
5
5
  module Metadata
6
+ # The bibliographical description of an ISO/IEC document.
7
+ # Language element with current attribute.
8
+ class LanguageElement < Lutaml::Model::Serializable
9
+ attribute :current, :string
10
+ attribute :value, :string
11
+
12
+ xml do
13
+ element "language"
14
+ map_attribute "current", to: :current
15
+ map_content to: :value
16
+ end
17
+ end
18
+
19
+ # Script element with current attribute.
20
+ class ScriptElement < Lutaml::Model::Serializable
21
+ attribute :current, :string
22
+ attribute :value, :string
23
+
24
+ xml do
25
+ element "script"
26
+ map_attribute "current", to: :current
27
+ map_content to: :value
28
+ end
29
+ end
30
+
6
31
  class IsoBibliographicItem < Lutaml::Model::Serializable
32
+ # Identifier of the document.
7
33
  attribute :doc_identifier, DocIdentifier, collection: true
34
+
35
+ # Collection of all title elements, grouped by language via consolidation mapping.
36
+ # Access: titles.items (raw), titles.per_language (grouped), titles.for_language("en")
8
37
  attribute :titles, AbstractTitle, collection: TitleCollection
38
+
39
+ # Type of the document.
9
40
  attribute :type, :string
41
+
42
+ # Fetched date
10
43
  attribute :fetched, Metanorma::Document::Relaton::DateTime
44
+
45
+ # URIs associated with the document.
11
46
  attribute :uri, Metanorma::Document::Relaton::TypedUri, collection: true
47
+
48
+ # Link/source
12
49
  attribute :source, :string, collection: true
50
+
51
+ # Document number
13
52
  attribute :docnumber, :string
53
+
54
+ # Contributors
14
55
  attribute :contributor, Metanorma::Document::Relaton::ContributionInfo,
15
56
  collection: true
57
+
58
+ # Edition
16
59
  attribute :edition, Metanorma::Document::Relaton::Edition,
17
60
  collection: true
61
+
62
+ # Version
18
63
  attribute :version, Metanorma::Document::Relaton::VersionInfo
64
+
65
+ # Notes
19
66
  attribute :note, Metanorma::Document::Relaton::TypedNote,
20
67
  collection: true
68
+
69
+ # Language codes
21
70
  attribute :language, LanguageElement, collection: true
71
+
72
+ # Script codes
22
73
  attribute :script, ScriptElement, collection: true
74
+
75
+ # Abstract of the document.
23
76
  attribute :abstract, Metanorma::Document::Components::DataTypes::FormattedString,
24
77
  collection: true
78
+
79
+ # Publication status of the document.
25
80
  attribute :status, IsoDocumentStatus
81
+
82
+ # Copyright information
26
83
  attribute :copyright, Metanorma::Document::Relaton::CopyrightAssociation,
27
84
  collection: true
85
+
86
+ # Relations to other documents
28
87
  attribute :relation, Metanorma::Document::Relaton::DocumentRelation,
29
88
  collection: true
89
+
90
+ # Formatted reference
30
91
  attribute :formattedref, Metanorma::Document::Components::DataTypes::FormattedString
92
+
93
+ # Dates
31
94
  attribute :date, Metanorma::Document::Relaton::BibliographicDate,
32
95
  collection: true
96
+
97
+ # Place of publication
33
98
  attribute :place, :string, collection: true
99
+
100
+ # Extension point of the bibliographical description.
34
101
  attribute :ext, IsoBibDataExtensionType
35
102
  attribute :keyword, Metanorma::Document::Relaton::KeywordType,
36
103
  collection: true
@@ -38,6 +105,8 @@ module Metanorma
38
105
  collection: true
39
106
  attribute :editorialgroup, Metanorma::StandardDocument::Metadata::EditorialGroupType
40
107
  attribute :semx_id, :string
108
+
109
+ # Schema version (used by collection/entry bibdata, e.g. "v1.2.9").
41
110
  attribute :schema_version, :string
42
111
 
43
112
  xml do
@@ -81,6 +150,8 @@ module Metanorma
81
150
  map "ext", to: :ext
82
151
  end
83
152
 
153
+ # Returns the title for a given language (defaults to English)
154
+ # Uses consolidation-mapped per_language grouping for efficiency
84
155
  def title_for(language = "en")
85
156
  return nil unless titles
86
157
 
@@ -94,6 +165,7 @@ module Metanorma
94
165
  end
95
166
  end
96
167
 
168
+ # Primary title (English by default)
97
169
  def title
98
170
  @title ||= title_for("en")
99
171
  end