isodoc 2.4.5 → 2.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cbb9d45ce42c28917d84ebd31912cd4218cd47f633d27cf58f1060396c14d67
4
- data.tar.gz: 25872abe5383206f171fadb766688bd46e751cb83852fa0c09848cdb8a4a45a6
3
+ metadata.gz: 23f98744bc0bb65ad60168ed537e14fe7c42222751d9beb5889ef3f6774c5b2a
4
+ data.tar.gz: 126d7531a7f6dee506d40ec9495de1cbff43efbd8699c9913e3564698bce3b1e
5
5
  SHA512:
6
- metadata.gz: 8734f21809f2c71d90bbb291c2da8e703cf25e06bebeb83cf3db464d2b97179dd2744be793e11b2657435309c2faf8a08d4d8d48a16c2fad34bdc8fe628a3b1d
7
- data.tar.gz: ebbcfc1ca95fe1b7d3c8ec89a73823176ae72ad0cd3b43cdc9061a9eafc6dce8612832c0a6dc1fc3f3be4948367567e74fc8c78eb90d5e234a8bd6fbd9cd467a
6
+ metadata.gz: 70045efc243c466f1ad330ce1d3a5cdb4a0ec76d5575913c47ab3043b1242d4b8fbb319fe7993db211dd7ff1c8d3cce9e501bf745ee9e861330c9e793a35ba1f
7
+ data.tar.gz: bfba85e2ac12b48cc5f255a4f983201c6042f506590ac34300da79107892532a0266a6507eb93ca8c247c047ada4e3049f1ddfd410af0e521596d3341a6dcfc9
data/isodoc.gemspec CHANGED
@@ -29,17 +29,17 @@ Gem::Specification.new do |spec|
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
30
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
31
31
 
32
- spec.add_dependency "asciimath"
33
- spec.add_dependency "html2doc", "~> 1.4.3"
32
+ spec.add_dependency "html2doc", "~> 1.5.0"
34
33
  spec.add_dependency "htmlentities", "~> 4.3.4"
35
34
  # spec.add_dependency "isodoc-i18n", "~> 1.1.0" # already in relaton-render and mn-requirements
36
35
  spec.add_dependency "liquid", "~> 4"
37
- # spec.add_dependency "metanorma", ">= 1.2.0"
38
36
  spec.add_dependency "emf2svg"
39
- spec.add_dependency "mathml2asciimath"
40
- spec.add_dependency "metanorma-utils", "~> 1.4.5"
37
+ spec.add_dependency "plurimath"
38
+ spec.add_dependency "relaton-cli"
39
+ # spec.add_dependency "metanorma-utils", "~> 1.5.0" # already in isodoc-i18n
41
40
  spec.add_dependency "mn2pdf"
42
41
  spec.add_dependency "mn-requirements", "~> 0.3.1"
42
+
43
43
  spec.add_dependency "relaton-render", "~> 0.5.2"
44
44
  spec.add_dependency "roman-numerals"
45
45
  spec.add_dependency "rouge", "~> 4.0"
@@ -117,6 +117,10 @@ a.FootnoteRef + a.FootnoteRef:before {
117
117
  content: ", ";
118
118
  vertical-align: super; }
119
119
 
120
+ a.TableFootnoteRef + a.TableFootnoteRef:before {
121
+ content: ", ";
122
+ vertical-align: super; }
123
+
120
124
  .addition {
121
125
  color: blue; }
122
126
 
@@ -117,6 +117,10 @@ a.FootnoteRef + a.FootnoteRef:before {
117
117
  content: ", ";
118
118
  vertical-align: super; }
119
119
 
120
+ a.TableFootnoteRef + a.TableFootnoteRef:before {
121
+ content: ", ";
122
+ vertical-align: super; }
123
+
120
124
  .addition {
121
125
  color: blue; }
122
126
 
@@ -144,6 +144,12 @@ a.FootnoteRef + a.FootnoteRef:before {
144
144
  vertical-align: super;
145
145
  }
146
146
 
147
+ a.TableFootnoteRef + a.TableFootnoteRef:before {
148
+ content: ", ";
149
+ vertical-align: super;
150
+ }
151
+
152
+
147
153
  .addition {
148
154
  color: blue;
149
155
  }
@@ -219,15 +219,23 @@ module IsoDoc
219
219
  end
220
220
 
221
221
  def convert_i18n_init(docxml)
222
- lang = docxml.at(ns("//bibdata/language")) and @lang = lang.text
223
- script = docxml.at(ns("//bibdata/script")) and @script = script.text
224
- locale = docxml.at(ns("//bibdata/locale")) and @locale = locale.text
222
+ convert_i18n_init1(docxml)
225
223
  i18n_init(@lang, @script, @locale)
226
224
  @reqt_models = requirements_processor
227
225
  .new({ default: "default", lang: @lang, script: @script, locale: @locale,
228
226
  labels: @i18n.get, modspecidentifierbase: @modspecidentifierbase })
229
227
  end
230
228
 
229
+ def convert_i18n_init1(docxml)
230
+ lang = docxml.at(ns("//bibdata/language")) and @lang = lang.text
231
+ if script = docxml.at(ns("//bibdata/script"))
232
+ @script = script.text
233
+ elsif lang
234
+ @script = ::Metanorma::Utils::default_script(@lang)
235
+ end
236
+ locale = docxml.at(ns("//bibdata/locale")) and @locale = locale.text
237
+ end
238
+
231
239
  def convert(input_filename, file = nil, debug = false,
232
240
  output_filename = nil)
233
241
  file = File.read(input_filename, encoding: "utf-8") if file.nil?
@@ -10,8 +10,7 @@ module IsoDoc
10
10
  end
11
11
 
12
12
  def figure_name_parse(_node, div, name)
13
- return if name.nil?
14
-
13
+ name.nil? and return
15
14
  div.p class: "FigureTitle", style: "text-align:center;" do |p|
16
15
  name.children.each { |n| parse(n, p) }
17
16
  end
@@ -110,16 +109,6 @@ module IsoDoc
110
109
  end
111
110
  end
112
111
 
113
- def formula_where(dlist, out)
114
- return unless dlist
115
-
116
- out.p style: "page-break-after:avoid;" do |p|
117
- p << @i18n.where
118
- end
119
- parse(dlist, out)
120
- out.parent.at("./dl")["class"] = "formula_dl"
121
- end
122
-
123
112
  def formula_parse1(node, out)
124
113
  out.div **attr_code(class: "formula") do |div|
125
114
  div.p do |_p|
@@ -139,9 +128,8 @@ module IsoDoc
139
128
  def formula_parse(node, out)
140
129
  out.div **formula_attrs(node) do |div|
141
130
  formula_parse1(node, div)
142
- formula_where(node.at(ns("./dl")), div)
143
131
  node.children.each do |n|
144
- next if %w(stem dl name).include? n.name
132
+ next if %w(stem name).include? n.name
145
133
 
146
134
  parse(n, div)
147
135
  end
@@ -88,7 +88,7 @@ module IsoDoc
88
88
  end
89
89
 
90
90
  FIGURE_WITH_FOOTNOTES =
91
- "//div[@class = 'figure'][descendant::aside]"\
91
+ "//div[@class = 'figure'][descendant::aside]" \
92
92
  "[not(descendant::div[@class = 'figure'])]".freeze
93
93
 
94
94
  def figure_aside_process(elem, aside, key)
@@ -159,7 +159,7 @@ module IsoDoc
159
159
  end
160
160
 
161
161
  def table_footnote_cleanup_propagate(docxml)
162
- docxml.xpath("//p[not(self::*[@class])]"\
162
+ docxml.xpath("//p[not(self::*[@class])]" \
163
163
  "[ancestor::*[@class = 'TableFootnote']]").each do |p|
164
164
  p["class"] = "TableFootnote"
165
165
  end
@@ -194,7 +194,7 @@ module IsoDoc
194
194
  end
195
195
 
196
196
  def table_note_cleanup(docxml)
197
- docxml.xpath("//table[div[@class = 'Note' or "\
197
+ docxml.xpath("//table[div[@class = 'Note' or " \
198
198
  "@class = 'TableFootnote']]").each do |t|
199
199
  tfoot = table_get_or_make_tfoot(t)
200
200
  insert_here = new_fullcolspan_row(t, tfoot)
@@ -3,7 +3,7 @@ module IsoDoc
3
3
  module Lists
4
4
  def list_title_parse(node, out)
5
5
  name = node.at(ns("./name")) or return
6
- out.p **{ class: "ListTitle" } do |p|
6
+ out.p class: "ListTitle" do |p|
7
7
  name&.children&.each { |n| parse(n, p) }
8
8
  end
9
9
  end
@@ -61,10 +61,10 @@ module IsoDoc
61
61
  def li_parse(node, out)
62
62
  out.li **attr_code(id: node["id"]) do |li|
63
63
  if node["uncheckedcheckbox"] == "true"
64
- li << '<span class="zzMoveToFollowing">'\
64
+ li << '<span class="zzMoveToFollowing">' \
65
65
  '<input type="checkbox" checked="checked"/></span>'
66
66
  elsif node["checkedcheckbox"] == "true"
67
- li << '<span class="zzMoveToFollowing">'\
67
+ li << '<span class="zzMoveToFollowing">' \
68
68
  '<input type="checkbox"/></span>'
69
69
  end
70
70
  node.children.each { |n| parse(n, li) }
@@ -87,7 +87,7 @@ module IsoDoc
87
87
  end
88
88
 
89
89
  def dl_attrs(node)
90
- attr_code(id: node["id"], style: keep_style(node))
90
+ attr_code(id: node["id"], style: keep_style(node), class: node["class"])
91
91
  end
92
92
 
93
93
  def dl_parse(node, out)
@@ -153,7 +153,7 @@ module IsoDoc
153
153
  return num
154
154
  out.div do |div|
155
155
  num += 1
156
- clause_name(num, f.at(ns("./title")), div, nil)
156
+ clause_name(f, f.at(ns("./title")), div, nil)
157
157
  if f.name == "clause"
158
158
  f.elements.each { |e| parse(e, div) unless e.name == "title" }
159
159
  else biblio_list(f, div, false)
@@ -20,7 +20,7 @@ module IsoDoc
20
20
  def clause(isoxml, out)
21
21
  isoxml.xpath(ns(middle_clause(isoxml))).each do |c|
22
22
  out.div **attr_code(clause_attrs(c)) do |s|
23
- clause_name(nil, c&.at(ns("./title")), s, nil)
23
+ clause_name(c, c&.at(ns("./title")), s, nil)
24
24
  c.elements.reject { |c1| c1.name == "title" }.each do |c1|
25
25
  parse(c1, s)
26
26
  end
@@ -50,7 +50,7 @@ module IsoDoc
50
50
  f = isoxml.at(ns("//clause[@type = 'scope']")) or return num
51
51
  out.div **attr_code(id: f["id"]) do |div|
52
52
  num = num + 1
53
- clause_name(num, f&.at(ns("./title")), div, nil)
53
+ clause_name(f, f&.at(ns("./title")), div, nil)
54
54
  f.elements.each do |e|
55
55
  parse(e, div) unless e.name == "title"
56
56
  end
@@ -65,7 +65,7 @@ module IsoDoc
65
65
  f = isoxml.at(ns(TERM_CLAUSE)) or return num
66
66
  out.div **attr_code(id: f["id"]) do |div|
67
67
  num = num + 1
68
- clause_name(num, f&.at(ns("./title")), div, nil)
68
+ clause_name(f, f&.at(ns("./title")), div, nil)
69
69
  f.elements.each do |e|
70
70
  parse(e, div) unless %w{title source}.include? e.name
71
71
  end
@@ -82,7 +82,7 @@ module IsoDoc
82
82
  f = isoxml.at(ns("//sections/definitions")) or return num
83
83
  out.div **attr_code(id: f["id"], class: "Symbols") do |div|
84
84
  num = num + 1
85
- clause_name(num, f.at(ns("./title")), div, nil)
85
+ clause_name(f, f.at(ns("./title")), div, nil)
86
86
  f.elements.each do |e|
87
87
  parse(e, div) unless e.name == "title"
88
88
  end
@@ -101,7 +101,7 @@ module IsoDoc
101
101
  f = isoxml.at(ns("//introduction")) || return
102
102
  page_break(out)
103
103
  out.div class: "Section3", id: f["id"] do |div|
104
- clause_name(nil, f.at(ns("./title")), div, { class: "IntroTitle" })
104
+ clause_name(f, f.at(ns("./title")), div, { class: "IntroTitle" })
105
105
  f.elements.each do |e|
106
106
  parse(e, div) unless e.name == "title"
107
107
  end
@@ -112,7 +112,7 @@ module IsoDoc
112
112
  f = isoxml.at(ns("//foreword")) || return
113
113
  page_break(out)
114
114
  out.div **attr_code(id: f["id"]) do |s|
115
- clause_name(nil, f.at(ns("./title")) || @i18n.foreword, s,
115
+ clause_name(f, f.at(ns("./title")) || @i18n.foreword, s,
116
116
  { class: "ForewordTitle" })
117
117
  f.elements.each { |e| parse(e, s) unless e.name == "title" }
118
118
  end
@@ -123,7 +123,7 @@ module IsoDoc
123
123
  title_attr = { class: "IntroTitle" }
124
124
  page_break(out)
125
125
  out.div class: "Section3", id: f["id"] do |div|
126
- clause_name(nil, f&.at(ns("./title")), div, title_attr)
126
+ clause_name(f, f&.at(ns("./title")), div, title_attr)
127
127
  f.elements.each do |e|
128
128
  parse(e, div) unless e.name == "title"
129
129
  end
@@ -134,7 +134,7 @@ module IsoDoc
134
134
  f = isoxml.at(ns("//preface/abstract")) || return
135
135
  page_break(out)
136
136
  out.div **attr_code(id: f["id"]) do |s|
137
- clause_name(nil, f.at(ns("./title")), s, { class: "AbstractTitle" })
137
+ clause_name(f, f.at(ns("./title")), s, { class: "AbstractTitle" })
138
138
  f.elements.each { |e| parse(e, s) unless e.name == "title" }
139
139
  end
140
140
  end
@@ -144,7 +144,7 @@ module IsoDoc
144
144
  "//preface/definitions | //preface/terms")).each do |f|
145
145
  page_break(out)
146
146
  out.div class: "Section3", id: f["id"] do |div|
147
- clause_name(nil, f&.at(ns("./title")), div, { class: "IntroTitle" })
147
+ clause_name(f, f&.at(ns("./title")), div, { class: "IntroTitle" })
148
148
  f.elements.each do |e|
149
149
  parse(e, div) unless e.name == "title"
150
150
  end
@@ -157,7 +157,7 @@ module IsoDoc
157
157
  page_break(out)
158
158
  isoxml.xpath(ns("//colophon/clause")).each do |f|
159
159
  out.div class: "Section3", id: f["id"] do |div|
160
- clause_name(nil, f&.at(ns("./title")), div, { class: "IntroTitle" })
160
+ clause_name(f, f&.at(ns("./title")), div, { class: "IntroTitle" })
161
161
  f.elements.each do |e|
162
162
  parse(e, div) unless e.name == "title"
163
163
  end
@@ -10,7 +10,7 @@ module IsoDoc
10
10
  end
11
11
 
12
12
  def inline_header_title(out, node, title)
13
- out.span **{ class: "zzMoveToFollowing" } do |s|
13
+ out.span class: "zzMoveToFollowing" do |s|
14
14
  s.b do |b|
15
15
  title&.children&.each { |c2| parse(c2, b) }
16
16
  clausedelimspace(node, out) if /\S/.match?(title&.text)
@@ -38,15 +38,15 @@ module IsoDoc
38
38
  end
39
39
 
40
40
  def clause_title_depth(node, title)
41
- depth = node.ancestors("clause, annex, terms, references, "\
42
- "definitions, acknowledgements, introduction, "\
41
+ depth = node.ancestors("clause, annex, terms, references, " \
42
+ "definitions, acknowledgements, introduction, " \
43
43
  "foreword").size + 1
44
44
  depth = title["depth"] if title && title["depth"]
45
45
  depth
46
46
  end
47
47
 
48
48
  def clause_parse_subtitle(title, heading)
49
- if var = title&.at("./following-sibling::xmlns:variant-title"\
49
+ if var = title&.at("./following-sibling::xmlns:variant-title" \
50
50
  "[@type = 'sub']")&.remove
51
51
  heading.br nil
52
52
  heading.br nil
@@ -55,8 +55,8 @@ module IsoDoc
55
55
  end
56
56
 
57
57
  # top level clause names
58
- def clause_name(_num, title, div, header_class)
59
- preceding_floating_titles(title, div)
58
+ def clause_name(node, title, div, header_class)
59
+ preceding_floating_titles(node, div)
60
60
  header_class = {} if header_class.nil?
61
61
  div.h1 **attr_code(header_class) do |h1|
62
62
  if title.is_a?(String) then h1 << title
@@ -72,7 +72,7 @@ module IsoDoc
72
72
  preceding_floating_titles(name, div)
73
73
  return if name.nil?
74
74
 
75
- div.h1 **{ class: "Annex" } do |t|
75
+ div.h1 class: "Annex" do |t|
76
76
  name.children.each { |c2| parse(c2, t) }
77
77
  clause_parse_subtitle(name, t)
78
78
  end
@@ -85,10 +85,10 @@ module IsoDoc
85
85
  end
86
86
  end
87
87
 
88
- def preceding_floating_titles(name, div)
89
- return if name.nil? || name.is_a?(String)
88
+ def preceding_floating_titles(node, div)
89
+ return if node.nil?
90
90
 
91
- out = name.parent.xpath("./preceding-sibling::*")
91
+ out = node.xpath("./preceding-sibling::*")
92
92
  .reverse.each_with_object([]) do |p, m|
93
93
  break m unless p.name == "p"
94
94
 
@@ -11,20 +11,20 @@ module IsoDoc
11
11
  end
12
12
 
13
13
  def deprecated_term_parse(node, out)
14
- out.p **{ class: "DeprecatedTerms", style: "text-align:left;" } do |p|
14
+ out.p class: "DeprecatedTerms", style: "text-align:left;" do |p|
15
15
  p << l10n("#{@i18n.deprecated}: ")
16
16
  node.children.each { |c| parse(c, p) }
17
17
  end
18
18
  end
19
19
 
20
20
  def admitted_term_parse(node, out)
21
- out.p **{ class: "AltTerms", style: "text-align:left;" } do |p|
21
+ out.p class: "AltTerms", style: "text-align:left;" do |p|
22
22
  node.children.each { |c| parse(c, p) }
23
23
  end
24
24
  end
25
25
 
26
26
  def term_parse(node, out)
27
- out.p **{ class: "Terms", style: "text-align:left;" } do |p|
27
+ out.p class: "Terms", style: "text-align:left;" do |p|
28
28
  node.children.each { |c| parse(c, p) }
29
29
  end
30
30
  end
@@ -63,7 +63,7 @@ module IsoDoc
63
63
 
64
64
  def termdef_parse(node, out)
65
65
  name = node&.at(ns("./name"))&.remove
66
- out.p **{ class: "TermNum", id: node["id"] } do |p|
66
+ out.p class: "TermNum", id: node["id"] do |p|
67
67
  name&.children&.each { |n| parse(n, p) }
68
68
  end
69
69
  set_termdomain("")
@@ -112,16 +112,17 @@ module IsoDoc
112
112
  @meta.url isoxml, out
113
113
  @meta.keywords isoxml, out
114
114
  @meta.note isoxml, out
115
+ @meta.presentation isoxml, out
115
116
  @meta.get
116
117
  end
117
118
 
118
119
  def middle(isoxml, out)
119
120
  middle_title(isoxml, out)
120
121
  middle_admonitions(isoxml, out)
121
- i = scope isoxml, out, 0
122
- i = norm_ref isoxml, out, i
123
- i = terms_defs isoxml, out, i
124
- symbols_abbrevs isoxml, out, i
122
+ scope isoxml, out, 0
123
+ norm_ref isoxml, out, 0
124
+ terms_defs isoxml, out, 0
125
+ symbols_abbrevs isoxml, out, 0
125
126
  clause isoxml, out
126
127
  annex isoxml, out
127
128
  bibliography isoxml, out
@@ -100,12 +100,14 @@ module IsoDoc
100
100
  #{header_strip(content)}</a></li>)
101
101
  end
102
102
 
103
+ # array of arrays, one per level, containing XPath fragments for the elems
104
+ # matching that ToC level
103
105
  def toclevel_classes
104
- (1..@htmlToClevels).reduce([]) { |m, i| m << "h#{i}" }
106
+ (1..@htmlToClevels).reduce([]) { |m, i| m << ["h#{i}"] }
105
107
  end
106
108
 
107
109
  def toclevel
108
- ret = toclevel_classes.map do |l|
110
+ ret = toclevel_classes.flatten.map do |l|
109
111
  "#{l}:not(:empty):not(.TermNum):not(.noTOC)"
110
112
  end
111
113
  <<~HEAD.freeze
@@ -116,18 +118,25 @@ module IsoDoc
116
118
  # needs to be same output as toclevel
117
119
  def html_toc(docxml)
118
120
  idx = docxml.at("//div[@id = 'toc']") or return docxml
119
- toc = "<ul>"
120
- path = toclevel_classes.map do |l|
121
- "//main//#{l}#{toc_exclude_class}"
121
+ path = toclevel_classes.map do |x|
122
+ x.map { |l| "//main//#{l}#{toc_exclude_class}" }
122
123
  end
123
- docxml.xpath(path.join(" | ")).each_with_index do |h, tocidx|
124
- h["id"] ||= "toc#{tocidx}"
125
- toc += html_toc_entry(h.name, h)
126
- end
127
- idx.children = "#{toc}</ul>"
124
+ toc = html_toc_entries(docxml, path)
125
+ .map { |k| k[:entry] }.join("\n")
126
+ idx.children = "<ul>#{toc}</ul>"
128
127
  docxml
129
128
  end
130
129
 
130
+ def html_toc_entries(docxml, path)
131
+ path.each_with_index.with_object([]) do |(p, i), m|
132
+ docxml.xpath(p.join(" | ")).each do |h|
133
+ h["id"] ||= "_#{UUIDTools::UUID.random_create}"
134
+ m << { entry: html_toc_entry("h#{i + 1}", h),
135
+ line: h.line }
136
+ end
137
+ end.sort_by { |k| k[:line] }
138
+ end
139
+
131
140
  def toc_exclude_class
132
141
  "[not(@class = 'TermNum')][not(@class = 'noTOC')]" \
133
142
  "[string-length(normalize-space(.))>0]"
data/lib/isodoc/i18n.rb CHANGED
@@ -9,7 +9,7 @@ module IsoDoc
9
9
 
10
10
  def load_yaml1(lang, script)
11
11
  case lang
12
- when "en", "fr", "ru", "de", "es", "ar"
12
+ when "en", "fr", "ru", "de", "es", "ar", "ja"
13
13
  load_yaml2(lang)
14
14
  when "zh"
15
15
  if script == "Hans" then load_yaml2("zh-Hans")
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require_relative "./metadata_date"
4
2
  require_relative "./metadata_contributor"
5
3
 
@@ -39,7 +37,7 @@ module IsoDoc
39
37
  @metadata[key] = value
40
38
  end
41
39
 
42
- NOLANG = "[not(@language) or @language = '']"
40
+ NOLANG = "[not(@language) or @language = '']".freeze
43
41
 
44
42
  def currlang
45
43
  "[@language = '#{@lang}']"
@@ -109,7 +107,8 @@ module IsoDoc
109
107
 
110
108
  def version(isoxml, _out)
111
109
  set(:edition, isoxml&.at(ns("//bibdata/edition#{NOLANG}"))&.text)
112
- set(:edition_display, isoxml&.at(ns("//bibdata/edition#{currlang}"))&.text)
110
+ set(:edition_display,
111
+ isoxml&.at(ns("//bibdata/edition#{currlang}"))&.text)
113
112
  set(:docyear, isoxml&.at(ns("//bibdata/copyright/from"))&.text)
114
113
  set(:draft, isoxml&.at(ns("//bibdata/version/draft"))&.text)
115
114
  revdate = isoxml&.at(ns("//bibdata/version/revision-date"))&.text
@@ -173,5 +172,14 @@ module IsoDoc
173
172
  c = isoxml.at(ns("//metanorma-extension/source-highlighter-css")) or return
174
173
  set(:code_css, c.text)
175
174
  end
175
+
176
+ def presentation(xml, _out)
177
+ xml.xpath(ns("//metanorma-extension/presentation-metadata")).each do |p|
178
+ ((n = p.at(ns("./name"))) && (v = p.at(ns("./value")))) or next
179
+ lbl = "presentation_metadata_#{n.text}".to_sym
180
+ m = get[lbl] || []
181
+ set(lbl, m << v.text)
182
+ end
183
+ end
176
184
  end
177
185
  end
@@ -31,10 +31,18 @@ module IsoDoc
31
31
  end
32
32
 
33
33
  def formula1(elem)
34
+ formula_where(elem.at(ns("./dl")))
34
35
  lbl = @xrefs.anchor(elem["id"], :label, false)
35
36
  prefix_name(elem, "", lbl, "name")
36
37
  end
37
38
 
39
+ def formula_where(dlist)
40
+ dlist or return
41
+ dlist["class"] = "formula_dl"
42
+ where = dlist.xpath(ns("./dt")).size > 1 ? @i18n.where : @i18n.where_one
43
+ dlist.previous = "<p keep-with-next='true'>#{where}</p>"
44
+ end
45
+
38
46
  def example(docxml)
39
47
  docxml.xpath(ns("//example")).each { |f| example1(f) }
40
48
  end
@@ -17,10 +17,11 @@ module IsoDoc
17
17
 
18
18
  def eref_localities(refs, target, node)
19
19
  if can_conflate_eref_rendering?(refs)
20
- l10n(", #{eref_localities_conflated(refs, target, node)}")
20
+ l10n(", #{eref_localities_conflated(refs, target, node)}"
21
+ .gsub(/\s+/, " "))
21
22
  else
22
23
  ret = resolve_eref_connectives(eref_locality_stacks(refs, target, node))
23
- l10n(ret.join)
24
+ l10n(ret.join.gsub(/\s+/, " "))
24
25
  end
25
26
  end
26
27
 
@@ -68,7 +69,7 @@ module IsoDoc
68
69
  end
69
70
 
70
71
  def resolve_comma_connectives1(locs, locs1, add)
71
- if [", ", " "].include?(locs[1])
72
+ if [", ", " ", ""].include?(locs[1])
72
73
  add += locs[0..2].join
73
74
  locs.shift(3)
74
75
  else
@@ -1,6 +1,6 @@
1
1
  require "twitter_cldr"
2
2
  require "bigdecimal"
3
- require "mathml2asciimath"
3
+ require "plurimath"
4
4
 
5
5
  module IsoDoc
6
6
  class PresentationXMLConvert < ::IsoDoc::Convert
@@ -20,7 +20,7 @@ module IsoDoc
20
20
  num = BigDecimal(x.text)
21
21
  precision = /\./.match?(x.text) ? x.text.sub(/^.*\./, "").size : 0
22
22
  x.children = localized_number(num, locale, precision)
23
- rescue ArgumentError => e
23
+ rescue ArgumentError
24
24
  end
25
25
  end
26
26
 
@@ -90,17 +90,34 @@ module IsoDoc
90
90
  end
91
91
 
92
92
  def asciimath_dup(node)
93
- return if @suppressasciimathdup
93
+ return if @suppressasciimathdup || node.parent.at(ns("./asciimath"))
94
+
95
+ math = node.to_xml.gsub(/ xmlns=["'][^"']+["']/, "")
96
+ .gsub(%r{<[^:/>]+:}, "<").gsub(%r{</[^:/>]+:}, "</")
97
+ ret = Plurimath::Math.parse(math, "mathml").to_asciimath
98
+ ret = HTMLEntities.new.encode(ret, :basic)
99
+ node.next = "<asciimath>#{ret}</asciimath>"
100
+ rescue StandardError => e
101
+ warn "Failure to convert MathML to AsciiMath"
102
+ warn node.parent.to_xml
103
+ warn e
104
+ end
94
105
 
95
- a = MathML2AsciiMath.m2a(node.to_xml)
96
- node.next = "<!-- #{a} -->"
106
+ def maths_just_numeral(node)
107
+ mn = node.at("./m:mn", MATHML).children
108
+ if node.parent.name == "stem"
109
+ node.parent.replace(mn)
110
+ else
111
+ node.replace(mn)
112
+ end
97
113
  end
98
114
 
99
115
  def mathml1(node, locale)
100
116
  mathml_style_inherit(node)
101
- asciimath_dup(node)
117
+ justnumeral = node.elements.size == 1 && node.elements.first.name == "mn"
118
+ justnumeral or asciimath_dup(node)
102
119
  localize_maths(node, locale)
103
- mathml_number_to_number(node)
120
+ justnumeral and maths_just_numeral(node)
104
121
  end
105
122
 
106
123
  def mathml_style_inherit(node)
@@ -1,7 +1,8 @@
1
1
  module IsoDoc
2
2
  class PresentationXMLConvert < ::IsoDoc::Convert
3
3
  def prefix_container(container, linkend, node, _target)
4
- l10n("#{anchor_xref(node, container)}, #{linkend}")
4
+ l10n(@i18n.nested_xref.sub(/%1/, anchor_xref(node, container))
5
+ .sub(/%2/, linkend))
5
6
  end
6
7
 
7
8
  def anchor_value(id)
@@ -72,11 +73,22 @@ module IsoDoc
72
73
  capitalise_xref(node, linkend, anchor_value(node["target"]))
73
74
  end
74
75
 
76
+ # Note % to entry and Note % to entry: cannot conflate as Note % to entry 1 and 2
77
+ # So Notes 1 and 3, but Note 1 to entry and Note 3 to entry
75
78
  def combine_conflated_xref_locations(locs)
79
+ out = if locs.any? { |l| /%/.match?(l[:elem]) }
80
+ locs.each { |l| l[:label] = @xrefs.anchor(l[:target], :xref) }
81
+ else
82
+ conflate_xref_locations(locs)
83
+ end
84
+ combine_conflated_xref_locations_container(locs, l10n(combine_conn(out)))
85
+ end
86
+
87
+ def conflate_xref_locations(locs)
76
88
  out = locs.each { |l| l[:label] = anchor_value(l[:target]) }
77
89
  label = @i18n.inflect(locs.first[:elem], number: "pl")
78
- out[0][:label] = l10n("#{label} #{out[0][:label]}")
79
- combine_conflated_xref_locations_container(locs, l10n(combine_conn(out)))
90
+ out[0][:label] = l10n("#{label} #{out[0][:label]}").strip
91
+ out
80
92
  end
81
93
 
82
94
  def combine_conflated_xref_locations_container(locs, ret)
@@ -93,7 +105,7 @@ module IsoDoc
93
105
  type = @xrefs.anchor(l["target"], :type)
94
106
  m << { conn: l["connective"], target: l["target"],
95
107
  type: type, node: l, elem: @xrefs.anchor(l["target"], :elem),
96
- container: @xrefs.anchor(node["target"], :container, false) ||
108
+ container: @xrefs.anchor(l["target"], :container, false) ||
97
109
  %w(termnote).include?(type) }
98
110
  end
99
111
  end
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.4.5".freeze
2
+ VERSION = "2.5.1".freeze
3
3
  end
@@ -93,7 +93,7 @@ module IsoDoc
93
93
 
94
94
  def dl_parse_table(node, out)
95
95
  list_title_parse(node, out)
96
- out.table class: "dl" do |v|
96
+ out.table class: (node["class"] || "dl") do |v|
97
97
  node.elements.select { |n| dt_dd?(n) }
98
98
  .each_slice(2) do |dt, dd|
99
99
  dl_parse_table1(v, dt, dd)
@@ -204,14 +204,6 @@ module IsoDoc
204
204
  )
205
205
  end
206
206
 
207
- def formula_where(deflist, out)
208
- return unless deflist
209
-
210
- out.p { |p| p << @i18n.where }
211
- parse(deflist, out)
212
- t = out.parent.at("./table") and t["class"] = "formula_dl"
213
- end
214
-
215
207
  def formula_parse1(node, out)
216
208
  out.div **attr_code(class: "formula") do |div|
217
209
  div.p do |_p|
@@ -244,11 +236,11 @@ module IsoDoc
244
236
 
245
237
  def info(isoxml, out)
246
238
  @tocfigurestitle =
247
- isoxml&.at(ns("//metanorma-extension/toc[@type = 'figure']/title"))&.text
239
+ isoxml.at(ns("//metanorma-extension/toc[@type = 'figure']/title"))&.text
248
240
  @toctablestitle =
249
- isoxml&.at(ns("//metanorma-extension/toc[@type = 'table']/title"))&.text
241
+ isoxml.at(ns("//metanorma-extension/toc[@type = 'table']/title"))&.text
250
242
  @tocrecommendationstitle = isoxml
251
- &.at(ns("//metanorma-extension/toc[@type = 'recommendation']/title"))&.text
243
+ .at(ns("//metanorma-extension/toc[@type = 'recommendation']/title"))&.text
252
244
  super
253
245
  end
254
246
  end
@@ -62,8 +62,8 @@ module IsoDoc
62
62
  @anchors[n["id"]] =
63
63
  { label: termnote_label(c.print), type: "termnote",
64
64
  value: c.print, elem: @labels["termnote"],
65
- xref: l10n("#{anchor(t['id'], :xref)}, " \
66
- "#{@labels['note_xref']} #{c.print}") }
65
+ container: t["id"],
66
+ xref: l10n("#{@labels['note_xref']} #{c.print}") }
67
67
  end
68
68
  end
69
69
  end
@@ -75,8 +75,11 @@ module IsoDoc
75
75
  examples.noblank.each do |n|
76
76
  c.increment(n)
77
77
  idx = increment_label(examples, n, c, increment: false)
78
- @anchors[n["id"]] = anchor_struct(idx, n, @labels["example_xref"],
79
- "termexample", n["unnumbered"])
78
+ @anchors[n["id"]] =
79
+ { label: idx, type: "termexample",
80
+ value: idx, elem: @labels["example_xref"],
81
+ container: t["id"],
82
+ xref: l10n("#{@labels['example_xref']} #{idx}") }
80
83
  end
81
84
  end
82
85
  end
@@ -38,6 +38,7 @@ chain_and: "%1 و %2"
38
38
  chain_or: "%1 او %2"
39
39
  chain_from: "%1 %من 2"
40
40
  chain_to: "من %1 إلى %2"
41
+ nested_xref: "%1, %2"
41
42
  ordinal_keys: [gender]
42
43
  SpelloutRules:
43
44
  f: spellout-ordinal-feminine
@@ -60,6 +61,7 @@ key: مفتاح
60
61
  example: مثال
61
62
  example_xref: مثال
62
63
  where: حيث
64
+ where_one: حيث
63
65
  wholeoftext: كامل النص
64
66
  draft_label: مسودة
65
67
  inform_annex: إخباري
@@ -40,6 +40,7 @@ chain_and: "%1 und %2"
40
40
  chain_or: "%1 oder %2"
41
41
  chain_from: "%1 von %2"
42
42
  chain_to: "%1 bis %2"
43
+ nested_xref: "%1, %2"
43
44
  ordinal_keys: [gender,number]
44
45
  SpelloutRules:
45
46
  m.sg: spellout-ordinal-r
@@ -66,6 +67,7 @@ key: Taste
66
67
  example: BEISPIEL
67
68
  example_xref: Beispiel
68
69
  where: wobei
70
+ where_one: wobei
69
71
  wholeoftext: Ganzer Text
70
72
  draft_label: Entwurf
71
73
  inform_annex: informativ
@@ -46,6 +46,7 @@ chain_and: "%1 and %2"
46
46
  chain_or: "%1 or %2"
47
47
  chain_from: "%1 from %2"
48
48
  chain_to: "%1 to %2"
49
+ nested_xref: "%1, %2"
49
50
  ordinal_keys: []
50
51
  SpelloutRules: spellout-ordinal
51
52
  note: NOTE
@@ -75,6 +76,7 @@ key: Key
75
76
  example: EXAMPLE
76
77
  example_xref: Example
77
78
  where: where
79
+ where_one: where
78
80
  wholeoftext: Whole of text
79
81
  draft_label: draft
80
82
  inform_annex: informative
@@ -42,6 +42,7 @@ chain_and: "%1 y %2"
42
42
  chain_or: "%1 o %2"
43
43
  chain_from: "%1 del %2"
44
44
  chain_to: "%1 al %2"
45
+ nested_xref: "%1, %2"
45
46
  ordinal_keys: [gender,number]
46
47
  SpelloutRules:
47
48
  m.sg: spellout-ordinal-masculine
@@ -66,6 +67,7 @@ key: Clave
66
67
  example: EJEMPLO
67
68
  example_xref: Ejemplo
68
69
  where: donde
70
+ where_one: donde
69
71
  wholeoftext: Todo el texto
70
72
  draft_label: borrador
71
73
  inform_annex: informativo
@@ -39,6 +39,7 @@ chain_and: "%1 et %2"
39
39
  chain_or: "%1 ou %2"
40
40
  chain_from: "%1 de %2"
41
41
  chain_to: "%1 à %2"
42
+ nested_xref: "%1, %2"
42
43
  ordinal_keys: [gender,number]
43
44
  SpelloutRules:
44
45
  m.sg: spellout-ordinal-masculine
@@ -63,6 +64,7 @@ key: Légende
63
64
  example: EXEMPLE
64
65
  example_xref: Exemple
65
66
  where: où
67
+ where_one: où
66
68
  wholeoftext: Ensemble du texte
67
69
  draft_label: brouillon
68
70
  inform_annex: informative
@@ -0,0 +1,215 @@
1
+ term_def_boilerplate:
2
+ scope: 適用範囲
3
+ symbolsabbrev: 記号及び略語
4
+ abbrev: 略語
5
+ symbols: 記号
6
+ table_of_contents: 目次
7
+ introduction: 序文
8
+ foreword: まえがき
9
+ abstract: Abstract
10
+ acknowledgements: Acknowledgements
11
+ termsdef: 用語及び定義
12
+ termsdefsymbolsabbrev: 用語及び定義並びに記号及び略語
13
+ termsdefsymbols: 用語及び定義並びに記号
14
+ termsdefabbrev: 用語及び定義並びに略語
15
+ normref: 引用規格
16
+ bibliography: 参考文献
17
+ preface: Preface
18
+ clause: 箇条
19
+ annex: 附属書
20
+ appendix: Appendix
21
+ no_terms_boilerplate: |
22
+ <p>この規格には,定義する用語はない。</p>
23
+ internal_terms_boilerplate: |
24
+ <p>この規格で用いる主な用語及び定義は,次による。</p>
25
+ norm_with_refs_pref:
26
+ 次に掲げる引用規格は,この規格に引用されることによって,その一部又は全部がこの規格の要 求事項を構成している。これらの引用規格のうち,西暦年を付記してあるものは,記載の年の版を適 用し,その後の改正版(追補を含む。)は適用しない。西暦年の付記がない引用規格は,その最新版(追 補を含む。)を適用する。
27
+ norm_empty_pref:
28
+ この規格には,引用規格はない。
29
+ external_terms_boilerplate: |
30
+ <p>この規格で用いる主な用語及び定義は,% による。</p>
31
+ internal_external_terms_boilerplate: |
32
+ <p>この規格で用いる主な用語及び定義は,次によるほか,% による。</p>
33
+ term_defined_in: "[term defined in %]"
34
+ binary_and: "%1 and %2"
35
+ multiple_and: "%1, and %2"
36
+ binary_or: "%1 or %2"
37
+ multiple_or: "%1, or %2"
38
+ chain_and: "%1 and %2"
39
+ chain_or: "%1 or %2"
40
+ chain_from: "%1 from %2"
41
+ chain_to: "%1 to %2"
42
+ nested_xref: "%1の%2"
43
+ ordinal_keys: []
44
+ SpelloutRules: spellout-ordinal
45
+ note: 注記
46
+ note_xref: 注記
47
+ termnote: 注釈%
48
+ list: List
49
+ deflist: Definition List
50
+ figure: 図
51
+ diagram: Diagram
52
+ formula: 式
53
+ inequality: Formula
54
+ table: 表
55
+ requirement: 要求事項
56
+ recommendation: 推奨事項
57
+ permission: 許容事項
58
+ box: Box
59
+ index: 索引
60
+ standard_no: 規格番号
61
+ number: 番号
62
+ # Modspec
63
+ recommendationtest: Recommendation test
64
+ requirementtest: Requirement test
65
+ permissiontest: Permission test
66
+ recommendationclass: Recommendations class
67
+ requirementclass: Requirements class
68
+ permissionclass: Permissions class
69
+ abstracttest: Abstract test
70
+ conformanceclass: Conformance class
71
+ key: 記号説明
72
+ example: 例
73
+ example_xref: 例
74
+ where: ここで,
75
+ where_one: ここで,
76
+ wholeoftext: Whole of text
77
+ draft_label: draft
78
+ inform_annex: 参考
79
+ norm_annex: 規定
80
+ modified: modified
81
+ deprecated: 推奨しない用語
82
+ source: 出典
83
+ and: and
84
+ all_parts: 規格群
85
+ edition_ordinal: "%Spellout edition"
86
+ edition: edition
87
+ version: version
88
+ toc_figures: List of figures
89
+ toc_tables: List of tables
90
+ toc_recommendations: List of recommendations
91
+ month_january: January
92
+ month_february: February
93
+ month_march: March
94
+ month_april: April
95
+ month_may: May
96
+ month_june: June
97
+ month_july: July
98
+ month_august: August
99
+ month_september: September
100
+ month_october: October
101
+ month_november: November
102
+ month_december: December
103
+ obligation: Obligation
104
+ admonition: {
105
+ danger: Danger,
106
+ warning: 警告,
107
+ caution: Caution,
108
+ important: Important,
109
+ safety precautions: Safety Precautions,
110
+ editorial: Editorial Note
111
+ }
112
+ locality: {
113
+ section: Section,
114
+ clause: 箇条,
115
+ subclause: 細分箇条,
116
+ part: 部,
117
+ paragraph: 段落,
118
+ chapter: Chapter,
119
+ page: Page,
120
+ table: 表,
121
+ annex: 附属書,
122
+ figure: 図,
123
+ example: 例,
124
+ note: 注記,
125
+ formula: 式,
126
+ }
127
+ grammar_abbrevs:
128
+ masculine: m
129
+ feminine: f
130
+ neuter: n
131
+ common: common
132
+ singular: sg
133
+ dual: dual
134
+ pl: pl
135
+ isPreposition: prep
136
+ isParticiple: part
137
+ isAdjective: adj
138
+ isAdverb: adv
139
+ isNoun: noun
140
+ isVerb: verb
141
+ relatedterms:
142
+ deprecates: deprecates
143
+ supersedes: supersedes
144
+ narrower: narrower
145
+ broader: broader
146
+ equivalent: equivalent
147
+ compare: compare
148
+ contrast: contrast
149
+ see: see
150
+ seealso: see also
151
+ inflection:
152
+ Clause:
153
+ sg: Clause
154
+ pl: Clauses
155
+ Annex:
156
+ sg: Annex
157
+ pl: Annexes
158
+ Appendix:
159
+ sg: Appendix
160
+ pl: Appendixes
161
+ Note:
162
+ sg: Note
163
+ pl: Notes
164
+ "Note % to entry":
165
+ sg: Note % to entry
166
+ pl: Notes % to entry
167
+ List:
168
+ sg: List
169
+ pl: Lists
170
+ Figure:
171
+ sg: Figure
172
+ pl: Figures
173
+ Formula:
174
+ sg: Formula
175
+ pl: Formulas
176
+ Table:
177
+ sg: Table
178
+ pl: Tables
179
+ Requirement:
180
+ sg: Requirement
181
+ pl: Requirements
182
+ Recommendation:
183
+ sg: Recommendation
184
+ pl: Recommendations
185
+ Permission:
186
+ sg: Permission
187
+ pl: Permissions
188
+ Example:
189
+ sg: Example
190
+ pl: Examples
191
+ Part:
192
+ sg: Part
193
+ pl: Parts
194
+ Section:
195
+ sg: Section
196
+ pl: Sections
197
+ Paragraph:
198
+ sg: Paragraph
199
+ pl: Paragraphs
200
+ Chapter:
201
+ sg: Chapter
202
+ pl: Chapters
203
+ Page:
204
+ sg: Page
205
+ pl: Pages
206
+ doctype_dict:
207
+ international-standard: 日本産業規格
208
+ technical-specification: 標準仕様書
209
+ technical-report: 標準報告書
210
+ publicly-available-specification: Publicly Available Specification
211
+ international-workshop-agreement: International Workshop Agreement
212
+ guide: Guide
213
+ amendment: 追補
214
+ technical-corrigendum: Technical Corrigendum
215
+ directive: Directive
@@ -45,6 +45,7 @@ chain_and: "%1 и %2"
45
45
  chain_or: "%1 или %2"
46
46
  chain_from: "%1 от %2"
47
47
  chain_to: "%1 до %2"
48
+ nested_xref: "%1, %2"
48
49
  ordinal_keys: [gender,number]
49
50
  SpelloutRules:
50
51
  m.sg: spellout-ordinal-masculine
@@ -71,6 +72,7 @@ key: Условные обозначения
71
72
  example: ПРИМЕР
72
73
  example_xref: Пример
73
74
  where: где
75
+ where_one: где
74
76
  wholeoftext: Текст полностью
75
77
  draft_label: проект
76
78
  inform_annex: информативное
@@ -41,6 +41,7 @@ chain_and: "%1和%2"
41
41
  chain_or: "%1或%2"
42
42
  chain_from: "%1从%2"
43
43
  chain_to: "%1到%2"
44
+ nested_xref: "%1, %2"
44
45
  ordinal_keys: []
45
46
  SpelloutRules: spellout-ordinal
46
47
  note: 注
@@ -61,6 +62,7 @@ key: 说明
61
62
  example: 示例
62
63
  example_xref: 示例
63
64
  where: 式中
65
+ where_one: 式中
64
66
  wholeoftext: 全部
65
67
  draft_label: 稿
66
68
  inform_annex: 资料性附录
data/lib/isodoc.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require_relative "isodoc/version"
2
2
 
3
3
  require "nokogiri"
4
- require "asciimath"
5
4
  require "uuidtools"
6
5
  require "base64"
7
6
  require "mime/types"
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.5
4
+ version: 2.5.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: 2023-02-27 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: asciimath
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
13
  - !ruby/object:Gem::Dependency
28
14
  name: html2doc
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: 1.4.3
19
+ version: 1.5.0
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: 1.4.3
26
+ version: 1.5.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: htmlentities
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: mathml2asciimath
70
+ name: plurimath
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,19 +81,19 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: metanorma-utils
84
+ name: relaton-cli
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - "~>"
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: 1.4.5
89
+ version: '0'
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - "~>"
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
- version: 1.4.5
96
+ version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: mn2pdf
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -384,6 +370,7 @@ files:
384
370
  - lib/isodoc-yaml/i18n-en.yaml
385
371
  - lib/isodoc-yaml/i18n-es.yaml
386
372
  - lib/isodoc-yaml/i18n-fr.yaml
373
+ - lib/isodoc-yaml/i18n-ja.yaml
387
374
  - lib/isodoc-yaml/i18n-ru.yaml
388
375
  - lib/isodoc-yaml/i18n-zh-Hans.yaml
389
376
  - lib/isodoc.rb