metanorma-iec 1.4.1 → 1.4.5
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/Gemfile +2 -0
- data/Rakefile +1 -1
- data/lib/asciidoctor/iec/converter.rb +43 -26
- data/lib/asciidoctor/iec/front.rb +2 -3
- data/lib/asciidoctor/iec/iec.rng +48 -0
- data/lib/asciidoctor/iec/isodoc.rng +61 -18
- data/lib/asciidoctor/iec/isostandard.rng +14 -0
- data/lib/isodoc/iec/base_convert.rb +23 -58
- data/lib/isodoc/iec/html/htmlstyle.css +37 -5
- data/lib/isodoc/iec/html/htmlstyle.scss +34 -5
- data/lib/isodoc/iec/html/isodoc.css +1 -2
- data/lib/isodoc/iec/html/isodoc.scss +1 -2
- data/lib/isodoc/iec/html/scripts.html +0 -1
- data/lib/isodoc/iec/html/wordstyle.css +13 -11
- data/lib/isodoc/iec/html/wordstyle.scss +13 -11
- data/lib/isodoc/iec/iec.international-standard.xsl +428 -111
- data/lib/isodoc/iec/presentation_xml_convert.rb +193 -5
- data/lib/metanorma/iec/processor.rb +15 -8
- data/lib/metanorma/iec/version.rb +1 -1
- data/metanorma-iec.gemspec +2 -2
- data/spec/asciidoctor/base_spec.rb +0 -4
- data/spec/asciidoctor/cleanup_spec.rb +231 -202
- data/spec/asciidoctor/iev_spec.rb +195 -190
- data/spec/isodoc/iev_spec.rb +459 -118
- data/spec/isodoc/postproc_spec.rb +2 -5
- data/spec/isodoc/terms_spec.rb +183 -181
- data/spec/metanorma/processor_spec.rb +139 -44
- data/spec/spec_helper.rb +10 -12
- metadata +6 -6
@@ -4,6 +4,14 @@ require "isodoc"
|
|
4
4
|
module IsoDoc
|
5
5
|
module Iec
|
6
6
|
class PresentationXMLConvert < IsoDoc::Iso::PresentationXMLConvert
|
7
|
+
def i18n_init(lang, script, i18nyaml = nil)
|
8
|
+
super
|
9
|
+
@i18n_lg = {}
|
10
|
+
@i18n_lg["en"] = I18n.new("en", "Latn", i18nyaml || @i18nyaml)
|
11
|
+
@i18n_lg["fr"] = I18n.new("fr", "Latn", i18nyaml || @i18nyaml)
|
12
|
+
@i18n_lg["default"] = @i18n
|
13
|
+
end
|
14
|
+
|
7
15
|
def clause(docxml)
|
8
16
|
docxml.xpath(ns("//clause[not(ancestor::annex)] | "\
|
9
17
|
"//definitions | //references | "\
|
@@ -29,16 +37,196 @@ module IsoDoc
|
|
29
37
|
.call(elem)
|
30
38
|
end
|
31
39
|
|
40
|
+
DICT_PATHS = { doctype_dict: "./ext/doctype", stage_dict: "./status/stage",
|
41
|
+
substage_dict: "./status/substage",
|
42
|
+
function_dict: "./ext/function",
|
43
|
+
horizontal_dict: "./ext/horizontal" }.freeze
|
44
|
+
|
32
45
|
def bibdata_i18n(bib)
|
33
46
|
fr = IsoDoc::Iec::I18n.new("fr", "Latn")
|
34
47
|
en = IsoDoc::Iec::I18n.new("en", "Latn")
|
35
48
|
[{ lang: "en", i18n: en }, { lang: "fr", i18n: fr }].each do |v|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
49
|
+
DICT_PATHS.each do |lbl, xpath|
|
50
|
+
hash_translate(bib, v[:i18n].get[lbl.to_s], xpath, v[:lang])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def concept(docxml)
|
56
|
+
@is_iev and concept_iev(docxml)
|
57
|
+
super
|
58
|
+
end
|
59
|
+
|
60
|
+
def concept_iev(docxml)
|
61
|
+
labels = @xrefs.get_anchors.each_with_object({}) do |(k, v), m|
|
62
|
+
m[v[:label]] = k
|
63
|
+
end
|
64
|
+
docpart = docxml&.at(ns("//bibdata/ext/structuredidentifier/"\
|
65
|
+
"project-number/@part"))&.text or return
|
66
|
+
docxml.xpath(ns("//termref[@base = 'IEV']")).each do |t|
|
67
|
+
concept_iev1(t, docpart, labels)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def concept_iev1(termref, docpart, labels)
|
72
|
+
/^#{docpart}-/.match?(termref["target"]) or return
|
73
|
+
newtarget = labels[termref["target"]] or return
|
74
|
+
termref.name = "xref"
|
75
|
+
termref.delete("base")
|
76
|
+
termref["target"] = newtarget
|
77
|
+
end
|
78
|
+
|
79
|
+
def terms(docxml)
|
80
|
+
otherlang_designations(docxml)
|
81
|
+
super
|
82
|
+
merge_fr_into_en_term(docxml)
|
83
|
+
end
|
84
|
+
|
85
|
+
def merge_fr_into_en_term(docxml)
|
86
|
+
return unless @is_iev
|
87
|
+
|
88
|
+
docxml.xpath(ns("//term[@language = 'en'][@tag]")).each do |en|
|
89
|
+
fr = docxml.at(ns("//term[@language = 'fr'][@tag = '#{en['tag']}']"))
|
90
|
+
merge_fr_into_en_term1(en, fr) if fr
|
91
|
+
end
|
92
|
+
@xrefs.parse docxml
|
93
|
+
docxml.xpath(ns("//term/name")).each(&:remove)
|
94
|
+
term(docxml)
|
95
|
+
end
|
96
|
+
|
97
|
+
def merge_fr_into_en_term1(en_term, fr_term)
|
98
|
+
dl = en_term&.at(ns("./dl[@type = 'other-lang']"))&.remove
|
99
|
+
en_term << fr_term.remove.children
|
100
|
+
en_term << dl if dl
|
101
|
+
en_term["language"] = "en,fr"
|
102
|
+
en_term.delete("tag")
|
103
|
+
end
|
104
|
+
|
105
|
+
def otherlang_designations(docxml)
|
106
|
+
return unless @is_iev
|
107
|
+
|
108
|
+
docxml.xpath(ns("//term")).each do |t|
|
109
|
+
otherlang_designations1(t, t["language"]&.split(/,/) || %w(en fr))
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def extract_otherlang_designations(term, lgs)
|
114
|
+
term.xpath(ns(".//preferred/expression[@language]"))
|
115
|
+
.each_with_object([]) do |d, m|
|
116
|
+
lg = d["language"]
|
117
|
+
d.delete("language")
|
118
|
+
next if lgs.include?(lg)
|
119
|
+
|
120
|
+
p = d.parent
|
121
|
+
designation_annotate(p, d.at(ns("./name")))
|
122
|
+
m << { lang: lg, script: Metanorma::Utils.default_script(lg),
|
123
|
+
designation: l10n_recursive(p.remove, lg).to_xml.strip }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def l10n_recursive(xml, lang)
|
128
|
+
script = Metanorma::Utils.default_script(lang)
|
129
|
+
c = HTMLEntities.new
|
130
|
+
xml.traverse do |x|
|
131
|
+
next unless x.text?
|
132
|
+
|
133
|
+
text = c.encode(c.decode(x.text), :hexadecimal)
|
134
|
+
x.replace(cleanup_entities(l10n(text, lang, script), is_xml: false))
|
41
135
|
end
|
136
|
+
xml
|
137
|
+
end
|
138
|
+
|
139
|
+
def merge_otherlang_designations(desgn)
|
140
|
+
h = desgn.each_with_object({}) do |e, m|
|
141
|
+
if m[e[:lang]]
|
142
|
+
m[e[:lang]][:designation] += e[:designation]
|
143
|
+
else m[e[:lang]] = e
|
144
|
+
end
|
145
|
+
end
|
146
|
+
h.keys.sort.each_with_object([]) { |k, m| m << h[k] }
|
147
|
+
end
|
148
|
+
|
149
|
+
def otherlang_designations1(term, lgs)
|
150
|
+
pr = merge_otherlang_designations(
|
151
|
+
extract_otherlang_designations(term, lgs),
|
152
|
+
)
|
153
|
+
return if pr.empty?
|
154
|
+
|
155
|
+
prefs = pr.map do |p|
|
156
|
+
"<dt>#{p[:lang]}</dt>"\
|
157
|
+
"<dd language='#{p[:lang]}' script='#{p[:script]}'>"\
|
158
|
+
"#{cleanup_entities(p[:designation])}</dd>"
|
159
|
+
end
|
160
|
+
term << "<dl type='other-lang'>#{prefs.join}</dl>"
|
161
|
+
end
|
162
|
+
|
163
|
+
def related(docxml)
|
164
|
+
docxml.xpath(ns("//term[related]")).each { |f| move_related(f) }
|
165
|
+
super
|
166
|
+
end
|
167
|
+
|
168
|
+
def move_related(term)
|
169
|
+
defn = term.at(ns("./definition")) or return
|
170
|
+
term.xpath(ns("./related")).reverse.each do |r|
|
171
|
+
defn.next = r.remove
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def related1(node)
|
176
|
+
lg = node&.at("./ancestor::xmlns:term/@language")&.text
|
177
|
+
@i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
|
178
|
+
p = node.at(ns("./preferred"))
|
179
|
+
ref = node.at(ns("./xref | ./eref | ./termref"))
|
180
|
+
label = @i18n.relatedterms[node["type"]].upcase
|
181
|
+
node.replace(l10n("<p>#{label}: "\
|
182
|
+
"#{p.children.to_xml} (#{ref.to_xml})</p>"))
|
183
|
+
@i18n = @i18n_lg["default"]
|
184
|
+
end
|
185
|
+
|
186
|
+
def termsource_modification(node)
|
187
|
+
lg = node&.at("./ancestor::xmlns:term/@language")&.text
|
188
|
+
@i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
|
189
|
+
super
|
190
|
+
@i18n = @i18n_lg["default"]
|
191
|
+
end
|
192
|
+
|
193
|
+
def termsource1(node)
|
194
|
+
lg = node&.at("./ancestor::xmlns:term/@language")&.text
|
195
|
+
@i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
|
196
|
+
if @is_iev then termsource1_iev(node)
|
197
|
+
else super
|
198
|
+
end
|
199
|
+
@i18n = @i18n_lg["default"]
|
200
|
+
end
|
201
|
+
|
202
|
+
def termsource1_iev(elem)
|
203
|
+
while elem&.next_element&.name == "termsource"
|
204
|
+
elem << l10n("; #{elem.next_element.remove.children.to_xml}")
|
205
|
+
end
|
206
|
+
elem.children = l10n("#{@i18n.source}: #{elem.children.to_xml.strip}")
|
207
|
+
end
|
208
|
+
|
209
|
+
def termexample(docxml)
|
210
|
+
docxml.xpath(ns("//termexample")).each do |f|
|
211
|
+
termexample1(f)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def termexample1(elem)
|
216
|
+
lg = elem&.at("./ancestor::xmlns:term/@language")&.text
|
217
|
+
@i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
|
218
|
+
example1(elem)
|
219
|
+
@i18n = @i18n_lg["default"]
|
220
|
+
end
|
221
|
+
|
222
|
+
def termnote1(elem)
|
223
|
+
lg = elem&.at("./ancestor::xmlns:term/@language")&.text
|
224
|
+
@i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
|
225
|
+
|
226
|
+
val = @xrefs.anchor(elem["id"], :value) || "???"
|
227
|
+
lbl = @i18n.termnote.gsub(/%/, val)
|
228
|
+
prefix_name(elem, "", lower2cap(lbl), "name")
|
229
|
+
@i18n = @i18n_lg["default"]
|
42
230
|
end
|
43
231
|
|
44
232
|
include Init
|
@@ -3,8 +3,7 @@ require "metanorma/processor"
|
|
3
3
|
module Metanorma
|
4
4
|
module Iec
|
5
5
|
class Processor < Metanorma::Processor
|
6
|
-
|
7
|
-
def initialize
|
6
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
8
7
|
@short = :iec
|
9
8
|
@input_format = :asciidoc
|
10
9
|
@asciidoctor_backend = :iec
|
@@ -14,7 +13,8 @@ module Metanorma
|
|
14
13
|
super.merge(
|
15
14
|
html: "html",
|
16
15
|
doc: "doc",
|
17
|
-
pdf: "pdf"
|
16
|
+
pdf: "pdf",
|
17
|
+
sts: "sts.xml",
|
18
18
|
)
|
19
19
|
end
|
20
20
|
|
@@ -33,16 +33,23 @@ module Metanorma
|
|
33
33
|
"Metanorma::Iec #{Metanorma::Iec::VERSION}"
|
34
34
|
end
|
35
35
|
|
36
|
-
def output(isodoc_node, inname, outname, format, options={})
|
36
|
+
def output(isodoc_node, inname, outname, format, options = {})
|
37
37
|
case format
|
38
38
|
when :html
|
39
|
-
IsoDoc::Iec::HtmlConvert.new(options).convert(inname, isodoc_node,
|
39
|
+
IsoDoc::Iec::HtmlConvert.new(options).convert(inname, isodoc_node,
|
40
|
+
nil, outname)
|
40
41
|
when :doc
|
41
|
-
IsoDoc::Iec::WordConvert.new(options).convert(inname, isodoc_node,
|
42
|
+
IsoDoc::Iec::WordConvert.new(options).convert(inname, isodoc_node,
|
43
|
+
nil, outname)
|
42
44
|
when :pdf
|
43
|
-
IsoDoc::Iec::PdfConvert.new(options).convert(inname, isodoc_node,
|
45
|
+
IsoDoc::Iec::PdfConvert.new(options).convert(inname, isodoc_node,
|
46
|
+
nil, outname)
|
47
|
+
when :sts
|
48
|
+
IsoDoc::Iso::StsConvert.new(options).convert(inname, isodoc_node,
|
49
|
+
nil, outname)
|
44
50
|
when :presentation
|
45
|
-
IsoDoc::Iec::PresentationXMLConvert.new(options)
|
51
|
+
IsoDoc::Iec::PresentationXMLConvert.new(options)
|
52
|
+
.convert(inname, isodoc_node, nil, outname)
|
46
53
|
else
|
47
54
|
super
|
48
55
|
end
|
data/metanorma-iec.gemspec
CHANGED
@@ -30,11 +30,11 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_dependency "metanorma-iso", "~> 1.10.0"
|
31
31
|
spec.add_dependency "ruby-jing"
|
32
32
|
|
33
|
-
spec.add_development_dependency "
|
33
|
+
spec.add_development_dependency "debug"
|
34
34
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
35
35
|
spec.add_development_dependency "guard", "~> 2.14"
|
36
36
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
37
|
-
spec.add_development_dependency "iev", "~> 0.
|
37
|
+
spec.add_development_dependency "iev", "~> 0.3.0"
|
38
38
|
spec.add_development_dependency "rake", "~> 13.0"
|
39
39
|
spec.add_development_dependency "rspec", "~> 3.6"
|
40
40
|
spec.add_development_dependency "rubocop", "~> 1.5.2"
|
@@ -166,7 +166,6 @@ RSpec.describe Asciidoctor::Iec do
|
|
166
166
|
</relation>
|
167
167
|
<ext>
|
168
168
|
<doctype>article</doctype>
|
169
|
-
<horizontal>false</horizontal>
|
170
169
|
<editorialgroup>
|
171
170
|
<technical-committee number='1' type='A'>TC</technical-committee>
|
172
171
|
<technical-committee number='11' type='A1'>TC1</technical-committee>
|
@@ -675,7 +674,6 @@ RSpec.describe Asciidoctor::Iec do
|
|
675
674
|
</copyright>
|
676
675
|
<ext>
|
677
676
|
<doctype>article</doctype>
|
678
|
-
<horizontal>false</horizontal>
|
679
677
|
<editorialgroup>
|
680
678
|
<technical-committee/>
|
681
679
|
<subcommittee/>
|
@@ -879,7 +877,6 @@ RSpec.describe Asciidoctor::Iec do
|
|
879
877
|
</copyright>
|
880
878
|
<ext>
|
881
879
|
<doctype>article</doctype>
|
882
|
-
<horizontal>false</horizontal>
|
883
880
|
<editorialgroup>
|
884
881
|
<technical-committee/>
|
885
882
|
<subcommittee/>
|
@@ -947,7 +944,6 @@ RSpec.describe Asciidoctor::Iec do
|
|
947
944
|
</copyright>
|
948
945
|
<ext>
|
949
946
|
<doctype>article</doctype>
|
950
|
-
<horizontal>false</horizontal>
|
951
947
|
<editorialgroup>
|
952
948
|
<technical-committee/>
|
953
949
|
<subcommittee/>
|