metanorma-iec 1.2.8 → 1.2.13

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +7 -5
  3. data/lib/asciidoctor/iec/basicdoc.rng +52 -3
  4. data/lib/asciidoctor/iec/converter.rb +25 -1
  5. data/lib/asciidoctor/iec/front.rb +35 -58
  6. data/lib/asciidoctor/iec/iec.rng +81 -1
  7. data/lib/asciidoctor/iec/iec_intro_en.xml +110 -56
  8. data/lib/asciidoctor/iec/iec_intro_fr.xml +78 -22
  9. data/lib/asciidoctor/iec/isodoc.rng +51 -3
  10. data/lib/asciidoctor/iec/isostandard.rng +27 -10
  11. data/lib/isodoc/iec/base_convert.rb +2 -2
  12. data/lib/isodoc/iec/html/html_iec_intro.html +1 -1
  13. data/lib/isodoc/iec/html/htmlstyle.css +5 -5
  14. data/lib/isodoc/iec/html/htmlstyle.scss +4 -4
  15. data/lib/isodoc/iec/html/isodoc.css +79 -79
  16. data/lib/isodoc/iec/html/isodoc.scss +79 -79
  17. data/lib/isodoc/iec/html/word_iec_intro.html +1 -1
  18. data/lib/isodoc/iec/html/wordstyle.css +120 -120
  19. data/lib/isodoc/iec/html/wordstyle.scss +120 -120
  20. data/lib/isodoc/iec/html_convert.rb +10 -2
  21. data/lib/isodoc/iec/i18n-en.yaml +17 -0
  22. data/lib/isodoc/iec/i18n-fr.yaml +18 -0
  23. data/lib/isodoc/iec/iec.international-standard.xsl +914 -398
  24. data/lib/isodoc/iec/metadata.rb +33 -0
  25. data/lib/isodoc/iec/presentation_xml_convert.rb +12 -0
  26. data/lib/isodoc/iec/word_convert.rb +12 -2
  27. data/lib/metanorma/iec/processor.rb +11 -8
  28. data/lib/metanorma/iec/version.rb +1 -1
  29. data/metanorma-iec.gemspec +2 -3
  30. data/spec/asciidoctor-iec/base_spec.rb +444 -10
  31. data/spec/asciidoctor-iec/blocks_spec.rb +25 -21
  32. data/spec/asciidoctor-iec/cleanup_spec.rb +99 -14
  33. data/spec/asciidoctor-iec/iev_spec.rb +15 -6
  34. data/spec/asciidoctor-iec/inline_spec.rb +11 -7
  35. data/spec/asciidoctor-iec/lists_spec.rb +13 -9
  36. data/spec/asciidoctor-iec/section_spec.rb +9 -5
  37. data/spec/asciidoctor-iec/validate_spec.rb +16 -1
  38. data/spec/isodoc/i18n_spec.rb +30 -0
  39. data/spec/isodoc/iso_spec.rb +4 -4
  40. data/spec/isodoc/metadata_spec.rb +23 -1
  41. data/spec/metanorma/processor_spec.rb +1 -1
  42. data/spec/spec_helper.rb +20 -31
  43. metadata +5 -19
@@ -1,6 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciidoctor::Iec do
4
+ before(:all) do
5
+ @blank_hdr = blank_hdr_gen
6
+ end
7
+
4
8
  it "processes inline_quoted formatting" do
5
9
  expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iec, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
6
10
  #{ASCIIDOC_BLANK_HDR}
@@ -19,7 +23,7 @@ RSpec.describe Asciidoctor::Iec do
19
23
  [strike]#strike#
20
24
  [smallcap]#smallcap#
21
25
  INPUT
22
- #{BLANK_HDR}
26
+ #{@blank_hdr}
23
27
  <sections>
24
28
  <em>emphasis</em>
25
29
  <strong>strong</strong>
@@ -56,7 +60,7 @@ RSpec.describe Asciidoctor::Iec do
56
60
 
57
61
  <<<
58
62
  INPUT
59
- #{BLANK_HDR}
63
+ #{@blank_hdr}
60
64
  <sections><p id="_">Line break<br/>
61
65
  line break</p>
62
66
  <hr/>
@@ -72,7 +76,7 @@ RSpec.describe Asciidoctor::Iec do
72
76
  http://example.com[]
73
77
  http://example.com[Link]
74
78
  INPUT
75
- #{BLANK_HDR}
79
+ #{@blank_hdr}
76
80
  <sections>
77
81
  <p id="_">mailto:fred@example.com
78
82
  <link target="http://example.com"/>
@@ -87,7 +91,7 @@ RSpec.describe Asciidoctor::Iec do
87
91
  #{ASCIIDOC_BLANK_HDR}
88
92
  Text [[bookmark]] Text
89
93
  INPUT
90
- #{BLANK_HDR}
94
+ #{@blank_hdr}
91
95
  <sections>
92
96
  <p id="_">Text <bookmark id="bookmark"/> Text</p>
93
97
  </sections>
@@ -106,7 +110,7 @@ RSpec.describe Asciidoctor::Iec do
106
110
  Inline Reference with Text to <<reference,text>>
107
111
  Footnoted Reference with Text to <<reference,fn: text>>
108
112
  INPUT
109
- #{BLANK_HDR}
113
+ #{@blank_hdr}
110
114
  <sections>
111
115
  <clause id="reference" inline-header="false" obligation="normative">
112
116
  <title>Section</title>
@@ -130,7 +134,7 @@ RSpec.describe Asciidoctor::Iec do
130
134
  * [[[ISO713]]] Reference
131
135
 
132
136
  INPUT
133
- #{BLANK_HDR}
137
+ #{@blank_hdr}
134
138
  <sections>
135
139
 
136
140
  </sections><bibliography><references id="_" obligation="informative" normative="true">
@@ -156,7 +160,7 @@ RSpec.describe Asciidoctor::Iec do
156
160
  #{ASCIIDOC_BLANK_HDR}
157
161
  Hello!footnote:[Footnote text]
158
162
  INPUT
159
- #{BLANK_HDR}
163
+ #{@blank_hdr}
160
164
  <sections>
161
165
  <p id="_">Hello!<fn reference="1">
162
166
  <p id="_">Footnote text</p>
@@ -1,6 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciidoctor::Iec do
4
+ before(:all) do
5
+ @blank_hdr = blank_hdr_gen
6
+ end
7
+
4
8
  it "processes simple lists" do
5
9
  output = Asciidoctor.convert(<<~"INPUT", backend: :iec, header_footer: true)
6
10
  #{ASCIIDOC_BLANK_HDR}
@@ -17,7 +21,7 @@ RSpec.describe Asciidoctor::Iec do
17
21
 
18
22
  INPUT
19
23
  expect(xmlpp(strip_guid(output))).to be_equivalent_to xmlpp(<<~"OUTPUT")
20
- #{BLANK_HDR}
24
+ #{@blank_hdr}
21
25
  <sections>
22
26
  <ul id="_">
23
27
  <li>
@@ -28,7 +32,7 @@ RSpec.describe Asciidoctor::Iec do
28
32
  </li>
29
33
  <li>
30
34
  <p id="_">List 3</p>
31
- <ol id="_" type="arabic">
35
+ <ol id="_">
32
36
  <li>
33
37
  <p id="_">List A</p>
34
38
  </li>
@@ -99,7 +103,7 @@ RSpec.describe Asciidoctor::Iec do
99
103
 
100
104
  INPUT
101
105
  expect(xmlpp(strip_guid(output))).to be_equivalent_to xmlpp(<<~"OUTPUT")
102
- #{BLANK_HDR}
106
+ #{@blank_hdr}
103
107
  <sections><ul id="id">
104
108
  <li>
105
109
  <p id="_">First</p>
@@ -107,13 +111,13 @@ RSpec.describe Asciidoctor::Iec do
107
111
  <li><p id="_">Second</p><p id="_">entry1</p>
108
112
  <p id="_">entry2</p></li>
109
113
  </ul>
110
- <ol id="id1" type="alphabet">
114
+ <ol id="id1">
111
115
  <li>
112
116
  <p id="_">First</p>
113
117
  </li>
114
118
  <li>
115
119
  <p id="_">Second</p>
116
- <ol id="_" type="alphabet_upper">
120
+ <ol id="_">
117
121
  <li>
118
122
  <p id="_">Third</p>
119
123
  </li>
@@ -129,19 +133,19 @@ RSpec.describe Asciidoctor::Iec do
129
133
  <p id="_">Sixth</p>
130
134
  </li>
131
135
  </ol>
132
- <ol id="_" type="roman">
136
+ <ol id="_">
133
137
  <li>
134
138
  <p id="_">A</p>
135
139
  </li>
136
140
  <li>
137
141
  <p id="_">B</p>
138
- <ol id="_" type="roman_upper">
142
+ <ol id="_">
139
143
  <li>
140
144
  <p id="_">C</p>
141
145
  </li>
142
146
  <li>
143
147
  <p id="_">D</p>
144
- <ol id="_" type="arabic">
148
+ <ol id="_">
145
149
  <li>
146
150
  <p id="_">E</p>
147
151
  </li>
@@ -172,7 +176,7 @@ RSpec.describe Asciidoctor::Iec do
172
176
  * Hello [[id3]] List item
173
177
 
174
178
  INPUT
175
- #{BLANK_HDR}
179
+ #{@blank_hdr}
176
180
  <sections>
177
181
  <ul id="id1">
178
182
  <li id="id2">
@@ -1,6 +1,10 @@
1
1
  require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciidoctor::Iec do
4
+ before(:all) do
5
+ @blank_hdr = blank_hdr_gen
6
+ end
7
+
4
8
  it "processes sections" do
5
9
  expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iec, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
6
10
  #{ASCIIDOC_BLANK_HDR}
@@ -52,7 +56,7 @@ RSpec.describe Asciidoctor::Iec do
52
56
 
53
57
  === Bibliography Subsection
54
58
  INPUT
55
- #{BLANK_HDR}
59
+ #{@blank_hdr}
56
60
  <preface><foreword id="_" obligation="informative">
57
61
  <title>FOREWORD</title>
58
62
  <p id="_">Text</p>
@@ -189,7 +193,7 @@ RSpec.describe Asciidoctor::Iec do
189
193
 
190
194
  === Bibliography Subsection
191
195
  INPUT
192
- #{BLANK_HDR}
196
+ #{@blank_hdr}
193
197
  <preface>
194
198
  <foreword id="_" obligation="informative">
195
199
  <title>FOREWORD</title>
@@ -298,7 +302,7 @@ RSpec.describe Asciidoctor::Iec do
298
302
  [appendix,obligation=informative]
299
303
  == Annex
300
304
  INPUT
301
- #{BLANK_HDR}
305
+ #{@blank_hdr}
302
306
  <sections><clause id="_" inline-header="false" obligation="informative">
303
307
  <title>Clause 1</title>
304
308
  <clause id="_" inline-header="false" obligation="informative">
@@ -329,7 +333,7 @@ RSpec.describe Asciidoctor::Iec do
329
333
  [%inline-header]
330
334
  === Clause Aa
331
335
  INPUT
332
- #{BLANK_HDR}
336
+ #{@blank_hdr}
333
337
  <sections><clause id="_" inline-header="false" obligation="normative">
334
338
  <title>Clause 1</title>
335
339
  <clause id="_" inline-header="true" obligation="normative">
@@ -354,7 +358,7 @@ RSpec.describe Asciidoctor::Iec do
354
358
  === {blank}
355
359
 
356
360
  INPUT
357
- #{BLANK_HDR}
361
+ #{@blank_hdr}
358
362
  <sections>
359
363
  <clause id="_" inline-header="false" obligation="normative">
360
364
  <title>Clause 1</title>
@@ -17,7 +17,7 @@ RSpec.describe Asciidoctor::Iec do
17
17
  expect do
18
18
  Metanorma::Compile
19
19
  .new
20
- .compile("spec/assets/xref_error.adoc", type: "iec")
20
+ .compile("spec/assets/xref_error.adoc", type: "iec", :"agree-to-terms" => true)
21
21
  end.to(change { File.exist?("spec/assets/xref_error.err") }
22
22
  .from(false).to(true))
23
23
  end
@@ -37,4 +37,19 @@ it "Warns of illegal doctype" do
37
37
  INPUT
38
38
  expect(File.read("test.err")).to include "pizza is not a recognised document type"
39
39
  end
40
+
41
+ it "Warns of illegal function" do
42
+ FileUtils.rm_f "test.err"
43
+ Asciidoctor.convert(<<~"INPUT", backend: :iec, header_footer: true)
44
+ = Document title
45
+ Author
46
+ :docfile: test.adoc
47
+ :nodoc:
48
+ :no-isobib:
49
+ :function: pizza
50
+
51
+ text
52
+ INPUT
53
+ expect(File.read("test.err")).to include "pizza is not a recognised document function"
54
+ end
40
55
  end
@@ -7,6 +7,11 @@ RSpec.describe IsoDoc do
7
7
  <bibdata>
8
8
  <docnumber>1</docnumber>
9
9
  <language>en</language>
10
+ <ext>
11
+ <doctype>international-standard</doctype>
12
+ <horizontal>true</horizontal>
13
+ <function>emc</function>
14
+ </ext>
10
15
  </bibdata>
11
16
  <preface>
12
17
  <foreword obligation="informative">
@@ -77,6 +82,17 @@ RSpec.describe IsoDoc do
77
82
  <bibdata>
78
83
  <docnumber>1</docnumber>
79
84
  <language current="true">en</language>
85
+ <ext>
86
+ <doctype language=''>international-standard</doctype>
87
+ <doctype language='fr'>Norme international</doctype>
88
+ <doctype language='en'>International Standard</doctype>
89
+ <horizontal language=''>true</horizontal>
90
+ <horizontal language='fr'>Norme horizontale</horizontal>
91
+ <horizontal language='en'>Horizontal Standard</horizontal>
92
+ <function language=''>emc</function>
93
+ <function language='fr'>Publication fondamentale en CEM</function>
94
+ <function language='en'>Basic EMC Publication</function>
95
+ </ext>
80
96
  </bibdata>
81
97
  <preface>
82
98
  <foreword obligation="informative">
@@ -432,6 +448,11 @@ RSpec.describe IsoDoc do
432
448
  <iso-standard xmlns="http://riboseinc.com/isoxml">
433
449
  <bibdata>
434
450
  <language>fr</language>
451
+ <ext>
452
+ <doctype>international-standard</doctype>
453
+ <horizontal>false</horizontal>
454
+ <function>emc</function>
455
+ </ext>
435
456
  </bibdata>
436
457
  <preface>
437
458
  <foreword obligation="informative">
@@ -501,6 +522,15 @@ RSpec.describe IsoDoc do
501
522
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
502
523
  <bibdata>
503
524
  <language current="true">fr</language>
525
+ <ext>
526
+ <doctype language=''>international-standard</doctype>
527
+ <doctype language='fr'>Norme international</doctype>
528
+ <doctype language='en'>International Standard</doctype>
529
+ <horizontal language=''>false</horizontal>
530
+ <function language=''>emc</function>
531
+ <function language='fr'>Publication fondamentale en CEM</function>
532
+ <function language='en'>Basic EMC Publication</function>
533
+ </ext>
504
534
  </bibdata>
505
535
  <preface>
506
536
  <foreword obligation="informative">
@@ -32,8 +32,8 @@ RSpec.describe IsoDoc::Iec do
32
32
  INPUT
33
33
  html = File.read("test.html", encoding: "utf-8")
34
34
  expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
35
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "SimSun", serif;]m)
36
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "SimHei", sans-serif;]m)
35
+ expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
36
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
37
37
  end
38
38
 
39
39
  it "processes isodoc as ISO: user nominated fonts" do
@@ -65,9 +65,9 @@ RSpec.describe IsoDoc::Iec do
65
65
  </iso-standard>
66
66
  INPUT
67
67
  html = File.read("test.doc", encoding: "utf-8")
68
- expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New",monospace;]m)
68
+ expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
69
69
  expect(html).to match(%r[Quote[^{]+\{[^{]+font-family: "Arial", sans-serif;]m)
70
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Arial",sans-serif;]m)
70
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Arial", sans-serif;]m)
71
71
  end
72
72
 
73
73
  it "processes examples" do
@@ -59,7 +59,15 @@ RSpec.describe IsoDoc::Iec::Metadata do
59
59
  </owner>
60
60
  </copyright>
61
61
  <ext>
62
- <doctype>international-standard</doctype>
62
+ <doctype language=''>international-standard</doctype>
63
+ <doctype language='fr'>Norme international</doctype>
64
+ <doctype language='en'>International Standard</doctype>
65
+ <horizontal language=''>true</horizontal>
66
+ <horizontal language='fr'>Norme horizontale</horizontal>
67
+ <horizontal language='en'>Horizontal Standard</horizontal>
68
+ <function language=''>emc</function>
69
+ <function language='fr'>Publication fondamentale en CEM</function>
70
+ <function language='en'>Basic EMC Publication</function>
63
71
  <editorialgroup>
64
72
  <technical-committee number="34">Food products</technical-committee>
65
73
  <subcommittee number="4">Cereals and pulses</subcommittee>
@@ -94,11 +102,21 @@ INPUT
94
102
  :doctitlepartlabel=>"Part&nbsp;1",
95
103
  :doctype=>"International Standard",
96
104
  :doctype_display=>"International Standard",
105
+ :doctype_en=>"International Standard",
106
+ :doctype_fr=>"Norme International",
97
107
  :docyear=>"2016",
98
108
  :draft=>"0.4",
99
109
  :draftinfo=>" (draft 0.4, 2016-05-01)",
100
110
  :edition=>"2",
101
111
  :editorialgroup=>["TC 34", "SC 4", "WG 3"],
112
+ :function=>"Emc",
113
+ :function_display=>"Basic Emc Publication",
114
+ :function_en=>"Basic Emc Publication",
115
+ :function_fr=>"Publication Fondamentale En Cem",
116
+ :horizontal=>"True",
117
+ :horizontal_display=>"Horizontal Standard",
118
+ :horizontal_en=>"Horizontal Standard",
119
+ :horizontal_fr=>"Norme Horizontale",
102
120
  :implementeddate=>"XXX",
103
121
  :issueddate=>"XXX",
104
122
  :lang=>"en",
@@ -188,6 +206,7 @@ OUTPUT
188
206
  </relation>
189
207
  <ext>
190
208
  <doctype>technical-report</doctype>
209
+ <horizontal>false</horizontal>
191
210
  <editorialgroup>
192
211
  <technical-committee number="34" type="ABC">Food products</technical-committee>
193
212
  <subcommittee number="4" type="DEF">Cereals and pulses</subcommittee>
@@ -221,8 +240,11 @@ INPUT
221
240
  :doctitlepartlabel=>"Part&nbsp;1&ndash;3",
222
241
  :doctype=>"Technical Report",
223
242
  :doctype_display=>"Technical Report",
243
+ :doctype_en=>"Technical Report",
244
+ :doctype_fr=>"Technical Report",
224
245
  :docyear=>"2016",
225
246
  :editorialgroup=>["ABC 34", "DEF 4", "GHI 3"],
247
+ :horizontal=>"False",
226
248
  :ics=>"1.2.3, 1.2.3",
227
249
  :implementeddate=>"XXX",
228
250
  :issueddate=>"XXX",
@@ -27,7 +27,7 @@ RSpec.describe Metanorma::Iec::Processor do
27
27
  expect(xmlpp(strip_guid(processor.input_to_isodoc(<<~"INPUT", nil)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
28
28
  #{ASCIIDOC_BLANK_HDR}
29
29
  INPUT
30
- #{BLANK_HDR}
30
+ #{blank_hdr_gen}
31
31
  <sections/>
32
32
  </iec-standard>
33
33
  OUTPUT
@@ -112,36 +112,17 @@ TERMS_BOILERPLATE = <<~"BOILERPLATE"
112
112
  </ul>
113
113
  BOILERPLATE
114
114
 
115
- BOILERPLATE =
116
- HTMLEntities.new.decode(
117
- File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iec", "iec_intro_en.xml"), encoding: "utf-8").
118
- gsub(/\{\{ agency \}\}/, "IEC").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s).
119
- gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "").
120
- gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’").
121
- gsub(/<p>/, "<p id='_'>").
122
- gsub(/<ol>/, "<ol id='_'>")
123
- )
124
-
125
- BOILERPLATE_LICENSE = <<~END
126
- <license-statement>
127
- <clause>
128
- <title>Warning for CDs, CDVs and FDISs</title>
129
- <p id='_'>
130
- This document is not an IEC International Standard. It is distributed
131
- for review and comment. It is subject to change without notice and may
132
- not be referred to as an International Standard.
133
- </p>
134
- <p id='_'>
135
- Recipients of this draft are invited to submit, with their comments,
136
- notification of any relevant patent rights of which they are aware and
137
- to provide supporting documentation.
138
- </p>
139
- </clause>
140
- </license-statement>
141
- END
142
-
143
- UNPUBLISHED_BOILERPLATE = BOILERPLATE.sub(/<\/boilerplate>/, "#{BOILERPLATE_LICENSE}</boilerplate>")
144
-
115
+ def boilerplate(xmldoc)
116
+ file = File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iec", "iec_intro_en.xml"), encoding: "utf-8")
117
+ conv = Asciidoctor::Iec::Converter.new(nil, backend: :iec, header_footer: true)
118
+ conv.init(Asciidoctor::Document.new [])
119
+ ret = Nokogiri::XML(
120
+ conv.boilerplate_isodoc(xmldoc).populate_template(file, nil).
121
+ gsub(/<p>/, "<p id='_'>").
122
+ gsub(/<ol>/, "<ol id='_'>"))
123
+ conv.smartquotes_cleanup(ret)
124
+ HTMLEntities.new.decode(ret.to_xml)
125
+ end
145
126
 
146
127
  BLANK_HDR = <<~"HDR"
147
128
  <?xml version="1.0" encoding="UTF-8"?>
@@ -178,6 +159,7 @@ BLANK_HDR = <<~"HDR"
178
159
  </copyright>
179
160
  <ext>
180
161
  <doctype>article</doctype>
162
+ <horizontal>false</horizontal>
181
163
  <editorialgroup>
182
164
  <technical-committee/>
183
165
  <subcommittee/>
@@ -186,9 +168,16 @@ BLANK_HDR = <<~"HDR"
186
168
  <stagename>International standard</stagename>
187
169
  </ext>
188
170
  </bibdata>
189
- #{BOILERPLATE}
190
171
  HDR
191
172
 
173
+ def blank_hdr_gen
174
+ <<~"HDR"
175
+ #{BLANK_HDR}
176
+ #{boilerplate(Nokogiri::XML(BLANK_HDR + "</iec-standard>"))}
177
+ HDR
178
+ end
179
+
180
+
192
181
  IEC_TITLE = <<~END
193
182
  <p class="zzSTDTitle1">INTERNATIONAL ELECTROTECHNICAL COMMISSION</p>
194
183
  <p class="zzSTDTitle1">____________</p>