metanorma-standoc 3.1.10 → 3.2.1

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/anchor.rb +3 -2
  3. data/lib/metanorma/standoc/base.rb +2 -2
  4. data/lib/metanorma/standoc/biblio.rng +4 -4
  5. data/lib/metanorma/standoc/blocks.rb +4 -8
  6. data/lib/metanorma/standoc/cleanup.rb +31 -61
  7. data/lib/metanorma/standoc/cleanup_asciibib.rb +7 -10
  8. data/lib/metanorma/standoc/cleanup_attachment.rb +1 -2
  9. data/lib/metanorma/standoc/cleanup_bibdata.rb +9 -0
  10. data/lib/metanorma/standoc/cleanup_bibitem.rb +29 -2
  11. data/lib/metanorma/standoc/cleanup_block.rb +1 -2
  12. data/lib/metanorma/standoc/cleanup_boilerplate.rb +1 -2
  13. data/lib/metanorma/standoc/cleanup_footnotes.rb +1 -2
  14. data/lib/metanorma/standoc/cleanup_inline.rb +44 -4
  15. data/lib/metanorma/standoc/cleanup_maths.rb +3 -3
  16. data/lib/metanorma/standoc/cleanup_section_names.rb +1 -0
  17. data/lib/metanorma/standoc/cleanup_terms_boilerplate.rb +1 -3
  18. data/lib/metanorma/standoc/cleanup_terms_designations.rb +2 -3
  19. data/lib/metanorma/standoc/cleanup_xref.rb +14 -11
  20. data/lib/metanorma/standoc/converter.rb +7 -5
  21. data/lib/metanorma/standoc/front.rb +27 -25
  22. data/lib/metanorma/standoc/front_committee.rb +5 -5
  23. data/lib/metanorma/standoc/front_contributor.rb +14 -14
  24. data/lib/metanorma/standoc/front_ext.rb +7 -5
  25. data/lib/metanorma/standoc/front_organisation.rb +16 -21
  26. data/lib/metanorma/standoc/init.rb +31 -5
  27. data/lib/metanorma/standoc/inline.rb +31 -12
  28. data/lib/metanorma/standoc/isodoc.rng +27 -10
  29. data/lib/metanorma/standoc/lists.rb +1 -1
  30. data/lib/metanorma/standoc/localbib.rb +5 -9
  31. data/lib/metanorma/standoc/log.rb +207 -0
  32. data/lib/metanorma/standoc/macros_embed.rb +5 -3
  33. data/lib/metanorma/standoc/macros_link.rb +2 -3
  34. data/lib/metanorma/standoc/macros_terms.rb +2 -0
  35. data/lib/metanorma/standoc/ref.rb +12 -13
  36. data/lib/metanorma/standoc/ref_queue.rb +4 -6
  37. data/lib/metanorma/standoc/ref_sect.rb +3 -6
  38. data/lib/metanorma/standoc/ref_utility.rb +4 -13
  39. data/lib/metanorma/standoc/section.rb +3 -9
  40. data/lib/metanorma/standoc/spans_to_bibitem.rb +12 -1
  41. data/lib/metanorma/standoc/spans_to_bibitem_preprocessing.rb +11 -7
  42. data/lib/metanorma/standoc/table.rb +1 -1
  43. data/lib/metanorma/standoc/term_lookup_cleanup.rb +7 -18
  44. data/lib/metanorma/standoc/terms.rb +2 -4
  45. data/lib/metanorma/standoc/utils.rb +27 -2
  46. data/lib/metanorma/standoc/validate.rb +9 -17
  47. data/lib/metanorma/standoc/validate_image.rb +52 -9
  48. data/lib/metanorma/standoc/validate_schema.rb +3 -2
  49. data/lib/metanorma/standoc/validate_section.rb +3 -6
  50. data/lib/metanorma/standoc/validate_table.rb +3 -5
  51. data/lib/metanorma/standoc/validate_term.rb +4 -14
  52. data/lib/metanorma/standoc/version.rb +1 -1
  53. data/metanorma-standoc.gemspec +5 -3
  54. metadata +49 -20
@@ -57,8 +57,7 @@ module Metanorma
57
57
  orig = ""
58
58
  a and orig += "\n\tAsciimath original: #{@c.decode(a.children.to_xml)}"
59
59
  l and orig += "\n\tLatexmath original: #{@c.decode(l.children.to_xml)}"
60
- @log.add("Maths", elem,
61
- "Invalid MathML: #{math}\n #{error}#{orig}", severity: 0)
60
+ @log.add("STANDOC_33", elem, params: [math, error, orig])
62
61
  end
63
62
 
64
63
  def nested_asset_validate(doc)
@@ -85,20 +84,17 @@ module Metanorma
85
84
 
86
85
  def nested_asset_report(outer, inner, doc)
87
86
  outer.name == "figure" && inner.name == "figure" and return
88
- err =
89
- "There is an instance of #{inner.name} nested within #{outer.name}"
90
- @log.add("Style", inner, err)
87
+ @log.add("STANDOC_34", inner, params: [inner.name, outer.name])
91
88
  nested_asset_xref_report(outer, inner, doc)
92
89
  end
93
90
 
94
91
  def nested_asset_xref_report(outer, inner, _doc)
95
92
  i = @doc_xrefs[inner["anchor"]] or return
96
- err2 = "There is a crossreference to an instance of #{inner.name} " \
97
- "nested within #{outer.name}: #{i.to_xml}"
98
- @log.add("Style", i, err2)
93
+ @log.add("STANDOC_35", i, params: [inner.name, outer.name, i.to_xml])
99
94
  end
100
95
 
101
96
  def validate(doc)
97
+ @log.add_error_ranges(doc)
102
98
  content_validate(doc)
103
99
  schema_validate(formattedstr_strip(doc.dup), schema_location)
104
100
  end
@@ -107,9 +103,7 @@ module Metanorma
107
103
  # since consequences are so catastrophic
108
104
  def repeat_id_validate1(elem)
109
105
  if @doc_ids[elem["id"]]
110
- @log.add("Anchors", elem,
111
- "ID #{elem['id']} has already been " \
112
- "used at line #{@doc_ids[elem['id']][:line]}", severity: 0)
106
+ @log.add("STANDOC_36", elem, params: [elem['id'], @doc_ids[elem['id']][:line]])
113
107
  else
114
108
  @doc_ids[elem["id"]] =
115
109
  { line: elem.line, anchor: elem["anchor"] }.compact
@@ -118,9 +112,7 @@ module Metanorma
118
112
 
119
113
  def repeat_anchor_validate1(elem)
120
114
  if @doc_anchors[elem["anchor"]]
121
- @log.add("Anchors", elem,
122
- "Anchor #{elem['anchor']} has already been used at line " \
123
- "#{@doc_anchors[elem['anchor']][:line]}", severity: 0)
115
+ @log.add("STANDOC_36", elem, params: [elem['anchor'], @doc_anchors[elem['anchor']][:line]])
124
116
  else
125
117
  @doc_anchors[elem["anchor"]] = { line: elem.line, id: elem["id"] }
126
118
  @doc_anchor_seq << elem["anchor"]
@@ -174,8 +166,7 @@ module Metanorma
174
166
  doc.xpath("//#{a[0]}/@#{a[1]}").each do |x|
175
167
  @doc_xrefs[x.text] = x.parent
176
168
  @doc_anchors[x.text] and next
177
- @log.add("Anchors", x.parent,
178
- "Crossreference target #{x} is undefined", severity: 1)
169
+ @log.add("STANDOC_38", x.parent, params: [x.text])
179
170
  end
180
171
  end
181
172
  end
@@ -217,11 +208,12 @@ module Metanorma
217
208
  doc.xpath(tag).each do |t|
218
209
  body and t = t.at("./#{body}")
219
210
  empty_block?(t) or next
220
- @log.add("Blocks", t, "#{tag.sub(/^\/\//, '')} is empty", severity: 1)
211
+ @log.add("STANDOC_39", t, params: [tag.sub(/^\/\//, '')])
221
212
  end
222
213
  end
223
214
 
224
215
  def empty_block?(block)
216
+ block.nil? and return
225
217
  content = block.children.reject { |n| n.name == "name" }
226
218
  content.map do |n|
227
219
  %w(image xref eref).include?(n.name) ? n.name : n
@@ -1,4 +1,5 @@
1
1
  require "pngcheck"
2
+ require "svg_conform"
2
3
 
3
4
  module Metanorma
4
5
  module Standoc
@@ -7,6 +8,7 @@ module Metanorma
7
8
  image_exists(doc)
8
9
  image_toobig(doc)
9
10
  png_validate(doc)
11
+ svg_validate(doc)
10
12
  end
11
13
 
12
14
  def image_exists(doc)
@@ -14,8 +16,7 @@ module Metanorma
14
16
  Vectory::Utils::url?(i["src"]) and next
15
17
  Vectory::Utils::datauri?(i["src"]) and next
16
18
  expand_path(i["src"]) and next
17
- @log.add("Images", i.parent,
18
- "Image not found: #{i['src']}", severity: 0)
19
+ @log.add("STANDOC_44", i.parent, params: [i["src"]])
19
20
  end
20
21
  end
21
22
 
@@ -42,19 +43,61 @@ module Metanorma
42
43
  def png_validate1(img, buffer)
43
44
  PngCheck.check_buffer(buffer)
44
45
  rescue PngCheck::CorruptPngError => e
45
- @log.add("Images", img.parent,
46
- "Corrupt PNG image detected: #{e.message}")
46
+ @log.add("STANDOC_45", img.parent, params: [e.message])
47
47
  end
48
48
 
49
- TOO_BIG_IMG_ERR = <<~ERR.freeze
50
- Image too large for Data URI encoding: disable Data URI encoding (`:data-uri-image: false`), or set `:data-uri-maxsize: 0`
51
- ERR
52
-
53
49
  def image_toobig(doc)
54
50
  @dataurimaxsize.zero? and return
55
51
  doc.xpath("//image").each do |i|
56
52
  i["src"].size > @dataurimaxsize and
57
- @log.add("Images", i.parent, TOO_BIG_IMG_ERR, severity: 0)
53
+ @log.add("STANDOC_46", i.parent)
54
+ end
55
+ end
56
+
57
+ def svg_validate(doc)
58
+ profile = SvgConform::Profiles.get(@svg_conform_profile)
59
+ remediatable = profile.remediation_count.positive?
60
+ engine = SvgConform::RemediationEngine.new(profile)
61
+ doc.xpath("//m:svg", "m" => SVG_NS).each do |s|
62
+ d, result = svg_validate1(profile, s)
63
+ remediatable && !result.valid? and
64
+ svg_validate_fix(profile, engine, d, s, result)
65
+ end
66
+ end
67
+
68
+ def svg_validate1(profile, svg)
69
+ d = SvgConform::Document.from_content(svg.to_xml)
70
+ r = profile.validate(d)
71
+ svg_error("STANDOC_55", svg, r.errors)
72
+ svg_error("STANDOC_57", svg, r.warnings)
73
+ [d, r]
74
+ end
75
+
76
+ def svg_validate_fix(profile, engine, doc, svg, result)
77
+ remeds = engine.apply_remediations(doc, result)
78
+ svg_remed_log(remeds, svg)
79
+ result = profile.validate(doc)
80
+ svg_error("STANDOC_56", svg, result.errors) # we still have errors
81
+ svg.replace(doc.to_xml)
82
+ end
83
+
84
+ def svg_remed_log(remeds, svg)
85
+ remeds.each do |e|
86
+ e.changes_made.each do |c|
87
+ @log.add("STANDOC_58", svg,
88
+ params: [e.remediation_id, e.message,
89
+ c[:type], c[:message], c[:node]])
90
+ end
91
+ end
92
+ end
93
+
94
+ def svg_error(id, svg, errors)
95
+ errors.each do |err|
96
+ err.respond_to?(:element) && err.element and
97
+ elem = " Element: #{err.element}"
98
+ err.respond_to?(:location) && err.location and
99
+ loc = " Location: #{err.location}"
100
+ @log.add(id, svg, params: [err.rule&.id, err.message, elem, loc])
58
101
  end
59
102
  end
60
103
  end
@@ -30,8 +30,9 @@ module Metanorma
30
30
  errors = Jing.new(schema, encoding: "UTF-8").validate(file.path)
31
31
  warn "Syntax Valid!" if errors.none?
32
32
  errors.each do |e|
33
- @log.add("Metanorma XML Syntax",
34
- "XML Line #{'%06d' % e[:line]}:#{e[:column]}", e[:message])
33
+ @log.add("STANDOC_7",
34
+ "XML Line #{'%06d' % e[:line]}:#{e[:column]}",
35
+ params: [e[:message]])
35
36
  end
36
37
  end
37
38
 
@@ -19,16 +19,14 @@ module Metanorma
19
19
 
20
20
  def callouts_error(elem, callouts, annotations)
21
21
  if callouts.size != annotations.size && !annotations.empty?
22
- err = "mismatch of callouts (#{callouts.size}) and annotations " \
23
- "(#{annotations.size})"
24
- @log.add("Crossreferences", elem, err, severity: 0)
22
+ @log.add("STANDOC_47", elem, params: [callouts.size, annotations.size])
25
23
  end
26
24
  end
27
25
 
28
26
  def style_warning(node, msg, text = nil)
29
27
  w = msg
30
28
  w += ": #{text}" if text
31
- @log.add("Style", node, w)
29
+ @log.add("STANDOC_48", node, params: [w])
32
30
  end
33
31
 
34
32
  def reject_metanorma_extension
@@ -69,8 +67,7 @@ module Metanorma
69
67
  doc.xpath("//references[@normative = 'true']/bibitem").each do |b|
70
68
  docid = b.at("./docidentifier[@type = 'metanorma']") or next
71
69
  /^\[\d+\]$/.match?(docid.text) or next
72
- @log.add("Bibliography", b,
73
- "Numeric reference in normative references", severity: 1)
70
+ @log.add("STANDOC_49", b)
74
71
  end
75
72
  end
76
73
  end
@@ -17,7 +17,7 @@ module Metanorma
17
17
  def empty_table_validate(doc)
18
18
  doc.xpath("//table[not(.//tr)]").reject(&reject_metanorma_extension)
19
19
  .each do |t|
20
- @log.add("Table", t, "Empty table", severity: 0)
20
+ @log.add("STANDOC_2", t)
21
21
  end
22
22
  end
23
23
 
@@ -79,17 +79,15 @@ module Metanorma
79
79
  def maxrows_validate(table, cells2d, tablechild, mode)
80
80
  err = "are inconsistent"
81
81
  mode == "thead_row" and err = "cannot go outside #{tablechild}"
82
- err = "Table rows in table #{err}: check rowspan"
83
82
  if cells2d.any? { |x| x.size != cells2d.first.size }
84
- @log.add("Table", table, err, severity: 0)
83
+ @log.add("STANDOC_4", table, params: [err])
85
84
  end
86
85
  end
87
86
 
88
87
  # if maxcols or maxrows negative, do not check them
89
88
  def maxcols_check(col, maxcols, tcell)
90
89
  if maxcols.positive? && col > maxcols
91
- @log.add("Table", tcell, "Table exceeds maximum number of columns "\
92
- "defined (#{maxcols})", severity: 0)
90
+ @log.add("STANDOC_5", tcell, params: [maxcols])
93
91
  end
94
92
  end
95
93
  end
@@ -31,16 +31,14 @@ module Metanorma
31
31
  m << x.text&.downcase
32
32
  end
33
33
  pref.include?(iev.downcase) or
34
- @log.add("Bibliography", term, %(Term "#{pref[0]}" does not match ) +
35
- %(IEV #{loc} "#{iev}"), severity: 1)
34
+ @log.add("STANDOC_22", term, params: [pref[0], loc, iev])
36
35
  end
37
36
 
38
37
  def concept_validate(doc, tag, refterm)
39
38
  concept_validate_ids(doc)
40
39
  doc.xpath("//#{tag}/xref").each do |x|
41
40
  @concept_ids[x["target"]] and next
42
- @log.add("Anchors", x, concept_validate_msg(doc, tag, refterm, x),
43
- severity: 0)
41
+ @log.add("STANDOC_23", x, params: [concept_validate_msg(doc, tag, refterm, x)])
44
42
  end
45
43
  end
46
44
 
@@ -81,8 +79,7 @@ module Metanorma
81
79
  terms.each do |k, v|
82
80
  v.size > 1 or next
83
81
  loc = v.map { |x| x["anchor"] }.join(", ")
84
- err = "Term #{k} occurs twice as preferred designation: #{loc}"
85
- @log.add("Terms", v.first, err, severity: 1)
82
+ @log.add("STANDOC_24", v.first, params: [k, loc])
86
83
  end
87
84
  end
88
85
 
@@ -105,14 +102,7 @@ module Metanorma
105
102
  desgns = v[:designations].map do |x|
106
103
  @c.encode(x.text.strip, :basic, :hexadecimal)
107
104
  end.join(", ")
108
- err = <<~ERROR
109
- Clause not recognised as a term clause, but contains designation markup
110
- (<code>preferred:[], admitted:[], alt:[], deprecated:[]</code>):<br/>
111
- #{desgns}</br>
112
- Ensure the parent clause is recognised as a terms clause by inserting <code>[heading=terms and definitions]</code> above the title,
113
- in case the heading is not automatically recognised. See also <a href="https://www.metanorma.org/author/topics/sections/concepts/#clause-title">Metanorma documentation</a>.
114
- ERROR
115
- @log.add("Terms", v[:clause], err, severity: 0)
105
+ @log.add("STANDOC_25", v[:clause], params: [desgns])
116
106
  end
117
107
  end
118
108
  end
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "3.1.10".freeze
22
+ VERSION = "3.2.1".freeze
23
23
  end
24
24
  end
@@ -32,23 +32,26 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency "asciidoctor", "~> 2.0.0"
33
33
  spec.add_dependency "crass", "~> 1.0.0"
34
34
  spec.add_dependency "iev", "~> 0.3.5"
35
- spec.add_dependency "isodoc", "~> 3.3.0"
35
+ spec.add_dependency "isodoc", "~> 3.4.0"
36
36
  spec.add_dependency "metanorma", ">= 1.6.0"
37
37
  spec.add_dependency "metanorma-plugin-glossarist", "~> 0.2.3"
38
38
  spec.add_dependency "metanorma-plugin-lutaml", "~> 0.7.31"
39
39
  spec.add_dependency "metanorma-plugin-plantuml", "~> 1.0.0"
40
- spec.add_dependency "metanorma-utils", "~> 1.11.0"
40
+ spec.add_dependency "metanorma-utils", "~> 2.0.1"
41
41
  spec.add_dependency "ruby-jing"
42
42
  # relaton-cli not just relaton, to avoid circular reference in metanorma
43
43
  spec.add_dependency "concurrent-ruby"
44
44
  spec.add_dependency "pngcheck"
45
45
  spec.add_dependency "relaton-cli", "~> 1.20.0"
46
46
  spec.add_dependency "relaton-iev", "~> 1.2.0"
47
+ spec.add_dependency "svg_conform", "~> 0.1.0"
47
48
 
49
+ spec.add_development_dependency "canon", "= 0.1.3"
48
50
  spec.add_development_dependency "debug"
49
51
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
50
52
  spec.add_development_dependency "guard", "~> 2.14"
51
53
  spec.add_development_dependency "guard-rspec", "~> 4.7"
54
+ spec.add_development_dependency "openssl"
52
55
  spec.add_development_dependency "rake", "~> 13.0"
53
56
  spec.add_development_dependency "rspec", "~> 3.6"
54
57
  spec.add_development_dependency "rubocop", "~> 1"
@@ -58,6 +61,5 @@ Gem::Specification.new do |spec|
58
61
  spec.add_development_dependency "timecop", "~> 0.9"
59
62
  spec.add_development_dependency "vcr", "~> 6.1.0"
60
63
  spec.add_development_dependency "webmock"
61
- spec.add_development_dependency "canon"
62
64
  # spec.metadata["rubygems_mfa_required"] = "true"
63
65
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-standoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.10
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-13 00:00:00.000000000 Z
11
+ date: 2025-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 3.3.0
75
+ version: 3.4.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 3.3.0
82
+ version: 3.4.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: metanorma
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.11.0
145
+ version: 2.0.1
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.11.0
152
+ version: 2.0.1
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: ruby-jing
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,34 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: 1.2.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: svg_conform
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: 0.1.0
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: 0.1.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: canon
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '='
242
+ - !ruby/object:Gem::Version
243
+ version: 0.1.3
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '='
249
+ - !ruby/object:Gem::Version
250
+ version: 0.1.3
223
251
  - !ruby/object:Gem::Dependency
224
252
  name: debug
225
253
  requirement: !ruby/object:Gem::Requirement
@@ -276,6 +304,20 @@ dependencies:
276
304
  - - "~>"
277
305
  - !ruby/object:Gem::Version
278
306
  version: '4.7'
307
+ - !ruby/object:Gem::Dependency
308
+ name: openssl
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
279
321
  - !ruby/object:Gem::Dependency
280
322
  name: rake
281
323
  requirement: !ruby/object:Gem::Requirement
@@ -402,20 +444,6 @@ dependencies:
402
444
  - - ">="
403
445
  - !ruby/object:Gem::Version
404
446
  version: '0'
405
- - !ruby/object:Gem::Dependency
406
- name: canon
407
- requirement: !ruby/object:Gem::Requirement
408
- requirements:
409
- - - ">="
410
- - !ruby/object:Gem::Version
411
- version: '0'
412
- type: :development
413
- prerelease: false
414
- version_requirements: !ruby/object:Gem::Requirement
415
- requirements:
416
- - - ">="
417
- - !ruby/object:Gem::Version
418
- version: '0'
419
447
  description: |
420
448
  metanorma-standoc realises standards following the Metanorma standoc model
421
449
 
@@ -538,6 +566,7 @@ files:
538
566
  - lib/metanorma/standoc/isolated_converter.rb
539
567
  - lib/metanorma/standoc/lists.rb
540
568
  - lib/metanorma/standoc/localbib.rb
569
+ - lib/metanorma/standoc/log.rb
541
570
  - lib/metanorma/standoc/macros.rb
542
571
  - lib/metanorma/standoc/macros_embed.rb
543
572
  - lib/metanorma/standoc/macros_form.rb