isodoc 2.10.4 → 2.10.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: df0cc3b9722ac37d5d0853fe0b483fedc476ad51655488a893dcb7c58f08b5a3
4
- data.tar.gz: 8f5fe80aa471b64d274e3c8b44b87cc6c9fd5ff20bf52b9a61ee3d8ede5421e0
3
+ metadata.gz: c9d6fb9b45b43931c09ae2961532d650434c834c94adf40ae698afdab0098dfd
4
+ data.tar.gz: eebae6b266587daad1ed883ff44a69914dece3ccfbf34e5135b811536f8b276e
5
5
  SHA512:
6
- metadata.gz: 2f8da1dc68e54da5f58af3ad2ca370e175cc914216ecd2148068ec745975c8229371fa87b586ab60c4701b0b21d9b676893e15d97cabc1e513cba20c5ed2ad80
7
- data.tar.gz: b20e85c69fe1f89c327b22c2f0232ab751c577028de077bb6b890ae337d24c98de939a8ecb1ff8607a6d2dd9e577abec8404372572033361c4939578be4e0c99
6
+ metadata.gz: cb7fca64087faf90b1581e9bbeed9809f2ce4253b876eaf8374450cd4fc2c44a5dece2d91febdd0b70914a98ceefaa3f16887303167d378f6ef0d2a83c223041
7
+ data.tar.gz: f190c3e9d07ff55030a409a7455e79d7f5bcf6813e0c5b0034f632616e78460539c9472a1df9983a574537357c69df0007a0cd308f67f974ffa294602ca2345d
data/.rubocop.yml CHANGED
@@ -7,4 +7,4 @@ inherit_from:
7
7
  # ...
8
8
 
9
9
  AllCops:
10
- TargetRubyVersion: 2.5
10
+ TargetRubyVersion: 3.4
data/isodoc.gemspec CHANGED
@@ -26,8 +26,10 @@ Gem::Specification.new do |spec|
26
26
  f.match(%r{^(test|spec|features|bin|.github)/}) \
27
27
  || f.match(%r{Rakefile|bin/rspec})
28
28
  end
29
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
29
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.1.0")
30
30
 
31
+ spec.add_dependency "base64"
32
+ spec.add_dependency "bigdecimal"
31
33
  spec.add_dependency "html2doc", "~> 1.8.1"
32
34
  # spec.add_dependency "isodoc-i18n", "~> 1.1.0" # already in relaton-render and mn-requirements
33
35
  # spec.add_dependency "relaton-cli"
@@ -42,6 +44,7 @@ Gem::Specification.new do |spec|
42
44
  spec.add_dependency "twitter_cldr", ">= 6.6.0"
43
45
  spec.add_dependency "uuidtools"
44
46
 
47
+ spec.add_development_dependency "bigdecimal"
45
48
  spec.add_development_dependency "debug"
46
49
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
47
50
  spec.add_development_dependency "guard", "~> 2.14"
@@ -12,12 +12,12 @@ $('#toggle').on('click', function(){
12
12
  $('nav').animate({ 'left': '-353px' }, 'slow', function(){
13
13
  $('nav').hide();
14
14
  });
15
- $('body').animate({ 'margin-left': '0' }, 'slow');
15
+ $('body').animate({ 'padding-left': '30px' }, 'slow');
16
16
  }
17
17
  else {
18
18
  $('nav').show();
19
19
  $('nav').animate({ 'left': '0px' }, 'slow');
20
- $('body').animate({ 'margin-left': '298px' }, 'slow');
20
+ $('body').animate({ 'padding-left': '360px' }, 'slow');
21
21
  }
22
22
  });
23
23
  </script>
data/lib/isodoc/css.rb CHANGED
@@ -90,16 +90,14 @@ module IsoDoc
90
90
 
91
91
  # stripwordcss if HTML stylesheet, !stripwordcss if DOC stylesheet
92
92
  def generate_css(filename, stripwordcss)
93
- return nil if filename.nil?
94
-
93
+ filename.nil? and return nil
95
94
  filename = precompiled_style_or_original(filename)
96
95
  stylesheet = File.read(filename, encoding: "UTF-8")
97
96
  stylesheet = populate_template(stylesheet, :word)
98
97
  stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss
99
98
  stylesheet.gsub!(/--/, "-DOUBLE_HYPHEN_ESCAPE-") unless stripwordcss
100
- if File.extname(filename) == ".scss"
99
+ File.extname(filename) == ".scss" and
101
100
  stylesheet = convert_scss(filename, stylesheet, stripwordcss)
102
- end
103
101
  Tempfile.open([File.basename(filename, ".*"), "css"],
104
102
  mode: File::BINARY | File::SHARE_DELETE,
105
103
  encoding: "utf-8") do |f|
@@ -161,8 +161,7 @@ module IsoDoc
161
161
  def quote_attribution(node, out)
162
162
  author = node.at(ns("./author"))
163
163
  source = node.at(ns("./source"))
164
- return if author.nil? && source.nil?
165
-
164
+ author.nil? && source.nil? and return
166
165
  out.p class: "QuoteAttribution" do |p|
167
166
  p << "&#x2014; #{author.text}" if author
168
167
  p << ", " if author && source
@@ -206,6 +205,18 @@ module IsoDoc
206
205
  end
207
206
  end
208
207
 
208
+ def cross_align_parse(node, out)
209
+ out.table do |t|
210
+ t.tbody do |b|
211
+ node.xpath(ns("./align-cell")).each do |c|
212
+ b.td do |td|
213
+ c.children.each { |n| parse(n, td) }
214
+ end
215
+ end
216
+ end
217
+ end
218
+ end
219
+
209
220
  def columnbreak_parse(node, out); end
210
221
  end
211
222
  end
@@ -51,24 +51,31 @@ module IsoDoc
51
51
 
52
52
  # returns [metanorma, non-metanorma, DOI/ISSN/ISBN] identifiers
53
53
  def bibitem_ref_code(bib)
54
+ id, id1, id2, id3 = bibitem_ref_code_prep(bib)
55
+ id || id1 || id2 || id3 and return [id, id1, id2, id3]
56
+ bib["suppress_identifier"] == "true" and return [nil, nil, nil, nil]
57
+ [nil, no_identifier(bib), nil, nil]
58
+ end
59
+
60
+ def bibitem_ref_code_prep(bib)
54
61
  id = bib.at(ns("./docidentifier[@type = 'metanorma']"))
55
62
  id1 = pref_ref_code(bib)
56
63
  id2 = bib.at(ns("./docidentifier[#{SKIP_DOCID}]"))
57
64
  id3 = bib.at(ns("./docidentifier[@type = 'metanorma-ordinal']"))
58
- return [id, id1, id2, id3] if id || id1 || id2 || id3
59
- return [nil, nil, nil, nil] if bib["suppress_identifier"] == "true"
65
+ [id, id1, id2, id3]
66
+ end
60
67
 
68
+ def no_identifier(bib)
69
+ @i18n.no_identifier or return nil
61
70
  id = Nokogiri::XML::Node.new("docidentifier", bib.document)
62
- id << "(NO ID)"
63
- [nil, id, nil, nil]
71
+ id << @i18n.no_identifier
72
+ id
64
73
  end
65
74
 
66
75
  def bracket_if_num(num)
67
- return nil if num.nil?
68
-
76
+ num.nil? and return nil
69
77
  num = num.text.sub(/^\[/, "").sub(/\]$/, "")
70
- return "[#{num}]" if /^\d+$/.match?(num)
71
-
78
+ /^\d+$/.match?(num) and return "[#{num}]"
72
79
  num
73
80
  end
74
81
 
@@ -18,6 +18,14 @@ module IsoDoc
18
18
  end
19
19
  end
20
20
 
21
+ def freestanding_title(node, out)
22
+ parents = node.ancestors("clause, annex, terms, references, " \
23
+ "definitions, acknowledgements, introduction, " \
24
+ "foreword")
25
+ clause_parse_title(parents.empty? ? node : parents.first,
26
+ out, node, out)
27
+ end
28
+
21
29
  # used for subclauses
22
30
  def clause_parse_title(node, div, title, out, header_class = {})
23
31
  return if title.nil?
@@ -153,6 +153,12 @@ module IsoDoc
153
153
  @meta.get
154
154
  end
155
155
 
156
+ def cross_align(isoxml, out)
157
+ isoxml.xpath(ns("//cross-align")).each do |c|
158
+ parse(c, out)
159
+ end
160
+ end
161
+
156
162
  def boilerplate(node, out)
157
163
  @bare and return
158
164
  boilerplate = node.at(ns("//boilerplate")) or return
@@ -249,9 +255,11 @@ module IsoDoc
249
255
  when "option" then option_parse(node, out)
250
256
  when "textarea" then textarea_parse(node, out)
251
257
  when "toc" then toc_parse(node, out)
258
+ when "title" then freestanding_title(node, out) # not inside clause
252
259
  when "variant-title" then variant_title(node, out)
253
260
  when "span" then span_parse(node, out)
254
261
  when "location" then location_parse(node, out)
262
+ when "cross-align" then cross_align_parse(node, out)
255
263
  when "columnbreak" then columnbreak_parse(node, out)
256
264
  when "ruby" then ruby_parse(node, out)
257
265
  when "rt" then rt_parse(node, out)
@@ -21,21 +21,85 @@ module IsoDoc
21
21
  # TwitterCldr::DataReaders::NumberDataReader.new(locale).symbols
22
22
  def localize_maths(node, locale)
23
23
  node.xpath(".//m:mn", MATHML).each do |x|
24
- x.children = @numfmt
25
- .localized_number(x.text, locale: locale,
26
- precision: num_precision(x.text))
24
+ x.children =
25
+ if fmt = x["data-metanorma-numberformat"]
26
+ x.delete("data-metanorma-numberformat")
27
+ explicit_number_formatter(x, locale, fmt)
28
+ else implicit_number_formatter(x, locale)
29
+ end
27
30
  rescue ArgumentError
31
+ rescue StandardError, RuntimeError => e
32
+ warn "Failure to localise MathML/mn\n#{node.parent.to_xml}\n#{e}"
28
33
  end
29
34
  end
30
35
 
36
+ def normalise_number(num)
37
+ n = BigDecimal(num).to_s("F")
38
+ /\.\d/.match?(num) or n.sub!(/\.\d+$/, "")
39
+ n
40
+ end
41
+
42
+ def implicit_number_formatter(num, locale)
43
+ fmt = { significant: num_totaldigits(num.text) }.compact
44
+ n = normalise_number(num.text)
45
+ @numfmt.localized_number(n, locale:, format: fmt,
46
+ precision: num_precision(num.text))
47
+ end
48
+
49
+ def numberformat_extract(options)
50
+ options.gsub!(/([a-z_]+)='/, %('\\1=))
51
+ CSV.parse_line(options, quote_char: "'").each_with_object({}) do |x, acc|
52
+ m = /^(.+?)=(.+)?$/.match(x) or next
53
+ acc[m[1].to_sym] = m[2].sub(/^(["'])(.+)\1$/, "\\2")
54
+ end
55
+ end
56
+
57
+ def numberformat_type(ret)
58
+ %i(precision significant digit_count group_digits fraction_group_digits)
59
+ .each do |i|
60
+ ret[i] &&= ret[i].to_i
61
+ end
62
+ %i(notation exponent_sign locale).each do |i|
63
+ ret[i] &&= ret[i].to_sym
64
+ end
65
+ ret
66
+ end
67
+
68
+ def explicit_number_formatter(num, locale, options)
69
+ ret = numberformat_type(numberformat_extract(options))
70
+ l = ret[:locale] || locale
71
+ precision, symbols, significant = explicit_number_formatter_cfg(num, ret)
72
+ n = normalise_number(num.text)
73
+ Plurimath::NumberFormatter.new(l)
74
+ .localized_number(n, precision:,
75
+ format: symbols.merge(significant:))
76
+ end
77
+
78
+ def explicit_number_formatter_cfg(num, fmt)
79
+ symbols = twitter_cldr_localiser_symbols.dup.merge(fmt)
80
+ precision = symbols[:precision] || num_precision(num.text)
81
+ signif = symbols[:significant]
82
+ (symbols.keys & %i(precision digit_count)).empty? and
83
+ signif ||= num_totaldigits(num.text)
84
+ [precision, symbols, signif]
85
+ end
86
+
31
87
  def num_precision(num)
32
- precision = 0
33
- /\./.match?(num) and precision =
34
- twitter_cldr_localiser_symbols[:precision] ||
35
- num.sub(/^.*\./, "").size
88
+ precision = nil
89
+ /\.(?!\d+e)/.match?(num) and
90
+ precision = twitter_cldr_localiser_symbols[:precision] ||
91
+ num.sub(/^.*\./, "").size
36
92
  precision
37
93
  end
38
94
 
95
+ def num_totaldigits(num)
96
+ totaldigits = nil
97
+ /\.(?=\d+e)/.match?(num) and
98
+ totaldigits = twitter_cldr_localiser_symbols[:significant] ||
99
+ num.sub(/^0\./, ".").sub(/^.*\./, "").sub(/e.*$/, "").size
100
+ totaldigits
101
+ end
102
+
39
103
  def twitter_cldr_localiser_symbols
40
104
  {}
41
105
  end
@@ -44,6 +108,7 @@ module IsoDoc
44
108
  @suppressasciimathdup || node.parent.at(ns("./asciimath")) and return
45
109
  math = node.to_xml.gsub(/ xmlns=["'][^"']+["']/, "")
46
110
  .gsub(%r{<[^:/>]+:}, "<").gsub(%r{</[^:/>]+:}, "</")
111
+ .gsub(%r{ data-metanorma-numberformat="[^"]+"}, "")
47
112
  ret = Plurimath::Math.parse(math, "mathml").to_asciimath
48
113
  node.next = "<asciimath>#{@c.encode(ret, :basic)}</asciimath>"
49
114
  rescue StandardError => e
@@ -51,7 +116,8 @@ module IsoDoc
51
116
  end
52
117
 
53
118
  def maths_just_numeral(node)
54
- mn = node.at(".//m:mn", MATHML).children
119
+ mn = node.at(".//m:mn", MATHML).children.text
120
+ .sub(/\^([0-9+-]+)$/, "<sup>\\1</sup>")
55
121
  if node.parent.name == "stem"
56
122
  node.parent.replace(mn)
57
123
  else
@@ -77,11 +143,24 @@ module IsoDoc
77
143
  OUTPUT
78
144
  end
79
145
 
146
+ # convert any Ascii superscripts to correct(ish) MathML
147
+ # Not bothering to match times, base of 1.0 x 10^-20, just ^-20
148
+ def mn_to_msup(node)
149
+ node.xpath(".//m:mn", MATHML).each do |n|
150
+ m = %r{^(.+)\^([0-9+-]+)$}.match(n.text) or next
151
+ n.replace("<msup><mn>#{m[1]}</mn><mn>#{m[2]}</mn></msup>")
152
+ end
153
+ end
154
+
80
155
  def mathml_number(node, locale)
81
156
  justnumeral = numeric_mathml?(node)
82
157
  justnumeral or asciimath_dup(node)
83
158
  localize_maths(node, locale)
84
- justnumeral and maths_just_numeral(node)
159
+ if justnumeral
160
+ maths_just_numeral(node)
161
+ else
162
+ mn_to_msup(node)
163
+ end
85
164
  end
86
165
 
87
166
  def numeric_mathml?(node)
@@ -13,15 +13,21 @@ module IsoDoc
13
13
 
14
14
  def move_norm_ref_to_sections(docxml)
15
15
  docxml.at(ns(@xrefs.klass.norm_ref_xpath)) or return
16
- s = docxml.at(ns("//sections")) ||
17
- docxml.at(ns("//preface"))&.after("<sections/>")&.next_element ||
18
- docxml.at(ns("//annex | //bibliography"))&.before("<sections/>")
19
- &.previous_element or return
16
+ s = move_norm_ref_to_sections_insert_pt(docxml) or return
20
17
  docxml.xpath(ns(@xrefs.klass.norm_ref_xpath)).each do |r|
18
+ r.at("./ancestor::xmlns:bibliography") or next
21
19
  s << r.remove
22
20
  end
23
21
  end
24
22
 
23
+ def move_norm_ref_to_sections_insert_pt(docxml)
24
+ s = docxml.at(ns("//sections")) and return s
25
+ s = docxml.at(ns("//preface")) and
26
+ return s.after("<sections/>").next_element
27
+ docxml.at(ns("//annex | //bibliography"))&.before("<sections/>")
28
+ &.previous_element
29
+ end
30
+
25
31
  def hidden_items(docxml)
26
32
  docxml.xpath(ns("//references[bibitem/@hidden = 'true']")).each do |x|
27
33
  x.at(ns("./bibitem[not(@hidden = 'true')]")) and next
@@ -20,7 +20,7 @@ module IsoDoc
20
20
 
21
21
  def convert1(docxml, filename, dir)
22
22
  @outputdir = dir
23
- @outputfile = filename
23
+ @outputfile = Pathname.new(filename).basename.to_s
24
24
  docid_prefixes(docxml) # feeds @xrefs.parse citation processing
25
25
  @xrefs.parse docxml
26
26
  @xrefs.klass.meta = @meta
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.10.4".freeze
2
+ VERSION = "2.10.6".freeze
3
3
  end
@@ -29,9 +29,9 @@ module IsoDoc
29
29
  j = 0
30
30
  clause.xpath(ns(self.class::FIGURE_NO_CLASS)).noblank.each do |t|
31
31
  j = subfigure_increment(j, c, t)
32
- sequential_figure_body(j, c, t, "figure", container: container)
32
+ sequential_figure_body(j, c, t, "figure", container:)
33
33
  end
34
- sequential_figure_class_names(clause, container: container)
34
+ sequential_figure_class_names(clause, container:)
35
35
  end
36
36
 
37
37
  def sequential_figure_class_names(clause, container: false)
@@ -42,13 +42,13 @@ module IsoDoc
42
42
  c[t["class"]] ||= Counter.new
43
43
  j = subfigure_increment(j, c[t["class"]], t)
44
44
  sequential_figure_body(j, c[t["class"]], t, t["class"],
45
- container: container)
45
+ container:)
46
46
  end
47
47
  end
48
48
 
49
49
  def subfigure_label(subfignum)
50
50
  subfignum.zero? and return ""
51
- "-#{subfignum}"
51
+ "#{hierfigsep}#{subfignum}"
52
52
  end
53
53
 
54
54
  def sequential_figure_body(subfig, counter, elem, klass, container: false)
@@ -100,8 +100,8 @@ module IsoDoc
100
100
  klass, label = reqt2class_label(t, m)
101
101
  id = c.increment(label, t).print
102
102
  sequential_permission_body(id, t, label, klass, m,
103
- container: container)
104
- sequential_permission_children(t, id, container: container)
103
+ container:)
104
+ sequential_permission_children(t, id, container:)
105
105
  end
106
106
  end
107
107
 
@@ -112,12 +112,13 @@ module IsoDoc
112
112
  klass, label = reqt2class_nested_label(t, m)
113
113
  id = "#{lbl}#{hierfigsep}#{c.increment(label, t).print}"
114
114
  sequential_permission_body(id, t, label, klass, m,
115
- container: container)
116
- sequential_permission_children(t, id, container: container)
115
+ container:)
116
+ sequential_permission_children(t, id, container:)
117
117
  end
118
118
  end
119
119
 
120
- def sequential_permission_body(id, elem, label, klass, model, container: false)
120
+ def sequential_permission_body(id, elem, label, klass, model,
121
+ container: false)
121
122
  @anchors[elem["id"]] = model.postprocess_anchor_struct(
122
123
  elem, anchor_struct(id, elem,
123
124
  label, klass, elem["unnumbered"])
@@ -146,10 +147,10 @@ module IsoDoc
146
147
 
147
148
  # container makes numbering be prefixed with the parent clause reference
148
149
  def sequential_asset_names(clause, container: false)
149
- sequential_table_names(clause, container: container)
150
- sequential_figure_names(clause, container: container)
151
- sequential_formula_names(clause, container: container)
152
- sequential_permission_names(clause, container: container)
150
+ sequential_table_names(clause, container:)
151
+ sequential_figure_names(clause, container:)
152
+ sequential_formula_names(clause, container:)
153
+ sequential_permission_names(clause, container:)
153
154
  end
154
155
 
155
156
  def hierarchical_figure_names(clause, num)
@@ -19,7 +19,8 @@ module IsoDoc
19
19
 
20
20
  SECTIONS_XPATH =
21
21
  "//foreword | //introduction | //acknowledgements | " \
22
- "//preface/terms | preface/definitions | preface/references | " \
22
+ "//preface/abstract | " \
23
+ "//preface/terms | //preface/definitions | //preface/references | " \
23
24
  "//preface/clause | //sections/terms | //annex | " \
24
25
  "//sections/clause | //sections/definitions | " \
25
26
  "//bibliography/references | //bibliography/clause".freeze
@@ -34,8 +35,8 @@ module IsoDoc
34
35
  "./xmlns:X".gsub("X", asset)
35
36
  end
36
37
 
37
- CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | " \
38
- "./references".freeze
38
+ CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | " \
39
+ "./references".freeze
39
40
  end
40
41
  end
41
42
  end
@@ -75,6 +75,7 @@ modified: معدلة
75
75
  adapted: تكيف
76
76
  deprecated: مهمل
77
77
  source: مصدر
78
+ no_identifier: (لا يوجد معرف)
78
79
  and: و
79
80
  all_parts: كل الأجزاء
80
81
  edition_ordinal: "ﺎﻠﻄﺒﻋﺓ؜ {{ var1 | ordinal_word: 'edition', '' }}"
@@ -88,6 +88,7 @@ adapted: angepasst
88
88
  deprecated: VERALTET
89
89
  source: QUELLE
90
90
  and: und
91
+ no_identifier: (KEIN KENNUNG)
91
92
  all_parts: Alle Teile
92
93
  edition_ordinal: "{{ var1 | ordinal_word: 'edition', '' }} Auflage"
93
94
  edition: Auflage
@@ -68,6 +68,7 @@ requirement: Requirement
68
68
  recommendation: Recommendation
69
69
  permission: Permission
70
70
  box: Box
71
+ no_identifier: (NO ID)
71
72
  # Modspec
72
73
  recommendationtest: Recommendation test
73
74
  requirementtest: Requirement test
@@ -86,6 +86,7 @@ adapted: adaptado
86
86
  deprecated: OBSOLETO
87
87
  source: FUENTE
88
88
  and: y
89
+ no_identifier: (SIN IDENTIFICADOR)
89
90
  all_parts: Todas las partes
90
91
  edition_ordinal: "{{ var1 | ordinal_word: 'edition', '' }} edición"
91
92
  edition: edición
@@ -85,6 +85,7 @@ source: SOURCE
85
85
  edition: édition
86
86
  version: version
87
87
  and: et
88
+ no_identifier: (PAS D'IDENTIFIANT)
88
89
  all_parts: toutes les parties
89
90
  edition_ordinal: "{{ var1 | ordinal_word: 'edition', '' }} édition"
90
91
  edition: édition
@@ -88,6 +88,7 @@ adapted: 適合しました
88
88
  deprecated: 推奨しない用語
89
89
  source: 出典
90
90
  and: and
91
+ no_identifier: (識別子なし)
91
92
  all_parts: 規格群
92
93
  edition_ordinal: "第{{ var1 }}版"
93
94
  edition: 版
@@ -153,6 +153,7 @@ adapted: адаптированный
153
153
  deprecated: НЕ РЕКОМЕНДУЕТСЯ
154
154
  source: ИСТОЧНИК
155
155
  and: и
156
+ no_identifier: (БЕЗ ИДЕНТИФИКАТОРА)
156
157
  all_parts: Все части
157
158
  edition_ordinal: "{{ var1 | ordinal_word: 'edition', '' }} издание"
158
159
  edition: издание
@@ -77,6 +77,7 @@ adapted: 改编
77
77
  deprecated: 被取代
78
78
  source: 定义
79
79
  and: 和
80
+ no_identifier: (无标识符)
80
81
  all_parts: 所有部分
81
82
  edition_ordinal: "第{{ var1 | ordinal_word: '', '' }}版"
82
83
  edition: 版
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.4
4
+ version: 2.10.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-17 00:00:00.000000000 Z
11
+ date: 2024-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bigdecimal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: html2doc
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +164,20 @@ dependencies:
136
164
  - - ">="
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: bigdecimal
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: debug
141
183
  requirement: !ruby/object:Gem::Requirement
@@ -418,7 +460,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
418
460
  requirements:
419
461
  - - ">="
420
462
  - !ruby/object:Gem::Version
421
- version: 2.7.0
463
+ version: 3.1.0
422
464
  required_rubygems_version: !ruby/object:Gem::Requirement
423
465
  requirements:
424
466
  - - ">="