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 +4 -4
- data/isodoc.gemspec +5 -5
- data/lib/isodoc/base_style/all.css +4 -0
- data/lib/isodoc/base_style/reset.css +4 -0
- data/lib/isodoc/base_style/reset.scss +6 -0
- data/lib/isodoc/convert.rb +11 -3
- data/lib/isodoc/function/blocks.rb +2 -14
- data/lib/isodoc/function/cleanup.rb +3 -3
- data/lib/isodoc/function/lists.rb +4 -4
- data/lib/isodoc/function/references.rb +1 -1
- data/lib/isodoc/function/section.rb +10 -10
- data/lib/isodoc/function/section_titles.rb +10 -10
- data/lib/isodoc/function/terms.rb +4 -4
- data/lib/isodoc/function/to_word_html.rb +5 -4
- data/lib/isodoc/html_function/postprocess_cover.rb +19 -10
- data/lib/isodoc/i18n.rb +1 -1
- data/lib/isodoc/metadata.rb +12 -4
- data/lib/isodoc/presentation_function/block.rb +8 -0
- data/lib/isodoc/presentation_function/erefs.rb +4 -3
- data/lib/isodoc/presentation_function/math.rb +24 -7
- data/lib/isodoc/presentation_function/xrefs.rb +16 -4
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +4 -12
- data/lib/isodoc/xref/xref_gen.rb +7 -4
- data/lib/isodoc-yaml/i18n-ar.yaml +2 -0
- data/lib/isodoc-yaml/i18n-de.yaml +2 -0
- data/lib/isodoc-yaml/i18n-en.yaml +2 -0
- data/lib/isodoc-yaml/i18n-es.yaml +2 -0
- data/lib/isodoc-yaml/i18n-fr.yaml +2 -0
- data/lib/isodoc-yaml/i18n-ja.yaml +215 -0
- data/lib/isodoc-yaml/i18n-ru.yaml +2 -0
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +2 -0
- data/lib/isodoc.rb +0 -1
- metadata +11 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23f98744bc0bb65ad60168ed537e14fe7c42222751d9beb5889ef3f6774c5b2a
|
4
|
+
data.tar.gz: 126d7531a7f6dee506d40ec9495de1cbff43efbd8699c9913e3564698bce3b1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 "
|
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 "
|
40
|
-
spec.add_dependency "
|
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"
|
data/lib/isodoc/convert.rb
CHANGED
@@ -219,15 +219,23 @@ module IsoDoc
|
|
219
219
|
end
|
220
220
|
|
221
221
|
def convert_i18n_init(docxml)
|
222
|
-
|
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
|
-
|
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
|
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
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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
|
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(
|
59
|
-
preceding_floating_titles(
|
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
|
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(
|
89
|
-
return if
|
88
|
+
def preceding_floating_titles(node, div)
|
89
|
+
return if node.nil?
|
90
90
|
|
91
|
-
out =
|
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
|
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
|
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
|
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
|
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
|
-
|
122
|
-
|
123
|
-
|
124
|
-
symbols_abbrevs isoxml, out,
|
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
|
-
|
120
|
-
|
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
|
-
|
124
|
-
|
125
|
-
|
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
data/lib/isodoc/metadata.rb
CHANGED
@@ -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,
|
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 "
|
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
|
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
|
-
|
96
|
-
|
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
|
-
|
117
|
+
justnumeral = node.elements.size == 1 && node.elements.first.name == "mn"
|
118
|
+
justnumeral or asciimath_dup(node)
|
102
119
|
localize_maths(node, locale)
|
103
|
-
|
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(
|
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
|
-
|
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(
|
108
|
+
container: @xrefs.anchor(l["target"], :container, false) ||
|
97
109
|
%w(termnote).include?(type) }
|
98
110
|
end
|
99
111
|
end
|
data/lib/isodoc/version.rb
CHANGED
@@ -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
|
239
|
+
isoxml.at(ns("//metanorma-extension/toc[@type = 'figure']/title"))&.text
|
248
240
|
@toctablestitle =
|
249
|
-
isoxml
|
241
|
+
isoxml.at(ns("//metanorma-extension/toc[@type = 'table']/title"))&.text
|
250
242
|
@tocrecommendationstitle = isoxml
|
251
|
-
|
243
|
+
.at(ns("//metanorma-extension/toc[@type = 'recommendation']/title"))&.text
|
252
244
|
super
|
253
245
|
end
|
254
246
|
end
|
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -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
|
-
|
66
|
-
|
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"]] =
|
79
|
-
|
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
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
|
+
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-
|
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.
|
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.
|
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:
|
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:
|
84
|
+
name: relaton-cli
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
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:
|
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
|