metanorma-document 0.2.6 → 0.2.7

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +321 -45
  3. data/Gemfile +2 -0
  4. data/lib/metanorma/basic_document/ancillary_blocks/figure_block.rb +3 -1
  5. data/lib/metanorma/basic_document/blocks/basic_block.rb +5 -1
  6. data/lib/metanorma/basic_document/blocks/note_block.rb +5 -0
  7. data/lib/metanorma/basic_document/blocks.rb +3 -24
  8. data/lib/metanorma/basic_document/lists/list.rb +2 -1
  9. data/lib/metanorma/basic_document/lists/list_item.rb +17 -0
  10. data/lib/metanorma/basic_document/lists.rb +1 -0
  11. data/lib/metanorma/basic_document/paragraphs/paragraph_with_footnote.rb +3 -1
  12. data/lib/metanorma/basic_document/reference_elements/callout.rb +1 -1
  13. data/lib/metanorma/basic_document/reference_elements/footnote.rb +1 -1
  14. data/lib/metanorma/basic_document/text_elements/mathml.rb +1 -1
  15. data/lib/metanorma/bipm_document/root.rb +10 -50
  16. data/lib/metanorma/bipm_document.rb +0 -2
  17. data/lib/metanorma/bsi_document/metadata/bsi_bib_data_extension_type.rb +10 -0
  18. data/lib/metanorma/bsi_document/metadata/bsi_bibliographic_item.rb +15 -0
  19. data/lib/metanorma/bsi_document/metadata.rb +12 -0
  20. data/lib/metanorma/bsi_document/root.rb +29 -0
  21. data/lib/metanorma/bsi_document/sections/bsi_annex_section.rb +25 -0
  22. data/lib/metanorma/bsi_document/sections/bsi_clause_section.rb +25 -0
  23. data/lib/metanorma/bsi_document/sections/bsi_sections.rb +27 -0
  24. data/lib/metanorma/bsi_document/sections.rb +11 -0
  25. data/lib/metanorma/bsi_document.rb +11 -0
  26. data/lib/metanorma/cc_document/root.rb +10 -50
  27. data/lib/metanorma/cc_document.rb +0 -2
  28. data/lib/metanorma/collection.rb +0 -2
  29. data/lib/metanorma/document/components/ancillary_blocks/example_block.rb +3 -3
  30. data/lib/metanorma/document/components/ancillary_blocks/figure_block.rb +2 -0
  31. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_block.rb +2 -0
  32. data/lib/metanorma/document/components/blocks/passthrough.rb +21 -0
  33. data/lib/metanorma/document/components/blocks/requirement_model.rb +159 -0
  34. data/lib/metanorma/document/components/blocks.rb +10 -0
  35. data/lib/metanorma/document/components/contrib_metadata/contribution_element_metadata.rb +3 -1
  36. data/lib/metanorma/document/components/id_elements/image.rb +2 -0
  37. data/lib/metanorma/document/components/inline/xref_element.rb +8 -0
  38. data/lib/metanorma/document/components/lists/definition_list.rb +6 -0
  39. data/lib/metanorma/document/components/lists/list_item.rb +1 -1
  40. data/lib/metanorma/document/components/lists/ordered_list.rb +6 -0
  41. data/lib/metanorma/document/components/lists/unordered_list.rb +8 -0
  42. data/lib/metanorma/document/components/multi_paragraph/admonition_block.rb +8 -0
  43. data/lib/metanorma/document/components/multi_paragraph/review_block.rb +3 -0
  44. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +6 -2
  45. data/lib/metanorma/document/components/reference_elements/source_element.rb +57 -0
  46. data/lib/metanorma/document/components/reference_elements.rb +6 -0
  47. data/lib/metanorma/document/components/sections/references_section.rb +1 -1
  48. data/lib/metanorma/document/components/tables/table_block.rb +10 -0
  49. data/lib/metanorma/document/components/tables/table_cell.rb +2 -1
  50. data/lib/metanorma/document/data_types.rb +0 -4
  51. data/lib/metanorma/document/elements/add.rb +18 -0
  52. data/lib/metanorma/document/elements/del.rb +18 -0
  53. data/lib/metanorma/document/elements.rb +10 -0
  54. data/lib/metanorma/document/relaton/address.rb +16 -0
  55. data/lib/metanorma/document/root.rb +1 -3
  56. data/lib/metanorma/document/version.rb +1 -1
  57. data/lib/metanorma/document.rb +11 -2
  58. data/lib/metanorma/gb_document/metadata/gb_bib_data_extension_type.rb +10 -0
  59. data/lib/metanorma/gb_document/metadata/gb_bibliographic_item.rb +15 -0
  60. data/lib/metanorma/gb_document/metadata.rb +12 -0
  61. data/lib/metanorma/gb_document/root.rb +29 -0
  62. data/lib/metanorma/gb_document.rb +10 -0
  63. data/lib/metanorma/generic_document/root.rb +31 -0
  64. data/lib/metanorma/generic_document.rb +7 -0
  65. data/lib/metanorma/html/base_renderer.rb +198 -111
  66. data/lib/metanorma/html/bipm_renderer.rb +16 -8
  67. data/lib/metanorma/html/cc_renderer.rb +0 -1
  68. data/lib/metanorma/html/component/base.rb +5 -1
  69. data/lib/metanorma/html/component/footnote_collector.rb +3 -3
  70. data/lib/metanorma/html/component/index_section.rb +27 -9
  71. data/lib/metanorma/html/component/index_term_collector.rb +8 -3
  72. data/lib/metanorma/html/component.rb +2 -1
  73. data/lib/metanorma/html/drops/figure_drop.rb +14 -5
  74. data/lib/metanorma/html/drops/formula_drop.rb +7 -2
  75. data/lib/metanorma/html/drops/sourcecode_drop.rb +6 -2
  76. data/lib/metanorma/html/drops.rb +2 -1
  77. data/lib/metanorma/html/generator.rb +33 -16
  78. data/lib/metanorma/html/iec_renderer.rb +0 -1
  79. data/lib/metanorma/html/ieee_renderer.rb +0 -1
  80. data/lib/metanorma/html/ietf_renderer.rb +0 -1
  81. data/lib/metanorma/html/iho_renderer.rb +1 -2
  82. data/lib/metanorma/html/iso_renderer.rb +68 -23
  83. data/lib/metanorma/html/itu_renderer.rb +0 -1
  84. data/lib/metanorma/html/ogc_renderer.rb +0 -1
  85. data/lib/metanorma/html/oiml_renderer.rb +0 -1
  86. data/lib/metanorma/html/pdfa_renderer.rb +0 -1
  87. data/lib/metanorma/html/ribose_renderer.rb +0 -1
  88. data/lib/metanorma/html/standard_renderer.rb +61 -28
  89. data/lib/metanorma/html/theme.rb +2 -2
  90. data/lib/metanorma/html.rb +48 -1
  91. data/lib/metanorma/iec_document/root.rb +8 -47
  92. data/lib/metanorma/iec_document.rb +2 -3
  93. data/lib/metanorma/ieee_document/root.rb +14 -50
  94. data/lib/metanorma/ieee_document/sections/ieee_sections.rb +31 -0
  95. data/lib/metanorma/ieee_document/sections.rb +9 -0
  96. data/lib/metanorma/ieee_document.rb +3 -3
  97. data/lib/metanorma/ietf_document/metadata/ietf_bib_data_extension_type.rb +0 -2
  98. data/lib/metanorma/ietf_document/metadata/ietf_bibliographic_item.rb +0 -2
  99. data/lib/metanorma/ietf_document/root.rb +14 -50
  100. data/lib/metanorma/ietf_document/sections/ietf_annex_section.rb +26 -0
  101. data/lib/metanorma/ietf_document/sections/ietf_clause_section.rb +26 -0
  102. data/lib/metanorma/ietf_document/sections/ietf_content_section.rb +25 -0
  103. data/lib/metanorma/ietf_document/sections/ietf_sections.rb +35 -0
  104. data/lib/metanorma/ietf_document/sections.rb +4 -23
  105. data/lib/metanorma/ietf_document.rb +4 -3
  106. data/lib/metanorma/iho_document/metadata/iho_bib_data_extension_type.rb +0 -2
  107. data/lib/metanorma/iho_document/root.rb +10 -50
  108. data/lib/metanorma/iho_document.rb +0 -3
  109. data/lib/metanorma/iso_document/annotation_container.rb +1 -10
  110. data/lib/metanorma/iso_document/boilerplate.rb +1 -11
  111. data/lib/metanorma/iso_document/metadata/iso_bibliographic_item.rb +2 -2
  112. data/lib/metanorma/iso_document/metadata/iso_localized_title.rb +4 -3
  113. data/lib/metanorma/iso_document/metadata/metanorma_extension.rb +1 -12
  114. data/lib/metanorma/iso_document/root.rb +7 -73
  115. data/lib/metanorma/iso_document/sections/colophon.rb +1 -16
  116. data/lib/metanorma/iso_document/sections/iso_annex_section.rb +11 -133
  117. data/lib/metanorma/iso_document/sections/iso_clause_section.rb +9 -166
  118. data/lib/metanorma/iso_document/sections/iso_foreword_section.rb +15 -89
  119. data/lib/metanorma/iso_document/sections/iso_preface.rb +15 -21
  120. data/lib/metanorma/iso_document/sections/iso_sections.rb +19 -29
  121. data/lib/metanorma/iso_document/sections/iso_terms_section.rb +6 -9
  122. data/lib/metanorma/iso_document/terms/term_expression.rb +2 -47
  123. data/lib/metanorma/iso_document/terms/term_origin.rb +2 -24
  124. data/lib/metanorma/iso_document/terms/term_source.rb +4 -32
  125. data/lib/metanorma/iso_document.rb +2 -2
  126. data/lib/metanorma/itu_document/root.rb +10 -50
  127. data/lib/metanorma/itu_document.rb +0 -2
  128. data/lib/metanorma/jis_document/metadata/jis_bib_data_extension_type.rb +10 -0
  129. data/lib/metanorma/jis_document/metadata/jis_bibliographic_item.rb +15 -0
  130. data/lib/metanorma/jis_document/metadata.rb +12 -0
  131. data/lib/metanorma/jis_document/root.rb +29 -0
  132. data/lib/metanorma/jis_document/sections/jis_annex_section.rb +20 -0
  133. data/lib/metanorma/jis_document/sections.rb +9 -0
  134. data/lib/metanorma/jis_document.rb +11 -0
  135. data/lib/metanorma/m3d_document/metadata/m3d_bib_data_extension_type.rb +10 -0
  136. data/lib/metanorma/m3d_document/metadata/m3d_bibliographic_item.rb +15 -0
  137. data/lib/metanorma/m3d_document/metadata.rb +12 -0
  138. data/lib/metanorma/m3d_document/root.rb +29 -0
  139. data/lib/metanorma/m3d_document.rb +10 -0
  140. data/lib/metanorma/nist_document/metadata/nist_bib_data_extension_type.rb +10 -0
  141. data/lib/metanorma/nist_document/metadata/nist_bibliographic_item.rb +15 -0
  142. data/lib/metanorma/nist_document/metadata.rb +12 -0
  143. data/lib/metanorma/nist_document/root.rb +29 -0
  144. data/lib/metanorma/nist_document/sections/errata.rb +16 -0
  145. data/lib/metanorma/nist_document/sections/errata_clause.rb +20 -0
  146. data/lib/metanorma/nist_document/sections/errata_row.rb +22 -0
  147. data/lib/metanorma/nist_document/sections/nist_preface.rb +30 -0
  148. data/lib/metanorma/nist_document/sections.rb +12 -0
  149. data/lib/metanorma/nist_document.rb +11 -0
  150. data/lib/metanorma/ogc_document/root.rb +10 -50
  151. data/lib/metanorma/ogc_document.rb +0 -2
  152. data/lib/metanorma/oiml_document/root.rb +8 -47
  153. data/lib/metanorma/oiml_document.rb +2 -3
  154. data/lib/metanorma/plateau_document/metadata/plateau_bibliographic_item.rb +13 -0
  155. data/lib/metanorma/plateau_document/metadata.rb +10 -0
  156. data/lib/metanorma/plateau_document/root.rb +29 -0
  157. data/lib/metanorma/plateau_document.rb +10 -0
  158. data/lib/metanorma/registers/setup.rb +162 -0
  159. data/lib/metanorma/registers.rb +7 -0
  160. data/lib/metanorma/ribose_document/root.rb +10 -52
  161. data/lib/metanorma/ribose_document.rb +0 -2
  162. data/lib/metanorma/standard_document/annotation_container.rb +14 -0
  163. data/lib/metanorma/standard_document/block_attributes.rb +226 -0
  164. data/lib/metanorma/standard_document/blocks/passthrough.rb +1 -18
  165. data/lib/metanorma/standard_document/blocks/requirement_model.rb +18 -163
  166. data/lib/metanorma/standard_document/boilerplate.rb +14 -0
  167. data/lib/metanorma/standard_document/elements/add.rb +1 -17
  168. data/lib/metanorma/standard_document/elements/del.rb +1 -17
  169. data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +16 -0
  170. data/lib/metanorma/standard_document/metadata.rb +2 -0
  171. data/lib/metanorma/standard_document/refs/reference_to_term.rb +2 -1
  172. data/lib/metanorma/standard_document/root_attributes.rb +78 -0
  173. data/lib/metanorma/standard_document/sections/abstract.rb +1 -3
  174. data/lib/metanorma/standard_document/sections/acknowledgements.rb +1 -3
  175. data/lib/metanorma/standard_document/sections/annex_section.rb +81 -16
  176. data/lib/metanorma/standard_document/sections/bibliography_section.rb +1 -2
  177. data/lib/metanorma/standard_document/sections/clause_section.rb +102 -10
  178. data/lib/metanorma/standard_document/sections/colophon.rb +16 -0
  179. data/lib/metanorma/standard_document/sections/definition_section.rb +45 -42
  180. data/lib/metanorma/standard_document/sections/floating_section_title.rb +23 -0
  181. data/lib/metanorma/standard_document/sections/foreword.rb +1 -3
  182. data/lib/metanorma/standard_document/sections/introduction.rb +1 -4
  183. data/lib/metanorma/standard_document/sections/misc_container.rb +5 -2
  184. data/lib/metanorma/standard_document/sections/preface.rb +36 -0
  185. data/lib/metanorma/standard_document/sections/sections.rb +40 -0
  186. data/lib/metanorma/standard_document/sections/standard_content_section.rb +42 -9
  187. data/lib/metanorma/standard_document/sections/terms_section.rb +52 -10
  188. data/lib/metanorma/standard_document/sections.rb +6 -2
  189. data/lib/metanorma/standard_document/terms/designation.rb +1 -1
  190. data/lib/metanorma/standard_document/terms/term_expression.rb +51 -0
  191. data/lib/metanorma/standard_document/terms.rb +1 -0
  192. data/lib/metanorma/standard_document.rb +7 -2
  193. data/lib/metanorma/un_document/metadata/un_bib_data_extension_type.rb +10 -0
  194. data/lib/metanorma/un_document/metadata/un_bibliographic_item.rb +15 -0
  195. data/lib/metanorma/un_document/metadata.rb +12 -0
  196. data/lib/metanorma/un_document/root.rb +29 -0
  197. data/lib/metanorma/un_document/sections/un_preface.rb +23 -0
  198. data/lib/metanorma/un_document/sections/un_sections.rb +24 -0
  199. data/lib/metanorma/un_document/sections.rb +10 -0
  200. data/lib/metanorma/un_document.rb +11 -0
  201. metadata +77 -3
  202. data/lib/metanorma/html/whitespace_patch.rb +0 -47
@@ -2,15 +2,6 @@
2
2
 
3
3
  module Metanorma
4
4
  module IsoDocument
5
- # Container for review annotations. Uses map_all_content to preserve
6
- # mixed content including annotation elements with their p children.
7
- class AnnotationContainer < Lutaml::Model::Serializable
8
- attribute :content, :string
9
-
10
- xml do
11
- element "annotation-container"
12
- map_all_content to: :content
13
- end
14
- end
5
+ AnnotationContainer = Metanorma::StandardDocument::AnnotationContainer
15
6
  end
16
7
  end
@@ -2,16 +2,6 @@
2
2
 
3
3
  module Metanorma
4
4
  module IsoDocument
5
- # Boilerplate section containing copyright statements and license text.
6
- # Uses map_all_content to preserve all child XML including inline
7
- # elements (span, link, br) inside paragraphs.
8
- class Boilerplate < Lutaml::Model::Serializable
9
- attribute :content, :string
10
-
11
- xml do
12
- element "boilerplate"
13
- map_all_content to: :content
14
- end
15
- end
5
+ Boilerplate = Metanorma::StandardDocument::Boilerplate
16
6
  end
17
7
  end
@@ -158,10 +158,10 @@ module Metanorma
158
158
  if titles.is_a?(TitleCollection)
159
159
  titles.for_language(language)
160
160
  elsif titles.is_a?(Array)
161
- titles.find { |t|
161
+ titles.find do |t|
162
162
  lang = safe_attr(t, :language) || safe_attr(t, :lang)
163
163
  lang == language
164
- }
164
+ end
165
165
  end
166
166
  end
167
167
 
@@ -41,14 +41,15 @@ module Metanorma
41
41
  if title_part
42
42
  prefix = title_part_prefix&.value.to_s.strip
43
43
  part_val = title_part.value
44
- if !prefix.empty?
44
+ if prefix.empty?
45
+ parts << part_val
46
+ else
45
47
  sep = prefix.end_with?(":") ? " " : ": "
46
48
  parts << "#{prefix}#{sep}#{part_val}"
47
- else
48
- parts << part_val
49
49
  end
50
50
  end
51
51
  return parts.join(" — ") unless parts.empty?
52
+
52
53
  ""
53
54
  end
54
55
  end
@@ -3,18 +3,7 @@
3
3
  module Metanorma
4
4
  module IsoDocument
5
5
  module Metadata
6
- # Container for metanorma-specific extensions (semantic-metadata,
7
- # presentation-metadata, UnitsML). Uses map_all_content to preserve
8
- # all child XML as raw string since these elements have complex
9
- # namespace-qualified structures.
10
- class MetanormaExtension < Lutaml::Model::Serializable
11
- attribute :content, :string
12
-
13
- xml do
14
- element "metanorma-extension"
15
- map_all_content to: :content
16
- end
17
- end
6
+ MetanormaExtension = Metanorma::StandardDocument::Metadata::MetanormaExtension
18
7
  end
19
8
  end
20
9
  end
@@ -2,90 +2,24 @@
2
2
 
3
3
  module Metanorma
4
4
  module IsoDocument
5
- class Root < Metanorma::StandardDocument::Root
6
- # Version number of the schema used for this standards document.
7
- attribute :version, :string
5
+ class Root < Lutaml::Model::Serializable
6
+ include Metanorma::StandardDocument::RootAttributes
8
7
 
9
- # Type of the document (semantic, presentation).
10
- attribute :type, :string
11
-
12
- # Schema version.
13
- attribute :schema_version, :string
14
-
15
- # Document flavor (iso, standoc, etc).
16
- attribute :flavor, :string
8
+ def self.lutaml_default_register
9
+ :iso_document
10
+ end
17
11
 
18
- # Bibliographic description of the document itself, expressed in the Relaton
19
- # model.
20
12
  attribute :bibdata, Metanorma::IsoDocument::Metadata::IsoBibliographicItem
21
-
22
- # Citations for sources of term definitions.
23
- attribute :term_sources,
24
- Metanorma::Document::Components::ReferenceElements::Citation,
25
- collection: true
26
-
27
- # Zero or more optional _preface_ sections.
28
13
  attribute :preface, Metanorma::IsoDocument::Sections::IsoPreface
29
-
30
- # One or more _sections_.
31
14
  attribute :sections, Metanorma::IsoDocument::Sections::IsoSections
32
-
33
- # Zero or more _annexes_.
34
15
  attribute :annex, Metanorma::IsoDocument::Sections::IsoAnnexSection,
35
16
  collection: true
36
17
 
37
- # Zero to two _bibliographies_.
38
- attribute :bibliography,
39
- Metanorma::StandardDocument::Sections::BibliographySection
40
-
41
- # Boilerplate section (copyright statements, license text).
42
- attribute :boilerplate, Boilerplate
43
-
44
- # Metanorma-specific extensions (semantic-metadata, presentation-metadata, UnitsML).
45
- attribute :metanorma_extension, Metadata::MetanormaExtension
46
-
47
- # Container for review annotations.
48
- attribute :annotation_container, AnnotationContainer
49
-
50
- # Index of a standards document.
51
- attribute :indexsect,
52
- Metanorma::Document::Components::Sections::BasicSection
53
-
54
- # Presentation-specific attributes
55
- attribute :autonum, :string
56
- attribute :fmt_xref_label, :string
57
-
58
- # Localized strings container (presentation XML)
59
- attribute :localized_strings, Metanorma::Document::Components::Inline::LocalizedStringsElement
60
-
61
- # Formatted footnote container (presentation XML)
62
- attribute :fmt_footnote_container, Metanorma::Document::Components::Inline::FmtFootnoteContainerElement
63
-
64
- # Colophon section (presentation XML)
65
- attribute :colophon, Sections::Colophon
66
-
67
18
  xml do
68
19
  element "metanorma"
69
20
  namespace Metanorma::StandardDocument::Namespace
70
- map_attribute "type", to: :type
71
- map_attribute "version", to: :version
72
- map_attribute "schema-version", to: :schema_version
73
- map_attribute "flavor", to: :flavor
74
- map_element "bibdata", to: :bibdata
75
- map_element "termdocsource", to: :term_sources
76
- map_element "metanorma-extension", to: :metanorma_extension
77
- map_element "boilerplate", to: :boilerplate
78
- map_element "preface", to: :preface
79
- map_element "sections", to: :sections
80
- map_element "annex", to: :annex
81
- map_element "bibliography", to: :bibliography
82
- map_element "annotation-container", to: :annotation_container
83
- map_element "indexsect", to: :indexsect
84
- map_element "localized-strings", to: :localized_strings
85
- map_element "fmt-footnote-container", to: :fmt_footnote_container
86
- map_element "colophon", to: :colophon
87
- map_attribute "autonum", to: :autonum
88
- map_attribute "fmt-xref-label", to: :fmt_xref_label
21
+
22
+ Metanorma::StandardDocument::RootXmlMapping.apply(self)
89
23
  end
90
24
  end
91
25
  end
@@ -1,18 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Metanorma
4
- module IsoDocument
5
- module Sections
6
- # Colophon section in presentation XML.
7
- # Contains document control information.
8
- class Colophon < Lutaml::Model::Serializable
9
- attribute :clause, IsoClauseSection, collection: true
10
-
11
- xml do
12
- element "colophon"
13
- map_element "clause", to: :clause
14
- end
15
- end
16
- end
17
- end
18
- end
3
+ Metanorma::IsoDocument::Sections::Colophon = Metanorma::StandardDocument::Sections::Colophon
@@ -4,146 +4,24 @@ module Metanorma
4
4
  module IsoDocument
5
5
  module Sections
6
6
  # Annex appearing in ISO/IEC document.
7
- class IsoAnnexSection < Lutaml::Model::Serializable
8
- attribute :id, :string
9
- attribute :number, :string
10
- attribute :obligation, :string
11
- attribute :title, Metanorma::Document::Components::Inline::TitleWithAnnotationElement
7
+ # Inherits structure from StandardDocument::AnnexSection and overrides
8
+ # clause/appendix/terms to use ISO-specific types.
9
+ class IsoAnnexSection < Metanorma::StandardDocument::Sections::AnnexSection
10
+ # Override: ISO sub-clauses are IsoClauseSection
11
+ attribute :clause, IsoClauseSection, collection: true
12
12
 
13
- # Sub-clauses within annex.
14
- attribute :clause, IsoClauseSection,
15
- collection: true
13
+ # Override: ISO appendixes are IsoClauseSection
14
+ attribute :appendix, IsoClauseSection, collection: true
16
15
 
17
- # Appendixes to annex.
18
- attribute :appendix, IsoClauseSection,
19
- collection: true
20
-
21
- # Block collections
22
- attribute :paragraphs,
23
- Metanorma::Document::Components::Paragraphs::ParagraphBlock,
24
- collection: true
25
- attribute :unordered_lists,
26
- Metanorma::Document::Components::Lists::UnorderedList,
27
- collection: true
28
- attribute :ordered_lists,
29
- Metanorma::Document::Components::Lists::OrderedList,
30
- collection: true
31
- attribute :tables,
32
- Metanorma::Document::Components::Tables::TableBlock,
33
- collection: true
34
- attribute :figures,
35
- Metanorma::Document::Components::AncillaryBlocks::FigureBlock,
36
- collection: true
37
- attribute :formulas,
38
- Metanorma::Document::Components::AncillaryBlocks::FormulaBlock,
39
- collection: true
40
- attribute :examples,
41
- Metanorma::Document::Components::AncillaryBlocks::ExampleBlock,
42
- collection: true
43
- attribute :notes,
44
- Metanorma::Document::Components::Blocks::NoteBlock,
45
- collection: true
46
- attribute :admonitions,
47
- Metanorma::Document::Components::MultiParagraph::AdmonitionBlock,
48
- collection: true
49
- attribute :sourcecode_blocks,
50
- Metanorma::Document::Components::AncillaryBlocks::SourcecodeBlock,
51
- collection: true
52
- attribute :quote_blocks,
53
- Metanorma::Document::Components::MultiParagraph::QuoteBlock,
54
- collection: true
55
- attribute :definition_lists,
56
- Metanorma::Document::Components::Lists::DefinitionList,
57
- collection: true
58
-
59
- # Terms sections within annex
60
- attribute :terms,
61
- IsoTermsSection, collection: true
62
-
63
- # Definitions sections within annex
64
- attribute :definitions,
65
- Metanorma::StandardDocument::Sections::DefinitionSection,
66
- collection: true
67
-
68
- # References sections within annex
69
- attribute :references,
70
- Metanorma::StandardDocument::Sections::StandardReferencesSection,
71
- collection: true
72
-
73
- # Page breaks
74
- attribute :pagebreak,
75
- Metanorma::Document::Components::EmptyElements::PageBreakElement,
76
- collection: true
77
-
78
- # Presentation-specific attributes
79
- attribute :semx_id, :string
80
- attribute :autonum, :string
81
- attribute :displayorder, :integer
82
- attribute :inline_header, :string
83
- attribute :anchor, :string
84
- attribute :language, :string
85
- attribute :script, :string
86
- attribute :fmt_title, Metanorma::Document::Components::Inline::FmtTitleElement
87
- attribute :fmt_xref_label,
88
- Metanorma::Document::Components::Inline::FmtXrefLabelElement, collection: true
89
- attribute :variant_title,
90
- Metanorma::Document::Components::Inline::VariantTitleElement, collection: true
91
- attribute :fmt_annotation_start,
92
- Metanorma::Document::Components::Inline::FmtAnnotationStartElement,
93
- collection: true
94
- attribute :fmt_annotation_end,
95
- Metanorma::Document::Components::Inline::FmtAnnotationEndElement,
96
- collection: true
16
+ # Override: ISO terms sections use IsoTermsSection
17
+ attribute :terms, IsoTermsSection, collection: true
97
18
 
98
19
  xml do
99
20
  element "annex"
100
21
  ordered
101
- map_attribute "id", to: :id
102
- map_attribute "number", to: :number
103
- map_attribute "obligation", to: :obligation, render_empty: true
104
- map_attribute "anchor", to: :anchor
105
- map_element "title", to: :title
106
- map_element "variant-title", to: :variant_title
107
- map_element "fmt-title", to: :fmt_title
108
- map_element "fmt-xref-label", to: :fmt_xref_label
109
- map_element "clause", to: :clause
110
- map_element "appendix", to: :appendix
111
- map_element "p", to: :paragraphs
112
- map_element "ul", to: :unordered_lists
113
- map_element "ol", to: :ordered_lists
114
- map_element "table", to: :tables
115
- map_element "figure", to: :figures
116
- map_element "formula", to: :formulas
117
- map_element "example", to: :examples
118
- map_element "note", to: :notes
119
- map_element "admonition", to: :admonitions
120
- map_element "sourcecode", to: :sourcecode_blocks
121
- map_element "quote", to: :quote_blocks
122
- map_element "dl", to: :definition_lists
123
- map_element "terms", to: :terms
124
- map_element "definitions", to: :definitions
125
- map_element "references", to: :references
126
- map_element "pagebreak", to: :pagebreak
127
- map_element "fmt-annotation-start", to: :fmt_annotation_start
128
- map_element "fmt-annotation-end", to: :fmt_annotation_end
129
- map_attribute "semx-id", to: :semx_id
130
- map_attribute "autonum", to: :autonum
131
- map_attribute "displayorder", to: :displayorder
132
- map_attribute "inline-header", to: :inline_header
133
- map_attribute "language", to: :language, render_empty: true
134
- map_attribute "script", to: :script, render_empty: true
135
- end
136
22
 
137
- # Blocks in document order
138
- def blocks
139
- @blocks ||=
140
- begin
141
- result = []
142
- each_mixed_content do |node|
143
- result << node unless node.is_a?(String)
144
- end
145
- result
146
- end
23
+ Metanorma::StandardDocument::SectionXmlMapping.apply_annex_attributes(self)
24
+ Metanorma::StandardDocument::SectionXmlMapping.apply_annex_elements(self)
147
25
  end
148
26
 
149
27
  json do
@@ -4,179 +4,22 @@ module Metanorma
4
4
  module IsoDocument
5
5
  module Sections
6
6
  # A numbered clause in an ISO/IEC document body.
7
- # Supports recursive nesting via `clause` collection.
8
- # Uses `ordered` to enable `each_mixed_content` for document-order iteration.
9
- class IsoClauseSection < Lutaml::Model::Serializable
10
- attribute :id, :string
11
- attribute :type, :string
12
- attribute :number, :string
13
- attribute :obligation, :string
14
- attribute :inline_header, :string
15
- attribute :unnumbered, :string
16
- attribute :toc, :string
17
- attribute :class_attr, :string
18
- attribute :title, Metanorma::Document::Components::Inline::TitleWithAnnotationElement
19
-
20
- # Sub-clauses (recursive)
7
+ # Extends StandardDocument::ClauseSection with ISO-specific overrides:
8
+ # - Recursive clauses are IsoClauseSection (not ClauseSection)
9
+ # - Terms sections are IsoTermsSection (not TermsSection)
10
+ class IsoClauseSection < Metanorma::StandardDocument::Sections::ClauseSection
11
+ # Override: ISO sub-clauses are IsoClauseSection
21
12
  attribute :clause, IsoClauseSection, collection: true
22
13
 
23
- # Block collections
24
- attribute :paragraphs,
25
- Metanorma::Document::Components::Paragraphs::ParagraphBlock,
26
- collection: true
27
- attribute :unordered_lists,
28
- Metanorma::Document::Components::Lists::UnorderedList,
29
- collection: true
30
- attribute :ordered_lists,
31
- Metanorma::Document::Components::Lists::OrderedList,
32
- collection: true
33
- attribute :tables,
34
- Metanorma::Document::Components::Tables::TableBlock,
35
- collection: true
36
- attribute :figures,
37
- Metanorma::Document::Components::AncillaryBlocks::FigureBlock,
38
- collection: true
39
- attribute :formulas,
40
- Metanorma::Document::Components::AncillaryBlocks::FormulaBlock,
41
- collection: true
42
- attribute :examples,
43
- Metanorma::Document::Components::AncillaryBlocks::ExampleBlock,
44
- collection: true
45
- attribute :notes,
46
- Metanorma::Document::Components::Blocks::NoteBlock,
47
- collection: true
48
- attribute :admonitions,
49
- Metanorma::Document::Components::MultiParagraph::AdmonitionBlock,
50
- collection: true
51
- attribute :sourcecode_blocks,
52
- Metanorma::Document::Components::AncillaryBlocks::SourcecodeBlock,
53
- collection: true
54
- attribute :quote_blocks,
55
- Metanorma::Document::Components::MultiParagraph::QuoteBlock,
56
- collection: true
57
- attribute :definition_lists,
58
- Metanorma::Document::Components::Lists::DefinitionList,
59
- collection: true
60
-
61
- # Amend blocks (for amendment documents)
62
- attribute :amend,
63
- Metanorma::StandardDocument::Blocks::AmendBlock
64
-
65
- # Terms sections nested inside clauses
66
- attribute :terms,
67
- IsoTermsSection, collection: true
68
-
69
- # Definitions sections nested inside clauses
70
- attribute :definitions,
71
- Metanorma::StandardDocument::Sections::DefinitionSection,
72
- collection: true
73
-
74
- # References sections nested inside clauses
75
- attribute :references,
76
- Metanorma::StandardDocument::Sections::StandardReferencesSection,
77
- collection: true
78
-
79
- # Forms (HTML input forms with tables)
80
- attribute :form,
81
- Metanorma::StandardDocument::Blocks::Form,
82
- collection: true
83
-
84
- # Requirements / recommendations / permissions
85
- attribute :requirement,
86
- Metanorma::StandardDocument::Blocks::RequirementModel,
87
- collection: true
88
- attribute :recommendation,
89
- Metanorma::StandardDocument::Blocks::RecommendationModel,
90
- collection: true
91
- attribute :permission,
92
- Metanorma::StandardDocument::Blocks::PermissionModel,
93
- collection: true
94
-
95
- # Page breaks
96
- attribute :pagebreak,
97
- Metanorma::Document::Components::EmptyElements::PageBreakElement,
98
- collection: true
99
-
100
- # Bookmarks (inline anchors)
101
- attribute :bookmark,
102
- Metanorma::Document::Components::IdElements::Bookmark,
103
- collection: true
104
-
105
- # Presentation annotation markers
106
- attribute :fmt_annotation_start,
107
- Metanorma::Document::Components::Inline::FmtAnnotationStartElement,
108
- collection: true
109
- attribute :fmt_annotation_end,
110
- Metanorma::Document::Components::Inline::FmtAnnotationEndElement,
111
- collection: true
112
-
113
- # Presentation-specific attributes
114
- attribute :anchor, :string
115
- attribute :semx_id, :string
116
- attribute :autonum, :string
117
- attribute :displayorder, :integer
118
- attribute :fmt_title, Metanorma::Document::Components::Inline::FmtTitleElement
119
- attribute :fmt_xref_label, Metanorma::Document::Components::Inline::FmtXrefLabelElement,
120
- collection: true
121
- attribute :variant_title,
122
- Metanorma::Document::Components::Inline::VariantTitleElement, collection: true
14
+ # Override: ISO terms sections use IsoTermsSection
15
+ attribute :terms, IsoTermsSection, collection: true
123
16
 
124
17
  xml do
125
18
  element "clause"
126
19
  ordered
127
- map_attribute "id", to: :id
128
- map_attribute "anchor", to: :anchor
129
- map_attribute "type", to: :type
130
- map_attribute "number", to: :number
131
- map_attribute "obligation", to: :obligation
132
- map_attribute "inline-header", to: :inline_header
133
- map_attribute "unnumbered", to: :unnumbered
134
- map_attribute "toc", to: :toc
135
- map_attribute "class", to: :class_attr
136
- map_element "title", to: :title
137
- map_element "variant-title", to: :variant_title
138
- map_element "fmt-title", to: :fmt_title
139
- map_element "fmt-xref-label", to: :fmt_xref_label
140
- map_element "clause", to: :clause
141
- map_element "p", to: :paragraphs
142
- map_element "ul", to: :unordered_lists
143
- map_element "ol", to: :ordered_lists
144
- map_element "table", to: :tables
145
- map_element "figure", to: :figures
146
- map_element "formula", to: :formulas
147
- map_element "example", to: :examples
148
- map_element "note", to: :notes
149
- map_element "admonition", to: :admonitions
150
- map_element "sourcecode", to: :sourcecode_blocks
151
- map_element "quote", to: :quote_blocks
152
- map_element "dl", to: :definition_lists
153
- map_element "amend", to: :amend
154
- map_element "terms", to: :terms
155
- map_element "definitions", to: :definitions
156
- map_element "references", to: :references
157
- map_element "form", to: :form
158
- map_element "requirement", to: :requirement
159
- map_element "recommendation", to: :recommendation
160
- map_element "permission", to: :permission
161
- map_element "pagebreak", to: :pagebreak
162
- map_element "bookmark", to: :bookmark
163
- map_element "fmt-annotation-start", to: :fmt_annotation_start
164
- map_element "fmt-annotation-end", to: :fmt_annotation_end
165
- map_attribute "semx-id", to: :semx_id
166
- map_attribute "autonum", to: :autonum
167
- map_attribute "displayorder", to: :displayorder
168
- end
169
20
 
170
- # Blocks in document order, used by JSON serialization
171
- def blocks
172
- @blocks ||=
173
- begin
174
- result = []
175
- each_mixed_content do |node|
176
- result << node unless node.is_a?(String)
177
- end
178
- result
179
- end
21
+ Metanorma::StandardDocument::SectionXmlMapping.apply_clause_attributes(self)
22
+ Metanorma::StandardDocument::SectionXmlMapping.apply_clause_elements(self)
180
23
  end
181
24
 
182
25
  json do
@@ -4,100 +4,26 @@ module Metanorma
4
4
  module IsoDocument
5
5
  module Sections
6
6
  # Foreword section of an ISO/IEC document.
7
- # Uses `ordered` to enable `each_mixed_content` for document-order iteration.
8
- # Maps direct block children (no <blocks> wrapper).
9
- class IsoForewordSection < Lutaml::Model::Serializable
10
- # Element identifier
11
- attribute :id, :string
7
+ # Extends ContentSection (blocks + optional subsections) but maps to
8
+ # the "foreword" element. ISO foreword typically has no subsections.
9
+ class IsoForewordSection < Metanorma::StandardDocument::Sections::ContentSection
10
+ xml do
11
+ element "foreword"
12
+ ordered
12
13
 
13
- # Title text (may contain fmt-annotation-end in presentation XML)
14
- attribute :title, Metanorma::Document::Components::Inline::TitleWithAnnotationElement
14
+ map_attribute "id", to: :id
15
+ map_attribute "anchor", to: :anchor
16
+ map_attribute "obligation", to: :obligation
17
+ map_attribute "semx-id", to: :semx_id
18
+ map_attribute "displayorder", to: :displayorder
15
19
 
16
- # Block collections — using base classes with correct ISO XML element names
17
- attribute :paragraphs,
18
- Metanorma::Document::Components::Paragraphs::ParagraphBlock,
19
- collection: true
20
- attribute :unordered_lists,
21
- Metanorma::Document::Components::Lists::UnorderedList,
22
- collection: true
23
- attribute :ordered_lists,
24
- Metanorma::Document::Components::Lists::OrderedList,
25
- collection: true
26
- attribute :tables,
27
- Metanorma::Document::Components::Tables::TableBlock,
28
- collection: true
29
- attribute :figures,
30
- Metanorma::Document::Components::AncillaryBlocks::FigureBlock,
31
- collection: true
32
- attribute :formulas,
33
- Metanorma::Document::Components::AncillaryBlocks::FormulaBlock,
34
- collection: true
35
- attribute :examples,
36
- Metanorma::Document::Components::AncillaryBlocks::ExampleBlock,
37
- collection: true
38
- attribute :notes,
39
- Metanorma::Document::Components::Blocks::NoteBlock,
40
- collection: true
41
- attribute :admonitions,
42
- Metanorma::Document::Components::MultiParagraph::AdmonitionBlock,
43
- collection: true
44
- attribute :sourcecode_blocks,
45
- Metanorma::Document::Components::AncillaryBlocks::SourcecodeBlock,
46
- collection: true
47
- attribute :definition_lists,
48
- Metanorma::Document::Components::Lists::DefinitionList,
49
- collection: true
50
- attribute :quote_blocks,
51
- Metanorma::Document::Components::MultiParagraph::QuoteBlock,
52
- collection: true
20
+ map_element "title", to: :title
21
+ map_element "fmt-title", to: :fmt_title
53
22
 
54
- # Presentation-specific attributes
55
- attribute :anchor, :string
56
- attribute :obligation, :string
57
- attribute :semx_id, :string
58
- attribute :displayorder, :integer
59
- attribute :fmt_title, Metanorma::Document::Components::Inline::FmtTitleElement
60
- attribute :fmt_annotation_start,
61
- Metanorma::Document::Components::Inline::FmtAnnotationStartElement, collection: true
62
- attribute :fmt_annotation_end,
63
- Metanorma::Document::Components::Inline::FmtAnnotationEndElement, collection: true
23
+ Metanorma::StandardDocument::BlockXmlMapping.apply_block_mappings(self)
64
24
 
65
- xml do
66
- element "foreword"
67
- ordered
68
- map_attribute "id", to: :id
69
- map_attribute "anchor", to: :anchor
70
- map_attribute "obligation", to: :obligation
71
- map_element "title", to: :title
72
- map_element "fmt-title", to: :fmt_title
73
- map_element "p", to: :paragraphs
74
- map_element "ul", to: :unordered_lists
75
- map_element "ol", to: :ordered_lists
76
- map_element "table", to: :tables
77
- map_element "figure", to: :figures
78
- map_element "formula", to: :formulas
79
- map_element "example", to: :examples
80
- map_element "note", to: :notes
81
- map_element "admonition", to: :admonitions
82
- map_element "sourcecode", to: :sourcecode_blocks
83
- map_element "dl", to: :definition_lists
84
- map_element "quote", to: :quote_blocks
85
- map_attribute "semx-id", to: :semx_id
86
- map_attribute "displayorder", to: :displayorder
87
25
  map_element "fmt-annotation-start", to: :fmt_annotation_start
88
- map_element "fmt-annotation-end", to: :fmt_annotation_end
89
- end
90
-
91
- # Blocks in document order, used by JSON serialization
92
- def blocks
93
- @blocks ||=
94
- begin
95
- result = []
96
- each_mixed_content do |node|
97
- result << node unless node.is_a?(String)
98
- end
99
- result
100
- end
26
+ map_element "fmt-annotation-end", to: :fmt_annotation_end
101
27
  end
102
28
 
103
29
  json do