metanorma-document 0.2.4 → 0.2.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: afb9ddd75c55018b0ff15fb41d06a1eddc5fe7448a3841a5a7fd4d4061965756
4
- data.tar.gz: 52550547f425bbcab7fb88b940eda4798ae842240ec9b53e8c7052737128cfcd
3
+ metadata.gz: 27e82b07d3f2f3edd230cf27c0b18671597160bca302e2f06ac848210d2a667b
4
+ data.tar.gz: ebab43042eaadc336ad64bb5d46389ff0e82262bbd9ecfa1e7035ed369219023
5
5
  SHA512:
6
- metadata.gz: effae9a6cd899788ea8f22a3fe78583a18094001d38e322f96c0a99cd8c78c1b24084f7ceb7514158474117dea01e471325a78c2ad0ffef30314ce2eca1f7157
7
- data.tar.gz: bdbd96deb4acee546290fbb5f3fbbb2ea7a2a9a608d0d34800c8fe6dfffc57b9063ac8ec00c7bdec5cedc5b1bccb7bfe0e5593f5ca642c3bc6aca19eaa4bc279
6
+ metadata.gz: f99ecc2897bbfef8283a6bddf89bfdb0d5a95010e2158eec5a7bc874ff5cef73f87bd317c507c5610acb30461274ad58e32693b72ed829e0efc696fc12c49d9e
7
+ data.tar.gz: 9f1fdf2062229aa79771f4cddbe7146c399a86d0474e9bf4f3a72031e1337d51c156d87dc424c614a46d216294e68f0c07987dae2ce1ebb27e763a609142654b
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Metanorma
4
4
  module Document
5
- VERSION = "0.2.4"
5
+ VERSION = "0.2.6"
6
6
  Version = VERSION
7
7
  end
8
8
  end
@@ -94,7 +94,7 @@ module Metanorma
94
94
  render_definition_list render_sourcecode render_table
95
95
  render_figure render_quote render_formula render_note
96
96
  render_image render_stem_content register_figure_entry
97
- render_liquid
97
+ render_liquid render_block_children
98
98
  ].freeze
99
99
 
100
100
  def initialize(renderer)
@@ -109,7 +109,7 @@ module Metanorma
109
109
 
110
110
  def method_missing(method_name, *args, **kwargs, &block)
111
111
  if DELEGATED_METHODS.include?(method_name)
112
- @renderer.send(method_name, *args, **kwargs, &block)
112
+ @renderer.public_send(method_name, *args, **kwargs, &block)
113
113
  else
114
114
  super
115
115
  end
@@ -476,7 +476,7 @@ module Metanorma
476
476
  return escape_html(node) if node.is_a?(String)
477
477
 
478
478
  method = lookup_dispatch(node.class, :render_registry)
479
- method ? send(method, node, **) : ""
479
+ method ? public_send(method, node, **) : ""
480
480
  end
481
481
 
482
482
  # Dispatch to the appropriate inline render method via type registry.
@@ -486,7 +486,7 @@ module Metanorma
486
486
 
487
487
  method = lookup_dispatch(element.class, :inline_registry)
488
488
  if method
489
- send(method, element)
489
+ public_send(method, element)
490
490
  elsif element.is_a?(Lutaml::Model::Serializable) && element.mixed?
491
491
  render_mixed_inline(element)
492
492
  end
@@ -567,13 +567,11 @@ module Metanorma
567
567
  register_inline_render Metanorma::Document::Components::Inline::FmtIdentifierElement, :render_mixed_inline
568
568
  register_inline_render Metanorma::Document::Components::Inline::FmtSourcecodeElement, :render_mixed_inline
569
569
 
570
- private
571
-
572
570
  def lookup_dispatch(type_class, registry_method)
573
571
  self.class.ancestors.each do |ancestor|
574
- next unless ancestor.respond_to?(registry_method)
572
+ next unless ancestor.is_a?(Class) && (ancestor == BaseRenderer || ancestor < BaseRenderer)
575
573
 
576
- registry = ancestor.send(registry_method)
574
+ registry = ancestor.public_send(registry_method)
577
575
  method_name = registry[type_class]
578
576
  return method_name if method_name
579
577
  end
@@ -876,6 +874,51 @@ module Metanorma
876
874
  @output << %(<a id="#{escape_html(safe_attr(bookmark, :id).to_s)}"></a>)
877
875
  end
878
876
 
877
+ # Renders the typed child collections of a block element (paragraphs,
878
+ # lists, nested blocks) in a standard order. Used by Drops and section
879
+ # rendering to avoid duplicating the enumeration in each consumer.
880
+ #
881
+ # +children+ is a Hash mapping attr names to render-method symbols:
882
+ # { paragraphs: :render_paragraph, ul: :render_unordered_list, ... }
883
+ #
884
+ # Each key is sent to +model+ via safe_attr; non-nil results are
885
+ # dispatched to the corresponding render method.
886
+ def render_block_children(model, children:)
887
+ children.each do |attr, render_method|
888
+ values = safe_attr(model, attr)
889
+ next if values.nil?
890
+
891
+ Array(values).each { |v| public_send(render_method, v) }
892
+ end
893
+ end
894
+
895
+ # Standard child set for container blocks (example, note, etc.)
896
+ BLOCK_CHILDREN = {
897
+ paragraphs: :render_paragraph,
898
+ ul: :render_unordered_list,
899
+ ol: :render_ordered_list,
900
+ dl: :render_definition_list,
901
+ sourcecode: :render_sourcecode,
902
+ table: :render_table,
903
+ figure: :render_figure,
904
+ quote: :render_quote,
905
+ formula: :render_formula,
906
+ }.freeze
907
+
908
+ # Minimal child set for simple blocks (admonition, note with content only)
909
+ SIMPLE_CHILDREN = {
910
+ paragraphs: :render_paragraph,
911
+ }.freeze
912
+
913
+ # Note-style child set (paragraphs + lists + dl, no nested blocks)
914
+ NOTE_CHILDREN = {
915
+ paragraphs: :render_paragraph,
916
+ ul: :render_unordered_list,
917
+ ol: :render_ordered_list,
918
+ dl: :render_definition_list,
919
+ quote: :render_quote,
920
+ }.freeze
921
+
879
922
  # --- Section rendering ---
880
923
 
881
924
  def render_basic_section(section, level: 1, **_opts)
@@ -962,7 +1005,7 @@ module Metanorma
962
1005
  # Apply optional filter (used by semx to skip semantic attrs)
963
1006
  next if allow_filter && !allow_filter.include?(attr_name)
964
1007
 
965
- coll = node.send(attr_name)
1008
+ coll = node.public_send(attr_name)
966
1009
  obj = if coll.is_a?(Array)
967
1010
  idx = indices[attr_name]
968
1011
  indices[attr_name] += 1
@@ -1056,8 +1099,9 @@ module Metanorma
1056
1099
 
1057
1100
  def raw_content_node?(node)
1058
1101
  node.is_a?(Lutaml::Model::Serializable) &&
1059
- node.respond_to?(:content) &&
1060
1102
  node.content.is_a?(String)
1103
+ rescue NoMethodError
1104
+ false
1061
1105
  end
1062
1106
 
1063
1107
  # Iterate element_order directly, preserving whitespace text nodes
@@ -1432,7 +1476,7 @@ module Metanorma
1432
1476
  return stem.math.to_xml
1433
1477
  rescue StandardError
1434
1478
  math_items = Array(stem.math)
1435
- return math_items.map { |m| m.is_a?(Lutaml::Model::Serializable) ? m.content.to_s : m.to_s }.join
1479
+ return math_items.join
1436
1480
  end
1437
1481
  end
1438
1482
  if stem.asciimath
@@ -1494,7 +1538,9 @@ module Metanorma
1494
1538
  end
1495
1539
 
1496
1540
  def safe_attr(obj, method_name)
1497
- obj.public_send(method_name) if obj.respond_to?(method_name)
1541
+ obj.public_send(method_name)
1542
+ rescue NoMethodError
1543
+ nil
1498
1544
  end
1499
1545
 
1500
1546
  def collect_index_term(element)
@@ -9,7 +9,8 @@ module Metanorma
9
9
  id = renderer.safe_attr(admonition, :id)
10
10
 
11
11
  content_html = renderer.capture_output do
12
- admonition.paragraphs&.each { |para| renderer.render_paragraph(para) }
12
+ renderer.render_block_children(admonition,
13
+ children: BaseRenderer::SIMPLE_CHILDREN)
13
14
  end
14
15
 
15
16
  new(
@@ -9,17 +9,8 @@ module Metanorma
9
9
  label = renderer.extract_block_label(example, "EXAMPLE")
10
10
 
11
11
  content_html = renderer.capture_output do
12
- if example.paragraphs && !example.paragraphs.empty?
13
- example.paragraphs.each { |para| renderer.render_paragraph(para) }
14
- end
15
- example.ul&.each { |ul| renderer.render_unordered_list(ul) }
16
- example.ol&.each { |ol| renderer.render_ordered_list(ol) }
17
- example.dl&.each { |dl| renderer.render_definition_list(dl) }
18
- example.sourcecode&.each { |sc| renderer.render_sourcecode(sc) }
19
- example.table&.each { |t| renderer.render_table(t) }
20
- example.figure&.each { |f| renderer.render_figure(f) }
21
- example.quote&.each { |q| renderer.render_quote(q) }
22
- example.formula&.each { |f| renderer.render_formula(f) }
12
+ renderer.render_block_children(example,
13
+ children: BaseRenderer::BLOCK_CHILDREN)
23
14
  end
24
15
 
25
16
  new(
@@ -14,9 +14,8 @@ module Metanorma
14
14
  else
15
15
  renderer.render_mixed_inline(note)
16
16
  end
17
- note.ul&.each { |ul| renderer.render_unordered_list(ul) }
18
- note.ol&.each { |ol| renderer.render_ordered_list(ol) }
19
- note.dl&.then { |dl| renderer.render_definition_list(dl) }
17
+ renderer.render_block_children(note,
18
+ children: BaseRenderer::NOTE_CHILDREN)
20
19
  end
21
20
 
22
21
  new(
@@ -154,8 +154,6 @@ module Metanorma
154
154
  val.strip.empty? ? nil : val
155
155
  end
156
156
 
157
- private
158
-
159
157
  # --- Top-level document rendering ---
160
158
 
161
159
  def render_document(doc, **_opts)
@@ -19,8 +19,6 @@ module Metanorma
19
19
  register_render Metanorma::StandardDocument::Sections::FloatingTitle, :render_floating_title
20
20
  register_render Metanorma::StandardDocument::Blocks::AmendBlock, :render_amend_block
21
21
 
22
- private
23
-
24
22
  # --- Top-level document rendering ---
25
23
 
26
24
  def render_standard_document(doc, **_opts)
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.2.4
4
+ version: 0.2.6
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-05-06 00:00:00.000000000 Z
11
+ date: 2026-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model