isodoc 2.4.5 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
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