isodoc 2.10.2 → 2.10.4

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: 3e19ba3a2fd2440b24be729cbba835907ac504ca7c762f673632de52881922f1
4
- data.tar.gz: 6b3fff1e5f4feebc785588093eee4fb81a1da3dc37ff1417b2e30445e353dbcc
3
+ metadata.gz: df0cc3b9722ac37d5d0853fe0b483fedc476ad51655488a893dcb7c58f08b5a3
4
+ data.tar.gz: 8f5fe80aa471b64d274e3c8b44b87cc6c9fd5ff20bf52b9a61ee3d8ede5421e0
5
5
  SHA512:
6
- metadata.gz: 8751365f532c1123f30df8480fca7021cb90122c419e963b4ba46fb6ece8bca0c4bd1593d4c3d3f987f5db5dde295012e01a59af5392929dc3db972db5bb50c9
7
- data.tar.gz: '006383549c57caf4cb72ef35b51aaad6ada733981858f2188eb7515f08d8d1e964b7a27e47d723199737c6dc70cd7c379775804ee28b55757fda18a1c77dcb63'
6
+ metadata.gz: 2f8da1dc68e54da5f58af3ad2ca370e175cc914216ecd2148068ec745975c8229371fa87b586ab60c4701b0b21d9b676893e15d97cabc1e513cba20c5ed2ad80
7
+ data.tar.gz: b20e85c69fe1f89c327b22c2f0232ab751c577028de077bb6b890ae337d24c98de939a8ecb1ff8607a6d2dd9e577abec8404372572033361c4939578be4e0c99
@@ -1,3 +1,4 @@
1
+ @charset "UTF-8";
1
2
  html, body, div, span, applet, object, iframe,
2
3
  h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
4
  a, abbr, acronym, address, big, cite, code,
@@ -169,12 +170,15 @@ table.rouge-line-table pre {
169
170
  overflow-x: visible;
170
171
  font-size: 100%; }
171
172
 
173
+ /* header § links */
172
174
  a.header {
173
175
  color: inherit;
174
176
  text-decoration: none; }
175
177
 
176
178
  a.header:hover {
177
- color: #a53221; }
179
+ color: #a53221 !important;
180
+ background: inherit;
181
+ box-shadow: none; }
178
182
 
179
183
  a.header:visited {
180
184
  color: inherit;
@@ -197,6 +201,11 @@ a.anchor::before {
197
201
  display: block;
198
202
  padding-top: .1em; }
199
203
 
204
+ a.anchor:hover {
205
+ color: #a53221;
206
+ background: inherit;
207
+ box-shadow: none; }
208
+
200
209
  h1 > a.anchor:hover,
201
210
  h2 > a.anchor:hover,
202
211
  h3 > a.anchor:hover,
@@ -1,3 +1,4 @@
1
+ @charset "UTF-8";
1
2
  html, body, div, span, applet, object, iframe,
2
3
  h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
4
  a, abbr, acronym, address, big, cite, code,
@@ -169,12 +170,15 @@ table.rouge-line-table pre {
169
170
  overflow-x: visible;
170
171
  font-size: 100%; }
171
172
 
173
+ /* header § links */
172
174
  a.header {
173
175
  color: inherit;
174
176
  text-decoration: none; }
175
177
 
176
178
  a.header:hover {
177
- color: #a53221; }
179
+ color: #a53221 !important;
180
+ background: inherit;
181
+ box-shadow: none; }
178
182
 
179
183
  a.header:visited {
180
184
  color: inherit;
@@ -197,6 +201,11 @@ a.anchor::before {
197
201
  display: block;
198
202
  padding-top: .1em; }
199
203
 
204
+ a.anchor:hover {
205
+ color: #a53221;
206
+ background: inherit;
207
+ box-shadow: none; }
208
+
200
209
  h1 > a.anchor:hover,
201
210
  h2 > a.anchor:hover,
202
211
  h3 > a.anchor:hover,
@@ -200,11 +200,13 @@ table.rouge-line-table pre {
200
200
  font-size: 100%;
201
201
  }
202
202
 
203
- a.header{color:inherit;text-decoration:none}
204
- a.header:hover{color:#a53221}
205
- a.header:visited{color:inherit;text-decoration:none}
203
+ /* header § links */
204
+ a.header{color:inherit;text-decoration:none;}
205
+ a.header:hover{color:#a53221 !important;background:inherit;box-shadow:none;}
206
+ a.header:visited{color:inherit;text-decoration:none;}
206
207
  a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
207
208
  a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
209
+ a.anchor:hover{color:#a53221;background:inherit;box-shadow:none;}
208
210
  h1>a.anchor:hover,
209
211
  h2>a.anchor:hover,
210
212
  h3>a.anchor:hover,
@@ -67,7 +67,7 @@ module IsoDoc
67
67
 
68
68
  def nearest_block_parent(node)
69
69
  until %w(p title td th name formula li dt dd sourcecode pre quote
70
- note example)
70
+ note example target clause annex term appendix bibdata)
71
71
  .include?(node.name)
72
72
  node = node.parent
73
73
  end
@@ -48,6 +48,8 @@ module IsoDoc
48
48
  set(:doctype, status_print(b))
49
49
  b1 = isoxml&.at(ns("//bibdata/ext/doctype#{currlang}"))&.text || b
50
50
  set(:doctype_display, status_print(b1))
51
+ b = isoxml&.at(ns("//bibdata/ext/subdoctype#{NOLANG}"))&.text || return
52
+ set(:subdoctype, status_print(b))
51
53
  end
52
54
 
53
55
  def docstatus(xml, _out)
@@ -8,7 +8,10 @@ module IsoDoc
8
8
 
9
9
  def mathml(docxml)
10
10
  docxml.xpath("//m:math", MATHML).each { |f| mathml_linebreak(f) }
11
- locale = twitter_cldr_localiser
11
+ locale = @lang.to_sym
12
+ @numfmt = Plurimath::NumberFormatter
13
+ .new(locale, localize_number: @localizenumber,
14
+ localizer_symbols: twitter_cldr_localiser_symbols)
12
15
  docxml.xpath("//m:math", MATHML).each do |f| # rubocop:disable Style/CombinableLoops
13
16
  mathml1(f, locale)
14
17
  end
@@ -18,77 +21,25 @@ module IsoDoc
18
21
  # TwitterCldr::DataReaders::NumberDataReader.new(locale).symbols
19
22
  def localize_maths(node, locale)
20
23
  node.xpath(".//m:mn", MATHML).each do |x|
21
- num = BigDecimal(x.text)
22
- precision = /\./.match?(x.text) ? x.text.sub(/^.*\./, "").size : 0
23
- x.children = localized_number(num, locale, precision)
24
+ x.children = @numfmt
25
+ .localized_number(x.text, locale: locale,
26
+ precision: num_precision(x.text))
24
27
  rescue ArgumentError
25
28
  end
26
29
  end
27
30
 
28
- # By itself twitter-cldr does not support fraction part digits grouping
29
- # and custom delimeter, will decorate fraction part manually
30
- def localized_number(num, locale, precision)
31
- localized = localized_number1(num, locale, precision)
32
- twitter_cldr_reader_symbols = twitter_cldr_reader(locale)
33
- return localized unless twitter_cldr_reader_symbols[:decimal]
34
-
35
- integer, fraction = localized.split(twitter_cldr_reader_symbols[:decimal])
36
- return localized if fraction.nil? || fraction.empty?
37
-
38
- [integer, decorate_fraction_part(fraction, locale)]
39
- .join(twitter_cldr_reader_symbols[:decimal])
40
- end
41
-
42
- def localized_number1(num, locale, precision)
43
- if precision.zero?
44
- num.localize(locale).to_s
45
- else
46
- num.localize(locale).to_decimal.to_s(precision: precision)
47
- end
48
- end
49
-
50
- def decorate_fraction_part(fract, locale)
51
- result = []
52
- twitter_cldr_reader_symbols = twitter_cldr_reader(locale)
53
- fract = fract.slice(0..(twitter_cldr_reader_symbols[:precision] || -1))
54
- fr_group_digits = twitter_cldr_reader_symbols[:fraction_group_digits] || 1
55
- until fract.empty?
56
- result.push(fract.slice!(0, fr_group_digits))
57
- end
58
- result.join(twitter_cldr_reader_symbols[:fraction_group].to_s)
31
+ def num_precision(num)
32
+ precision = 0
33
+ /\./.match?(num) and precision =
34
+ twitter_cldr_localiser_symbols[:precision] ||
35
+ num.sub(/^.*\./, "").size
36
+ precision
59
37
  end
60
38
 
61
39
  def twitter_cldr_localiser_symbols
62
40
  {}
63
41
  end
64
42
 
65
- def twitter_cldr_reader(locale)
66
- return @twitter_cldr_reader if @twitter_cldr_reader
67
-
68
- num = TwitterCldr::DataReaders::NumberDataReader.new(locale)
69
- @twitter_cldr_reader = num.symbols.merge!(twitter_cldr_localiser_symbols)
70
- .merge!(parse_localize_number)
71
- @twitter_cldr_reader
72
- end
73
-
74
- def twitter_cldr_localiser
75
- locale = TwitterCldr.supported_locale?(@lang.to_sym) ? @lang.to_sym : :en
76
- twitter_cldr_reader(locale)
77
- locale
78
- end
79
-
80
- def parse_localize_number
81
- @localizenumber or return {}
82
- m = %r{(?<group>[^#])?(?<groupdigits>#+0)(?<decimal>.)(?<fractdigits>#+)(?<fractgroup>[^#])?}
83
- .match(@localizenumber) or return {}
84
- ret = { decimal: m[:decimal], group_digits: m[:groupdigits].size,
85
- fraction_group_digits: m[:fractdigits].size,
86
- group: m[:group] || "",
87
- fraction_group: m[:fractgroup] || "" }.compact
88
- %i(group fraction_group).each { |x| ret[x] == " " and ret[x] = "\u00A0" }
89
- ret
90
- end
91
-
92
43
  def asciimath_dup(node)
93
44
  @suppressasciimathdup || node.parent.at(ns("./asciimath")) and return
94
45
  math = node.to_xml.gsub(/ xmlns=["'][^"']+["']/, "")
@@ -3,6 +3,7 @@ module IsoDoc
3
3
  def metadata(docxml)
4
4
  toc_metadata(docxml)
5
5
  fonts_metadata(docxml)
6
+ attachments_extract(docxml)
6
7
  preprocess_xslt_insert(docxml)
7
8
  a = docxml.at(ns("//bibdata")) or return
8
9
  a.next =
@@ -10,6 +11,22 @@ module IsoDoc
10
11
  "</localized-strings>"
11
12
  end
12
13
 
14
+ def attachments_extract(docxml)
15
+ docxml.at(ns("//metanorma-extension/attachment")) or return
16
+ dir = File.join(@localdir, "_#{@outputfile}_attachments")
17
+ FileUtils.rm_rf(dir)
18
+ FileUtils.mkdir_p(dir)
19
+ docxml.xpath(ns("//metanorma-extension/attachment")).each do |a|
20
+ save_attachment(a, dir)
21
+ end
22
+ end
23
+
24
+ def save_attachment(attachment, dir)
25
+ n = File.join(dir, attachment["name"])
26
+ c = attachment.text.sub(%r{^data:[^;]+;(?:charset=[^;]+;)?base64,}, "")
27
+ File.open(n, "wb") { |f| f.write(Base64.strict_decode64(c)) }
28
+ end
29
+
13
30
  def extension_insert(xml, path = [])
14
31
  ins = extension_insert_pt(xml)
15
32
  path.each do |n|
@@ -25,7 +25,9 @@ module IsoDoc
25
25
  def hidden_items(docxml)
26
26
  docxml.xpath(ns("//references[bibitem/@hidden = 'true']")).each do |x|
27
27
  x.at(ns("./bibitem[not(@hidden = 'true')]")) and next
28
- x.elements.map(&:name).any? { |n| n != "bibitem" } and next
28
+ x.elements.map(&:name).any? do |n|
29
+ !%w(title bibitem).include?(n)
30
+ end and next
29
31
  x["hidden"] = "true"
30
32
  end
31
33
  end
@@ -18,10 +18,13 @@ module IsoDoc
18
18
  super
19
19
  end
20
20
 
21
- def convert1(docxml, _filename, _dir)
21
+ def convert1(docxml, filename, dir)
22
+ @outputdir = dir
23
+ @outputfile = filename
22
24
  docid_prefixes(docxml) # feeds @xrefs.parse citation processing
23
25
  @xrefs.parse docxml
24
- info docxml, nil
26
+ @xrefs.klass.meta = @meta
27
+ @xrefs.klass.info docxml, nil
25
28
  conversions(docxml)
26
29
  docxml.root["type"] = "presentation"
27
30
  docxml.to_xml.gsub("&lt;", "&#x3c;").gsub("&gt;", "&#x3e;")
@@ -120,7 +123,7 @@ module IsoDoc
120
123
  def metanorma_extension_insert_pt(xml)
121
124
  xml.at(ns("//metanorma-extension")) ||
122
125
  xml.at(ns("//bibdata"))&.after("<metanorma-extension/>")
123
- &.next_element ||
126
+ &.next_element ||
124
127
  xml.root.elements.first.before("<metanorma-extension/>")
125
128
  .previous_element
126
129
  end
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.10.2".freeze
2
+ VERSION = "2.10.4".freeze
3
3
  end
@@ -89,7 +89,7 @@ deprecated: 推奨しない用語
89
89
  source: 出典
90
90
  and: and
91
91
  all_parts: 規格群
92
- edition_ordinal: "第3版{{ var1 }}版"
92
+ edition_ordinal: "第{{ var1 }}版"
93
93
  edition: 版
94
94
  version: version
95
95
  toc_figures: List of figures
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.2
4
+ version: 2.10.4
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-05-06 00:00:00.000000000 Z
11
+ date: 2024-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: html2doc