metanorma-document 0.2.0

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 (682) hide show
  1. checksums.yaml +7 -0
  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 +166 -0
  9. data/CHANGELOG.md +21 -0
  10. data/Gemfile +26 -0
  11. data/LICENSE.txt +25 -0
  12. data/README.adoc +176 -0
  13. data/Rakefile +14 -0
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/data/javascripts/components/mn-code-copy.js +36 -0
  17. data/data/javascripts/components/mn-glossary.js +103 -0
  18. data/data/javascripts/components/mn-index-panel.js +33 -0
  19. data/data/javascripts/components/mn-lightbox.js +18 -0
  20. data/data/javascripts/components/mn-search.js +212 -0
  21. data/data/javascripts/components/mn-shortcuts.js +83 -0
  22. data/data/javascripts/components/mn-stem-dropdown.js +42 -0
  23. data/data/javascripts/components/mn-toc.js +182 -0
  24. data/data/javascripts/core/mn-navigation.js +84 -0
  25. data/data/javascripts/core/mn-reader.js +38 -0
  26. data/data/javascripts/core/mn-reveal.js +36 -0
  27. data/data/javascripts/core/mn-scroll.js +87 -0
  28. data/data/javascripts/core/mn-theme.js +140 -0
  29. data/data/javascripts/search.js +203 -0
  30. data/data/logos/bipm-logo.svg +1 -0
  31. data/data/logos/iec-logo.svg +1 -0
  32. data/data/logos/iho-logo.svg +555 -0
  33. data/data/logos/iso-logo.svg +1 -0
  34. data/data/logos/itu-logo.svg +1 -0
  35. data/data/logos/metanorma-logo.svg +41 -0
  36. data/data/logos/ogc-logo.svg +1 -0
  37. data/data/logos/pdfa-logo.svg +95 -0
  38. data/data/stylesheets/base/_dark.css +193 -0
  39. data/data/stylesheets/base/_layout.css +112 -0
  40. data/data/stylesheets/base/_print.css +46 -0
  41. data/data/stylesheets/base/_reset.css +55 -0
  42. data/data/stylesheets/base/_transitions.css +77 -0
  43. data/data/stylesheets/base/_typography.css +89 -0
  44. data/data/stylesheets/components/admonition.css +19 -0
  45. data/data/stylesheets/components/bibliography.css +18 -0
  46. data/data/stylesheets/components/cover.css +205 -0
  47. data/data/stylesheets/components/example.css +20 -0
  48. data/data/stylesheets/components/figure.css +30 -0
  49. data/data/stylesheets/components/footer.css +24 -0
  50. data/data/stylesheets/components/footnote.css +41 -0
  51. data/data/stylesheets/components/formula.css +25 -0
  52. data/data/stylesheets/components/glossary.css +61 -0
  53. data/data/stylesheets/components/header.css +149 -0
  54. data/data/stylesheets/components/index.css +118 -0
  55. data/data/stylesheets/components/inline.css +88 -0
  56. data/data/stylesheets/components/note.css +24 -0
  57. data/data/stylesheets/components/progress.css +40 -0
  58. data/data/stylesheets/components/search.css +45 -0
  59. data/data/stylesheets/components/section.css +26 -0
  60. data/data/stylesheets/components/shortcuts.css +71 -0
  61. data/data/stylesheets/components/sourcecode.css +30 -0
  62. data/data/stylesheets/components/table.css +57 -0
  63. data/data/stylesheets/components/term.css +45 -0
  64. data/data/stylesheets/components/toc.css +162 -0
  65. data/lib/data/dist/iso_document/frontend/assets/index-mwzbzmnK.js +22 -0
  66. data/lib/data/dist/iso_document/frontend/assets/index-pGvKTNid.css +1 -0
  67. data/lib/data/dist/iso_document/frontend/assets/iso-red.svg +53 -0
  68. data/lib/data/dist/iso_document/frontend/index.html +13 -0
  69. data/lib/metanorma/basic_document/ancillary_blocks/example_block.rb +58 -0
  70. data/lib/metanorma/basic_document/ancillary_blocks/figure_block.rb +64 -0
  71. data/lib/metanorma/basic_document/ancillary_blocks/formula_block.rb +38 -0
  72. data/lib/metanorma/basic_document/ancillary_blocks/literal_block.rb +26 -0
  73. data/lib/metanorma/basic_document/ancillary_blocks/sourcecode_block.rb +57 -0
  74. data/lib/metanorma/basic_document/ancillary_blocks/subfigure.rb +18 -0
  75. data/lib/metanorma/basic_document/ancillary_blocks.rb +15 -0
  76. data/lib/metanorma/basic_document/bib_data/bib_data.rb +18 -0
  77. data/lib/metanorma/basic_document/bib_data/bib_data_extension_type.rb +17 -0
  78. data/lib/metanorma/basic_document/bib_data/bibliographic_item.rb +93 -0
  79. data/lib/metanorma/basic_document/bib_data/document_type.rb +21 -0
  80. data/lib/metanorma/basic_document/bib_data.rb +14 -0
  81. data/lib/metanorma/basic_document/blocks/basic_block.rb +13 -0
  82. data/lib/metanorma/basic_document/blocks/basic_block_no_notes.rb +21 -0
  83. data/lib/metanorma/basic_document/blocks/note_block.rb +13 -0
  84. data/lib/metanorma/basic_document/blocks.rb +32 -0
  85. data/lib/metanorma/basic_document/change/attribute_change_action.rb +19 -0
  86. data/lib/metanorma/basic_document/change/attribute_modify.rb +19 -0
  87. data/lib/metanorma/basic_document/change/change.rb +25 -0
  88. data/lib/metanorma/basic_document/change/change_set.rb +20 -0
  89. data/lib/metanorma/basic_document/change/content_action.rb +21 -0
  90. data/lib/metanorma/basic_document/change/content_change.rb +17 -0
  91. data/lib/metanorma/basic_document/change/content_change_action.rb +28 -0
  92. data/lib/metanorma/basic_document/change/content_modify.rb +18 -0
  93. data/lib/metanorma/basic_document/change/node_change.rb +16 -0
  94. data/lib/metanorma/basic_document/change/node_delete.rb +17 -0
  95. data/lib/metanorma/basic_document/change/node_insert.rb +18 -0
  96. data/lib/metanorma/basic_document/change/node_move.rb +20 -0
  97. data/lib/metanorma/basic_document/change/unique_identifier.rb +17 -0
  98. data/lib/metanorma/basic_document/change.rb +23 -0
  99. data/lib/metanorma/basic_document/contrib_metadata/contribution_element_metadata.rb +22 -0
  100. data/lib/metanorma/basic_document/contrib_metadata/hash.rb +19 -0
  101. data/lib/metanorma/basic_document/contrib_metadata/integrity_value.rb +15 -0
  102. data/lib/metanorma/basic_document/contrib_metadata/iso10118_oid.rb +17 -0
  103. data/lib/metanorma/basic_document/contrib_metadata/iso14888_oid.rb +17 -0
  104. data/lib/metanorma/basic_document/contrib_metadata/signature.rb +21 -0
  105. data/lib/metanorma/basic_document/contrib_metadata.rb +16 -0
  106. data/lib/metanorma/basic_document/data_types/formatted_string.rb +17 -0
  107. data/lib/metanorma/basic_document/data_types/iso15924_code.rb +17 -0
  108. data/lib/metanorma/basic_document/data_types/iso3166_code.rb +17 -0
  109. data/lib/metanorma/basic_document/data_types/iso639_code.rb +17 -0
  110. data/lib/metanorma/basic_document/data_types/iso8601_date_time.rb +17 -0
  111. data/lib/metanorma/basic_document/data_types/localized_string.rb +23 -0
  112. data/lib/metanorma/basic_document/data_types/string_format.rb +22 -0
  113. data/lib/metanorma/basic_document/data_types/uri.rb +17 -0
  114. data/lib/metanorma/basic_document/data_types.rb +16 -0
  115. data/lib/metanorma/basic_document/empty_elements/basic_element.rb +18 -0
  116. data/lib/metanorma/basic_document/empty_elements/horizontal_rule_element.rb +14 -0
  117. data/lib/metanorma/basic_document/empty_elements/index_element.rb +24 -0
  118. data/lib/metanorma/basic_document/empty_elements/line_break_element.rb +14 -0
  119. data/lib/metanorma/basic_document/empty_elements/page_break_element.rb +15 -0
  120. data/lib/metanorma/basic_document/empty_elements.rb +16 -0
  121. data/lib/metanorma/basic_document/id_elements/alt_source.rb +21 -0
  122. data/lib/metanorma/basic_document/id_elements/audio.rb +18 -0
  123. data/lib/metanorma/basic_document/id_elements/bookmark.rb +17 -0
  124. data/lib/metanorma/basic_document/id_elements/id_element.rb +19 -0
  125. data/lib/metanorma/basic_document/id_elements/image.rb +19 -0
  126. data/lib/metanorma/basic_document/id_elements/media.rb +39 -0
  127. data/lib/metanorma/basic_document/id_elements/media_type.rb +17 -0
  128. data/lib/metanorma/basic_document/id_elements/video.rb +22 -0
  129. data/lib/metanorma/basic_document/id_elements.rb +16 -0
  130. data/lib/metanorma/basic_document/lists/definition.rb +21 -0
  131. data/lib/metanorma/basic_document/lists/definition_list.rb +18 -0
  132. data/lib/metanorma/basic_document/lists/list.rb +17 -0
  133. data/lib/metanorma/basic_document/lists/ordered_list.rb +19 -0
  134. data/lib/metanorma/basic_document/lists/ordered_list_type.rb +21 -0
  135. data/lib/metanorma/basic_document/lists/unordered_list.rb +14 -0
  136. data/lib/metanorma/basic_document/lists.rb +14 -0
  137. data/lib/metanorma/basic_document/multi_paragraph/admonition_block.rb +36 -0
  138. data/lib/metanorma/basic_document/multi_paragraph/admonition_type.rb +21 -0
  139. data/lib/metanorma/basic_document/multi_paragraph/paragraphs_block.rb +19 -0
  140. data/lib/metanorma/basic_document/multi_paragraph/quote_block.rb +26 -0
  141. data/lib/metanorma/basic_document/multi_paragraph/review_block.rb +32 -0
  142. data/lib/metanorma/basic_document/multi_paragraph.rb +16 -0
  143. data/lib/metanorma/basic_document/paragraphs/paragraph_block.rb +26 -0
  144. data/lib/metanorma/basic_document/paragraphs/paragraph_with_footnote.rb +21 -0
  145. data/lib/metanorma/basic_document/paragraphs/text_alignment.rb +21 -0
  146. data/lib/metanorma/basic_document/paragraphs.rb +12 -0
  147. data/lib/metanorma/basic_document/reference_elements/callout.rb +21 -0
  148. data/lib/metanorma/basic_document/reference_elements/citation.rb +25 -0
  149. data/lib/metanorma/basic_document/reference_elements/footnote.rb +17 -0
  150. data/lib/metanorma/basic_document/reference_elements/index_xref_element.rb +25 -0
  151. data/lib/metanorma/basic_document/reference_elements/reference_element.rb +22 -0
  152. data/lib/metanorma/basic_document/reference_elements/reference_format.rb +21 -0
  153. data/lib/metanorma/basic_document/reference_elements/reference_to_citation_element.rb +20 -0
  154. data/lib/metanorma/basic_document/reference_elements/reference_to_id_element.rb +17 -0
  155. data/lib/metanorma/basic_document/reference_elements/reference_to_id_with_paragraph_element.rb +19 -0
  156. data/lib/metanorma/basic_document/reference_elements/reference_to_link_element.rb +17 -0
  157. data/lib/metanorma/basic_document/reference_elements.rb +25 -0
  158. data/lib/metanorma/basic_document/sections/basic_section.rb +38 -0
  159. data/lib/metanorma/basic_document/sections/content_section.rb +18 -0
  160. data/lib/metanorma/basic_document/sections/hierarchical_section.rb +18 -0
  161. data/lib/metanorma/basic_document/sections/references_section.rb +19 -0
  162. data/lib/metanorma/basic_document/sections.rb +14 -0
  163. data/lib/metanorma/basic_document/tables/paragraph_table_cell.rb +18 -0
  164. data/lib/metanorma/basic_document/tables/table_block.rb +37 -0
  165. data/lib/metanorma/basic_document/tables/table_cell.rb +23 -0
  166. data/lib/metanorma/basic_document/tables/text_alignment.rb +21 -0
  167. data/lib/metanorma/basic_document/tables/text_table_cell.rb +18 -0
  168. data/lib/metanorma/basic_document/tables/text_table_row.rb +21 -0
  169. data/lib/metanorma/basic_document/tables/vertical_alignment.rb +21 -0
  170. data/lib/metanorma/basic_document/tables.rb +16 -0
  171. data/lib/metanorma/basic_document/text_elements/asciiml.rb +17 -0
  172. data/lib/metanorma/basic_document/text_elements/emphasis_element.rb +14 -0
  173. data/lib/metanorma/basic_document/text_elements/keyword_element.rb +14 -0
  174. data/lib/metanorma/basic_document/text_elements/latex.rb +17 -0
  175. data/lib/metanorma/basic_document/text_elements/mathml.rb +17 -0
  176. data/lib/metanorma/basic_document/text_elements/monospace_element.rb +14 -0
  177. data/lib/metanorma/basic_document/text_elements/ruby_element.rb +21 -0
  178. data/lib/metanorma/basic_document/text_elements/small_caps_element.rb +14 -0
  179. data/lib/metanorma/basic_document/text_elements/stem_element.rb +19 -0
  180. data/lib/metanorma/basic_document/text_elements/stem_type.rb +17 -0
  181. data/lib/metanorma/basic_document/text_elements/stem_value.rb +17 -0
  182. data/lib/metanorma/basic_document/text_elements/strike_element.rb +14 -0
  183. data/lib/metanorma/basic_document/text_elements/strong_element.rb +14 -0
  184. data/lib/metanorma/basic_document/text_elements/subscript_element.rb +14 -0
  185. data/lib/metanorma/basic_document/text_elements/superscript_element.rb +14 -0
  186. data/lib/metanorma/basic_document/text_elements/text_element.rb +18 -0
  187. data/lib/metanorma/basic_document/text_elements/text_element_type.rb +20 -0
  188. data/lib/metanorma/basic_document/text_elements/underline_element.rb +13 -0
  189. data/lib/metanorma/basic_document/text_elements.rb +33 -0
  190. data/lib/metanorma/basic_document.rb +23 -0
  191. data/lib/metanorma/bipm_document/metadata/bipm_bib_data_extension_type.rb +20 -0
  192. data/lib/metanorma/bipm_document/metadata/bipm_bibliographic_item.rb +31 -0
  193. data/lib/metanorma/bipm_document/metadata/bipm_structured_identifier.rb +21 -0
  194. data/lib/metanorma/bipm_document/metadata.rb +15 -0
  195. data/lib/metanorma/bipm_document/root.rb +65 -0
  196. data/lib/metanorma/bipm_document.rb +10 -0
  197. data/lib/metanorma/cc_document/metadata/cc_bib_data_extension_type.rb +12 -0
  198. data/lib/metanorma/cc_document/metadata/cc_bibliographic_item.rb +17 -0
  199. data/lib/metanorma/cc_document/metadata.rb +11 -0
  200. data/lib/metanorma/cc_document/root.rb +65 -0
  201. data/lib/metanorma/cc_document.rb +10 -0
  202. data/lib/metanorma/collection/directive.rb +18 -0
  203. data/lib/metanorma/collection/doc_container.rb +18 -0
  204. data/lib/metanorma/collection/entry.rb +33 -0
  205. data/lib/metanorma/collection/root.rb +31 -0
  206. data/lib/metanorma/collection.rb +12 -0
  207. data/lib/metanorma/document/components/ancillary_blocks/example_block.rb +124 -0
  208. data/lib/metanorma/document/components/ancillary_blocks/figure_block.rb +113 -0
  209. data/lib/metanorma/document/components/ancillary_blocks/formula_block.rb +85 -0
  210. data/lib/metanorma/document/components/ancillary_blocks/key_element.rb +26 -0
  211. data/lib/metanorma/document/components/ancillary_blocks/literal_block.rb +32 -0
  212. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +123 -0
  213. data/lib/metanorma/document/components/ancillary_blocks/subfigure.rb +41 -0
  214. data/lib/metanorma/document/components/ancillary_blocks.rb +18 -0
  215. data/lib/metanorma/document/components/bib_data/bib_data.rb +67 -0
  216. data/lib/metanorma/document/components/bib_data/bib_data_extension_type.rb +19 -0
  217. data/lib/metanorma/document/components/bib_data/bibliographic_item.rb +107 -0
  218. data/lib/metanorma/document/components/bib_data/document_type.rb +23 -0
  219. data/lib/metanorma/document/components/bib_data.rb +15 -0
  220. data/lib/metanorma/document/components/blocks/basic_block.rb +19 -0
  221. data/lib/metanorma/document/components/blocks/basic_block_no_notes.rb +22 -0
  222. data/lib/metanorma/document/components/blocks/note_block.rb +79 -0
  223. data/lib/metanorma/document/components/blocks.rb +13 -0
  224. data/lib/metanorma/document/components/change/attribute_change_action.rb +21 -0
  225. data/lib/metanorma/document/components/change/attribute_modify.rb +20 -0
  226. data/lib/metanorma/document/components/change/change.rb +27 -0
  227. data/lib/metanorma/document/components/change/change_set.rb +21 -0
  228. data/lib/metanorma/document/components/change/content_action.rb +23 -0
  229. data/lib/metanorma/document/components/change/content_change.rb +19 -0
  230. data/lib/metanorma/document/components/change/content_change_action.rb +30 -0
  231. data/lib/metanorma/document/components/change/content_modify.rb +19 -0
  232. data/lib/metanorma/document/components/change/node_change.rb +18 -0
  233. data/lib/metanorma/document/components/change/node_delete.rb +19 -0
  234. data/lib/metanorma/document/components/change/node_insert.rb +20 -0
  235. data/lib/metanorma/document/components/change/node_move.rb +22 -0
  236. data/lib/metanorma/document/components/change/unique_identifier.rb +19 -0
  237. data/lib/metanorma/document/components/change.rb +24 -0
  238. data/lib/metanorma/document/components/contrib_metadata/contribution_element_metadata.rb +23 -0
  239. data/lib/metanorma/document/components/contrib_metadata/hash.rb +21 -0
  240. data/lib/metanorma/document/components/contrib_metadata/integrity_value.rb +17 -0
  241. data/lib/metanorma/document/components/contrib_metadata/iso10118_oid.rb +19 -0
  242. data/lib/metanorma/document/components/contrib_metadata/iso14888_oid.rb +19 -0
  243. data/lib/metanorma/document/components/contrib_metadata/signature.rb +23 -0
  244. data/lib/metanorma/document/components/contrib_metadata.rb +17 -0
  245. data/lib/metanorma/document/components/data_types/formatted_string.rb +95 -0
  246. data/lib/metanorma/document/components/data_types/iso15924_code.rb +19 -0
  247. data/lib/metanorma/document/components/data_types/iso3166_code.rb +19 -0
  248. data/lib/metanorma/document/components/data_types/iso639_code.rb +19 -0
  249. data/lib/metanorma/document/components/data_types/iso8601_date_time.rb +19 -0
  250. data/lib/metanorma/document/components/data_types/localized_string.rb +29 -0
  251. data/lib/metanorma/document/components/data_types/string_format.rb +24 -0
  252. data/lib/metanorma/document/components/data_types/uri.rb +19 -0
  253. data/lib/metanorma/document/components/data_types.rb +18 -0
  254. data/lib/metanorma/document/components/empty_elements/basic_element.rb +20 -0
  255. data/lib/metanorma/document/components/empty_elements/horizontal_rule_element.rb +16 -0
  256. data/lib/metanorma/document/components/empty_elements/index_element.rb +26 -0
  257. data/lib/metanorma/document/components/empty_elements/line_break_element.rb +16 -0
  258. data/lib/metanorma/document/components/empty_elements/page_break_element.rb +20 -0
  259. data/lib/metanorma/document/components/empty_elements.rb +18 -0
  260. data/lib/metanorma/document/components/id_elements/alt_source.rb +23 -0
  261. data/lib/metanorma/document/components/id_elements/audio.rb +19 -0
  262. data/lib/metanorma/document/components/id_elements/bookmark.rb +24 -0
  263. data/lib/metanorma/document/components/id_elements/id_element.rb +21 -0
  264. data/lib/metanorma/document/components/id_elements/image.rb +23 -0
  265. data/lib/metanorma/document/components/id_elements/media.rb +41 -0
  266. data/lib/metanorma/document/components/id_elements/media_type.rb +19 -0
  267. data/lib/metanorma/document/components/id_elements/video.rb +23 -0
  268. data/lib/metanorma/document/components/id_elements.rb +18 -0
  269. data/lib/metanorma/document/components/inline/asciimath_element.rb +16 -0
  270. data/lib/metanorma/document/components/inline/attribution_element.rb +17 -0
  271. data/lib/metanorma/document/components/inline/bcp14_element.rb +16 -0
  272. data/lib/metanorma/document/components/inline/biblio_tag_element.rb +23 -0
  273. data/lib/metanorma/document/components/inline/br_element.rb +13 -0
  274. data/lib/metanorma/document/components/inline/comma_element.rb +13 -0
  275. data/lib/metanorma/document/components/inline/concept_element.rb +22 -0
  276. data/lib/metanorma/document/components/inline/display_text_element.rb +37 -0
  277. data/lib/metanorma/document/components/inline/em_raw_element.rb +23 -0
  278. data/lib/metanorma/document/components/inline/enum_comma_element.rb +13 -0
  279. data/lib/metanorma/document/components/inline/eref_element.rb +35 -0
  280. data/lib/metanorma/document/components/inline/fmt_admitted_element.rb +17 -0
  281. data/lib/metanorma/document/components/inline/fmt_annotation_body_element.rb +38 -0
  282. data/lib/metanorma/document/components/inline/fmt_annotation_end_element.rb +26 -0
  283. data/lib/metanorma/document/components/inline/fmt_annotation_start_element.rb +26 -0
  284. data/lib/metanorma/document/components/inline/fmt_concept_element.rb +23 -0
  285. data/lib/metanorma/document/components/inline/fmt_definition_element.rb +18 -0
  286. data/lib/metanorma/document/components/inline/fmt_fn_body_element.rb +22 -0
  287. data/lib/metanorma/document/components/inline/fmt_fn_label_element.rb +23 -0
  288. data/lib/metanorma/document/components/inline/fmt_footnote_container_element.rb +16 -0
  289. data/lib/metanorma/document/components/inline/fmt_identifier_element.rb +16 -0
  290. data/lib/metanorma/document/components/inline/fmt_name_element.rb +23 -0
  291. data/lib/metanorma/document/components/inline/fmt_preferred_element.rb +17 -0
  292. data/lib/metanorma/document/components/inline/fmt_sourcecode_element.rb +29 -0
  293. data/lib/metanorma/document/components/inline/fmt_stem_element.rb +18 -0
  294. data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +20 -0
  295. data/lib/metanorma/document/components/inline/fmt_title_element.rb +29 -0
  296. data/lib/metanorma/document/components/inline/fmt_xref_element.rb +25 -0
  297. data/lib/metanorma/document/components/inline/fmt_xref_label_element.rb +23 -0
  298. data/lib/metanorma/document/components/inline/fn_element.rb +31 -0
  299. data/lib/metanorma/document/components/inline/link_element.rb +27 -0
  300. data/lib/metanorma/document/components/inline/localized_string_element.rb +31 -0
  301. data/lib/metanorma/document/components/inline/localized_strings_element.rb +16 -0
  302. data/lib/metanorma/document/components/inline/math_element.rb +16 -0
  303. data/lib/metanorma/document/components/inline/name_with_id_element.rb +20 -0
  304. data/lib/metanorma/document/components/inline/semx_child_element.rb +25 -0
  305. data/lib/metanorma/document/components/inline/semx_element.rb +117 -0
  306. data/lib/metanorma/document/components/inline/small_cap_element.rb +16 -0
  307. data/lib/metanorma/document/components/inline/span_element.rb +37 -0
  308. data/lib/metanorma/document/components/inline/stem_inline_element.rb +24 -0
  309. data/lib/metanorma/document/components/inline/strong_raw_element.rb +25 -0
  310. data/lib/metanorma/document/components/inline/sub_element.rb +15 -0
  311. data/lib/metanorma/document/components/inline/sup_element.rb +26 -0
  312. data/lib/metanorma/document/components/inline/tab_element.rb +13 -0
  313. data/lib/metanorma/document/components/inline/title_with_annotation_element.rb +51 -0
  314. data/lib/metanorma/document/components/inline/tt_element.rb +20 -0
  315. data/lib/metanorma/document/components/inline/variant_title_element.rb +27 -0
  316. data/lib/metanorma/document/components/inline/xref_element.rb +24 -0
  317. data/lib/metanorma/document/components/inline.rb +100 -0
  318. data/lib/metanorma/document/components/lists/dd_element.rb +58 -0
  319. data/lib/metanorma/document/components/lists/definition.rb +32 -0
  320. data/lib/metanorma/document/components/lists/definition_list.rb +44 -0
  321. data/lib/metanorma/document/components/lists/dt_element.rb +71 -0
  322. data/lib/metanorma/document/components/lists/list.rb +25 -0
  323. data/lib/metanorma/document/components/lists/list_item.rb +102 -0
  324. data/lib/metanorma/document/components/lists/ordered_list.rb +42 -0
  325. data/lib/metanorma/document/components/lists/ordered_list_type.rb +23 -0
  326. data/lib/metanorma/document/components/lists/unordered_list.rb +34 -0
  327. data/lib/metanorma/document/components/lists.rb +19 -0
  328. data/lib/metanorma/document/components/multi_paragraph/admonition_block.rb +62 -0
  329. data/lib/metanorma/document/components/multi_paragraph/admonition_type.rb +23 -0
  330. data/lib/metanorma/document/components/multi_paragraph/paragraphs_block.rb +21 -0
  331. data/lib/metanorma/document/components/multi_paragraph/quote_block.rb +74 -0
  332. data/lib/metanorma/document/components/multi_paragraph/review_block.rb +34 -0
  333. data/lib/metanorma/document/components/multi_paragraph.rb +15 -0
  334. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +155 -0
  335. data/lib/metanorma/document/components/paragraphs/paragraph_with_footnote.rb +24 -0
  336. data/lib/metanorma/document/components/paragraphs/text_alignment.rb +23 -0
  337. data/lib/metanorma/document/components/paragraphs.rb +14 -0
  338. data/lib/metanorma/document/components/reference_elements/callout.rb +25 -0
  339. data/lib/metanorma/document/components/reference_elements/citation.rb +38 -0
  340. data/lib/metanorma/document/components/reference_elements/footnote.rb +19 -0
  341. data/lib/metanorma/document/components/reference_elements/index_xref_element.rb +27 -0
  342. data/lib/metanorma/document/components/reference_elements/reference_element.rb +24 -0
  343. data/lib/metanorma/document/components/reference_elements/reference_format.rb +23 -0
  344. data/lib/metanorma/document/components/reference_elements/reference_to_citation_element.rb +33 -0
  345. data/lib/metanorma/document/components/reference_elements/reference_to_id_element.rb +19 -0
  346. data/lib/metanorma/document/components/reference_elements/reference_to_id_with_paragraph_element.rb +21 -0
  347. data/lib/metanorma/document/components/reference_elements/reference_to_link_element.rb +19 -0
  348. data/lib/metanorma/document/components/reference_elements.rb +27 -0
  349. data/lib/metanorma/document/components/sections/basic_section.rb +37 -0
  350. data/lib/metanorma/document/components/sections/content_section.rb +20 -0
  351. data/lib/metanorma/document/components/sections/hierarchical_section.rb +19 -0
  352. data/lib/metanorma/document/components/sections/references_section.rb +25 -0
  353. data/lib/metanorma/document/components/sections.rb +15 -0
  354. data/lib/metanorma/document/components/tables/header_table_cell.rb +17 -0
  355. data/lib/metanorma/document/components/tables/paragraph_table_cell.rb +20 -0
  356. data/lib/metanorma/document/components/tables/table_block.rb +99 -0
  357. data/lib/metanorma/document/components/tables/table_cell.rb +139 -0
  358. data/lib/metanorma/document/components/tables/table_section.rb +42 -0
  359. data/lib/metanorma/document/components/tables/text_alignment.rb +23 -0
  360. data/lib/metanorma/document/components/tables/text_table_cell.rb +17 -0
  361. data/lib/metanorma/document/components/tables/text_table_row.rb +30 -0
  362. data/lib/metanorma/document/components/tables/vertical_alignment.rb +23 -0
  363. data/lib/metanorma/document/components/tables.rb +22 -0
  364. data/lib/metanorma/document/components/text_elements/asciiml.rb +19 -0
  365. data/lib/metanorma/document/components/text_elements/emphasis_element.rb +16 -0
  366. data/lib/metanorma/document/components/text_elements/keyword_element.rb +16 -0
  367. data/lib/metanorma/document/components/text_elements/latex.rb +19 -0
  368. data/lib/metanorma/document/components/text_elements/latexmath_element.rb +19 -0
  369. data/lib/metanorma/document/components/text_elements/monospace_element.rb +16 -0
  370. data/lib/metanorma/document/components/text_elements/ruby_element.rb +23 -0
  371. data/lib/metanorma/document/components/text_elements/small_caps_element.rb +16 -0
  372. data/lib/metanorma/document/components/text_elements/stem_element.rb +34 -0
  373. data/lib/metanorma/document/components/text_elements/stem_type.rb +23 -0
  374. data/lib/metanorma/document/components/text_elements/stem_value.rb +19 -0
  375. data/lib/metanorma/document/components/text_elements/strike_element.rb +33 -0
  376. data/lib/metanorma/document/components/text_elements/strong_element.rb +16 -0
  377. data/lib/metanorma/document/components/text_elements/subscript_element.rb +16 -0
  378. data/lib/metanorma/document/components/text_elements/superscript_element.rb +16 -0
  379. data/lib/metanorma/document/components/text_elements/text_element.rb +20 -0
  380. data/lib/metanorma/document/components/text_elements/text_element_type.rb +21 -0
  381. data/lib/metanorma/document/components/text_elements/underline_element.rb +33 -0
  382. data/lib/metanorma/document/components/text_elements.rb +31 -0
  383. data/lib/metanorma/document/components.rb +27 -0
  384. data/lib/metanorma/document/data_types.rb +11 -0
  385. data/lib/metanorma/document/relaton/address.rb +39 -0
  386. data/lib/metanorma/document/relaton/affiliation.rb +22 -0
  387. data/lib/metanorma/document/relaton/bib_item_locality.rb +21 -0
  388. data/lib/metanorma/document/relaton/bib_item_size.rb +19 -0
  389. data/lib/metanorma/document/relaton/bib_item_size_type.rb +21 -0
  390. data/lib/metanorma/document/relaton/bib_item_type.rb +25 -0
  391. data/lib/metanorma/document/relaton/bibliographic_date.rb +27 -0
  392. data/lib/metanorma/document/relaton/bibliographic_date_type.rb +22 -0
  393. data/lib/metanorma/document/relaton/contact_method.rb +22 -0
  394. data/lib/metanorma/document/relaton/contribution_info.rb +21 -0
  395. data/lib/metanorma/document/relaton/contributor.rb +15 -0
  396. data/lib/metanorma/document/relaton/contributor_role.rb +23 -0
  397. data/lib/metanorma/document/relaton/copyright_association.rb +32 -0
  398. data/lib/metanorma/document/relaton/date_time.rb +19 -0
  399. data/lib/metanorma/document/relaton/document_identifier.rb +25 -0
  400. data/lib/metanorma/document/relaton/document_relation.rb +26 -0
  401. data/lib/metanorma/document/relaton/document_relation_type.rb +31 -0
  402. data/lib/metanorma/document/relaton/document_status.rb +26 -0
  403. data/lib/metanorma/document/relaton/edition.rb +21 -0
  404. data/lib/metanorma/document/relaton/full_name.rb +34 -0
  405. data/lib/metanorma/document/relaton/iso4217_code.rb +17 -0
  406. data/lib/metanorma/document/relaton/iso8601_date.rb +17 -0
  407. data/lib/metanorma/document/relaton/keyword_type.rb +23 -0
  408. data/lib/metanorma/document/relaton/locality_stack.rb +19 -0
  409. data/lib/metanorma/document/relaton/localized_name.rb +22 -0
  410. data/lib/metanorma/document/relaton/medium_type.rb +26 -0
  411. data/lib/metanorma/document/relaton/org_identifier.rb +20 -0
  412. data/lib/metanorma/document/relaton/org_subdivision.rb +28 -0
  413. data/lib/metanorma/document/relaton/org_subdivision_identifier.rb +20 -0
  414. data/lib/metanorma/document/relaton/organization.rb +48 -0
  415. data/lib/metanorma/document/relaton/person.rb +28 -0
  416. data/lib/metanorma/document/relaton/person_identifier.rb +18 -0
  417. data/lib/metanorma/document/relaton/personal_identifier_type.rb +21 -0
  418. data/lib/metanorma/document/relaton/phone.rb +18 -0
  419. data/lib/metanorma/document/relaton/place_type.rb +36 -0
  420. data/lib/metanorma/document/relaton/price_type.rb +18 -0
  421. data/lib/metanorma/document/relaton/region_type.rb +20 -0
  422. data/lib/metanorma/document/relaton/relaton_collection.rb +25 -0
  423. data/lib/metanorma/document/relaton/series_type.rb +36 -0
  424. data/lib/metanorma/document/relaton/series_type_type.rb +21 -0
  425. data/lib/metanorma/document/relaton/specific_locality_type.rb +25 -0
  426. data/lib/metanorma/document/relaton/title_type.rb +21 -0
  427. data/lib/metanorma/document/relaton/typed_note.rb +25 -0
  428. data/lib/metanorma/document/relaton/typed_title_string.rb +50 -0
  429. data/lib/metanorma/document/relaton/typed_uri.rb +18 -0
  430. data/lib/metanorma/document/relaton/validity_type.rb +22 -0
  431. data/lib/metanorma/document/relaton/variant_full_name.rb +18 -0
  432. data/lib/metanorma/document/relaton/variant_org_name.rb +18 -0
  433. data/lib/metanorma/document/relaton/version_info.rb +19 -0
  434. data/lib/metanorma/document/relaton/vocab_id_type.rb +22 -0
  435. data/lib/metanorma/document/relaton.rb +64 -0
  436. data/lib/metanorma/document/root.rb +14 -0
  437. data/lib/metanorma/document/version.rb +8 -0
  438. data/lib/metanorma/document.rb +54 -0
  439. data/lib/metanorma/html/asset_pipeline.rb +100 -0
  440. data/lib/metanorma/html/base_renderer.rb +1610 -0
  441. data/lib/metanorma/html/bipm_renderer.rb +145 -0
  442. data/lib/metanorma/html/cc_renderer.rb +55 -0
  443. data/lib/metanorma/html/component/base.rb +63 -0
  444. data/lib/metanorma/html/component/footnote_collector.rb +57 -0
  445. data/lib/metanorma/html/component/index_section.rb +74 -0
  446. data/lib/metanorma/html/component/index_term_collector.rb +100 -0
  447. data/lib/metanorma/html/component.rb +12 -0
  448. data/lib/metanorma/html/component_registry.rb +37 -0
  449. data/lib/metanorma/html/drops/footnote_drop.rb +26 -0
  450. data/lib/metanorma/html/drops.rb +9 -0
  451. data/lib/metanorma/html/generator.rb +114 -0
  452. data/lib/metanorma/html/icc_renderer.rb +49 -0
  453. data/lib/metanorma/html/iec_renderer.rb +54 -0
  454. data/lib/metanorma/html/ieee_renderer.rb +55 -0
  455. data/lib/metanorma/html/ietf_renderer.rb +58 -0
  456. data/lib/metanorma/html/iho_renderer.rb +56 -0
  457. data/lib/metanorma/html/iso_renderer.rb +821 -0
  458. data/lib/metanorma/html/itu_renderer.rb +55 -0
  459. data/lib/metanorma/html/ogc_renderer.rb +86 -0
  460. data/lib/metanorma/html/oiml_renderer.rb +55 -0
  461. data/lib/metanorma/html/pdfa_renderer.rb +51 -0
  462. data/lib/metanorma/html/ribose_renderer.rb +55 -0
  463. data/lib/metanorma/html/standard_renderer.rb +535 -0
  464. data/lib/metanorma/html/templates/_cover.html.liquid +11 -0
  465. data/lib/metanorma/html/templates/_doc_title.html.liquid +3 -0
  466. data/lib/metanorma/html/templates/_footer.html.liquid +8 -0
  467. data/lib/metanorma/html/templates/_footnotes.html.liquid +11 -0
  468. data/lib/metanorma/html/templates/_header.html.liquid +65 -0
  469. data/lib/metanorma/html/templates/_iso_cover.html.liquid +31 -0
  470. data/lib/metanorma/html/templates/_iso_doc_title.html.liquid +3 -0
  471. data/lib/metanorma/html/templates/document.html.liquid +40 -0
  472. data/lib/metanorma/html/theme.rb +196 -0
  473. data/lib/metanorma/html/whitespace_patch.rb +47 -0
  474. data/lib/metanorma/html.rb +29 -0
  475. data/lib/metanorma/iec_document/root.rb +66 -0
  476. data/lib/metanorma/iec_document.rb +10 -0
  477. data/lib/metanorma/ieee_document/metadata/ieee_bib_data_extension_type.rb +18 -0
  478. data/lib/metanorma/ieee_document/metadata/ieee_bibliographic_item.rb +20 -0
  479. data/lib/metanorma/ieee_document/metadata/ieee_structured_identifier.rb +25 -0
  480. data/lib/metanorma/ieee_document/metadata.rb +14 -0
  481. data/lib/metanorma/ieee_document/root.rb +65 -0
  482. data/lib/metanorma/ieee_document.rb +11 -0
  483. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +58 -0
  484. data/lib/metanorma/ietf_document/metadata/ietf_bibliographic_item.rb +53 -0
  485. data/lib/metanorma/ietf_document/metadata/ietf_editorial_group.rb +17 -0
  486. data/lib/metanorma/ietf_document/metadata.rb +14 -0
  487. data/lib/metanorma/ietf_document/root.rb +66 -0
  488. data/lib/metanorma/ietf_document/sections.rb +31 -0
  489. data/lib/metanorma/ietf_document.rb +10 -0
  490. data/lib/metanorma/iho_document/metadata/iho_bib_data_extension_type.rb +25 -0
  491. data/lib/metanorma/iho_document/metadata/iho_bibliographic_item.rb +20 -0
  492. data/lib/metanorma/iho_document/metadata/iho_editorial_group.rb +19 -0
  493. data/lib/metanorma/iho_document/metadata/iho_series.rb +22 -0
  494. data/lib/metanorma/iho_document/metadata/iho_sub_group.rb +18 -0
  495. data/lib/metanorma/iho_document/metadata.rb +15 -0
  496. data/lib/metanorma/iho_document/root.rb +65 -0
  497. data/lib/metanorma/iho_document.rb +11 -0
  498. data/lib/metanorma/iso_document/annotation_container.rb +16 -0
  499. data/lib/metanorma/iso_document/blocks/iso_admonition_block.rb +27 -0
  500. data/lib/metanorma/iso_document/blocks/iso_admonition_type.rb +25 -0
  501. data/lib/metanorma/iso_document/blocks.rb +12 -0
  502. data/lib/metanorma/iso_document/boilerplate.rb +17 -0
  503. data/lib/metanorma/iso_document/metadata/abstract_title.rb +36 -0
  504. data/lib/metanorma/iso_document/metadata/doc_identifier.rb +26 -0
  505. data/lib/metanorma/iso_document/metadata/ics.rb +19 -0
  506. data/lib/metanorma/iso_document/metadata/iec_document_category.rb +23 -0
  507. data/lib/metanorma/iso_document/metadata/iso_bib_data_extension_type.rb +86 -0
  508. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +175 -0
  509. data/lib/metanorma/iso_document/metadata/iso_document_id.rb +46 -0
  510. data/lib/metanorma/iso_document/metadata/iso_document_stage_codes.rb +26 -0
  511. data/lib/metanorma/iso_document/metadata/iso_document_status.rb +56 -0
  512. data/lib/metanorma/iso_document/metadata/iso_document_substage_codes.rb +26 -0
  513. data/lib/metanorma/iso_document/metadata/iso_document_type.rb +25 -0
  514. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +57 -0
  515. data/lib/metanorma/iso_document/metadata/iso_project_group.rb +32 -0
  516. data/lib/metanorma/iso_document/metadata/iso_sub_group.rb +38 -0
  517. data/lib/metanorma/iso_document/metadata/metanorma_extension.rb +20 -0
  518. data/lib/metanorma/iso_document/metadata/structured_identifier.rb +33 -0
  519. data/lib/metanorma/iso_document/metadata/title_amd.rb +12 -0
  520. data/lib/metanorma/iso_document/metadata/title_amendment_prefix.rb +12 -0
  521. data/lib/metanorma/iso_document/metadata/title_collection.rb +46 -0
  522. data/lib/metanorma/iso_document/metadata/title_full.rb +12 -0
  523. data/lib/metanorma/iso_document/metadata/title_intro.rb +12 -0
  524. data/lib/metanorma/iso_document/metadata/title_main.rb +12 -0
  525. data/lib/metanorma/iso_document/metadata/title_part.rb +12 -0
  526. data/lib/metanorma/iso_document/metadata/title_part_prefix.rb +12 -0
  527. data/lib/metanorma/iso_document/metadata.rb +39 -0
  528. data/lib/metanorma/iso_document/raw_paragraph.rb +23 -0
  529. data/lib/metanorma/iso_document/root.rb +92 -0
  530. data/lib/metanorma/iso_document/sections/colophon.rb +18 -0
  531. data/lib/metanorma/iso_document/sections/iso_abstract_section.rb +15 -0
  532. data/lib/metanorma/iso_document/sections/iso_amendment_clause.rb +24 -0
  533. data/lib/metanorma/iso_document/sections/iso_annex_section.rb +172 -0
  534. data/lib/metanorma/iso_document/sections/iso_clause_section.rb +206 -0
  535. data/lib/metanorma/iso_document/sections/iso_foreword_section.rb +118 -0
  536. data/lib/metanorma/iso_document/sections/iso_preface.rb +43 -0
  537. data/lib/metanorma/iso_document/sections/iso_sections.rb +61 -0
  538. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +88 -0
  539. data/lib/metanorma/iso_document/sections.rb +17 -0
  540. data/lib/metanorma/iso_document/terms/iso_term.rb +84 -0
  541. data/lib/metanorma/iso_document/terms/iso_term_collection.rb +20 -0
  542. data/lib/metanorma/iso_document/terms/term_definition.rb +30 -0
  543. data/lib/metanorma/iso_document/terms/term_designation.rb +44 -0
  544. data/lib/metanorma/iso_document/terms/term_example.rb +39 -0
  545. data/lib/metanorma/iso_document/terms/term_expression.rb +55 -0
  546. data/lib/metanorma/iso_document/terms/term_note.rb +41 -0
  547. data/lib/metanorma/iso_document/terms/term_origin.rb +26 -0
  548. data/lib/metanorma/iso_document/terms/term_source.rb +49 -0
  549. data/lib/metanorma/iso_document/terms/verbal_definition.rb +41 -0
  550. data/lib/metanorma/iso_document/terms.rb +20 -0
  551. data/lib/metanorma/iso_document.rb +16 -0
  552. data/lib/metanorma/itu_document/metadata/itu_bib_data_extension_type.rb +63 -0
  553. data/lib/metanorma/itu_document/metadata/itu_bibliographic_item.rb +21 -0
  554. data/lib/metanorma/itu_document/metadata/itu_series.rb +22 -0
  555. data/lib/metanorma/itu_document/metadata/itu_structured_identifier.rb +23 -0
  556. data/lib/metanorma/itu_document/metadata.rb +19 -0
  557. data/lib/metanorma/itu_document/root.rb +65 -0
  558. data/lib/metanorma/itu_document.rb +10 -0
  559. data/lib/metanorma/ogc_document/metadata/ogc_bib_data_extension_type.rb +12 -0
  560. data/lib/metanorma/ogc_document/metadata/ogc_bibliographic_item.rb +19 -0
  561. data/lib/metanorma/ogc_document/metadata.rb +12 -0
  562. data/lib/metanorma/ogc_document/root.rb +65 -0
  563. data/lib/metanorma/ogc_document.rb +10 -0
  564. data/lib/metanorma/oiml_document/root.rb +66 -0
  565. data/lib/metanorma/oiml_document.rb +10 -0
  566. data/lib/metanorma/ribose_document/metadata/ribose_bib_data_extension_type.rb +20 -0
  567. data/lib/metanorma/ribose_document/metadata/ribose_bibliographic_item.rb +18 -0
  568. data/lib/metanorma/ribose_document/metadata.rb +12 -0
  569. data/lib/metanorma/ribose_document/root.rb +68 -0
  570. data/lib/metanorma/ribose_document.rb +10 -0
  571. data/lib/metanorma/standard_document/blocks/amend_block.rb +50 -0
  572. data/lib/metanorma/standard_document/blocks/amend_content_block.rb +17 -0
  573. data/lib/metanorma/standard_document/blocks/auto_number.rb +20 -0
  574. data/lib/metanorma/standard_document/blocks/block_source.rb +45 -0
  575. data/lib/metanorma/standard_document/blocks/change_type.rb +21 -0
  576. data/lib/metanorma/standard_document/blocks/element_name.rb +22 -0
  577. data/lib/metanorma/standard_document/blocks/form.rb +38 -0
  578. data/lib/metanorma/standard_document/blocks/image_map_area_type.rb +24 -0
  579. data/lib/metanorma/standard_document/blocks/image_map_area_type_type.rb +21 -0
  580. data/lib/metanorma/standard_document/blocks/image_map_block.rb +32 -0
  581. data/lib/metanorma/standard_document/blocks/image_map_coords.rb +19 -0
  582. data/lib/metanorma/standard_document/blocks/image_map_radius.rb +19 -0
  583. data/lib/metanorma/standard_document/blocks/multilingual_rendering_type.rb +21 -0
  584. data/lib/metanorma/standard_document/blocks/passthrough.rb +20 -0
  585. data/lib/metanorma/standard_document/blocks/requirement_model.rb +165 -0
  586. data/lib/metanorma/standard_document/blocks/standard_admonition_block.rb +32 -0
  587. data/lib/metanorma/standard_document/blocks/standard_block.rb +28 -0
  588. data/lib/metanorma/standard_document/blocks/standard_block_no_notes.rb +34 -0
  589. data/lib/metanorma/standard_document/blocks/standard_example_block.rb +30 -0
  590. data/lib/metanorma/standard_document/blocks/standard_figure_block.rb +32 -0
  591. data/lib/metanorma/standard_document/blocks/standard_formula_block.rb +30 -0
  592. data/lib/metanorma/standard_document/blocks/standard_note_block.rb +64 -0
  593. data/lib/metanorma/standard_document/blocks/standard_paragraph_block.rb +25 -0
  594. data/lib/metanorma/standard_document/blocks/standard_quote_block.rb +29 -0
  595. data/lib/metanorma/standard_document/blocks/standard_sourcecode_block.rb +32 -0
  596. data/lib/metanorma/standard_document/blocks/standard_table_block.rb +39 -0
  597. data/lib/metanorma/standard_document/blocks/svg_map_block.rb +23 -0
  598. data/lib/metanorma/standard_document/blocks/svg_target_type.rb +20 -0
  599. data/lib/metanorma/standard_document/blocks/table_col.rb +16 -0
  600. data/lib/metanorma/standard_document/blocks/to_c.rb +17 -0
  601. data/lib/metanorma/standard_document/blocks.rb +60 -0
  602. data/lib/metanorma/standard_document/elements/add.rb +19 -0
  603. data/lib/metanorma/standard_document/elements/del.rb +19 -0
  604. data/lib/metanorma/standard_document/elements/form_input.rb +27 -0
  605. data/lib/metanorma/standard_document/elements/input.rb +33 -0
  606. data/lib/metanorma/standard_document/elements/input_type.rb +27 -0
  607. data/lib/metanorma/standard_document/elements/label.rb +19 -0
  608. data/lib/metanorma/standard_document/elements/option.rb +27 -0
  609. data/lib/metanorma/standard_document/elements/orientation_type.rb +27 -0
  610. data/lib/metanorma/standard_document/elements/select.rb +32 -0
  611. data/lib/metanorma/standard_document/elements/standard_page_break_element.rb +22 -0
  612. data/lib/metanorma/standard_document/elements/textarea.rb +25 -0
  613. data/lib/metanorma/standard_document/elements.rb +20 -0
  614. data/lib/metanorma/standard_document/lists/standard_definition.rb +24 -0
  615. data/lib/metanorma/standard_document/lists/standard_definition_list.rb +30 -0
  616. data/lib/metanorma/standard_document/lists/standard_definition_term.rb +27 -0
  617. data/lib/metanorma/standard_document/lists/standard_unordered_list.rb +28 -0
  618. data/lib/metanorma/standard_document/lists/unordered_checkable_list_item.rb +26 -0
  619. data/lib/metanorma/standard_document/lists.rb +17 -0
  620. data/lib/metanorma/standard_document/metadata/editorial_group_type.rb +25 -0
  621. data/lib/metanorma/standard_document/metadata/ics_type.rb +26 -0
  622. data/lib/metanorma/standard_document/metadata/standard_bib_data.rb +25 -0
  623. data/lib/metanorma/standard_document/metadata/standard_bib_data_extension_type.rb +37 -0
  624. data/lib/metanorma/standard_document/metadata/structured_identifier_type.rb +48 -0
  625. data/lib/metanorma/standard_document/metadata/technical_committee_type.rb +27 -0
  626. data/lib/metanorma/standard_document/metadata.rb +17 -0
  627. data/lib/metanorma/standard_document/namespace.rb +11 -0
  628. data/lib/metanorma/standard_document/refs/reference_to_term.rb +25 -0
  629. data/lib/metanorma/standard_document/refs/reference_to_termbase.rb +27 -0
  630. data/lib/metanorma/standard_document/refs/standoc_locality_stack.rb +24 -0
  631. data/lib/metanorma/standard_document/refs/standoc_reference_to_citation_element.rb +27 -0
  632. data/lib/metanorma/standard_document/refs/standoc_reference_to_id_element.rb +36 -0
  633. data/lib/metanorma/standard_document/refs/xref_case_type.rb +27 -0
  634. data/lib/metanorma/standard_document/refs/xref_connective_type.rb +27 -0
  635. data/lib/metanorma/standard_document/refs/xref_target_type.rb +25 -0
  636. data/lib/metanorma/standard_document/refs.rb +18 -0
  637. data/lib/metanorma/standard_document/root.rb +10 -0
  638. data/lib/metanorma/standard_document/sections/abstract.rb +21 -0
  639. data/lib/metanorma/standard_document/sections/acknowledgements.rb +21 -0
  640. data/lib/metanorma/standard_document/sections/annex_section.rb +32 -0
  641. data/lib/metanorma/standard_document/sections/bibliography_section.rb +21 -0
  642. data/lib/metanorma/standard_document/sections/boilerplate_type.rb +32 -0
  643. data/lib/metanorma/standard_document/sections/clause_hierarchical_section.rb +32 -0
  644. data/lib/metanorma/standard_document/sections/clause_section.rb +29 -0
  645. data/lib/metanorma/standard_document/sections/definition_section.rb +75 -0
  646. data/lib/metanorma/standard_document/sections/floating_title.rb +27 -0
  647. data/lib/metanorma/standard_document/sections/foreword.rb +21 -0
  648. data/lib/metanorma/standard_document/sections/introduction.rb +23 -0
  649. data/lib/metanorma/standard_document/sections/misc_container.rb +26 -0
  650. data/lib/metanorma/standard_document/sections/normative_type.rb +29 -0
  651. data/lib/metanorma/standard_document/sections/standard_content_section.rb +27 -0
  652. data/lib/metanorma/standard_document/sections/standard_hierarchical_section.rb +30 -0
  653. data/lib/metanorma/standard_document/sections/standard_references_section.rb +74 -0
  654. data/lib/metanorma/standard_document/sections/standard_section.rb +39 -0
  655. data/lib/metanorma/standard_document/sections/terms_section.rb +29 -0
  656. data/lib/metanorma/standard_document/sections.rb +30 -0
  657. data/lib/metanorma/standard_document/standard_document_type.rb +15 -0
  658. data/lib/metanorma/standard_document/terms/abbreviation_type.rb +27 -0
  659. data/lib/metanorma/standard_document/terms/concept.rb +42 -0
  660. data/lib/metanorma/standard_document/terms/definition_collection.rb +24 -0
  661. data/lib/metanorma/standard_document/terms/designation.rb +31 -0
  662. data/lib/metanorma/standard_document/terms/expression_designation.rb +38 -0
  663. data/lib/metanorma/standard_document/terms/expression_type.rb +27 -0
  664. data/lib/metanorma/standard_document/terms/grammar_gender.rb +27 -0
  665. data/lib/metanorma/standard_document/terms/grammar_info.rb +36 -0
  666. data/lib/metanorma/standard_document/terms/graphical_symbol_designation.rb +25 -0
  667. data/lib/metanorma/standard_document/terms/letter_symbol_designation.rb +27 -0
  668. data/lib/metanorma/standard_document/terms/non_verbal_representation.rb +33 -0
  669. data/lib/metanorma/standard_document/terms/related_term.rb +31 -0
  670. data/lib/metanorma/standard_document/terms/related_term_type.rb +28 -0
  671. data/lib/metanorma/standard_document/terms/term.rb +66 -0
  672. data/lib/metanorma/standard_document/terms/term_collection.rb +24 -0
  673. data/lib/metanorma/standard_document/terms/term_definition.rb +29 -0
  674. data/lib/metanorma/standard_document/terms/term_source.rb +29 -0
  675. data/lib/metanorma/standard_document/terms/term_source_status.rb +29 -0
  676. data/lib/metanorma/standard_document/terms/term_source_type.rb +21 -0
  677. data/lib/metanorma/standard_document/terms/verbal_expression.rb +35 -0
  678. data/lib/metanorma/standard_document/terms.rb +31 -0
  679. data/lib/metanorma/standard_document.rb +19 -0
  680. data/metanorma-document.gemspec +35 -0
  681. data/tasks/roundtrip_samples.rake +535 -0
  682. metadata +743 -0
@@ -0,0 +1,535 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module Html
5
+ # Renders StandardDocument components to HTML.
6
+ # Extends BaseRenderer with terms, bibliography, and standard sections.
7
+ class StandardRenderer < BaseRenderer
8
+ def render(node, **opts)
9
+ case node
10
+ when Metanorma::StandardDocument::Root
11
+ render_standard_document(node, **opts)
12
+ when Metanorma::StandardDocument::Terms::Term
13
+ render_term(node, **opts)
14
+ when Metanorma::StandardDocument::Sections::TermsSection
15
+ render_terms_section(node, **opts)
16
+ when Metanorma::StandardDocument::Sections::StandardReferencesSection
17
+ render_references_section(node, **opts)
18
+ when Metanorma::StandardDocument::Sections::BibliographySection
19
+ render_bibliography(node, **opts)
20
+ when Metanorma::StandardDocument::Sections::ClauseSection
21
+ render_clause_section(node, **opts)
22
+ when Metanorma::StandardDocument::Sections::AnnexSection
23
+ render_annex_section(node, **opts)
24
+ when Metanorma::StandardDocument::Sections::StandardSection
25
+ render_standard_section(node, **opts)
26
+ when Metanorma::StandardDocument::Sections::Abstract
27
+ render_abstract_section(node, **opts)
28
+ when Metanorma::StandardDocument::Sections::Foreword
29
+ render_foreword_section(node, **opts)
30
+ when Metanorma::StandardDocument::Sections::Introduction
31
+ render_introduction_section(node, **opts)
32
+ when Metanorma::StandardDocument::Sections::FloatingTitle
33
+ render_floating_title(node, **opts)
34
+ when Metanorma::StandardDocument::Blocks::AmendBlock
35
+ render_amend_block(node, **opts)
36
+ else
37
+ super
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ # --- Top-level document rendering ---
44
+
45
+ def render_standard_document(doc, **_opts)
46
+ render_coverpage(doc)
47
+
48
+ @output << "<main class=\"main-section\">"
49
+
50
+ # Preface sections
51
+ render(doc.preface) if doc.preface
52
+
53
+ # Document title line
54
+ render_doc_title(doc)
55
+
56
+ # Main sections
57
+ render(doc.sections) if doc.sections
58
+
59
+ # Annexes
60
+ doc.annex&.each { |annex| render(annex) }
61
+
62
+ # Bibliography
63
+ render(doc.bibliography) if doc.bibliography
64
+
65
+ # Index section (from collected index terms)
66
+ unless @index_term_collector.empty?
67
+ index_component = Component::IndexSection.new(self)
68
+ index_component.render(@index_term_collector)
69
+ end
70
+
71
+ # Index section from indexsect element (presentation XML)
72
+ if doc.respond_to?(:indexsect) && doc.indexsect
73
+ render(doc.indexsect)
74
+ end
75
+
76
+ # Footnotes section
77
+ render_footnotes_section
78
+
79
+ @output << "</main>"
80
+ end
81
+
82
+ def render_coverpage(doc)
83
+ bibdata = doc.bibdata
84
+ return unless bibdata
85
+
86
+ cover_id = nil
87
+ bibdata.doc_identifier&.each do |di|
88
+ next unless safe_attr(di, :type) == "iso-reference"
89
+ id = extract_text_value(di)
90
+ next if id.to_s.empty?
91
+ cover_id = id
92
+ break
93
+ end
94
+
95
+ title_text = nil
96
+ if bibdata.is_a?(Metanorma::IsoDocument::Metadata::IsoBibliographicItem)
97
+ en_title = bibdata.title_for("en")
98
+ title_text = en_title.to_s if en_title
99
+ elsif bibdata.is_a?(Metanorma::Document::Components::BibData::BibData)
100
+ titles = bibdata.title
101
+ if titles && !titles.empty?
102
+ en_title = titles.find { |t| t.language == "en" }
103
+ title_text = extract_text_value(en_title) if en_title
104
+ end
105
+ end
106
+
107
+ @output << render_liquid("_cover.html.liquid", {
108
+ "doc_id" => cover_id,
109
+ "title" => title_text,
110
+ })
111
+ end
112
+
113
+ def render_doc_title(doc)
114
+ bibdata = doc.bibdata
115
+ return unless bibdata
116
+
117
+ if bibdata.is_a?(Metanorma::IsoDocument::Metadata::IsoBibliographicItem)
118
+ en_title = bibdata.title_for("en")
119
+ return unless en_title
120
+ elsif bibdata.is_a?(Metanorma::Document::Components::BibData::BibData)
121
+ titles = bibdata.title
122
+ return unless titles && !titles.empty?
123
+ en_title = titles.find { |t| t.language == "en" }
124
+ return unless en_title
125
+ en_title = extract_text_value(en_title)
126
+ else
127
+ return
128
+ end
129
+
130
+ @output << render_liquid("_doc_title.html.liquid", {
131
+ "title" => en_title,
132
+ })
133
+ end
134
+
135
+ # --- Section rendering ---
136
+
137
+ def render_clause_section(clause, level: 1, **_opts)
138
+ attrs = element_attrs(id: safe_attr(clause, :id), class: safe_attr(clause, :class_attr))
139
+ tag("div", attrs) do
140
+ render_standard_title(clause, level)
141
+ render_standard_section_blocks(clause, level)
142
+ render_subsections(clause, level)
143
+ end
144
+ end
145
+
146
+ def render_annex_section(annex, level: 1, **_opts)
147
+ attrs = element_attrs(id: safe_attr(annex, :id))
148
+ tag("div", attrs) do
149
+ render_standard_title(annex, level)
150
+ render_standard_section_blocks(annex, level)
151
+ render_subsections(annex, level)
152
+ end
153
+ end
154
+
155
+ def render_standard_section(section, level: 1, **_opts)
156
+ attrs = element_attrs(id: safe_attr(section, :id))
157
+ tag("div", attrs) do
158
+ render_standard_title(section, level)
159
+ render_standard_section_blocks(section, level)
160
+ end
161
+ end
162
+
163
+ def render_terms_section(terms, level: 1, **_opts)
164
+ attrs = element_attrs(id: safe_attr(terms, :id))
165
+ tag("div", attrs) do
166
+ render_standard_title(terms, level)
167
+ render_standard_section_blocks(terms, level)
168
+ terms.terms&.each { |term| render_term(term) }
169
+ end
170
+ end
171
+
172
+ def render_abstract_section(section, level: 1, **_opts)
173
+ attrs = element_attrs(id: safe_attr(section, :id))
174
+ tag("div", attrs) do
175
+ render_standard_title(section, level, default_class: "intro-title")
176
+ render_standard_section_blocks(section, level)
177
+ end
178
+ end
179
+
180
+ def render_foreword_section(section, level: 1, **_opts)
181
+ attrs = element_attrs(id: safe_attr(section, :id))
182
+ tag("div", attrs) do
183
+ render_standard_title(section, level, default_class: "foreword-title")
184
+ render_standard_section_blocks(section, level)
185
+ end
186
+ end
187
+
188
+ def render_introduction_section(section, level: 1, **_opts)
189
+ attrs = element_attrs(id: safe_attr(section, :id))
190
+ tag("div", attrs) do
191
+ render_standard_title(section, level, default_class: "intro-title")
192
+ render_standard_section_blocks(section, level)
193
+ end
194
+ end
195
+
196
+ def render_floating_title(title_node, **_opts)
197
+ level = safe_attr(title_node, :level) || 1
198
+ h = "h#{[[level, 6].min, 1].max}"
199
+ attrs = element_attrs(id: safe_attr(title_node, :id))
200
+ @output << "<#{h}#{attrs}>#{escape_html(title_node.text.to_s)}</#{h}>"
201
+ end
202
+
203
+ def render_amend_block(amend, **_opts)
204
+ attrs = element_attrs(id: safe_attr(amend, :id))
205
+ tag("div", attrs) do
206
+ render_mixed_inline(amend)
207
+ end
208
+ end
209
+
210
+ # --- Term rendering ---
211
+
212
+ def render_term(term, **_opts)
213
+ attrs = element_attrs(id: safe_attr(term, :id))
214
+ tag("div", attrs) do
215
+ term.preferred&.each { |d| render_term_designation(d, "preferred") }
216
+ term.admitted&.each { |d| render_term_designation(d, "admitted") }
217
+ term.deprecates&.each { |d| render_term_designation(d, "deprecated") }
218
+
219
+ # Domain
220
+ if term.domain
221
+ domain_text = term.domain.is_a?(String) ? term.domain : safe_attr(term.domain, :text).to_s
222
+ @output << "<p class=\"term-domain\">&lt;#{escape_html(domain_text)}&gt;</p>" unless domain_text.to_s.empty?
223
+ end
224
+
225
+ # Definitions
226
+ Array(term.definition).each { |defn| render_term_definition(defn) } if term.definition
227
+
228
+ # Notes (mapped from <termnote>)
229
+ term.note&.each_with_index do |note, i|
230
+ if note.is_a?(String)
231
+ @output << "<div class=\"note-block\"><p><span class=\"term-note-label\">Note #{i + 1} to entry: </span>#{escape_html(note)}</p></div>"
232
+ else
233
+ render_note(note)
234
+ end
235
+ end
236
+
237
+ # Examples (mapped from <termexample>)
238
+ term.example&.each { |ex| render_paragraph(ex) }
239
+
240
+ # Source references
241
+ term.source&.each { |src| render_term_source(src) }
242
+ end
243
+ end
244
+
245
+ def render_term_designation(designation, _type)
246
+ name = extract_designation_name(designation)
247
+ return unless name
248
+
249
+ tag("p", " class=\"term-name\" style=\"text-align:left;\"") do
250
+ tag("b") do
251
+ tag("dfn") { @output << escape_html(name) }
252
+ end
253
+ end
254
+ end
255
+
256
+ def extract_designation_name(designation)
257
+ if designation.is_a?(Metanorma::StandardDocument::Terms::Designation) && designation.expression
258
+ expr = designation.expression
259
+ if expr.is_a?(Metanorma::IsoDocument::Terms::TermExpression) && expr.name
260
+ Array(expr.name).join
261
+ end
262
+ elsif designation.is_a?(Metanorma::IsoDocument::Terms::TermExpression) && designation.name
263
+ Array(designation.name).join
264
+ else
265
+ extract_text_value(designation)
266
+ end
267
+ end
268
+
269
+ def render_term_definition(definition)
270
+ return unless definition
271
+ return unless definition.is_a?(Metanorma::StandardDocument::Terms::TermDefinition)
272
+
273
+ ve = definition.verbalexpression
274
+ return unless ve
275
+
276
+ ve.paragraph&.each { |para| render_paragraph(para) }
277
+ end
278
+
279
+ def render_term_note(note)
280
+ attrs = element_attrs(id: safe_attr(note, :id), class: "note-block")
281
+ tag("div", attrs) do
282
+ label = extract_termnote_label(note)
283
+ @output << "<p><span class=\"term-note-label\">#{escape_html(label)}: </span>"
284
+ if note.p && !note.p.empty?
285
+ note.p.each do |para|
286
+ render_mixed_inline(para)
287
+ end
288
+ end
289
+ @output << "</p>"
290
+ note.ul&.each { |ul| render_unordered_list(ul) }
291
+ note.ol&.each { |ol| render_ordered_list(ol) }
292
+ note.dl&.then { |dl| render_definition_list(dl) }
293
+ end
294
+ end
295
+
296
+ def render_term_example(example)
297
+ attrs = element_attrs(id: safe_attr(example, :id), class: "example")
298
+ tag("div", attrs) do
299
+ label = extract_block_label(example, "EXAMPLE")
300
+ @output << "<p><span class=\"example-label\">#{escape_html(label)}</span>&nbsp;"
301
+ if example.p && !example.p.empty?
302
+ example.p.each do |para|
303
+ render_mixed_inline(para)
304
+ end
305
+ end
306
+ @output << "</p>"
307
+ example.ul&.each { |ul| render_unordered_list(ul) }
308
+ example.ol&.each { |ol| render_ordered_list(ol) }
309
+ example.dl&.then { |dl| render_definition_list(dl) }
310
+ end
311
+ end
312
+
313
+ def render_term_source(source)
314
+ return unless source
315
+
316
+ @output << "<p class=\"term-source\">[SOURCE: "
317
+ termsource = safe_attr(source, :termsource)
318
+ origin = safe_attr(source, :origin)
319
+
320
+ if termsource
321
+ render_mixed_inline(termsource)
322
+ elsif origin
323
+ citeas = safe_attr(origin, :citeas)
324
+ bibitemid = safe_attr(origin, :bibitemid)
325
+
326
+ if citeas && !citeas.to_s.empty?
327
+ if bibitemid && !bibitemid.to_s.empty?
328
+ @output << "<a href=\"##{escape_html(bibitemid.to_s)}\" class=\"bibref\">#{escape_html(citeas.to_s)}</a>"
329
+ else
330
+ @output << escape_html(citeas.to_s)
331
+ end
332
+ else
333
+ render_mixed_inline(origin)
334
+ end
335
+
336
+ modification = safe_attr(source, :modification)
337
+ if modification && !modification.to_s.empty?
338
+ @output << ", modified — #{escape_html(modification.to_s)}"
339
+ end
340
+ else
341
+ render_mixed_inline(source)
342
+ end
343
+ @output << "]</p>"
344
+ end
345
+
346
+ def render_term_source_element(element)
347
+ return unless element
348
+
349
+ @output << "<p>"
350
+ render_mixed_inline(element)
351
+ @output << "</p>"
352
+ end
353
+
354
+ # --- Bibliography / References ---
355
+
356
+ def render_bibliography(bib, level: 1, **_opts)
357
+ tag("div", "") do
358
+ bib.references&.each { |ref| render_references_section(ref, level: level) }
359
+ bib.clause&.each { |cl| render(cl, level: level) }
360
+ end
361
+ end
362
+
363
+ def render_references_section(section, level: 1, **_opts)
364
+ is_normative = safe_attr(section, :normative) == "true"
365
+ attrs = element_attrs(id: safe_attr(section, :id))
366
+ tag("div", attrs) do
367
+ render_standard_title(section, level, default_class: is_normative ? "" : "section-sub")
368
+ section.p&.each { |para| render_paragraph(para) }
369
+ section.note&.each { |note| render_paragraph(note) }
370
+ section.references&.each_with_index { |bibitem, i| render_bibitem(bibitem, i + 1, normative: is_normative) }
371
+ section.table&.each { |t| render_table(t) }
372
+ end
373
+ end
374
+
375
+ def render_bibitem(item, index, normative: false)
376
+ css_class = normative ? "norm-ref-entry" : "biblio-entry"
377
+ attrs = element_attrs(id: safe_attr(item, :id), class: css_class)
378
+ url = bibitem_url(item)
379
+
380
+ tag("p", attrs) do
381
+ if url
382
+ @output << "<a href=\"#{escape_html(url)}\" target=\"_blank\" rel=\"noopener\" class=\"biblio-link\">"
383
+ end
384
+
385
+ # Use biblio-tag from presentation XML if available
386
+ if item.biblio_tag
387
+ render_mixed_inline(item.biblio_tag)
388
+ @output << "&nbsp;"
389
+ else
390
+ @output << "[#{index}]&nbsp;"
391
+ end
392
+
393
+ render_bibitem_content(item)
394
+
395
+ if url
396
+ @output << "</a>"
397
+ end
398
+ end
399
+ end
400
+
401
+ def bibitem_url(item)
402
+ links = Array(item.link)
403
+ return nil if links.empty?
404
+ # Prefer src or citation type, skip RSS feeds
405
+ preferred = links.find { |l| l.type == "src" || l.type == "citation" }
406
+ return preferred.content.to_s if preferred && !preferred.content.to_s.empty?
407
+ # Fallback: first non-RSS link
408
+ non_rss = links.find { |l| !l.content.to_s.include?(".rss") && !l.content.to_s.empty? }
409
+ non_rss&.content&.to_s
410
+ end
411
+
412
+ def render_bibitem_content(item)
413
+ # Use formatted reference if available (presentation XML)
414
+ if item.formatted_ref
415
+ render_mixed_inline(item.formatted_ref)
416
+ return
417
+ end
418
+
419
+ # Fallback: construct from parts
420
+ if item.docidentifier && !item.docidentifier.empty?
421
+ docids = Array(item.docidentifier)
422
+ # Skip bracket-number identifiers (e.g. "[1]") and iso-reference/URN variants;
423
+ # render only the primary doc identifier
424
+ primary = docids.find { |di|
425
+ val = extract_text_value(di).to_s
426
+ val.match?(/\A\[?\d+\]?\z/) ? false : !val.match?(/\A(?:iso-reference|URN)\s/)
427
+ }
428
+ if primary
429
+ id_val = extract_text_value(primary)
430
+ @output << "<span class=\"std-doc-number\">#{escape_html(id_val)}</span>" unless id_val.to_s.empty?
431
+ end
432
+ end
433
+
434
+ if item.date && !item.date.empty?
435
+ Array(item.date).each do |date|
436
+ date_on = date.is_a?(Metanorma::Document::Relaton::BibliographicDate) ? date.on : nil
437
+ date_val = extract_text_value(date_on || safe_attr(date, :text))
438
+ if date_val && !date_val.to_s.empty?
439
+ @output << ":<span class=\"std-year\">#{escape_html(date_val.to_s)}</span>"
440
+ end
441
+ end
442
+ end
443
+
444
+ if item.title && !item.title.empty?
445
+ titles = Array(item.title)
446
+ main_title = titles.find { |t| safe_attr(t, :type) == "main" } || titles.first
447
+ if main_title
448
+ @output << ", <i>"
449
+ render_mixed_inline(main_title)
450
+ @output << "</i>"
451
+ end
452
+ end
453
+ end
454
+
455
+ # --- Standard section helpers ---
456
+
457
+ def render_standard_title(section, level, default_class: "")
458
+ title_element = safe_attr(section, :fmt_title) || safe_attr(section, :title)
459
+ return unless title_element
460
+
461
+ section_id = safe_attr(section, :id)
462
+ title_text = extract_plain_text(title_element)
463
+ register_toc_entry(id: section_id, level: level, text: title_text)
464
+
465
+ @current_section_id = section_id
466
+ @current_section_number = title_text
467
+
468
+ h = "h#{[[level, 6].min, 1].max}"
469
+ title_class = default_class.empty? ? "" : " class=\"#{default_class}\""
470
+ @output << "<#{h}#{title_class}>"
471
+ render_mixed_inline(title_element)
472
+ @output << "</#{h}>"
473
+ end
474
+
475
+ def render_standard_section_blocks(section, level)
476
+ if section.is_a?(Lutaml::Model::Serializable) && section.mixed?
477
+ section.each_mixed_content do |node|
478
+ next if node.is_a?(String)
479
+ next if is_title_element?(node, section)
480
+
481
+ render(node, level: level + 1)
482
+ end
483
+ else
484
+ render_section_block_collections(section, level)
485
+ end
486
+ end
487
+
488
+ def render_section_block_collections(section, level)
489
+ # Paragraphs
490
+ paragraphs = safe_attr(section, :paragraphs) || safe_attr(section, :p)
491
+ Array(paragraphs).each { |p| render_paragraph(p) } if paragraphs
492
+
493
+ # Lists
494
+ %i[unordered_lists ordered_lists definition_lists].each do |attr|
495
+ values = safe_attr(section, attr)
496
+ Array(values).each { |v| render(v, level: level + 1) } if values
497
+ end
498
+
499
+ # Block elements
500
+ %i[tables figures formulas examples notes admonitions sourcecode_blocks quote_blocks].each do |attr|
501
+ values = safe_attr(section, attr)
502
+ Array(values).each { |v| render(v, level: level + 1) } if values
503
+ end
504
+ end
505
+
506
+ def render_subsections(section, level)
507
+ clauses = safe_attr(section, :clause) || safe_attr(section, :subsections)
508
+ Array(clauses).each { |cl| render(cl, level: level + 1) } if clauses
509
+ end
510
+
511
+ def is_title_element?(node, section)
512
+ title = safe_attr(section, :title)
513
+ return false unless title
514
+
515
+ node.equal?(title)
516
+ end
517
+
518
+ def extract_termnote_label(note)
519
+ # Presentation XML: <name>Note 1 to entry</name>
520
+ names = safe_attr(note, :name)
521
+ if names && !names.empty?
522
+ name = names.is_a?(Array) ? names.first : names
523
+ text = extract_text_value(name)
524
+ return text unless text.to_s.strip.empty?
525
+ end
526
+
527
+ # Fallback: autonum attribute
528
+ autonum = safe_attr(note, :autonum)
529
+ return "Note #{autonum} to entry" if autonum && !autonum.to_s.empty?
530
+
531
+ "Note to entry"
532
+ end
533
+ end
534
+ end
535
+ end
@@ -0,0 +1,11 @@
1
+ <div class="title-section">
2
+ {% if doc_id %}
3
+ <p class="cover-doc-id">{{ doc_id | escape }}</p>
4
+ {% endif %}
5
+ {% if title %}
6
+ <div class="cover-title"><div>
7
+ <span class="subtitle">{{ title | escape }}</span>
8
+ </div></div>
9
+ {% endif %}
10
+ </div>
11
+ <hr class="cover-separator" />
@@ -0,0 +1,3 @@
1
+ <p class="doc-title">
2
+ <span class="bold-title">{{ title | escape }}</span>
3
+ </p>
@@ -0,0 +1,8 @@
1
+ <footer class="doc-footer">
2
+ <div class="footer-brand">
3
+ {% if mn_logo %}
4
+ <span class="footer-mn-logo">{{ mn_logo }}</span>
5
+ {% endif %}
6
+ <span class="footer-text">Generated by <strong>Metanorma</strong> &mdash; {{ generated_at }}</span>
7
+ </div>
8
+ </footer>
@@ -0,0 +1,11 @@
1
+ <section class="footnotes-section" aria-label="Footnotes">
2
+ <h2 class="footnotes-title">Footnotes</h2>
3
+ <ol class="footnotes">
4
+ {% for entry in footnotes %}
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
+ {% endfor %}
10
+ </ol>
11
+ </section>
@@ -0,0 +1,65 @@
1
+ <header class="doc-header">
2
+ <div class="header-brand">
3
+ {{ publisher_logos }}
4
+ </div>
5
+ {% if doc_id %}
6
+ <div class="header-doc-id">{{ doc_id | escape }}</div>
7
+ {% endif %}
8
+ <span class="header-doc-title" id="header-doc-title">{{ doc_title | escape }}</span>
9
+ <div class="header-actions">
10
+ <button class="reader-btn search-trigger" id="search-trigger" aria-label="Search document" title="Search (/)">
11
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><circle cx="6.5" cy="6.5" r="5"/><line x1="10.2" y1="10.2" x2="14.5" y2="14.5"/></svg>
12
+ </button>
13
+ <div class="header-settings">
14
+ <button class="reader-btn settings-toggle" id="settings-toggle" aria-label="Reader settings" title="Settings">
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
+ </button>
17
+ <div class="settings-dropdown" id="settings-dropdown">
18
+ <button class="reader-btn font-decrease" id="font-decrease" aria-label="Decrease font size" title="Smaller text">
19
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="M2 12h12"/><path d="M6 4h4"/></svg>
20
+ <span class="settings-label">Smaller</span>
21
+ </button>
22
+ <button class="reader-btn font-increase" id="font-increase" aria-label="Increase font size" title="Larger text">
23
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="M2 12h12"/><path d="M6 4h4"/><path d="M8 1v3"/><path d="M8 12v3"/></svg>
24
+ <span class="settings-label">Larger</span>
25
+ </button>
26
+ <button class="reader-btn serif-toggle" id="serif-toggle" aria-label="Toggle serif" title="Toggle serif">
27
+ <svg viewBox="0 0 16 16" fill="currentColor"><text x="2" y="13" font-size="13" font-family="serif" font-weight="700">T</text></svg>
28
+ <span class="settings-label">Serif</span>
29
+ </button>
30
+ <button class="reader-btn theme-toggle" id="theme-toggle" aria-label="Cycle theme" title="Theme">
31
+ <svg class="icon-light" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
32
+ <circle cx="8" cy="8" r="3"/><line x1="8" y1="1" x2="8" y2="3"/><line x1="8" y1="13" x2="8" y2="15"/><line x1="1" y1="8" x2="3" y2="8"/><line x1="13" y1="8" x2="15" y2="8"/><line x1="3.05" y1="3.05" x2="4.46" y2="4.46"/><line x1="11.54" y1="11.54" x2="12.95" y2="12.95"/><line x1="3.05" y1="12.95" x2="4.46" y2="11.54"/><line x1="11.54" y1="4.46" x2="12.95" y2="3.05"/>
33
+ </svg>
34
+ <svg class="icon-sepia" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
35
+ <circle cx="8" cy="8" r="3"/><line x1="8" y1="1" x2="8" y2="3"/><line x1="8" y1="13" x2="8" y2="15"/><line x1="1" y1="8" x2="3" y2="8"/><line x1="13" y1="8" x2="15" y2="8"/>
36
+ </svg>
37
+ <svg class="icon-dark" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
38
+ <path d="M13.5 9.5A6 6 0 0 1 6.5 2.5 6 6 0 1 0 13.5 9.5z"/>
39
+ </svg>
40
+ <svg class="icon-oled" viewBox="0 0 16 16" fill="currentColor">
41
+ <circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
42
+ <circle cx="8" cy="8" r="2"/>
43
+ </svg>
44
+ <span class="settings-label">Theme</span>
45
+ </button>
46
+ <button class="reader-btn reading-mode-btn" id="reading-mode-btn" aria-label="Reading mode" title="Reading mode (r)">
47
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><rect x="2" y="1" width="12" height="14" rx="1.5"/><line x1="5" y1="5" x2="11" y2="5"/><line x1="5" y1="8" x2="9" y2="8"/></svg>
48
+ <span class="settings-label">Reading</span>
49
+ </button>
50
+ <button class="reader-btn glossary-btn" id="glossary-btn" aria-label="Glossary" title="Glossary (g)">
51
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><rect x="2" y="1" width="8" height="14" rx="1"/><path d="M10 3h3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-3"/><line x1="4" y1="5" x2="8" y2="5"/><line x1="4" y1="8" x2="8" y2="8"/></svg>
52
+ <span class="settings-label">Glossary</span>
53
+ </button>
54
+ <div class="settings-divider"></div>
55
+ <button class="reader-btn shortcuts-btn" id="shortcuts-btn" aria-label="Keyboard shortcuts" title="Shortcuts (?)">
56
+ <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="5" width="14" height="8" rx="2"/><line x1="4" y1="8" x2="4" y2="8"/><line x1="7" y1="8" x2="7" y2="8"/><line x1="10" y1="8" x2="10" y2="8"/><line x1="13" y1="8" x2="13" y2="8"/></svg>
57
+ <span class="settings-label">Shortcuts</span>
58
+ </button>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </header>
63
+ <div class="reading-mode-banner" id="reading-mode-banner" style="display:none">
64
+ Reader mode — press <kbd>R</kbd> or click <button class="exit-reading-btn" id="exit-reading-btn">Exit</button>
65
+ </div>
@@ -0,0 +1,31 @@
1
+ <div class="title-section">
2
+ <div class="cover-grid">
3
+ <div class="cover-meta">
4
+ {% if publisher_logos %}
5
+ <div class="cover-publishers">
6
+ {% for logo in publisher_logos %}
7
+ <span class="cover-logo">{{ logo }}</span>
8
+ {% endfor %}
9
+ </div>
10
+ {% endif %}
11
+ {% if doc_id %}
12
+ <p class="cover-doc-id">{{ doc_id | escape }}</p>
13
+ {% endif %}
14
+ {% if pub_date %}
15
+ <p class="cover-date">{{ pub_date | escape }}</p>
16
+ {% endif %}
17
+ </div>
18
+ <div class="cover-body">
19
+ {% if doctype %}
20
+ <p class="cover-doctype">{{ doctype | escape }}</p>
21
+ {% endif %}
22
+ {% if title %}
23
+ <div class="cover-title"><span>{{ title | escape }}</span></div>
24
+ {% endif %}
25
+ {% if stage %}
26
+ <div class="cover-stage"><p>{{ stage | escape }}</p></div>
27
+ {% endif %}
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <hr class="cover-separator" />
@@ -0,0 +1,3 @@
1
+ <p class="zzSTDTitle1">
2
+ <span class="boldtitle">{{ title | escape }}</span>
3
+ </p>