asciidoctor-iso 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +12 -10
  3. data/asciidoctor-iso.gemspec +1 -1
  4. data/lib/asciidoctor/iso/base.rb +6 -3
  5. data/lib/asciidoctor/iso/blocks.rb +4 -18
  6. data/lib/asciidoctor/iso/cleanup.rb +20 -11
  7. data/lib/asciidoctor/iso/cleanup_block.rb +38 -21
  8. data/lib/asciidoctor/iso/cleanup_ref.rb +17 -4
  9. data/lib/asciidoctor/iso/converter.rb +0 -1
  10. data/lib/asciidoctor/iso/front.rb +23 -14
  11. data/lib/asciidoctor/iso/html/html_iso_intro.html +0 -36
  12. data/lib/asciidoctor/iso/html/isodoc.css +5 -0
  13. data/lib/asciidoctor/iso/inline.rb +14 -2
  14. data/lib/asciidoctor/iso/isodoc.rng +38 -6
  15. data/lib/asciidoctor/iso/isostandard.rng +16 -11
  16. data/lib/asciidoctor/iso/lists.rb +28 -23
  17. data/lib/asciidoctor/iso/section.rb +4 -14
  18. data/lib/asciidoctor/iso/table.rb +0 -3
  19. data/lib/asciidoctor/iso/utils.rb +2 -0
  20. data/lib/asciidoctor/iso/validate.rb +2 -2
  21. data/lib/asciidoctor/iso/validate_section.rb +62 -4
  22. data/lib/asciidoctor/iso/validate_style.rb +24 -15
  23. data/lib/asciidoctor/iso/version.rb +1 -1
  24. data/spec/asciidoctor-iso/base_spec.rb +32 -6
  25. data/spec/asciidoctor-iso/blocks_spec.rb +10 -0
  26. data/spec/asciidoctor-iso/cleanup_spec.rb +26 -18
  27. data/spec/asciidoctor-iso/inline_spec.rb +2 -0
  28. data/spec/asciidoctor-iso/lists_spec.rb +1 -0
  29. data/spec/asciidoctor-iso/refs_spec.rb +44 -11
  30. data/spec/asciidoctor-iso/validate_spec.rb +1 -0
  31. data/spec/examples/rice.doc +2751 -2732
  32. data/spec/examples/rice.html +184 -205
  33. data/spec/examples/rice.xml +244 -212
  34. data/spec/spec_helper.rb +6 -3
  35. metadata +6 -6
@@ -24,8 +24,6 @@ module Asciidoctor
24
24
  def table_name(node, xml_table)
25
25
  if node.title?
26
26
  xml_table.name node.title
27
- else
28
- style_warning(node, "Table should have title", nil)
29
27
  end
30
28
  end
31
29
 
@@ -34,7 +32,6 @@ module Asciidoctor
34
32
  thd << cell.content
35
33
  else
36
34
  thd << cell.text
37
- style(cell, cell.text)
38
35
  end
39
36
  end
40
37
 
@@ -19,6 +19,8 @@ module Asciidoctor
19
19
  def current_location(n)
20
20
  return "Line #{n.lineno}" if n.respond_to?(:lineno) &&
21
21
  !n.lineno.nil? && !n.lineno.empty?
22
+ return "Line #{n.line}" if n.respond_to?(:line) &&
23
+ !n.line.nil?
22
24
  return "ID #{n.id}" if n.respond_to?(:id) && !n.id.nil?
23
25
  while !n.nil? &&
24
26
  (!n.respond_to?(:level) || n.level.positive?) &&
@@ -75,8 +75,8 @@ module Asciidoctor
75
75
  notitle = false
76
76
  withtitle = false
77
77
  xpath.each do |s|
78
- sublabel = s&.at("./title")&.text || s["id"]
79
- title_all_siblings(s.xpath("./subsection | ./terms"), sublabel)
78
+ title_all_siblings(s.xpath("./subsection | ./terms"),
79
+ s&.at("./title")&.text || s["id"])
80
80
  subtitle = s.at("./title")
81
81
  notitle = notitle || (!subtitle || subtitle.text.empty?)
82
82
  withtitle = withtitle || !subtitle&.text&.empty?
@@ -8,6 +8,9 @@ module Asciidoctor
8
8
  normref_validate(doc.root)
9
9
  symbols_validate(doc.root)
10
10
  sections_sequence_validate(doc.root)
11
+ section_style(doc.root)
12
+ sourcecode_style(doc.root)
13
+ asset_style(doc.root)
11
14
  end
12
15
 
13
16
  def foreword_validate(root)
@@ -51,7 +54,7 @@ module Asciidoctor
51
54
 
52
55
  # spec of permissible section sequence
53
56
  # we skip normative references, it goes to end of list
54
- SEQ =
57
+ SEQ =
55
58
  [
56
59
  {
57
60
  msg: "Initial section must be (content) Foreword",
@@ -71,9 +74,9 @@ module Asciidoctor
71
74
  "Terms and Definitions",
72
75
  val: [
73
76
  { tag: "terms", title: "Terms and Definitions" },
74
- {
77
+ {
75
78
  tag: "terms",
76
- title: "Terms, Definitions, Symbols and Abbreviated Terms"
79
+ title: "Terms, Definitions, Symbols and Abbreviated Terms",
77
80
  },
78
81
  ],
79
82
  },
@@ -103,7 +106,8 @@ module Asciidoctor
103
106
  return
104
107
  end
105
108
  n[:tag] == "clause" ||
106
- warn("ISO style: Document must contain clause after Terms and Definitions")
109
+ warn("ISO style: Document must contain clause after "\
110
+ "Terms and Definitions")
107
111
  n == { tag: "clause", title: "Scope" } &&
108
112
  warn("ISO style: Scope must occur before Terms and Definitions")
109
113
  n = names.shift || return
@@ -132,6 +136,60 @@ module Asciidoctor
132
136
  names.empty? ||
133
137
  warn("ISO style: There are sections after the final Bibliography")
134
138
  end
139
+
140
+ NORM_ISO_WARN = "non-ISO/IEC reference not expected as normative".freeze
141
+ SCOPE_WARN = "Scope contains subsections: should be succint".freeze
142
+
143
+ def section_style(root)
144
+ foreword_style(root.at("//foreword"))
145
+ introduction_style(root.at("//introduction"))
146
+ scope_style(root.at("//clause[title = 'Scope']"))
147
+ scope = root.at("//clause[title = 'Scope']/subsection")
148
+ scope.nil? || style_warning(scope, SCOPE_WARN, nil)
149
+ end
150
+
151
+ def sourcecode_style(root)
152
+ root.xpath("//sourcecode").each do |x|
153
+ callouts = x.elements.select { |e| e.name == "callout" }
154
+ annotations = x.elements.select { |e| e.name == "annotation" }
155
+ if callouts.size != annotations.size
156
+ warn "#{x['id']}: mismatch of callouts and annotations"
157
+ end
158
+ end
159
+ end
160
+
161
+ ASSETS_TO_STYLE =
162
+ "//termsource | //formula | //termnote | //p | //li[not(p)] | "\
163
+ "//dt | //dd[not(p)] | //td[not(p)] | //th[not(p)]".freeze
164
+
165
+ NORM_BIBITEMS =
166
+ "//references[title = 'Normative References']/bibitem".freeze
167
+
168
+ def asset_title_style(root)
169
+ root.xpath("//figure[image][not(title)]").each do |node|
170
+ style_warning(node, "Figure should have title", nil)
171
+ end
172
+ root.xpath("//table[not(title)]").each do |node|
173
+ style_warning(node, "Table should have title", nil)
174
+ end
175
+ end
176
+
177
+ def norm_bibitem_style(root)
178
+ root.xpath(NORM_BIBITEMS).each do |b|
179
+ if b.at(Cleanup::ISO_PUBLISHER_XPATH).nil?
180
+ Utils::warning(b, NORM_ISO_WARN, b.text)
181
+ end
182
+ end
183
+ end
184
+
185
+ def asset_style(root)
186
+ root.xpath("//example | //termexample").each { |e| example_style(e) }
187
+ root.xpath("//note").each { |e| note_style(e) }
188
+ root.xpath("//fn").each { |e| footnote_style(e) }
189
+ root.xpath(ASSETS_TO_STYLE).each { |e| style(e, extract_text(e)) }
190
+ asset_title_style(root)
191
+ norm_bibitem_style(root)
192
+ end
135
193
  end
136
194
  end
137
195
  end
@@ -5,38 +5,47 @@ require "pp"
5
5
  module Asciidoctor
6
6
  module ISO
7
7
  module Validate
8
- def foreword_style(node, text)
8
+ def extract_text(node)
9
+ return "" if node.nil?
10
+ node1 = node.dup
11
+ node1.xpath("//link | //locality").each(&:remove)
12
+ ret = ""
13
+ node1.traverse { |x| ret += x.text if x.text? }
14
+ ret
15
+ end
16
+
17
+ def foreword_style(node)
9
18
  return if @novalid
10
- style_no_guidance(node, text, "Foreword")
19
+ style_no_guidance(node, extract_text(node), "Foreword")
11
20
  end
12
21
 
13
- def scope_style(node, text)
22
+ def scope_style(node)
14
23
  return if @novalid
15
- style_no_guidance(node, text, "Scope")
24
+ style_no_guidance(node, extract_text(node), "Scope")
16
25
  end
17
26
 
18
- def introduction_style(node, text)
27
+ def introduction_style(node)
19
28
  return if @novalid
20
- r = requirement(text)
29
+ r = requirement(extract_text(node))
21
30
  style_warning(node, "Introduction may contain requirement", r) if r
22
31
  end
23
32
 
24
- def termexample_style(node, text)
33
+ def example_style(node)
25
34
  return if @novalid
26
- style_no_guidance(node, text, "Term Example")
27
- style(node, text)
35
+ style_no_guidance(node, extract_text(node), "Term Example")
36
+ style(node, extract_text(node))
28
37
  end
29
38
 
30
- def note_style(node, text)
39
+ def note_style(node)
31
40
  return if @novalid
32
- style_no_guidance(node, text, "Note")
33
- style(node, text)
41
+ style_no_guidance(node, extract_text(node), "Note")
42
+ style(node, extract_text(node))
34
43
  end
35
44
 
36
- def footnote_style(node, text)
45
+ def footnote_style(node)
37
46
  return if @novalid
38
- style_no_guidance(node, text, "Footnote")
39
- style(node, text)
47
+ style_no_guidance(node, extract_text(node), "Footnote")
48
+ style(node, extract_text(node))
40
49
  end
41
50
 
42
51
  def style_warning(node, msg, text)
@@ -1,5 +1,5 @@
1
1
  module Asciidoctor
2
2
  module ISO
3
- VERSION = "0.7.0".freeze
3
+ VERSION = "0.7.1".freeze
4
4
  end
5
5
  end
@@ -89,13 +89,15 @@ RSpec.describe Asciidoctor::ISO do
89
89
  <contributor>
90
90
  <role type="author"/>
91
91
  <organization>
92
- <name>ISO</name>
92
+ <name>International Organization for Standardization</name>
93
+ <abbreviation>ISO</abbreviation>
93
94
  </organization>
94
95
  </contributor>
95
96
  <contributor>
96
97
  <role type="publisher"/>
97
98
  <organization>
98
- <name>ISO</name>
99
+ <name>International Organization for Standardization</name>
100
+ <abbreviation>ISO</abbreviation>
99
101
  </organization>
100
102
  </contributor>
101
103
  <language>en</language>
@@ -108,7 +110,8 @@ RSpec.describe Asciidoctor::ISO do
108
110
  <from>2001</from>
109
111
  <owner>
110
112
  <organization>
111
- <name>ISO</name>
113
+ <name>International Organization for Standardization</name>
114
+ <abbreviation>ISO</abbreviation>
112
115
  </organization>
113
116
  </owner>
114
117
  </copyright>
@@ -141,13 +144,16 @@ RSpec.describe Asciidoctor::ISO do
141
144
  :tc-docnumber: 2000
142
145
  :language: el
143
146
  :script: Grek
147
+ :publisher: IEC,IETF
144
148
  INPUT
145
149
  <?xml version="1.0" encoding="UTF-8"?>
146
150
  <iso-standard xmlns="http://riboseinc.com/isoxml">
147
151
  <bibdata type="article">
148
152
  <title>
153
+
149
154
  </title>
150
155
  <title>
156
+
151
157
  </title>
152
158
  <docidentifier>
153
159
  <project-number part="1" subpart="1">1000</project-number>
@@ -156,13 +162,25 @@ RSpec.describe Asciidoctor::ISO do
156
162
  <contributor>
157
163
  <role type="author"/>
158
164
  <organization>
159
- <name>ISO</name>
165
+ <name>IEC</name>
166
+ </organization>
167
+ </contributor>
168
+ <contributor>
169
+ <role type="author"/>
170
+ <organization>
171
+ <name>IETF</name>
160
172
  </organization>
161
173
  </contributor>
162
174
  <contributor>
163
175
  <role type="publisher"/>
164
176
  <organization>
165
- <name>ISO</name>
177
+ <name>IEC</name>
178
+ </organization>
179
+ </contributor>
180
+ <contributor>
181
+ <role type="publisher"/>
182
+ <organization>
183
+ <name>IETF</name>
166
184
  </organization>
167
185
  </contributor>
168
186
  <language>el</language>
@@ -175,7 +193,15 @@ RSpec.describe Asciidoctor::ISO do
175
193
  <from>2018</from>
176
194
  <owner>
177
195
  <organization>
178
- <name>ISO</name>
196
+ <name>IEC</name>
197
+ </organization>
198
+ </owner>
199
+ </copyright>
200
+ <copyright>
201
+ <from>2018</from>
202
+ <owner>
203
+ <organization>
204
+ <name>IETF</name>
179
205
  </organization>
180
206
  </owner>
181
207
  </copyright>
@@ -28,6 +28,11 @@ RSpec.describe Asciidoctor::ISO do
28
28
  r = 1 %
29
29
  r = 1 %
30
30
  ++++
31
+
32
+ [stem]
33
+ ++++
34
+ <mml:math><mml:msub xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">F</mml:mi> </mml:mrow> </mml:mrow> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">&#x0391;</mml:mi> </mml:mrow> </mml:mrow> </mml:msub> </mml:math>
35
+ ++++
31
36
  INPUT
32
37
  #{BLANK_HDR}
33
38
  <sections>
@@ -35,6 +40,11 @@ RSpec.describe Asciidoctor::ISO do
35
40
  <stem type="AsciiMath">r = 1 %
36
41
  r = 1 %</stem>
37
42
  </formula>
43
+
44
+ <formula id="_">
45
+ <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub> <mrow> <mrow> <mi mathvariant="bold-italic">F</mi> </mrow> </mrow> <mrow> <mrow> <mi mathvariant="bold-italic">Α</mi> </mrow> </mrow> </msub> </math></stem>
46
+ </stem>
47
+ </formula>
38
48
  </sections>
39
49
  </iso-standard>
40
50
  OUTPUT
@@ -122,25 +122,27 @@ RSpec.describe Asciidoctor::ISO do
122
122
  OUTPUT
123
123
  end
124
124
 
125
- it "moves notes inside preceding blocks, if they are not at clause end" do
125
+ it "moves notes inside preceding blocks, if they are not at clause end, and the blocks are not delimited" do
126
126
  expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
127
127
  #{ASCIIDOC_BLANK_HDR}
128
- [source,ruby]
129
- [1...x].each do |y|
130
- puts y
131
- end
128
+ [stem]
129
+ ++++
130
+ r = 1 %
131
+ r = 1 %
132
+ ++++
132
133
 
133
- NOTE: That loop does not do much
134
+ NOTE: That formula does not do much
134
135
 
135
136
  Indeed.
136
137
  INPUT
137
138
  #{BLANK_HDR}
138
- <sections><sourcecode id="_">[1...x].each do |y|
139
- puts y
140
- end<note id="_">
141
- <p id="_">That loop does not do much</p>
142
- </note></sourcecode>
143
-
139
+ <sections><formula id="_">
140
+ <stem type="AsciiMath">r = 1 %
141
+ r = 1 %</stem>
142
+ <note id="_">
143
+ <p id="_">That formula does not do much</p>
144
+ </note></formula>
145
+
144
146
  <p id="_">Indeed.</p></sections>
145
147
  </iso-standard>
146
148
  OUTPUT
@@ -188,11 +190,14 @@ RSpec.describe Asciidoctor::ISO do
188
190
  <bibitem id="iso216" type="standard">
189
191
  <title format="text/plain">Reference</title>
190
192
  <docidentifier>ISO 216</docidentifier>
191
- <date type="published">2001</date>
193
+ <date type="published">
194
+ <from>2001</from>
195
+ </date>
192
196
  <contributor>
193
197
  <role type="publisher"/>
194
198
  <organization>
195
- <name>ISO</name>
199
+ <name>International Organization for Standardization</name>
200
+ <abbreviation>ISO</abbreviation>
196
201
  </organization>
197
202
  </contributor>
198
203
  </bibitem>
@@ -225,7 +230,8 @@ RSpec.describe Asciidoctor::ISO do
225
230
  <contributor>
226
231
  <role type="publisher"/>
227
232
  <organization>
228
- <name>ISO</name>
233
+ <name>International Organization for Standardization</name>
234
+ <abbreviation>ISO</abbreviation>
229
235
  </organization>
230
236
  </contributor>
231
237
  </bibitem>
@@ -309,7 +315,8 @@ RSpec.describe Asciidoctor::ISO do
309
315
  <contributor>
310
316
  <role type="publisher"/>
311
317
  <organization>
312
- <name>ISO</name>
318
+ <name>International Organization for Standardization</name>
319
+ <abbreviation>ISO</abbreviation>
313
320
  </organization>
314
321
  </contributor>
315
322
  </bibitem></references>
@@ -640,11 +647,12 @@ RSpec.describe Asciidoctor::ISO do
640
647
  <bibitem id="iso123" type="standard">
641
648
  <title format="text/plain">Standard</title>
642
649
  <docidentifier>ISO 123</docidentifier>
643
- <date type="published">--</date>
650
+ <date type="published"><from>--</from></date>
644
651
  <contributor>
645
652
  <role type="publisher"/>
646
653
  <organization>
647
- <name>ISO</name>
654
+ <name>International Organization for Standardization</name>
655
+ <abbreviation>ISO</abbreviation>
648
656
  </organization>
649
657
  </contributor>
650
658
  <note format="text/plain" reference="2">ISO DATE: The standard is in press</note>
@@ -12,6 +12,7 @@ RSpec.describe Asciidoctor::ISO do
12
12
  super^script^
13
13
  sub~script~
14
14
  stem:[a_90]
15
+ stem:[<mml:math><mml:msub xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">F</mml:mi> </mml:mrow> </mml:mrow> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">&#x391;</mml:mi> </mml:mrow> </mml:mrow> </mml:msub> </mml:math>]
15
16
  [alt]#alt#
16
17
  [deprecated]#deprecated#
17
18
  [domain]#domain#
@@ -28,6 +29,7 @@ RSpec.describe Asciidoctor::ISO do
28
29
  super<sup>script</sup>
29
30
  sub<sub>script</sub>
30
31
  <stem type="AsciiMath">a_90</stem>
32
+ <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub> <mrow> <mrow> <mi mathvariant="bold-italic">F</mi> </mrow> </mrow> <mrow> <mrow> <mi mathvariant="bold-italic">Α</mi> </mrow> </mrow> </msub> </math></stem>
31
33
  <admitted>alt</admitted>
32
34
  <deprecates>deprecated</deprecates>
33
35
  <domain>domain</domain>
@@ -173,6 +173,7 @@ RSpec.describe Asciidoctor::ISO do
173
173
 
174
174
  INPUT
175
175
  #{BLANK_HDR}
176
+ <sections>
176
177
  <ul id="id1">
177
178
  <li id="id2">
178
179
  <p id="_">List item</p>
@@ -19,7 +19,8 @@ RSpec.describe Asciidoctor::ISO do
19
19
  <contributor>
20
20
  <role type="publisher"/>
21
21
  <organization>
22
- <name>ISO</name>
22
+ <name>International Organization for Standardization</name>
23
+ <abbreviation>ISO</abbreviation>
23
24
  </organization>
24
25
  </contributor>
25
26
  </bibitem>
@@ -55,26 +56,52 @@ RSpec.describe Asciidoctor::ISO do
55
56
  OUTPUT
56
57
  end
57
58
 
58
- it "processes dated ISO reference" do
59
+ it "processes dated ISO reference and joint ISO/IEC references" do
59
60
  expect(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to <<~"OUTPUT"
60
61
  #{ASCIIDOC_BLANK_HDR}
61
62
  [bibliography]
62
63
  == Normative References
63
64
 
64
- * [[[iso123,ISO 123:1066]]] _Standard_
65
+ * [[[iso123,ISO/IEC 123:1066]]] _Standard_
66
+ * [[[iso124,ISO 124:1066-1067]]] _Standard_
65
67
  INPUT
66
68
  #{BLANK_HDR}
67
69
  <sections>
68
- </sections><references id="_" obligation="informative">
70
+
71
+ </sections><references id="_" obligation="informative">
69
72
  <title>Normative References</title>
70
73
  <bibitem id="iso123" type="standard">
71
74
  <title format="text/plain">Standard</title>
72
- <docidentifier>ISO 123</docidentifier>
73
- <date type="published">1066</date>
75
+ <docidentifier>ISO/IEC 123</docidentifier>
76
+ <date type="published">
77
+ <from>1066</from>
78
+ </date>
79
+ <contributor>
80
+ <role type="publisher"/>
81
+ <organization>
82
+ <name>International Organization for Standardization</name>
83
+ <abbreviation>ISO</abbreviation>
84
+ </organization>
85
+ </contributor>
86
+ <contributor>
87
+ <role type="publisher"/>
88
+ <organization>
89
+ <name>IEC</name>
90
+ </organization>
91
+ </contributor>
92
+ </bibitem>
93
+ <bibitem id="iso124" type="standard">
94
+ <title format="text/plain">Standard</title>
95
+ <docidentifier>ISO 124</docidentifier>
96
+ <date type="published">
97
+ <from>1066</from>
98
+ <to>1067</to>
99
+ </date>
74
100
  <contributor>
75
101
  <role type="publisher"/>
76
102
  <organization>
77
- <name>ISO</name>
103
+ <name>International Organization for Standardization</name>
104
+ <abbreviation>ISO</abbreviation>
78
105
  </organization>
79
106
  </contributor>
80
107
  </bibitem>
@@ -98,11 +125,14 @@ RSpec.describe Asciidoctor::ISO do
98
125
  <bibitem id="iso123" type="standard">
99
126
  <title format="text/plain">Standard</title>
100
127
  <docidentifier>ISO 123</docidentifier>
101
- <date type="published">--</date>
128
+ <date type="published">
129
+ <from>--</from>
130
+ </date>
102
131
  <contributor>
103
132
  <role type="publisher"/>
104
133
  <organization>
105
- <name>ISO</name>
134
+ <name>International Organization for Standardization</name>
135
+ <abbreviation>ISO</abbreviation>
106
136
  </organization>
107
137
  </contributor>
108
138
  <note format="text/plain" reference="1">ISO DATE: The standard is in press</note>
@@ -128,11 +158,14 @@ RSpec.describe Asciidoctor::ISO do
128
158
  <bibitem id="iso123" type="standard">
129
159
  <title format="text/plain">Standard</title>
130
160
  <docidentifier>ISO 123:All Parts</docidentifier>
131
- <date type="published">1066</date>
161
+ <date type="published">
162
+ <from>1066</from>
163
+ </date>
132
164
  <contributor>
133
165
  <role type="publisher"/>
134
166
  <organization>
135
- <name>ISO</name>
167
+ <name>International Organization for Standardization</name>
168
+ <abbreviation>ISO</abbreviation>
136
169
  </organization>
137
170
  </contributor>
138
171
  </bibitem>