metanorma-iec 1.4.4 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +4 -32
  3. data/.gitignore +14 -0
  4. data/Gemfile +4 -0
  5. data/lib/isodoc/iec/base_convert.rb +25 -14
  6. data/lib/isodoc/iec/html/htmlstyle.css +36 -21
  7. data/lib/isodoc/iec/html/htmlstyle.scss +13 -7
  8. data/lib/isodoc/iec/html/wordstyle.css +13 -11
  9. data/lib/isodoc/iec/html/wordstyle.scss +13 -11
  10. data/lib/isodoc/iec/html_convert.rb +2 -1
  11. data/lib/isodoc/iec/i18n-fr.yaml +1 -1
  12. data/lib/isodoc/iec/iec.international-standard.xsl +1637 -1280
  13. data/lib/isodoc/iec/presentation_xml_convert.rb +37 -7
  14. data/lib/isodoc/iec/word_convert.rb +2 -0
  15. data/lib/isodoc/iec/xref.rb +9 -8
  16. data/lib/{asciidoctor → metanorma}/iec/basicdoc.rng +0 -0
  17. data/lib/{asciidoctor → metanorma}/iec/biblio.rng +2 -2
  18. data/lib/{asciidoctor → metanorma}/iec/converter.rb +22 -8
  19. data/lib/{asciidoctor → metanorma}/iec/front.rb +1 -1
  20. data/lib/{asciidoctor → metanorma}/iec/iec.rng +48 -0
  21. data/lib/{asciidoctor → metanorma}/iec/iec_intro_en.xml +0 -0
  22. data/lib/{asciidoctor → metanorma}/iec/iec_intro_fr.xml +0 -0
  23. data/lib/{asciidoctor → metanorma}/iec/isodoc.rng +104 -3
  24. data/lib/{asciidoctor → metanorma}/iec/isostandard.rng +0 -0
  25. data/lib/{asciidoctor → metanorma}/iec/reqt.rng +0 -0
  26. data/lib/metanorma/iec/version.rb +1 -1
  27. data/lib/metanorma-iec.rb +1 -1
  28. data/metanorma-iec.gemspec +1 -1
  29. data/spec/isodoc/i18n_spec.rb +2 -2
  30. data/spec/isodoc/iev_spec.rb +67 -57
  31. data/spec/isodoc/ref_spec.rb +359 -353
  32. data/spec/{asciidoctor → metanorma}/base_spec.rb +1 -1
  33. data/spec/{asciidoctor → metanorma}/blocks_spec.rb +1 -1
  34. data/spec/{asciidoctor → metanorma}/cleanup_spec.rb +1 -1
  35. data/spec/{asciidoctor → metanorma}/iev_spec.rb +10 -2
  36. data/spec/{asciidoctor → metanorma}/inline_spec.rb +1 -1
  37. data/spec/{asciidoctor → metanorma}/lists_spec.rb +1 -1
  38. data/spec/{asciidoctor → metanorma}/section_spec.rb +1 -1
  39. data/spec/{asciidoctor → metanorma}/validate_spec.rb +1 -1
  40. data/spec/spec_helper.rb +2 -2
  41. metadata +22 -22
@@ -63,7 +63,7 @@ module IsoDoc
63
63
  end
64
64
  docpart = docxml&.at(ns("//bibdata/ext/structuredidentifier/"\
65
65
  "project-number/@part"))&.text or return
66
- docxml.xpath(ns("//concept/termref[@base = 'IEV']")).each do |t|
66
+ docxml.xpath(ns("//termref[@base = 'IEV']")).each do |t|
67
67
  concept_iev1(t, docpart, labels)
68
68
  end
69
69
  end
@@ -120,36 +120,66 @@ module IsoDoc
120
120
  p = d.parent
121
121
  designation_annotate(p, d.at(ns("./name")))
122
122
  m << { lang: lg, script: Metanorma::Utils.default_script(lg),
123
- designation: l10n_recursive(p.remove, lg) }
123
+ designation: l10n_recursive(p.remove, lg).to_xml.strip }
124
124
  end
125
125
  end
126
126
 
127
127
  def l10n_recursive(xml, lang)
128
128
  script = Metanorma::Utils.default_script(lang)
129
+ c = HTMLEntities.new
129
130
  xml.traverse do |x|
130
131
  next unless x.text?
131
132
 
132
- x.replace(l10n(x, lang, script))
133
+ text = c.encode(c.decode(x.text), :hexadecimal)
134
+ x.replace(cleanup_entities(l10n(text, lang, script), is_xml: false))
133
135
  end
134
136
  xml
135
137
  end
136
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
+
137
149
  def otherlang_designations1(term, lgs)
138
- pr = extract_otherlang_designations(term, lgs)
150
+ pr = merge_otherlang_designations(
151
+ extract_otherlang_designations(term, lgs),
152
+ )
139
153
  return if pr.empty?
140
154
 
141
155
  prefs = pr.map do |p|
142
156
  "<dt>#{p[:lang]}</dt>"\
143
157
  "<dd language='#{p[:lang]}' script='#{p[:script]}'>"\
144
- "#{p[:designation].to_xml}</dd>"
158
+ "#{cleanup_entities(p[:designation])}</dd>"
145
159
  end
146
160
  term << "<dl type='other-lang'>#{prefs.join}</dl>"
147
161
  end
148
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
+
149
175
  def related1(node)
150
176
  lg = node&.at("./ancestor::xmlns:term/@language")&.text
151
177
  @i18n = @i18n_lg[lg] if lg && @i18n_lg[lg]
152
- super
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>"))
153
183
  @i18n = @i18n_lg["default"]
154
184
  end
155
185
 
@@ -171,7 +201,7 @@ module IsoDoc
171
201
 
172
202
  def termsource1_iev(elem)
173
203
  while elem&.next_element&.name == "termsource"
174
- elem << "; #{elem.next_element.remove.children.to_xml}"
204
+ elem << l10n("; #{elem.next_element.remove.children.to_xml}")
175
205
  end
176
206
  elem.children = l10n("#{@i18n.source}: #{elem.children.to_xml.strip}")
177
207
  end
@@ -221,10 +221,12 @@ module IsoDoc
221
221
  end
222
222
 
223
223
  def annex_name(_annex, name, div)
224
+ preceding_floating_titles(name, div)
224
225
  return if name.nil?
225
226
 
226
227
  div.h1 **{ class: "Annex" } do |t|
227
228
  name.children.each { |c2| parse(c2, t) }
229
+ clause_parse_subtitle(name, t)
228
230
  end
229
231
  end
230
232
 
@@ -16,6 +16,7 @@ module IsoDoc
16
16
  def initial_anchor_names(d)
17
17
  super
18
18
  return unless @is_iev
19
+
19
20
  terms_iev_names(d)
20
21
  middle_section_asset_names(d)
21
22
  termnote_anchor_names(d)
@@ -24,21 +25,21 @@ module IsoDoc
24
25
 
25
26
  def terms_iev_names(d)
26
27
  d.xpath(ns("//sections/clause/terms")).each_with_index do |t, i|
27
- num = "#{@iev_part}-%02d" % [i+1]
28
+ num = "#{@iev_part}-%02d" % [i + 1]
28
29
  @anchors[t["id"]] =
29
- { label: num, xref: l10n("#{@labels["section_iev"]}-#{num}"), level: 2,
30
- type: "clause" }
31
- t.xpath(ns("./term")).each_with_index do |c, i|
32
- num2 = "%02d" % [i+1]
30
+ { label: num, xref: l10n("#{@labels['section_iev']} #{num}"),
31
+ level: 2, type: "clause" }
32
+ t.xpath(ns("./term")).each_with_index do |c, j|
33
+ num2 = "%02d" % [j + 1]
33
34
  section_names1(c, "#{num}-#{num2}", 3)
34
35
  end
35
36
  end
36
37
  end
37
38
 
38
39
  def annex_name_lbl(clause, num)
39
- obl = l10n("(#{@labels["inform_annex"]})")
40
- obl = l10n("(#{@labels["norm_annex"]})") if clause["obligation"] == "normative"
41
- l10n("<strong>#{@labels["annex"]} #{num}</strong><br/>#{obl}")
40
+ obl = l10n("(#{@labels['inform_annex']})")
41
+ obl = l10n("(#{@labels['norm_annex']})") if clause["obligation"] == "normative"
42
+ l10n("<strong>#{@labels['annex']} #{num}</strong><br/>#{obl}")
42
43
  end
43
44
  end
44
45
  end
File without changes
@@ -401,9 +401,9 @@
401
401
  <choice>
402
402
  <!-- iso191606 TODO -->
403
403
  <group>
404
- <oneOrMore>
404
+ <zeroOrMore>
405
405
  <ref name="street"/>
406
- </oneOrMore>
406
+ </zeroOrMore>
407
407
  <ref name="city"/>
408
408
  <optional>
409
409
  <ref name="state"/>
@@ -1,8 +1,9 @@
1
1
  require "asciidoctor"
2
2
  require "metanorma-iso"
3
+ require "metanorma/iso/converter"
3
4
  require_relative "./front"
4
5
 
5
- module Asciidoctor
6
+ module Metanorma
6
7
  module Iec
7
8
  class Converter < ISO::Converter
8
9
  XML_ROOT_TAG = "iec-standard".freeze
@@ -81,13 +82,6 @@ module Asciidoctor
81
82
  end
82
83
  end
83
84
 
84
- def norm_ref_preface(node)
85
- return super unless @is_iev
86
-
87
- node.at("./title").next =
88
- "<p>#{@i18n.norm_empty_pref}</p>"
89
- end
90
-
91
85
  def term_defs_boilerplate(div, source, term, preface, isodoc)
92
86
  return super unless @is_iev
93
87
  end
@@ -117,6 +111,26 @@ module Asciidoctor
117
111
  end
118
112
 
119
113
  def image_name_validate(xmldoc); end
114
+
115
+ def toc_cleanup(xmldoc)
116
+ toc_iev_cleanup(xmldoc) if @is_iev
117
+ super
118
+ end
119
+
120
+ def toc_iev_cleanup(xmldoc)
121
+ iev_variant_titles(xmldoc)
122
+ end
123
+
124
+ def iev_variant_titles(xmldoc)
125
+ id = xmldoc&.at("//bibdata/docidentifier[@type = 'ISO']")&.text
126
+ m = /60050-(\d+)/.match(id) or return
127
+ xmldoc.xpath("//sections/clause/terms/title").each_with_index do |t, i|
128
+ num = "%02d" % [i + 1]
129
+ t.next = "<variant-title type='toc'>"\
130
+ "#{@i18n.section_iev} #{m[1]}-#{num} &#x2013; "\
131
+ "#{t.children.to_xml}</variant-title>"
132
+ end
133
+ end
120
134
  end
121
135
  end
122
136
  end
@@ -1,4 +1,4 @@
1
- module Asciidoctor
1
+ module Metanorma
2
2
  module Iec
3
3
  class Converter < ISO::Converter
4
4
  def metadata_author(node, xml)
@@ -57,6 +57,54 @@
57
57
  <ref name="tc-sc-officers-note"/>
58
58
  </optional>
59
59
  </define>
60
+ <define name="term">
61
+ <element name="term">
62
+ <optional>
63
+ <attribute name="id">
64
+ <data type="ID"/>
65
+ </attribute>
66
+ </optional>
67
+ <optional>
68
+ <attribute name="language"/>
69
+ </optional>
70
+ <optional>
71
+ <attribute name="script"/>
72
+ </optional>
73
+ <optional>
74
+ <attribute name="tag"/>
75
+ </optional>
76
+ <optional>
77
+ <attribute name="multilingual-rendering">
78
+ <ref name="MultilingualRenderingType"/>
79
+ </attribute>
80
+ </optional>
81
+ <oneOrMore>
82
+ <ref name="preferred"/>
83
+ </oneOrMore>
84
+ <zeroOrMore>
85
+ <ref name="admitted"/>
86
+ </zeroOrMore>
87
+ <zeroOrMore>
88
+ <ref name="deprecates"/>
89
+ </zeroOrMore>
90
+ <optional>
91
+ <ref name="termdomain"/>
92
+ </optional>
93
+ <ref name="termdefinition"/>
94
+ <zeroOrMore>
95
+ <ref name="termnote"/>
96
+ </zeroOrMore>
97
+ <zeroOrMore>
98
+ <ref name="termexample"/>
99
+ </zeroOrMore>
100
+ <zeroOrMore>
101
+ <ref name="termsource"/>
102
+ </zeroOrMore>
103
+ <zeroOrMore>
104
+ <ref name="term"/>
105
+ </zeroOrMore>
106
+ </element>
107
+ </define>
60
108
  </include>
61
109
  <!-- end overrides -->
62
110
  <define name="function">
File without changes
File without changes
@@ -32,6 +32,56 @@
32
32
  <ref name="DocumentType"/>
33
33
  </element>
34
34
  </define>
35
+ <define name="index">
36
+ <element name="index">
37
+ <optional>
38
+ <attribute name="to">
39
+ <data type="IDREF"/>
40
+ </attribute>
41
+ </optional>
42
+ <element name="primary">
43
+ <oneOrMore>
44
+ <choice>
45
+ <ref name="PureTextElement"/>
46
+ <ref name="stem"/>
47
+ </choice>
48
+ </oneOrMore>
49
+ </element>
50
+ <optional>
51
+ <element name="secondary">
52
+ <oneOrMore>
53
+ <choice>
54
+ <ref name="PureTextElement"/>
55
+ <ref name="stem"/>
56
+ </choice>
57
+ </oneOrMore>
58
+ </element>
59
+ </optional>
60
+ <optional>
61
+ <element name="tertiary">
62
+ <oneOrMore>
63
+ <choice>
64
+ <ref name="PureTextElement"/>
65
+ <ref name="stem"/>
66
+ </choice>
67
+ </oneOrMore>
68
+ </element>
69
+ </optional>
70
+ </element>
71
+ </define>
72
+ <define name="bibitem">
73
+ <element name="bibitem">
74
+ <attribute name="id">
75
+ <data type="ID"/>
76
+ </attribute>
77
+ <optional>
78
+ <attribute name="hidden">
79
+ <data type="boolean"/>
80
+ </attribute>
81
+ </optional>
82
+ <ref name="BibliographicItem"/>
83
+ </element>
84
+ </define>
35
85
  <define name="section-title">
36
86
  <element name="title">
37
87
  <zeroOrMore>
@@ -690,6 +740,7 @@
690
740
  <ref name="terms"/>
691
741
  <ref name="term-clause"/>
692
742
  <ref name="definitions"/>
743
+ <ref name="floating-title"/>
693
744
  </choice>
694
745
  </oneOrMore>
695
746
  </element>
@@ -1013,6 +1064,26 @@
1013
1064
  </zeroOrMore>
1014
1065
  </element>
1015
1066
  </define>
1067
+ <define name="sub">
1068
+ <element name="sub">
1069
+ <zeroOrMore>
1070
+ <choice>
1071
+ <ref name="PureTextElement"/>
1072
+ <ref name="stem"/>
1073
+ </choice>
1074
+ </zeroOrMore>
1075
+ </element>
1076
+ </define>
1077
+ <define name="sup">
1078
+ <element name="sup">
1079
+ <zeroOrMore>
1080
+ <choice>
1081
+ <ref name="PureTextElement"/>
1082
+ <ref name="stem"/>
1083
+ </choice>
1084
+ </zeroOrMore>
1085
+ </element>
1086
+ </define>
1016
1087
  <define name="pagebreak">
1017
1088
  <element name="pagebreak">
1018
1089
  <optional>
@@ -1680,6 +1751,7 @@
1680
1751
  <ref name="clause-subsection"/>
1681
1752
  <ref name="terms"/>
1682
1753
  <ref name="definitions"/>
1754
+ <ref name="floating-title"/>
1683
1755
  </choice>
1684
1756
  </oneOrMore>
1685
1757
  </choice>
@@ -1722,6 +1794,7 @@
1722
1794
  <ref name="terms"/>
1723
1795
  <ref name="definitions"/>
1724
1796
  <ref name="references"/>
1797
+ <ref name="floating-title"/>
1725
1798
  </choice>
1726
1799
  </zeroOrMore>
1727
1800
  </group>
@@ -1973,7 +2046,11 @@
1973
2046
  </optional>
1974
2047
  <element name="name">
1975
2048
  <zeroOrMore>
1976
- <ref name="PureTextElement"/>
2049
+ <choice>
2050
+ <ref name="PureTextElement"/>
2051
+ <ref name="stem"/>
2052
+ <ref name="index"/>
2053
+ </choice>
1977
2054
  </zeroOrMore>
1978
2055
  </element>
1979
2056
  <optional>
@@ -1987,7 +2064,7 @@
1987
2064
  </element>
1988
2065
  </optional>
1989
2066
  <optional>
1990
- <element name="grammar-info">
2067
+ <element name="grammar">
1991
2068
  <ref name="Grammar"/>
1992
2069
  </element>
1993
2070
  </optional>
@@ -2196,7 +2273,18 @@
2196
2273
  <ref name="MultilingualRenderingType"/>
2197
2274
  </attribute>
2198
2275
  </optional>
2199
- <ref name="paragraph"/>
2276
+ <oneOrMore>
2277
+ <choice>
2278
+ <ref name="formula"/>
2279
+ <ref name="ul"/>
2280
+ <ref name="ol"/>
2281
+ <ref name="dl"/>
2282
+ <ref name="quote"/>
2283
+ <ref name="sourcecode"/>
2284
+ <ref name="paragraph"/>
2285
+ <ref name="figure"/>
2286
+ </choice>
2287
+ </oneOrMore>
2200
2288
  </element>
2201
2289
  </define>
2202
2290
  <define name="termsource">
@@ -2530,4 +2618,17 @@
2530
2618
  </oneOrMore>
2531
2619
  </element>
2532
2620
  </define>
2621
+ <define name="floating-title">
2622
+ <element name="floating-title">
2623
+ <attribute name="id">
2624
+ <data type="ID"/>
2625
+ </attribute>
2626
+ <attribute name="depth">
2627
+ <data type="int"/>
2628
+ </attribute>
2629
+ <zeroOrMore>
2630
+ <ref name="TextElement"/>
2631
+ </zeroOrMore>
2632
+ </element>
2633
+ </define>
2533
2634
  </grammar>
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  module Metanorma
2
2
  module Iec
3
- VERSION = "1.4.4".freeze
3
+ VERSION = "2.0.2".freeze
4
4
  end
5
5
  end
6
6
 
data/lib/metanorma-iec.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "asciidoctor" unless defined? Asciidoctor::Converter
2
- require_relative "asciidoctor/iec/converter"
2
+ require_relative "metanorma/iec/converter"
3
3
  require_relative "metanorma/iec/version"
4
4
  require "isodoc/iec/html_convert"
5
5
  require "isodoc/iec/word_convert"
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
28
28
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
29
29
 
30
- spec.add_dependency "metanorma-iso", "~> 1.10.0"
30
+ spec.add_dependency "metanorma-iso", "~> 2.0.0"
31
31
  spec.add_dependency "ruby-jing"
32
32
 
33
33
  spec.add_development_dependency "debug"
@@ -83,7 +83,7 @@ RSpec.describe IsoDoc do
83
83
  <docnumber>1</docnumber>
84
84
  <language current="true">en</language>
85
85
  <ext>
86
- <doctype language="">international-standard</doctype><doctype language="fr">Norme international</doctype><doctype language="en">International Standard</doctype>
86
+ <doctype language="">international-standard</doctype><doctype language="fr">Norme internationale</doctype><doctype language="en">International Standard</doctype>
87
87
  <horizontal language="">true</horizontal><horizontal language="fr">Norme horizontale</horizontal><horizontal language="en">Horizontal Standard</horizontal>
88
88
  <function language="">emc</function><function language="fr">Publication fondamentale en CEM</function><function language="en">Basic EMC Publication</function>
89
89
  </ext>
@@ -444,7 +444,7 @@ RSpec.describe IsoDoc do
444
444
  <bibdata>
445
445
  <language current="true">fr</language>
446
446
  <ext>
447
- <doctype language="">international-standard</doctype><doctype language="fr">Norme international</doctype><doctype language="en">International Standard</doctype>
447
+ <doctype language="">international-standard</doctype><doctype language="fr">Norme internationale</doctype><doctype language="en">International Standard</doctype>
448
448
  <horizontal language="">false</horizontal>
449
449
  <function language="">emc</function><function language="fr">Publication fondamentale en CEM</function><function language="en">Basic EMC Publication</function>
450
450
  </ext>