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 +4 -4
- data/lib/isodoc/base_style/all.css +10 -1
- data/lib/isodoc/base_style/reset.css +10 -1
- data/lib/isodoc/base_style/reset.scss +5 -3
- data/lib/isodoc/class_utils.rb +1 -1
- data/lib/isodoc/metadata.rb +2 -0
- data/lib/isodoc/presentation_function/math.rb +13 -62
- data/lib/isodoc/presentation_function/metadata.rb +17 -0
- data/lib/isodoc/presentation_function/refs.rb +3 -1
- data/lib/isodoc/presentation_xml_convert.rb +6 -3
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc-yaml/i18n-ja.yaml +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df0cc3b9722ac37d5d0853fe0b483fedc476ad51655488a893dcb7c58f08b5a3
|
|
4
|
+
data.tar.gz: 8f5fe80aa471b64d274e3c8b44b87cc6c9fd5ff20bf52b9a61ee3d8ede5421e0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
204
|
-
a.header
|
|
205
|
-
a.header:
|
|
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,
|
data/lib/isodoc/class_utils.rb
CHANGED
data/lib/isodoc/metadata.rb
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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?
|
|
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,
|
|
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
|
-
|
|
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("<", "<").gsub(">", ">")
|
|
@@ -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
|
-
|
|
126
|
+
&.next_element ||
|
|
124
127
|
xml.root.elements.first.before("<metanorma-extension/>")
|
|
125
128
|
.previous_element
|
|
126
129
|
end
|
data/lib/isodoc/version.rb
CHANGED
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.
|
|
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-
|
|
11
|
+
date: 2024-06-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: html2doc
|