metanorma-document 0.3.0 → 0.5.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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/BUGS.sts/08-list-items-duplicate-bullets.md +45 -0
  3. data/CLAUDE.md +3 -2
  4. data/Rakefile +30 -5
  5. data/data/stylesheets/components/header.css +3 -5
  6. data/data/stylesheets/components/lists.css +14 -0
  7. data/frontend/dist/app.css +1 -0
  8. data/frontend/dist/app.iife.js +24 -0
  9. data/frontend/package-lock.json +7 -505
  10. data/frontend/tailwind.config.js +5 -0
  11. data/lib/metanorma/{oiml_document → csa_document}/root.rb +2 -2
  12. data/lib/metanorma/csa_document.rb +9 -0
  13. data/lib/metanorma/document/cli.rb +52 -0
  14. data/lib/metanorma/document/components/ancillary_blocks/sourcecode_body.rb +14 -0
  15. data/lib/metanorma/document/components/inline/comma_element.rb +3 -0
  16. data/lib/metanorma/document/components/inline/enum_comma_element.rb +3 -0
  17. data/lib/metanorma/document/components/inline/eref_element.rb +4 -1
  18. data/lib/metanorma/document/components/inline/fmt_termsource_element.rb +4 -2
  19. data/lib/metanorma/document/components/inline/math_element.rb +13 -7
  20. data/lib/metanorma/document/components/inline/vocabulary.rb +4 -0
  21. data/lib/metanorma/document/components/multi_paragraph/admonition_block.rb +6 -1
  22. data/lib/metanorma/document/components/paragraphs/paragraph_block.rb +3 -0
  23. data/lib/metanorma/document/components/reference_elements/callout.rb +3 -2
  24. data/lib/metanorma/document/components/tables/table_cell.rb +3 -0
  25. data/lib/metanorma/document/elements/input.rb +44 -0
  26. data/lib/metanorma/document/elements.rb +1 -0
  27. data/lib/metanorma/document/relaton/address.rb +5 -0
  28. data/lib/metanorma/document/relaton/affiliation.rb +3 -0
  29. data/lib/metanorma/document/relaton/bib_item_size.rb +8 -9
  30. data/lib/metanorma/document/relaton/bib_item_type.rb +3 -0
  31. data/lib/metanorma/document/relaton/bibliographic_date.rb +5 -0
  32. data/lib/metanorma/document/relaton/contact_method.rb +5 -0
  33. data/lib/metanorma/document/relaton/contribution_info.rb +6 -2
  34. data/lib/metanorma/document/relaton/contributor.rb +4 -0
  35. data/lib/metanorma/document/relaton/contributor_role.rb +3 -0
  36. data/lib/metanorma/document/relaton/copyright_association.rb +3 -0
  37. data/lib/metanorma/document/relaton/copyright_owner.rb +3 -0
  38. data/lib/metanorma/document/relaton/date_time.rb +3 -0
  39. data/lib/metanorma/document/relaton/document_identifier.rb +4 -0
  40. data/lib/metanorma/document/relaton/document_relation.rb +8 -0
  41. data/lib/metanorma/document/relaton/document_status.rb +4 -0
  42. data/lib/metanorma/document/relaton/formatted_address.rb +4 -0
  43. data/lib/metanorma/document/relaton/full_name.rb +14 -3
  44. data/lib/metanorma/document/relaton/keyword_type.rb +3 -0
  45. data/lib/metanorma/document/relaton/locality_stack.rb +6 -9
  46. data/lib/metanorma/document/relaton/localized_name.rb +8 -5
  47. data/lib/metanorma/document/relaton/logo_element.rb +5 -0
  48. data/lib/metanorma/document/relaton/medium_type.rb +5 -16
  49. data/lib/metanorma/document/relaton/org_identifier.rb +2 -0
  50. data/lib/metanorma/document/relaton/org_subdivision.rb +2 -0
  51. data/lib/metanorma/document/relaton/org_subdivision_identifier.rb +2 -0
  52. data/lib/metanorma/document/relaton/organization.rb +3 -0
  53. data/lib/metanorma/document/relaton/person.rb +7 -1
  54. data/lib/metanorma/document/relaton/person_identifier.rb +3 -0
  55. data/lib/metanorma/document/relaton/place_type.rb +5 -0
  56. data/lib/metanorma/document/relaton/region_element.rb +3 -9
  57. data/lib/metanorma/document/relaton/relaton_collection.rb +2 -0
  58. data/lib/metanorma/document/relaton/series_type.rb +7 -0
  59. data/lib/metanorma/document/relaton/typed_note.rb +4 -0
  60. data/lib/metanorma/document/relaton/typed_title_string.rb +4 -0
  61. data/lib/metanorma/document/relaton/typed_uri.rb +3 -8
  62. data/lib/metanorma/document/relaton/validity_type.rb +8 -10
  63. data/lib/metanorma/document/relaton/variant_full_name.rb +3 -0
  64. data/lib/metanorma/document/relaton/variant_org_name.rb +3 -0
  65. data/lib/metanorma/document/relaton/version_info.rb +5 -0
  66. data/lib/metanorma/document/relaton/vocab_id_type.rb +6 -12
  67. data/lib/metanorma/document/relaton.rb +0 -14
  68. data/lib/metanorma/document/version.rb +1 -1
  69. data/lib/metanorma/document.rb +2 -1
  70. data/lib/metanorma/html/asset_pipeline.rb +1 -0
  71. data/lib/metanorma/html/base_renderer.rb +106 -236
  72. data/lib/metanorma/html/concerns/metadata_extraction.rb +61 -0
  73. data/lib/metanorma/html/concerns/presentation_validation.rb +61 -0
  74. data/lib/metanorma/html/concerns/svg_processing.rb +32 -0
  75. data/lib/metanorma/html/concerns/text_extraction.rb +93 -0
  76. data/lib/metanorma/html/concerns/toc_registry.rb +47 -0
  77. data/lib/metanorma/html/csa_renderer.rb +9 -0
  78. data/lib/metanorma/html/drops/figure_drop.rb +33 -10
  79. data/lib/metanorma/html/drops/sourcecode_drop.rb +3 -6
  80. data/lib/metanorma/html/flavor.rb +6 -1
  81. data/lib/metanorma/html/generator.rb +8 -8
  82. data/lib/metanorma/html/iso_renderer.rb +0 -142
  83. data/lib/metanorma/html/renderers/block_renderer.rb +41 -5
  84. data/lib/metanorma/html/renderers/element_order_traversal.rb +15 -1
  85. data/lib/metanorma/html/renderers/inline_renderer.rb +16 -76
  86. data/lib/metanorma/html/standard_renderer.rb +195 -35
  87. data/lib/metanorma/html/templates/_list_item.html.liquid +1 -1
  88. data/lib/metanorma/html/theme.rb +38 -11
  89. data/lib/metanorma/html.rb +1 -52
  90. data/lib/metanorma/iso_document/sections/iso_preface.rb +27 -13
  91. data/lib/metanorma/mirror/default_registry.rb +21 -0
  92. data/lib/metanorma/mirror/handlers/inline/catalog.rb +7 -12
  93. data/lib/metanorma/mirror/handlers/inline/rich_html_renderer.rb +2 -3
  94. data/lib/metanorma/mirror/handlers/sourcecode.rb +1 -1
  95. data/lib/metanorma/mirror/model/guide.rb +3 -2
  96. data/lib/metanorma/mirror/output/formats/inline_format.rb +64 -3
  97. data/lib/metanorma/mirror/output/pipeline.rb +1 -0
  98. data/lib/metanorma/mirror/output.rb +0 -2
  99. data/lib/metanorma/mirror/rewriter.rb +3 -1
  100. data/lib/metanorma/registers/setup.rb +6 -2
  101. data/lib/metanorma/standard_document/annotation_container.rb +2 -0
  102. data/lib/metanorma/standard_document/elements/input.rb +4 -25
  103. data/lib/metanorma/standard_document/metadata/metanorma_extension.rb +12 -2
  104. data/lib/metanorma/standard_document/metadata/presentation_metadata.rb +107 -0
  105. data/lib/metanorma/standard_document/metadata/semantic_metadata.rb +18 -0
  106. data/lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb +19 -0
  107. data/lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb +34 -0
  108. data/lib/metanorma/standard_document/metadata/unitsml/dimension.rb +39 -0
  109. data/lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb +19 -0
  110. data/lib/metanorma/standard_document/metadata/unitsml/electric_current.rb +19 -0
  111. data/lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb +23 -0
  112. data/lib/metanorma/standard_document/metadata/unitsml/length.rb +19 -0
  113. data/lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb +19 -0
  114. data/lib/metanorma/standard_document/metadata/unitsml/mass.rb +19 -0
  115. data/lib/metanorma/standard_document/metadata/unitsml/namespace.rb +17 -0
  116. data/lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb +19 -0
  117. data/lib/metanorma/standard_document/metadata/unitsml/prefix.rb +30 -0
  118. data/lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb +21 -0
  119. data/lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb +19 -0
  120. data/lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb +21 -0
  121. data/lib/metanorma/standard_document/metadata/unitsml/quantity.rb +28 -0
  122. data/lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb +21 -0
  123. data/lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb +19 -0
  124. data/lib/metanorma/standard_document/metadata/unitsml/root_units.rb +19 -0
  125. data/lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb +19 -0
  126. data/lib/metanorma/standard_document/metadata/unitsml/time.rb +19 -0
  127. data/lib/metanorma/standard_document/metadata/unitsml/unit.rb +32 -0
  128. data/lib/metanorma/standard_document/metadata/unitsml/unit_name.rb +21 -0
  129. data/lib/metanorma/standard_document/metadata/unitsml/unit_set.rb +19 -0
  130. data/lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb +36 -0
  131. data/lib/metanorma/standard_document/metadata/unitsml/unit_system.rb +23 -0
  132. data/lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb +28 -0
  133. data/lib/metanorma/standard_document/metadata/unitsml.rb +39 -0
  134. data/lib/metanorma/standard_document/metadata.rb +4 -0
  135. data/lib/metanorma/standard_document/sections/misc_container.rb +8 -6
  136. data/lib/metanorma/standard_document/sections/sections.rb +7 -0
  137. data/lib/metanorma/un_document/blocks/un_admonition_block.rb +86 -0
  138. data/lib/metanorma/un_document/blocks.rb +9 -0
  139. data/lib/metanorma/un_document/root.rb +8 -0
  140. data/lib/metanorma/un_document/sections/un_abstract_section.rb +48 -0
  141. data/lib/metanorma/un_document/sections/un_preface.rb +19 -2
  142. data/lib/metanorma/un_document/sections.rb +1 -0
  143. data/lib/metanorma/un_document/un_text_element.rb +116 -0
  144. data/lib/metanorma/un_document.rb +2 -0
  145. data/script/benchmark_render.rb +35 -0
  146. data/tasks/roundtrip_samples.rake +2 -2
  147. metadata +65 -54
  148. data/.rubocop_todo.yml +0 -220
  149. data/TODO.finalize/01-split-multi-class-files.md +0 -8
  150. data/TODO.finalize/02-remove-data-dist-iso-document-frontend.md +0 -6
  151. data/TODO.finalize/03-align-frontend-iife-and-gha-build.md +0 -11
  152. data/TODO.finalize/04-theme-per-flavor-config-driven.md +0 -9
  153. data/TODO.finalize/05-migrate-all-html-to-liquid.md +0 -16
  154. data/TODO.finalize/06-integrate-pubid-library.md +0 -16
  155. data/TODO.finalize/07-replace-relaton-models-with-relaton-bib.md +0 -39
  156. data/TODO.finalize/08-refactor-renderer-architecture.md +0 -25
  157. data/TODO.finalize/09-eliminate-code-smells.md +0 -14
  158. data/TODO.finalize/10-comprehensive-spec-coverage.md +0 -24
  159. data/TODO.finalize/11-config-driven-flavor-metadata.md +0 -20
  160. data/TODO.finalize/12-add-frozen-string-literal.md +0 -6
  161. data/TODO.finalize/13-extract-composition-from-god-class.md +0 -96
  162. data/TODO.finalize/14-config-driven-section-ordering.md +0 -31
  163. data/TODO.finalize/15-theme-directories-per-flavor.md +0 -46
  164. data/TODO.finalize/16-theme-lutaml-model-schema.md +0 -44
  165. data/data/logos/oiml-logo-full-dark.svg +0 -1
  166. data/data/logos/oiml-logo-full-light.svg +0 -1
  167. data/data/logos/oiml-logo-icon-dark.svg +0 -1
  168. data/data/logos/oiml-logo-icon-light.svg +0 -1
  169. data/data/logos/oiml-logo.svg +0 -1
  170. data/data/themes/oiml.yaml +0 -56
  171. data/docs/html-renderer.adoc +0 -261
  172. data/lib/data/dist/iso_document/frontend/assets/index-mwzbzmnK.js +0 -22
  173. data/lib/data/dist/iso_document/frontend/assets/index-pGvKTNid.css +0 -1
  174. data/lib/data/dist/iso_document/frontend/assets/iso-red.svg +0 -53
  175. data/lib/data/dist/iso_document/frontend/index.html +0 -13
  176. data/lib/metanorma/document/relaton/bib_item_size_type.rb +0 -21
  177. data/lib/metanorma/document/relaton/bibliographic_date_type.rb +0 -22
  178. data/lib/metanorma/document/relaton/document_relation_type.rb +0 -31
  179. data/lib/metanorma/document/relaton/iso4217_code.rb +0 -17
  180. data/lib/metanorma/document/relaton/iso8601_date.rb +0 -17
  181. data/lib/metanorma/document/relaton/personal_identifier_type.rb +0 -21
  182. data/lib/metanorma/document/relaton/region_type.rb +0 -20
  183. data/lib/metanorma/document/relaton/series_type_type.rb +0 -21
  184. data/lib/metanorma/document/relaton/specific_locality_type.rb +0 -25
  185. data/lib/metanorma/document/relaton/title_type.rb +0 -21
  186. data/lib/metanorma/html/oiml_renderer.rb +0 -33
  187. data/lib/metanorma/mirror/output/html_renderer.rb +0 -95
  188. data/lib/metanorma/mirror/output/html_renderers/block_renderers.rb +0 -178
  189. data/lib/metanorma/mirror/output/html_renderers/inline_renderer.rb +0 -61
  190. data/lib/metanorma/mirror/output/html_renderers/list_renderers.rb +0 -96
  191. data/lib/metanorma/mirror/output/html_renderers/mark_renderers.rb +0 -41
  192. data/lib/metanorma/mirror/output/html_renderers/section_renderers.rb +0 -129
  193. data/lib/metanorma/mirror/output/html_renderers/structural_renderers.rb +0 -80
  194. data/lib/metanorma/mirror/output/html_renderers/table_renderers.rb +0 -87
  195. data/lib/metanorma/mirror/output/html_renderers.rb +0 -76
  196. data/lib/metanorma/oiml_document.rb +0 -9
  197. data/lib/metanorma/standard_document/annotation.rb +0 -37
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metanorma
4
+ module UnDocument
5
+ # UN TextElement restriction, per the current UN grammar
6
+ # (metanorma-un, lib/metanorma/un/un.rng v1.2.1):
7
+ #
8
+ # TextElement = text | em | eref | erefstack | strong | stem | sub |
9
+ # sup | tt | strike | smallcap | xref | br | hyperlink |
10
+ # bookmark
11
+ #
12
+ # UN allows only a strict subset of the isodoc inline vocabulary.
13
+ # Enforcing this structurally would require a UN-specific variant of every
14
+ # block type carrying inline content; instead this module validates the
15
+ # parsed model graph, flagging instances of excluded inline element
16
+ # classes found in inline content.
17
+ #
18
+ # Grammar-inline productions with no model class (date_inline) cannot be
19
+ # flagged here; the parser drops them before validation can see them.
20
+ module UnTextElement
21
+ # Inline element names (grammar names) permitted in UN inline content.
22
+ # `hyperlink` is the grammar production for the `<link>` element.
23
+ ALLOWED_ELEMENTS = %w[
24
+ em eref erefstack strong stem sub sup tt strike smallcap
25
+ xref br link bookmark
26
+ ].freeze
27
+
28
+ # Model classes of the isodoc TextElement productions the UN grammar
29
+ # excludes, mapped to their grammar (XML element) names.
30
+ EXCLUDED_ELEMENTS = {
31
+ Metanorma::Document::Components::TextElements::UnderlineElement => "underline",
32
+ Metanorma::Document::Components::TextElements::KeywordElement => "keyword",
33
+ Metanorma::Document::Components::TextElements::RubyElement => "ruby",
34
+ Metanorma::Document::Components::EmptyElements::HorizontalRuleElement => "hr",
35
+ Metanorma::Document::Components::EmptyElements::PageBreakElement => "pagebreak",
36
+ Metanorma::Document::Components::IdElements::Image => "image",
37
+ Metanorma::Document::Components::EmptyElements::IndexElement => "index",
38
+ Metanorma::Document::Components::ReferenceElements::IndexXrefElement => "index-xref",
39
+ Metanorma::Document::Components::Inline::ConceptElement => "concept",
40
+ Metanorma::Document::Elements::Add => "add",
41
+ Metanorma::Document::Elements::Del => "del",
42
+ Metanorma::Document::Components::Inline::SpanElement => "span",
43
+ }.freeze
44
+
45
+ # Model classes whose content model is inline text; an excluded instance
46
+ # under one of these is an inline use. Block-level occurrences (e.g.
47
+ # Image under FigureBlock, PageBreakElement under ClauseSection) are
48
+ # legal. ParagraphWithFootnote inherits from ParagraphBlock.
49
+ INLINE_CONTAINERS = [
50
+ Metanorma::Document::Components::Paragraphs::ParagraphBlock,
51
+ Metanorma::Document::Components::Inline::TitleWithAnnotationElement,
52
+ Metanorma::Document::Components::Inline::VariantTitleElement,
53
+ Metanorma::Document::Components::TextElements::TextElement,
54
+ Metanorma::Document::Components::Lists::DtElement,
55
+ Metanorma::Document::Components::Tables::TableCell,
56
+ ].freeze
57
+
58
+ # fmt-* classes wrap presentation-rendered copies of content, where
59
+ # `<span>` is rendering furniture rather than semantic inline markup.
60
+ FURNITURE_CLASS_PATTERN = /(^|::)Fmt/
61
+
62
+ # Returns an array of human-readable error strings for every excluded
63
+ # inline element instance in the given model tree; empty when valid.
64
+ def self.validate(model)
65
+ errors = []
66
+ walk(model, false, errors, {}.compare_by_identity)
67
+ errors
68
+ end
69
+
70
+ def self.walk(node, inline, errors, visited)
71
+ return unless node.is_a?(Lutaml::Model::Serializable)
72
+ return if visited[node]
73
+
74
+ visited[node] = true
75
+
76
+ furniture = furniture?(node)
77
+ excluded = furniture ? nil : excluded_name(node)
78
+ if inline && excluded
79
+ errors << "UN grammar forbids <#{excluded}> in inline " \
80
+ "content (#{node.class.name})"
81
+ end
82
+
83
+ child_inline = furniture ? false : inline || inline_container?(node)
84
+ each_child(node) { |child| walk(child, child_inline, errors, visited) }
85
+ end
86
+
87
+ # Iterates the model-valued children of a node. Attribute values are
88
+ # read via instance_variable_get, mirroring lutaml-model's own
89
+ # attribute access (Serialize#validate_attribute!) — the project's
90
+ # invariant specs forbid dynamic dispatch methods in model code.
91
+ def self.each_child(node)
92
+ node.class.attributes.each_key do |name|
93
+ value = node.instance_variable_get(:"@#{name}")
94
+ if value.is_a?(Enumerable) && !value.is_a?(String)
95
+ value.each { |item| yield item if item.is_a?(Lutaml::Model::Serializable) }
96
+ elsif value.is_a?(Lutaml::Model::Serializable)
97
+ yield value
98
+ end
99
+ end
100
+ end
101
+
102
+ def self.excluded_name(node)
103
+ pair = EXCLUDED_ELEMENTS.find { |klass, _| node.is_a?(klass) }
104
+ pair&.last
105
+ end
106
+
107
+ def self.inline_container?(node)
108
+ INLINE_CONTAINERS.any? { |klass| node.is_a?(klass) }
109
+ end
110
+
111
+ def self.furniture?(node)
112
+ FURNITURE_CLASS_PATTERN.match?(node.class.name)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -2,9 +2,11 @@
2
2
 
3
3
  module Metanorma
4
4
  module UnDocument
5
+ autoload :Blocks, "metanorma/un_document/blocks"
5
6
  autoload :Metadata, "metanorma/un_document/metadata"
6
7
  autoload :Root, "metanorma/un_document/root"
7
8
  autoload :Sections, "metanorma/un_document/sections"
9
+ autoload :UnTextElement, "metanorma/un_document/un_text_element"
8
10
  end
9
11
  end
10
12
 
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Benchmark: parse + HTML-render a presentation XML fixture.
4
+ #
5
+ # Usage:
6
+ # bundle install # benchmark-ips is a dev dependency
7
+ # bundle exec ruby script/benchmark_render.rb [fixture.xml]
8
+
9
+ require "benchmark/ips"
10
+ require_relative "../lib/metanorma/document"
11
+ require_relative "../lib/metanorma/html"
12
+
13
+ fixture = ARGV[0] ||
14
+ File.expand_path("../spec/fixtures/iso/is/document-en.presentation.xml",
15
+ __dir__)
16
+ xml = File.read(fixture)
17
+ puts "Fixture: #{fixture} (#{(xml.size / 1024.0).round(1)} KB)"
18
+
19
+ doc = Metanorma::IsoDocument::Root.from_xml(xml)
20
+ html = Metanorma::Html::Generator.generate(doc)
21
+ puts "Sanity: rendered #{html.size} bytes of HTML"
22
+
23
+ Benchmark.ips do |x|
24
+ x.config(time: 5, warmup: 1)
25
+
26
+ x.report("parse") do
27
+ Metanorma::IsoDocument::Root.from_xml(xml)
28
+ end
29
+
30
+ x.report("render") do
31
+ Metanorma::Html::Generator.generate(doc)
32
+ end
33
+
34
+ x.compare!
35
+ end
@@ -37,11 +37,11 @@ module RoundtripSamples
37
37
 
38
38
  # Maps mn-samples-* repo name to the model class for round-tripping.
39
39
  # nil means no document model exists yet — reported as "no_model".
40
+ # OIML moved to the metanorma-oiml gem — its roundtrip lives there.
40
41
  FLAVOR_MODEL_MAP = {
41
42
  "iso" => Metanorma::IsoDocument::Root,
42
43
  "iec" => Metanorma::IecDocument::Root,
43
44
  "ieee" => Metanorma::IeeeDocument::Root,
44
- "oiml" => Metanorma::OimlDocument::Root,
45
45
  "iho" => Metanorma::IhoDocument::Root,
46
46
  "cc" => Metanorma::CcDocument::Root,
47
47
  "bipm" => Metanorma::BipmDocument::Root,
@@ -49,7 +49,7 @@ module RoundtripSamples
49
49
  "ogc" => Metanorma::OgcDocument::Root,
50
50
  "ribose" => Metanorma::RiboseDocument::Root,
51
51
  "ietf" => Metanorma::IetfDocument::Root,
52
- "csa" => nil,
52
+ "csa" => Metanorma::CsaDocument::Root,
53
53
  "un" => nil,
54
54
  }.freeze
55
55
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-document
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-18 00:00:00.000000000 Z
11
+ date: 2026-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.4'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: pubid
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -68,28 +82,12 @@ executables:
68
82
  extensions: []
69
83
  extra_rdoc_files: []
70
84
  files:
71
- - ".rubocop_todo.yml"
85
+ - BUGS.sts/08-list-items-duplicate-bullets.md
72
86
  - CHANGELOG.md
73
87
  - CLAUDE.md
74
88
  - LICENSE.txt
75
89
  - README.adoc
76
90
  - Rakefile
77
- - TODO.finalize/01-split-multi-class-files.md
78
- - TODO.finalize/02-remove-data-dist-iso-document-frontend.md
79
- - TODO.finalize/03-align-frontend-iife-and-gha-build.md
80
- - TODO.finalize/04-theme-per-flavor-config-driven.md
81
- - TODO.finalize/05-migrate-all-html-to-liquid.md
82
- - TODO.finalize/06-integrate-pubid-library.md
83
- - TODO.finalize/07-replace-relaton-models-with-relaton-bib.md
84
- - TODO.finalize/08-refactor-renderer-architecture.md
85
- - TODO.finalize/09-eliminate-code-smells.md
86
- - TODO.finalize/10-comprehensive-spec-coverage.md
87
- - TODO.finalize/11-config-driven-flavor-metadata.md
88
- - TODO.finalize/12-add-frozen-string-literal.md
89
- - TODO.finalize/13-extract-composition-from-god-class.md
90
- - TODO.finalize/14-config-driven-section-ordering.md
91
- - TODO.finalize/15-theme-directories-per-flavor.md
92
- - TODO.finalize/16-theme-lutaml-model-schema.md
93
91
  - data/javascripts/components/mn-code-copy.js
94
92
  - data/javascripts/components/mn-footnotes.js
95
93
  - data/javascripts/components/mn-glossary.js
@@ -112,11 +110,6 @@ files:
112
110
  - data/logos/itu-logo.svg
113
111
  - data/logos/metanorma-logo.svg
114
112
  - data/logos/ogc-logo.svg
115
- - data/logos/oiml-logo-full-dark.svg
116
- - data/logos/oiml-logo-full-light.svg
117
- - data/logos/oiml-logo-icon-dark.svg
118
- - data/logos/oiml-logo-icon-light.svg
119
- - data/logos/oiml-logo.svg
120
113
  - data/logos/pdfa-logo.svg
121
114
  - data/stylesheets/base/_dark.css
122
115
  - data/stylesheets/base/_layout.css
@@ -136,6 +129,7 @@ files:
136
129
  - data/stylesheets/components/header.css
137
130
  - data/stylesheets/components/index.css
138
131
  - data/stylesheets/components/inline.css
132
+ - data/stylesheets/components/lists.css
139
133
  - data/stylesheets/components/note.css
140
134
  - data/stylesheets/components/progress.css
141
135
  - data/stylesheets/components/search.css
@@ -155,11 +149,11 @@ files:
155
149
  - data/themes/iso.yaml
156
150
  - data/themes/itu.yaml
157
151
  - data/themes/ogc.yaml
158
- - data/themes/oiml.yaml
159
152
  - data/themes/pdfa.yaml
160
153
  - data/themes/ribose.yaml
161
- - docs/html-renderer.adoc
162
154
  - exe/metanorma-document
155
+ - frontend/dist/app.css
156
+ - frontend/dist/app.iife.js
163
157
  - frontend/e2e/sample-html.test.ts
164
158
  - frontend/index.html
165
159
  - frontend/package-lock.json
@@ -208,10 +202,6 @@ files:
208
202
  - frontend/tsconfig.node.json
209
203
  - frontend/vite.config.ts
210
204
  - frontend/vitest.e2e.config.ts
211
- - lib/data/dist/iso_document/frontend/assets/index-mwzbzmnK.js
212
- - lib/data/dist/iso_document/frontend/assets/index-pGvKTNid.css
213
- - lib/data/dist/iso_document/frontend/assets/iso-red.svg
214
- - lib/data/dist/iso_document/frontend/index.html
215
205
  - lib/metanorma/basic_document.rb
216
206
  - lib/metanorma/basic_document/ancillary_blocks.rb
217
207
  - lib/metanorma/basic_document/ancillary_blocks/example_block.rb
@@ -361,6 +351,8 @@ files:
361
351
  - lib/metanorma/collection/doc_container.rb
362
352
  - lib/metanorma/collection/entry.rb
363
353
  - lib/metanorma/collection/root.rb
354
+ - lib/metanorma/csa_document.rb
355
+ - lib/metanorma/csa_document/root.rb
364
356
  - lib/metanorma/document.rb
365
357
  - lib/metanorma/document/cli.rb
366
358
  - lib/metanorma/document/components.rb
@@ -570,15 +562,14 @@ files:
570
562
  - lib/metanorma/document/elements.rb
571
563
  - lib/metanorma/document/elements/add.rb
572
564
  - lib/metanorma/document/elements/del.rb
565
+ - lib/metanorma/document/elements/input.rb
573
566
  - lib/metanorma/document/relaton.rb
574
567
  - lib/metanorma/document/relaton/address.rb
575
568
  - lib/metanorma/document/relaton/affiliation.rb
576
569
  - lib/metanorma/document/relaton/bib_item_locality.rb
577
570
  - lib/metanorma/document/relaton/bib_item_size.rb
578
- - lib/metanorma/document/relaton/bib_item_size_type.rb
579
571
  - lib/metanorma/document/relaton/bib_item_type.rb
580
572
  - lib/metanorma/document/relaton/bibliographic_date.rb
581
- - lib/metanorma/document/relaton/bibliographic_date_type.rb
582
573
  - lib/metanorma/document/relaton/contact_method.rb
583
574
  - lib/metanorma/document/relaton/contribution_info.rb
584
575
  - lib/metanorma/document/relaton/contributor.rb
@@ -588,13 +579,10 @@ files:
588
579
  - lib/metanorma/document/relaton/date_time.rb
589
580
  - lib/metanorma/document/relaton/document_identifier.rb
590
581
  - lib/metanorma/document/relaton/document_relation.rb
591
- - lib/metanorma/document/relaton/document_relation_type.rb
592
582
  - lib/metanorma/document/relaton/document_status.rb
593
583
  - lib/metanorma/document/relaton/edition.rb
594
584
  - lib/metanorma/document/relaton/formatted_address.rb
595
585
  - lib/metanorma/document/relaton/full_name.rb
596
- - lib/metanorma/document/relaton/iso4217_code.rb
597
- - lib/metanorma/document/relaton/iso8601_date.rb
598
586
  - lib/metanorma/document/relaton/keyword_type.rb
599
587
  - lib/metanorma/document/relaton/locality_stack.rb
600
588
  - lib/metanorma/document/relaton/localized_name.rb
@@ -606,17 +594,12 @@ files:
606
594
  - lib/metanorma/document/relaton/organization.rb
607
595
  - lib/metanorma/document/relaton/person.rb
608
596
  - lib/metanorma/document/relaton/person_identifier.rb
609
- - lib/metanorma/document/relaton/personal_identifier_type.rb
610
597
  - lib/metanorma/document/relaton/phone.rb
611
598
  - lib/metanorma/document/relaton/place_type.rb
612
599
  - lib/metanorma/document/relaton/price_type.rb
613
600
  - lib/metanorma/document/relaton/region_element.rb
614
- - lib/metanorma/document/relaton/region_type.rb
615
601
  - lib/metanorma/document/relaton/relaton_collection.rb
616
602
  - lib/metanorma/document/relaton/series_type.rb
617
- - lib/metanorma/document/relaton/series_type_type.rb
618
- - lib/metanorma/document/relaton/specific_locality_type.rb
619
- - lib/metanorma/document/relaton/title_type.rb
620
603
  - lib/metanorma/document/relaton/typed_note.rb
621
604
  - lib/metanorma/document/relaton/typed_title_string.rb
622
605
  - lib/metanorma/document/relaton/typed_uri.rb
@@ -644,6 +627,12 @@ files:
644
627
  - lib/metanorma/html/component/footnote_collector.rb
645
628
  - lib/metanorma/html/component/index_section.rb
646
629
  - lib/metanorma/html/component/index_term_collector.rb
630
+ - lib/metanorma/html/concerns/metadata_extraction.rb
631
+ - lib/metanorma/html/concerns/presentation_validation.rb
632
+ - lib/metanorma/html/concerns/svg_processing.rb
633
+ - lib/metanorma/html/concerns/text_extraction.rb
634
+ - lib/metanorma/html/concerns/toc_registry.rb
635
+ - lib/metanorma/html/csa_renderer.rb
647
636
  - lib/metanorma/html/drops.rb
648
637
  - lib/metanorma/html/drops/admonition_drop.rb
649
638
  - lib/metanorma/html/drops/biblio_entry_drop.rb
@@ -667,7 +656,6 @@ files:
667
656
  - lib/metanorma/html/iso_renderer.rb
668
657
  - lib/metanorma/html/itu_renderer.rb
669
658
  - lib/metanorma/html/ogc_renderer.rb
670
- - lib/metanorma/html/oiml_renderer.rb
671
659
  - lib/metanorma/html/pdfa_renderer.rb
672
660
  - lib/metanorma/html/renderer_delegation.rb
673
661
  - lib/metanorma/html/renderers.rb
@@ -884,15 +872,6 @@ files:
884
872
  - lib/metanorma/mirror/output/formats.rb
885
873
  - lib/metanorma/mirror/output/formats/base_format.rb
886
874
  - lib/metanorma/mirror/output/formats/inline_format.rb
887
- - lib/metanorma/mirror/output/html_renderer.rb
888
- - lib/metanorma/mirror/output/html_renderers.rb
889
- - lib/metanorma/mirror/output/html_renderers/block_renderers.rb
890
- - lib/metanorma/mirror/output/html_renderers/inline_renderer.rb
891
- - lib/metanorma/mirror/output/html_renderers/list_renderers.rb
892
- - lib/metanorma/mirror/output/html_renderers/mark_renderers.rb
893
- - lib/metanorma/mirror/output/html_renderers/section_renderers.rb
894
- - lib/metanorma/mirror/output/html_renderers/structural_renderers.rb
895
- - lib/metanorma/mirror/output/html_renderers/table_renderers.rb
896
875
  - lib/metanorma/mirror/output/pipeline.rb
897
876
  - lib/metanorma/mirror/output/pipeline_context.rb
898
877
  - lib/metanorma/mirror/rewriter.rb
@@ -916,8 +895,6 @@ files:
916
895
  - lib/metanorma/ogc_document/metadata/ogc_bib_data_extension_type.rb
917
896
  - lib/metanorma/ogc_document/metadata/ogc_bibliographic_item.rb
918
897
  - lib/metanorma/ogc_document/root.rb
919
- - lib/metanorma/oiml_document.rb
920
- - lib/metanorma/oiml_document/root.rb
921
898
  - lib/metanorma/plateau_document.rb
922
899
  - lib/metanorma/plateau_document/metadata.rb
923
900
  - lib/metanorma/plateau_document/metadata/plateau_bibliographic_item.rb
@@ -930,7 +907,6 @@ files:
930
907
  - lib/metanorma/ribose_document/metadata/ribose_bibliographic_item.rb
931
908
  - lib/metanorma/ribose_document/root.rb
932
909
  - lib/metanorma/standard_document.rb
933
- - lib/metanorma/standard_document/annotation.rb
934
910
  - lib/metanorma/standard_document/annotation_container.rb
935
911
  - lib/metanorma/standard_document/block_attributes.rb
936
912
  - lib/metanorma/standard_document/blocks.rb
@@ -988,10 +964,40 @@ files:
988
964
  - lib/metanorma/standard_document/metadata/editorial_group_type.rb
989
965
  - lib/metanorma/standard_document/metadata/ics_type.rb
990
966
  - lib/metanorma/standard_document/metadata/metanorma_extension.rb
967
+ - lib/metanorma/standard_document/metadata/presentation_metadata.rb
968
+ - lib/metanorma/standard_document/metadata/semantic_metadata.rb
991
969
  - lib/metanorma/standard_document/metadata/standard_bib_data.rb
992
970
  - lib/metanorma/standard_document/metadata/standard_bib_data_extension_type.rb
993
971
  - lib/metanorma/standard_document/metadata/structured_identifier_type.rb
994
972
  - lib/metanorma/standard_document/metadata/technical_committee_type.rb
973
+ - lib/metanorma/standard_document/metadata/unitsml.rb
974
+ - lib/metanorma/standard_document/metadata/unitsml/amount_of_substance.rb
975
+ - lib/metanorma/standard_document/metadata/unitsml/base_quantity.rb
976
+ - lib/metanorma/standard_document/metadata/unitsml/dimension.rb
977
+ - lib/metanorma/standard_document/metadata/unitsml/dimension_set.rb
978
+ - lib/metanorma/standard_document/metadata/unitsml/electric_current.rb
979
+ - lib/metanorma/standard_document/metadata/unitsml/enumerated_root_unit.rb
980
+ - lib/metanorma/standard_document/metadata/unitsml/length.rb
981
+ - lib/metanorma/standard_document/metadata/unitsml/luminous_intensity.rb
982
+ - lib/metanorma/standard_document/metadata/unitsml/mass.rb
983
+ - lib/metanorma/standard_document/metadata/unitsml/namespace.rb
984
+ - lib/metanorma/standard_document/metadata/unitsml/plane_angle.rb
985
+ - lib/metanorma/standard_document/metadata/unitsml/prefix.rb
986
+ - lib/metanorma/standard_document/metadata/unitsml/prefix_name.rb
987
+ - lib/metanorma/standard_document/metadata/unitsml/prefix_set.rb
988
+ - lib/metanorma/standard_document/metadata/unitsml/prefix_symbol.rb
989
+ - lib/metanorma/standard_document/metadata/unitsml/quantity.rb
990
+ - lib/metanorma/standard_document/metadata/unitsml/quantity_name.rb
991
+ - lib/metanorma/standard_document/metadata/unitsml/quantity_set.rb
992
+ - lib/metanorma/standard_document/metadata/unitsml/root_units.rb
993
+ - lib/metanorma/standard_document/metadata/unitsml/thermodynamic_temperature.rb
994
+ - lib/metanorma/standard_document/metadata/unitsml/time.rb
995
+ - lib/metanorma/standard_document/metadata/unitsml/unit.rb
996
+ - lib/metanorma/standard_document/metadata/unitsml/unit_name.rb
997
+ - lib/metanorma/standard_document/metadata/unitsml/unit_set.rb
998
+ - lib/metanorma/standard_document/metadata/unitsml/unit_symbol.rb
999
+ - lib/metanorma/standard_document/metadata/unitsml/unit_system.rb
1000
+ - lib/metanorma/standard_document/metadata/unitsml/unitsml_root.rb
995
1001
  - lib/metanorma/standard_document/namespace.rb
996
1002
  - lib/metanorma/standard_document/refs.rb
997
1003
  - lib/metanorma/standard_document/refs/reference_to_term.rb
@@ -1052,13 +1058,18 @@ files:
1052
1058
  - lib/metanorma/standard_document/terms/term_source_type.rb
1053
1059
  - lib/metanorma/standard_document/terms/verbal_expression.rb
1054
1060
  - lib/metanorma/un_document.rb
1061
+ - lib/metanorma/un_document/blocks.rb
1062
+ - lib/metanorma/un_document/blocks/un_admonition_block.rb
1055
1063
  - lib/metanorma/un_document/metadata.rb
1056
1064
  - lib/metanorma/un_document/metadata/un_bib_data_extension_type.rb
1057
1065
  - lib/metanorma/un_document/metadata/un_bibliographic_item.rb
1058
1066
  - lib/metanorma/un_document/root.rb
1059
1067
  - lib/metanorma/un_document/sections.rb
1068
+ - lib/metanorma/un_document/sections/un_abstract_section.rb
1060
1069
  - lib/metanorma/un_document/sections/un_preface.rb
1061
1070
  - lib/metanorma/un_document/sections/un_sections.rb
1071
+ - lib/metanorma/un_document/un_text_element.rb
1072
+ - script/benchmark_render.rb
1062
1073
  - script/render_both.rb
1063
1074
  - tasks/roundtrip_samples.rake
1064
1075
  homepage: https://github.com/metanorma/metanorma-document
@@ -1077,7 +1088,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1077
1088
  requirements:
1078
1089
  - - ">="
1079
1090
  - !ruby/object:Gem::Version
1080
- version: '3.1'
1091
+ version: '3.3'
1081
1092
  required_rubygems_version: !ruby/object:Gem::Requirement
1082
1093
  requirements:
1083
1094
  - - ">="