metanorma-iso 2.1.3 → 2.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/isodoc/iso/html/isodoc-dis.css +1 -10
  3. data/lib/isodoc/iso/html/isodoc-dis.scss +1 -13
  4. data/lib/isodoc/iso/html/isodoc.css +4 -11
  5. data/lib/isodoc/iso/html/isodoc.scss +5 -15
  6. data/lib/isodoc/iso/html/style-human.css +3 -0
  7. data/lib/isodoc/iso/html/style-human.scss +4 -0
  8. data/lib/isodoc/iso/html/style-iso.css +3 -0
  9. data/lib/isodoc/iso/html/style-iso.scss +4 -0
  10. data/lib/isodoc/iso/i18n-en.yaml +1 -1
  11. data/lib/isodoc/iso/iso.amendment.xsl +3611 -2912
  12. data/lib/isodoc/iso/iso.international-standard.xsl +3611 -2912
  13. data/lib/isodoc/iso/metadata.rb +1 -1
  14. data/lib/isodoc/iso/presentation_xml_convert.rb +4 -0
  15. data/lib/isodoc/iso/word_cleanup.rb +50 -19
  16. data/lib/isodoc/iso/word_dis_cleanup.rb +10 -14
  17. data/lib/isodoc/iso/word_dis_convert.rb +1 -1
  18. data/lib/metanorma/iso/base.rb +0 -6
  19. data/lib/metanorma/iso/boilerplate-fr.xml +1 -1
  20. data/lib/metanorma/iso/boilerplate-ru.xml +1 -1
  21. data/lib/metanorma/iso/boilerplate.xml +1 -1
  22. data/lib/metanorma/iso/cleanup.rb +4 -2
  23. data/lib/metanorma/iso/front_id.rb +28 -0
  24. data/lib/metanorma/iso/isodoc.rng +32 -1
  25. data/lib/metanorma/iso/isostandard.rng +3 -1
  26. data/lib/metanorma/iso/reqt.rng +1 -1
  27. data/lib/metanorma/iso/version.rb +1 -1
  28. data/metanorma-iso.gemspec +2 -1
  29. data/spec/isodoc/blocks_spec.rb +3 -3
  30. data/spec/isodoc/metadata_spec.rb +1 -2
  31. data/spec/isodoc/postproc_spec.rb +8 -75
  32. data/spec/isodoc/terms_spec.rb +62 -0
  33. data/spec/isodoc/word_dis_spec.rb +133 -15
  34. data/spec/metanorma/base_spec.rb +6 -17
  35. data/spec/metanorma/blocks_spec.rb +0 -33
  36. data/spec/metanorma/cleanup_spec.rb +201 -201
  37. data/spec/metanorma/processor_spec.rb +1 -2
  38. data/spec/metanorma/refs_spec.rb +5 -3
  39. data/spec/metanorma/section_spec.rb +6 -6
  40. data/spec/spec_helper.rb +1 -1
  41. data/spec/vcr_cassettes/withdrawn_iso.yml +28 -28
  42. metadata +18 -5
  43. data/lib/metanorma/iso/macros.rb +0 -29
@@ -230,7 +230,7 @@ module IsoDoc
230
230
  ret = [ag]
231
231
  ret << sc_base(xml, "approvalgroup")
232
232
  ret << wg_base(xml, "approvalgroup")
233
- set(:approvalgroup, ret)
233
+ set(:approvalgroup, ret.compact)
234
234
  end
235
235
 
236
236
  def secretariat(xml)
@@ -196,6 +196,10 @@ module IsoDoc
196
196
  type
197
197
  end
198
198
 
199
+ def related1(node)
200
+ node.remove
201
+ end
202
+
199
203
  include Init
200
204
  end
201
205
  end
@@ -11,11 +11,10 @@ module IsoDoc
11
11
  end
12
12
  end
13
13
 
14
- # force Annex h2 down to be p.h2Annex, so it is not picked up by ToC
15
14
  def word_annex_cleanup1(docxml, lvl)
16
15
  docxml.xpath("//h#{lvl}[ancestor::*[@class = 'Section3']]").each do |h2|
17
16
  h2.name = "p"
18
- h2["class"] = "h#{lvl}Annex"
17
+ h2["class"] = "a#{lvl}"
19
18
  end
20
19
  end
21
20
 
@@ -37,40 +36,72 @@ module IsoDoc
37
36
 
38
37
  def style_cleanup(docxml)
39
38
  word_annex_cleanup_h1(docxml)
40
- style_cleanup1(docxml)
39
+ figure_style(docxml)
40
+ new_styles(docxml)
41
41
  end
42
42
 
43
- def style_cleanup1(docxml)
44
- docxml.xpath("//*[@class = 'example']").each do |p|
45
- p["class"] = "Example"
43
+ def figure_style(docxml)
44
+ docxml.xpath("//div[@class = 'figure']").each do |f|
45
+ f["style"] ||= ""
46
+ f["style"] += "text-align:center;"
46
47
  end
48
+ end
49
+
50
+ def quote_style(docxml)
51
+ docxml.xpath("//div[@class = 'Quote' or @class = 'Note' or "\
52
+ "@class = 'Example' or @class = 'Admonition']").each do |d|
53
+ quote_style1(d)
54
+ end
55
+ end
56
+
57
+ def quote_style1(div)
58
+ div.xpath(".//li").each do |p|
59
+ p["style"] ||= ""
60
+ p["style"] += "font-size:#{default_fonts({})[:smallerfontsize]};"
61
+ end
62
+ end
63
+
64
+ STYLESMAP = {
65
+ example: "Example",
66
+ note: "Note",
67
+ Sourcecode: "Code",
68
+ tabletitle: "Tabletitle",
69
+ Biblio: "MsoNormal",
70
+ figure: "MsoNormal",
71
+ SourceTitle: "FigureTitle",
72
+ }.freeze
73
+
74
+ def new_styles(docxml)
75
+ STYLESMAP.each do |k, v|
76
+ docxml.xpath("//*[@class = '#{k}']").each { |s| s["class"] = v }
77
+ end
78
+ docxml.xpath("//div[@class = 'Section3']//p[@class = 'Tabletitle']")
79
+ .each { |t| t["class"] = "AnnexTableTitle" }
47
80
  docxml.xpath("//*[@class = 'zzHelp']/p[not(@class)]").each do |p|
48
81
  p["class"] = "zzHelp"
49
82
  end
83
+ quote_style(docxml)
50
84
  end
51
85
 
52
86
  def authority_hdr_cleanup(docxml)
53
- docxml&.xpath("//div[@class = 'boilerplate-license']")&.each do |d|
54
- d.xpath(".//h1").each do |p|
55
- p.name = "p"
56
- p["class"] = "zzWarningHdr"
87
+ { "boilerplate-license": "zzWarningHdr",
88
+ "boilerplate-copyright": "zzCopyrightHdr" }.each do |k, v|
89
+ docxml.xpath("//div[@class = '#{k}']").each do |d|
90
+ d.xpath(".//h1").each do |p|
91
+ p.name = "p"
92
+ p["class"] = v
93
+ end
94
+ end
57
95
  end
58
- end
59
- docxml&.xpath("//div[@class = 'boilerplate-copyright']")&.each do |d|
60
- d.xpath(".//h1").each do |p|
61
- p.name = "p"
62
- p["class"] = "zzCopyrightHdr"
63
- end
64
- end
65
96
  end
66
97
 
67
98
  def authority_cleanup(docxml)
68
99
  insert = docxml.at("//div[@id = 'boilerplate-license-destination']")
69
- auth = docxml&.at("//div[@class = 'boilerplate-license']")&.remove
100
+ auth = docxml.at("//div[@class = 'boilerplate-license']")&.remove
70
101
  auth&.xpath(".//p[not(@class)]")&.each { |p| p["class"] = "zzWarning" }
71
102
  auth and insert and insert.children = auth
72
103
  insert = docxml.at("//div[@id = 'boilerplate-copyright-destination']")
73
- auth = docxml&.at("//div[@class = 'boilerplate-copyright']")&.remove
104
+ auth = docxml.at("//div[@class = 'boilerplate-copyright']")&.remove
74
105
  auth&.xpath(".//p[not(@class)]")&.each do |p|
75
106
  p["class"] = "zzCopyright"
76
107
  end
@@ -1,11 +1,6 @@
1
1
  module IsoDoc
2
2
  module Iso
3
3
  class WordDISConvert < WordConvert
4
- def style_cleanup(docxml)
5
- super
6
- dis_styles(docxml)
7
- end
8
-
9
4
  STYLESMAP = {
10
5
  AltTerms: "AdmittedTerm",
11
6
  TableFootnote: "Tablefootnote",
@@ -30,7 +25,7 @@ module IsoDoc
30
25
  zzCopyright1: "zzCopyright",
31
26
  }.freeze
32
27
 
33
- def dis_styles(docxml)
28
+ def new_styles(docxml)
34
29
  STYLESMAP.each do |k, v|
35
30
  docxml.xpath("//*[@class = '#{k}']").each { |s| s["class"] = v }
36
31
  end
@@ -46,8 +41,8 @@ module IsoDoc
46
41
  figure_style(docxml)
47
42
  note_style(docxml)
48
43
  example_style(docxml)
49
- quote_style(docxml)
50
44
  dis_style_interactions(docxml)
45
+ quote_style(docxml)
51
46
  end
52
47
 
53
48
  def dis_style_interactions(docxml)
@@ -68,13 +63,6 @@ module IsoDoc
68
63
  end
69
64
  end
70
65
 
71
- def quote_style(docxml)
72
- docxml.xpath("//div[@class = 'Quote' or @class = 'Note' or "\
73
- "@class = 'Example' or @class = 'Admonition']").each do |d|
74
- quote_style1(d)
75
- end
76
- end
77
-
78
66
  def para_style_change(div, class1, class2)
79
67
  s = class1 ? "@class = '#{class1}'" : "not(@class)"
80
68
  div.xpath(".//p[#{s}]").each do |p|
@@ -230,6 +218,14 @@ module IsoDoc
230
218
  end
231
219
  end
232
220
  end
221
+
222
+ def make_FigureWordToC(docxml)
223
+ super.sub(/FigureTitle,figuretitle/, "Figure title,Annex Figure Title")
224
+ end
225
+
226
+ def make_TableWordToC(docxml)
227
+ super.sub(/TableTitle,tabletitle/, "Table title,Annex Table Title")
228
+ end
233
229
  end
234
230
  end
235
231
  end
@@ -98,7 +98,7 @@ module IsoDoc
98
98
  @meta.get[:doctitlemain] && @meta.get[:doctitlepart] and p << " &#x2014; "
99
99
  if @meta.get[:doctitlepart]
100
100
  b = @meta.get[:doctitlepartlabel] and
101
- p << "<span style='font-weight:normal'>#{b}</span> "
101
+ p << "<span style='font-weight:normal'>#{b}:</span> "
102
102
  p << " #{@meta.get[:doctitlepart]}"
103
103
  end
104
104
  @meta.get[:doctitleamdlabel] || @meta.get[:doctitleamd] ||
@@ -5,16 +5,10 @@ require "pathname"
5
5
  require "open-uri"
6
6
  require "isodoc"
7
7
  require "fileutils"
8
- require_relative "macros"
9
8
 
10
9
  module Metanorma
11
10
  module ISO
12
11
  class Converter < Standoc::Converter
13
- Asciidoctor::Extensions.register do
14
- block Metanorma::ISO::EditorAdmonitionBlock
15
- treeprocessor Metanorma::ISO::EditorInlineAdmonitionBlock
16
- end
17
-
18
12
  XML_ROOT_TAG = "iso-standard".freeze
19
13
  XML_NAMESPACE = "https://www.metanorma.org/ns/iso".freeze
20
14
 
@@ -19,7 +19,7 @@ l’adresse ci-après ou au comité membre de l’ISO dans le pays du demandeur.
19
19
  ISO copyright office<br/>
20
20
  CP 401 &#x2022; Ch. de Blandonnet 8<br/>
21
21
  CH-1214 Vernier, Geneva<br/>
22
- Tél.&#xa0;&#xa0;+ 41 22 749 01 11<br/>
22
+ Tél: +41 22 749 01 11<br/>
23
23
  Email: copyright@iso.org<br/>
24
24
  Website: www.iso.org
25
25
  </p>
@@ -14,7 +14,7 @@
14
14
  Бюро ISO по охране авторских прав<br/>
15
15
  CP 401 &#x2022; Ch. de Blandonnet 8<br/>
16
16
  CH-1214 Vernier, Geneva<br/>
17
- Тел.&#xa0;&#xa0;+ 41 22 749 01 11<br/>
17
+ Тел: +41 22 749 01 11<br/>
18
18
  Электронная почта: copyright@iso.org<br/>
19
19
  Сайт: www.iso.org
20
20
  </p>
@@ -20,7 +20,7 @@ at the address below or ISO's member body in the country of the requester.
20
20
  ISO copyright office<br/>
21
21
  CP 401 &#x2022; Ch. de Blandonnet 8<br/>
22
22
  CH-1214 Vernier, Geneva<br/>
23
- Phone:&#xa0;&#xa0;+ 41 22 749 01 11<br/>
23
+ Phone: +41 22 749 01 11<br/>
24
24
  Email: copyright@iso.org<br/>
25
25
  Website: www.iso.org
26
26
  </p>
@@ -76,7 +76,8 @@ module Metanorma
76
76
  return 2 if bib.at("#{PUBLISHER}[abbreviation = 'IEC']")
77
77
  return 2 if bib.at("#{PUBLISHER}[name = 'International "\
78
78
  "Electrotechnical Commission']")
79
- return 3 if bib.at("./docidentifier[@type][not(#{OTHERIDS})]")
79
+ return 3 if bib.at("./docidentifier[@type][not(#{OTHERIDS})]") ||
80
+ bib.at("./docidentifier[not(@type)]")
80
81
 
81
82
  4
82
83
  end
@@ -98,7 +99,8 @@ module Metanorma
98
99
  def sort_biblio_key(bib)
99
100
  pubclass = pub_class(bib)
100
101
  num = bib&.at("./docnumber")&.text
101
- id = bib&.at("./docidentifier[not(#{OTHERIDS})]")
102
+ id = bib&.at("./docidentifier[@primary]") ||
103
+ bib&.at("./docidentifier[not(#{OTHERIDS})]")
102
104
  metaid = bib&.at("./docidentifier[@type = 'metanorma']")&.text
103
105
  abbrid = metaid unless /^\[\d+\]$/.match?(metaid)
104
106
  /\d-(?<partid>\d+)/ =~ id&.text
@@ -5,6 +5,34 @@ require "json"
5
5
  require "pathname"
6
6
  require "open-uri"
7
7
  require "twitter_cldr"
8
+ require "pubid-iso"
9
+
10
+ # @param stage [String] stage, eg. "WD", "CD", "DIS"
11
+ # @param urn_stage [Float] numeric stage for URN rendering
12
+ # @param iteration [Integer] document iteration, eg. "1", "2", "3"
13
+ # @param joint_document [Identifier] joint document
14
+ # @param supplement [Supplement] supplement
15
+ # @param tctype [String] Technical Committee type, eg. "TC", "JTC"
16
+ # @param sctype [String] TC subsommittee, eg. "SC"
17
+ # @param wgtype [String] TC working group type, eg. "AG", "AHG"
18
+ # @param tcnumber [Integer] Technical Committee number, eg. "1", "2"
19
+ # @param scnumber [Integer] Subsommittee number, eg. "1", "2"
20
+ # @param wgnumber [Integer] Working group number, eg. "1", "2"
21
+ # @param dir [Boolean] Directives document
22
+ # @param dirtype [String] Directives document type, eg. "JTC"
23
+ # @see Supplement
24
+ # @see Identifier
25
+ # @see Pubid::Core::Identifier
26
+ # @see Parser
27
+ #
28
+ =begin
29
+ def initialize(number: nil, stage: nil, iteration: nil, supplement: nil,
30
+ joint_document: nil, urn_stage: nil,
31
+ tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
32
+ scnumber: nil, wgnumber:nil,
33
+ dir: nil, dirtype: nil, **opts)
34
+ super(**opts.merge(number: number))
35
+ =end
8
36
 
9
37
  module Metanorma
10
38
  module ISO
@@ -69,6 +69,17 @@
69
69
  </zeroOrMore>
70
70
  </element>
71
71
  </define>
72
+ <define name="AdmonitionType">
73
+ <choice>
74
+ <value>warning</value>
75
+ <value>note</value>
76
+ <value>tip</value>
77
+ <value>important</value>
78
+ <value>caution</value>
79
+ <value>statement</value>
80
+ <value>editorial</value>
81
+ </choice>
82
+ </define>
72
83
  <define name="index">
73
84
  <element name="index">
74
85
  <optional>
@@ -116,6 +127,11 @@
116
127
  <data type="boolean"/>
117
128
  </attribute>
118
129
  </optional>
130
+ <optional>
131
+ <attribute name="suppress_identifier">
132
+ <data type="boolean"/>
133
+ </attribute>
134
+ </optional>
119
135
  <ref name="BibliographicItem"/>
120
136
  </element>
121
137
  </define>
@@ -1269,7 +1285,12 @@
1269
1285
  </define>
1270
1286
  <define name="span">
1271
1287
  <element name="span">
1272
- <attribute name="class"/>
1288
+ <optional>
1289
+ <attribute name="class"/>
1290
+ </optional>
1291
+ <optional>
1292
+ <attribute name="style"/>
1293
+ </optional>
1273
1294
  <oneOrMore>
1274
1295
  <ref name="TextElement"/>
1275
1296
  </oneOrMore>
@@ -2488,6 +2509,16 @@
2488
2509
  <text/>
2489
2510
  </element>
2490
2511
  </optional>
2512
+ <optional>
2513
+ <element name="amendment">
2514
+ <text/>
2515
+ </element>
2516
+ </optional>
2517
+ <optional>
2518
+ <element name="corrigendum">
2519
+ <text/>
2520
+ </element>
2521
+ </optional>
2491
2522
  <optional>
2492
2523
  <element name="language">
2493
2524
  <text/>
@@ -45,7 +45,9 @@
45
45
  <ref name="horizontal"/>
46
46
  </optional>
47
47
  <ref name="editorialgroup"/>
48
- <ref name="approvalgroup"/>
48
+ <optional>
49
+ <ref name="approvalgroup"/>
50
+ </optional>
49
51
  <zeroOrMore>
50
52
  <ref name="ics"/>
51
53
  </zeroOrMore>
@@ -108,7 +108,7 @@
108
108
  </element>
109
109
  </define>
110
110
  <define name="label">
111
- <element name="label">
111
+ <element name="identifier">
112
112
  <oneOrMore>
113
113
  <ref name="TextElement"/>
114
114
  </oneOrMore>
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "2.1.3".freeze
3
+ VERSION = "2.1.6".freeze
4
4
  end
5
5
  end
@@ -29,11 +29,12 @@ 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.5.0")
31
31
 
32
- spec.add_dependency "metanorma-standoc", "~> 2.1.0"
32
+ spec.add_dependency "metanorma-standoc", "~> 2.2.0"
33
33
  spec.add_dependency "mnconvert", "~> 1.14"
34
34
  spec.add_dependency "ruby-jing"
35
35
  spec.add_dependency "tokenizer", "~> 0.3.0"
36
36
  spec.add_dependency "twitter_cldr"
37
+ spec.add_dependency "pubid-iso"
37
38
 
38
39
  spec.add_development_dependency "debug"
39
40
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
@@ -297,7 +297,7 @@ RSpec.describe IsoDoc do
297
297
  <iso-standard xmlns="http://riboseinc.com/isoxml" type='presentation'>
298
298
  <preface><foreword displayorder="1">
299
299
  <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="editorial">
300
- <p id='_e94663cc-2473-4ccc-9a72-983a74d989f2'>
300
+ <p id='_e94663cc-2473-4ccc-9a72-983a74d989f2'>EDITORIAL NOTE —
301
301
  Only use paddy or parboiled rice for the
302
302
  determination of husked rice yield.
303
303
  </p>
@@ -312,7 +312,7 @@ RSpec.describe IsoDoc do
312
312
  <div>
313
313
  <h1 class='ForewordTitle'>Foreword</h1>
314
314
  <div id='_70234f78-64e5-4dfc-8b6f-f3f037348b6a' class='zzHelp'>
315
- <p>
315
+ <p>EDITORIAL NOTE —
316
316
  Only use paddy or parboiled rice for the
317
317
  determination of husked rice yield.
318
318
  </p>
@@ -332,7 +332,7 @@ RSpec.describe IsoDoc do
332
332
  <div>
333
333
  <h1 class='ForewordTitle'>Foreword</h1>
334
334
  <div id='_70234f78-64e5-4dfc-8b6f-f3f037348b6a' class='zzHelp'>
335
- <p> Only use paddy or parboiled rice for the determination of husked rice yield. </p>
335
+ <p>EDITORIAL NOTE — Only use paddy or parboiled rice for the determination of husked rice yield. </p>
336
336
  <p class='ForewordText' id='_e94663cc-2473-4ccc-9a72-983a74d989f3'>Para 2.</p>
337
337
  </div>
338
338
  </div>
@@ -209,7 +209,6 @@ RSpec.describe IsoDoc::Iso::Metadata do
209
209
  </editorialgroup>
210
210
  <approvalgroup>
211
211
  <technical-committee number="34" type="ABC">Food products</technical-committee>
212
- <subcommittee number="4" type="DEF">Cereals and pulses</subcommittee>
213
212
  <workgroup number="3" type="GHI">Rice Group</workgroup>
214
213
  </approvalgroup>
215
214
  <ics><code>1.2.3</code></ics>
@@ -224,7 +223,7 @@ RSpec.describe IsoDoc::Iso::Metadata do
224
223
  INPUT
225
224
  output = <<~OUTPUT
226
225
  {:agency=>"ISO/IEC",
227
- :approvalgroup=>["ABC 34", "DEF 4", "GHI 3"],
226
+ :approvalgroup=>["ABC 34", "GHI 3"],
228
227
  :docnumber=>"ISO/IEC/CD 17301-1-3",
229
228
  :docnumber_lang=>"ISO/IEC/CD 17301-1-3 (E)",
230
229
  :docnumber_reference=>"ISO/IEC/CD 17301-1-3 (E)",
@@ -126,66 +126,6 @@ RSpec.describe IsoDoc do
126
126
  expect(File.exist?("spec/assets/iso.pdf")).to be true
127
127
  end
128
128
 
129
- it "converts annex subheadings to h2Annex class for Word" do
130
- IsoDoc::Iso::WordConvert
131
- .new(WORD_HTML_CSS.dup)
132
- .convert("test", <<~"INPUT", false)
133
- <iso-standard xmlns="http://riboseinc.com/isoxml">
134
- <annex id="P" inline-header="false" obligation="normative">
135
- <title>Annex</title>
136
- <clause id="Q" inline-header="false" obligation="normative">
137
- <title>A.1
138
- <tab/>
139
- Annex A.1</title>
140
- </clause>
141
- <appendix id="Q2" inline-header="false" obligation="normative">
142
- <title>Appendix 1
143
- <tab/>
144
- An Appendix</title>
145
- </appendix>
146
- </annex>
147
- <bibliography>
148
- <references id="R" normative="false"><title>Bibliography</title></references>
149
- </bibliography>
150
- </iso-standard>
151
- INPUT
152
-
153
- word = File.read("test.doc", encoding: "UTF-8")
154
- .sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
155
- .sub(%r{<br[^>]*>\s*<div class="colophon".*$}m, "")
156
-
157
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
158
- <div class="WordSection3">
159
- <p class="zzSTDTitle1"/>
160
- <p class="MsoNormal">
161
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
162
- </p>
163
- <div class="Section3">
164
- <a id="P" name="P"/>
165
- <p class="ANNEX">Annex</p>
166
- <div>
167
- <a id="Q" name="Q"/>
168
- <p class="h2Annex">A.1
169
- <span style="mso-tab-count:1">  </span>
170
- Annex A.1</p>
171
- </div>
172
- <div>
173
- <a id="Q2" name="Q2"/>
174
- <p class="h2Annex">Appendix 1
175
- <span style="mso-tab-count:1">  </span>
176
- An Appendix</p>
177
- </div>
178
- </div>
179
- <p class='MsoNormal'>
180
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
181
- </p>
182
- <div>
183
- <p class='BiblioTitle'>Bibliography</p>
184
- </div>
185
- </div>
186
- OUTPUT
187
- end
188
-
189
129
  it "populates Word template with terms reference labels" do
190
130
  IsoDoc::Iso::WordConvert
191
131
  .new(WORD_HTML_CSS.dup)
@@ -817,7 +757,7 @@ RSpec.describe IsoDoc do
817
757
  </p>
818
758
  <div class="Section3">
819
759
  <a id="P" name="P"/>
820
- <div class="figure">
760
+ <div class="MsoNormal" style='text-align:center;'>
821
761
  <a id="samplecode" name="samplecode"/>
822
762
  <p class="MsoNormal">Hello</p>
823
763
  <p class="MsoNormal">Key</p>
@@ -864,7 +804,7 @@ RSpec.describe IsoDoc do
864
804
  .sub(/^.*<div class="WordSection3">/m, '<div class="WordSection3">')
865
805
  .sub(%r{<br[^>]*>\s*<div class="colophon".*$}m, "")
866
806
  expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
867
- <div class='WordSection3'>
807
+ <div class='WordSection3'>
868
808
  <p class='zzSTDTitle1'/>
869
809
  <p class='MsoNormal'>
870
810
  <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
@@ -904,11 +844,9 @@ RSpec.describe IsoDoc do
904
844
  <br/>
905
845
  CH-1214 Vernier, Geneva, Switzerland
906
846
  <br/>
907
- Tel. + 41 22 749 01 11
908
- <br/>
909
- Fax + 41 22 749 09 47
847
+ Phone: +41 22 749 01 11
910
848
  <br/>
911
- copyright@iso.org
849
+ Email: copyright@iso.org
912
850
  <br/>
913
851
  www.iso.org</p>
914
852
  </clause>
@@ -951,11 +889,9 @@ RSpec.describe IsoDoc do
951
889
  <br/>
952
890
  CH-1214 Vernier, Geneva, Switzerland
953
891
  <br/>
954
- Tel. + 41 22 749 01 11
955
- <br/>
956
- Fax + 41 22 749 09 47
892
+ Phone: +41 22 749 01 11
957
893
  <br/>
958
- copyright@iso.org
894
+ Email: copyright@iso.org
959
895
  <br/>
960
896
  www.iso.org</p>
961
897
  </clause>
@@ -1015,13 +951,10 @@ RSpec.describe IsoDoc do
1015
951
  CH-1214 Vernier, Geneva, Switzerland
1016
952
 
1017
953
  <br/>
1018
- Tel. + 41 22 749 01 11
1019
-
1020
- <br/>
1021
- Fax + 41 22 749 09 47
954
+ Phone: +41 22 749 01 11
1022
955
 
1023
956
  <br/>
1024
- copyright@iso.org
957
+ Email: copyright@iso.org
1025
958
 
1026
959
  <br/>
1027
960
  www.iso.org#{' '}</p>
@@ -249,4 +249,66 @@ RSpec.describe IsoDoc do
249
249
  .sub(%r{</div>\s*<br.*$}m, "")))
250
250
  .to be_equivalent_to xmlpp(word)
251
251
  end
252
+
253
+ it "processes related terms" do
254
+ input = <<~INPUT
255
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
256
+ <sections>
257
+ <terms id='A' obligation='normative'>
258
+ <title>Terms and definitions</title>
259
+ <term id='second'>
260
+ <preferred>
261
+ <expression>
262
+ <name>Second Term</name>
263
+ </expression>
264
+ <field-of-application>Field</field-of-application>
265
+ <usage-info>Usage Info 1</usage-info>
266
+ </preferred>
267
+ <definition><verbal-definition>Definition 1</verbal-definition></definition>
268
+ </term>
269
+ <term id="C">
270
+ <preferred language='fr' script='Latn' type='prefix'>
271
+ <expression>
272
+ <name>First Designation</name>
273
+ </expression></preferred>
274
+ <related type='contrast'>
275
+ <preferred>
276
+ <expression>
277
+ <name>Fifth Designation</name>
278
+ <grammar>
279
+ <gender>neuter</gender>
280
+ </grammar>
281
+ </expression>
282
+ </preferred>
283
+ <xref target='second'/>
284
+ </related>
285
+ <definition><verbal-definition>Definition 2</verbal-definition></definition>
286
+ </term>
287
+ </terms>
288
+ </sections>
289
+ </iso-standard>
290
+ INPUT
291
+ output = <<~OUTPUT
292
+ <?xml version='1.0'?>
293
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
294
+ <sections>
295
+ <terms id='A' obligation='normative' displayorder='1'>
296
+ <title depth='1'>1<tab/>Terms and definitions</title>
297
+ <term id='second'>
298
+ <name>1.1</name>
299
+ <preferred><strong>Second Term</strong>, &#x3c;Field, Usage Info 1&#x3e;</preferred>
300
+ <definition>Definition 1</definition>
301
+ </term>
302
+ <term id='C'>
303
+ <name>1.2</name>
304
+ <preferred language='fr' script='Latn' type='prefix'><strong>First Designation</strong></preferred>
305
+ <definition>Definition 2</definition>
306
+ </term>
307
+ </terms>
308
+ </sections>
309
+ </iso-standard>
310
+ OUTPUT
311
+ expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({})
312
+ .convert("test", input, true))).to be_equivalent_to xmlpp(output)
313
+ end
252
314
  end