metanorma-bsi 0.0.1

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 (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.hound.yml +3 -0
  4. data/.rubocop.yml +14 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/LICENSE +25 -0
  8. data/README.adoc +199 -0
  9. data/Rakefile +8 -0
  10. data/bin/rspec +18 -0
  11. data/lib/asciidoctor/bsi/basicdoc.rng +1131 -0
  12. data/lib/asciidoctor/bsi/biblio.rng +1235 -0
  13. data/lib/asciidoctor/bsi/bsi.rng +120 -0
  14. data/lib/asciidoctor/bsi/bsi_intro_en.xml +105 -0
  15. data/lib/asciidoctor/bsi/cleanup.rb +78 -0
  16. data/lib/asciidoctor/bsi/cleanup_ref.rb +183 -0
  17. data/lib/asciidoctor/bsi/converter.rb +83 -0
  18. data/lib/asciidoctor/bsi/front.rb +67 -0
  19. data/lib/asciidoctor/bsi/isodoc.rng +1870 -0
  20. data/lib/asciidoctor/bsi/isostandard.rng +477 -0
  21. data/lib/asciidoctor/bsi/reqt.rng +194 -0
  22. data/lib/asciidoctor/bsi/validate.rb +224 -0
  23. data/lib/asciidoctor/bsi/validate_list.rb +72 -0
  24. data/lib/asciidoctor/bsi/validate_requirement.rb +163 -0
  25. data/lib/isodoc/bsi/base_convert.rb +91 -0
  26. data/lib/isodoc/bsi/bsi.international-standard.xsl +6540 -0
  27. data/lib/isodoc/bsi/html/html_bsi_intro.html +8 -0
  28. data/lib/isodoc/bsi/html/html_bsi_titlepage.html +50 -0
  29. data/lib/isodoc/bsi/html/htmlstyle.css +968 -0
  30. data/lib/isodoc/bsi/html/htmlstyle.scss +699 -0
  31. data/lib/isodoc/bsi/html_convert.rb +56 -0
  32. data/lib/isodoc/bsi/i18n-en.yaml +56 -0
  33. data/lib/isodoc/bsi/i18n.rb +15 -0
  34. data/lib/isodoc/bsi/init.rb +24 -0
  35. data/lib/isodoc/bsi/metadata.rb +33 -0
  36. data/lib/isodoc/bsi/pdf_convert.rb +17 -0
  37. data/lib/isodoc/bsi/presentation_xml_convert.rb +72 -0
  38. data/lib/isodoc/bsi/sts_convert.rb +30 -0
  39. data/lib/isodoc/bsi/xref.rb +134 -0
  40. data/lib/metanorma-bsi.rb +15 -0
  41. data/lib/metanorma/bsi.rb +6 -0
  42. data/lib/metanorma/bsi/processor.rb +51 -0
  43. data/lib/metanorma/bsi/version.rb +6 -0
  44. data/metanorma-bsi.gemspec +47 -0
  45. data/spec/asciidoctor/base_spec.rb +778 -0
  46. data/spec/asciidoctor/blocks_spec.rb +553 -0
  47. data/spec/asciidoctor/cleanup_spec.rb +547 -0
  48. data/spec/asciidoctor/inline_spec.rb +176 -0
  49. data/spec/asciidoctor/lists_spec.rb +194 -0
  50. data/spec/asciidoctor/refs_spec.rb +318 -0
  51. data/spec/asciidoctor/section_spec.rb +382 -0
  52. data/spec/asciidoctor/validate_spec.rb +858 -0
  53. data/spec/assets/header.html +7 -0
  54. data/spec/assets/html.css +2 -0
  55. data/spec/assets/iso.xml +71 -0
  56. data/spec/assets/rice_image1.png +0 -0
  57. data/spec/assets/word.css +2 -0
  58. data/spec/assets/wordintro.html +4 -0
  59. data/spec/assets/xref_error.adoc +7 -0
  60. data/spec/isodoc/blocks_spec.rb +259 -0
  61. data/spec/isodoc/i18n_spec.rb +442 -0
  62. data/spec/isodoc/inline_spec.rb +287 -0
  63. data/spec/isodoc/iso_spec.rb +116 -0
  64. data/spec/isodoc/metadata_spec.rb +262 -0
  65. data/spec/isodoc/postproc_spec.rb +137 -0
  66. data/spec/isodoc/ref_spec.rb +376 -0
  67. data/spec/isodoc/section_spec.rb +467 -0
  68. data/spec/isodoc/terms_spec.rb +246 -0
  69. data/spec/isodoc/xref_spec.rb +1730 -0
  70. data/spec/metanorma/processor_spec.rb +76 -0
  71. data/spec/spec_helper.rb +291 -0
  72. data/spec/vcr_cassettes/iso-639.yml +182 -0
  73. data/spec/vcr_cassettes/isobib_get_639_1967.yml +136 -0
  74. data/spec/vcr_cassettes/multistandard.yml +352 -0
  75. metadata +343 -0
@@ -0,0 +1,15 @@
1
+ require "asciidoctor" unless defined? Asciidoctor::Converter
2
+ require_relative "asciidoctor/bsi/converter"
3
+ require_relative "metanorma/bsi/version"
4
+ require "isodoc/bsi/html_convert"
5
+ require "isodoc/bsi/sts_convert"
6
+ require "isodoc/bsi/pdf_convert"
7
+ require "isodoc/bsi/presentation_xml_convert"
8
+ require "isodoc/bsi/metadata"
9
+ require "isodoc/bsi/xref"
10
+
11
+ if defined? Metanorma
12
+ require_relative "metanorma/bsi"
13
+ Metanorma::Registry.instance.register(Metanorma::BSI::Processor)
14
+ end
15
+
@@ -0,0 +1,6 @@
1
+ require_relative "./bsi/processor"
2
+
3
+ module Metanorma
4
+ module BSI
5
+ end
6
+ end
@@ -0,0 +1,51 @@
1
+ require "metanorma/processor"
2
+
3
+ module Metanorma
4
+ module BSI
5
+ class Processor < Metanorma::Processor
6
+
7
+ def initialize
8
+ @short = :bsi
9
+ @input_format = :asciidoc
10
+ @asciidoctor_backend = :bsi
11
+ end
12
+
13
+ def output_formats
14
+ super.merge(
15
+ html: "html",
16
+ pdf: "pdf",
17
+ sts: "sts.xml"
18
+ )
19
+ end
20
+
21
+ def fonts_manifest
22
+ {
23
+ "Tahoma" => nil,
24
+ "STIX Two Math" => nil,
25
+ "Source Han Sans" => nil,
26
+ "Courier" => nil,
27
+ "Courier New" => nil,
28
+ }
29
+ end
30
+
31
+ def version
32
+ "Metanorma::BSI #{Metanorma::BSI::VERSION}"
33
+ end
34
+
35
+ def output(xml, inname, outname, format, options = {})
36
+ case format
37
+ when :html
38
+ IsoDoc::BSI::HtmlConvert.new(options).convert(inname, xml, nil, outname)
39
+ when :pdf
40
+ IsoDoc::BSI::PdfConvert.new(options).convert(inname, xml, nil, outname)
41
+ when :sts
42
+ IsoDoc::BSI::StsConvert.new(options).convert(inname, isodoc_node, nil, outname)
43
+ when :presentation
44
+ IsoDoc::BSI::PresentationXMLConvert.new(options).convert(inname, xml, nil, outname)
45
+ else
46
+ super
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,6 @@
1
+ module Metanorma
2
+ module BSI
3
+ VERSION = "0.0.1".freeze
4
+ end
5
+ end
6
+
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "metanorma/bsi/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "metanorma-bsi"
9
+ spec.version = Metanorma::BSI::VERSION
10
+ spec.authors = ["Ribose Inc."]
11
+ spec.email = ["open.source@ribose.com"]
12
+
13
+ spec.summary = "metanorma-bsi lets you write BSI standards "\
14
+ "in AsciiDoc."
15
+ spec.description = <<~DESCRIPTION
16
+ metanorma-bsi lets you write BSI standards in AsciiDoc syntax.
17
+
18
+ This gem is in active development.
19
+ DESCRIPTION
20
+
21
+ spec.homepage = "https://github.com/metanorma/metanorma-bsi"
22
+ spec.license = "BSD-2-Clause"
23
+
24
+ spec.bindir = "bin"
25
+ spec.require_paths = ["lib"]
26
+ spec.files = `git ls-files`.split("\n")
27
+ spec.test_files = `git ls-files -- {spec}/*`.split("\n")
28
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
29
+
30
+ spec.add_dependency "metanorma-iso", "~> 1.8.0"
31
+ spec.add_dependency "mn2sts", "~> 1.5.0"
32
+ spec.add_dependency "ruby-jing"
33
+
34
+ spec.add_development_dependency "byebug"
35
+ spec.add_development_dependency "equivalent-xml", "~> 0.6"
36
+ spec.add_development_dependency "guard", "~> 2.14"
37
+ spec.add_development_dependency "guard-rspec", "~> 4.7"
38
+ spec.add_development_dependency "iev", "~> 0.2.0"
39
+ spec.add_development_dependency "rake", "~> 13.0"
40
+ spec.add_development_dependency "rspec", "~> 3.6"
41
+ spec.add_development_dependency "rubocop", "~> 1.5.2"
42
+ spec.add_development_dependency "sassc", "2.4.0"
43
+ spec.add_development_dependency "simplecov", "~> 0.15"
44
+ spec.add_development_dependency "timecop", "~> 0.9"
45
+ spec.add_development_dependency "vcr", "~> 5.0.0"
46
+ spec.add_development_dependency "webmock"
47
+ end
@@ -0,0 +1,778 @@
1
+ require "spec_helper"
2
+ require "fileutils"
3
+
4
+ RSpec.describe Asciidoctor::BSI do
5
+ before(:all) do
6
+ @blank_hdr = blank_hdr_gen
7
+ end
8
+
9
+ it "has a version number" do
10
+ expect(Metanorma::BSI::VERSION).not_to be nil
11
+ end
12
+
13
+ it "processes a blank document" do
14
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
15
+ #{ASCIIDOC_BLANK_HDR}
16
+ INPUT
17
+ #{@blank_hdr}
18
+ <sections/>
19
+ </bsi-standard>
20
+ OUTPUT
21
+ end
22
+
23
+ it "converts a blank document" do
24
+ FileUtils.rm_f "test.doc"
25
+ FileUtils.rm_f "test.html"
26
+ FileUtils.rm_f "test.pdf"
27
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
28
+ = Document title
29
+ Author
30
+ :docfile: test.adoc
31
+ :novalid:
32
+ :no-isobib:
33
+ INPUT
34
+ #{@blank_hdr}
35
+ <sections/>
36
+ </bsi-standard>
37
+ OUTPUT
38
+ expect(File.exist?("test.pdf")).to be true
39
+ expect(File.exist?("test.html")).to be true
40
+ expect(File.exist?("test.doc")).to be true
41
+ expect(File.exist?("htmlstyle.css")).to be false
42
+ end
43
+
44
+ it "processes default metadata" do
45
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
46
+ = Document title
47
+ Author
48
+ :docfile: test.adoc
49
+ :nodoc:
50
+ :novalid:
51
+ :no-isobib:
52
+ :docnumber: 1000
53
+ :partnumber: 1
54
+ :edition: 2
55
+ :revdate: 2000-01-01
56
+ :draft: 0.3.4
57
+ :technical-committee: TC
58
+ :technical-committee-number: 1
59
+ :technical-committee-type: A
60
+ :subcommittee: SC
61
+ :subcommittee-number: 2
62
+ :subcommittee-type: B
63
+ :workgroup: WG
64
+ :workgroup-number: 3
65
+ :workgroup-type: C
66
+ :technical-committee_2: TC1
67
+ :technical-committee-number_2: 11
68
+ :technical-committee-type_2: A1
69
+ :subcommittee_2: SC1
70
+ :subcommittee-number_2: 21
71
+ :subcommittee-type_2: B1
72
+ :workgroup_2: WG1
73
+ :workgroup-number_2: 31
74
+ :workgroup-type_2: C1
75
+ :secretariat: SECRETARIAT
76
+ :docstage: 10
77
+ :docsubstage: 20
78
+ :iteration: 3
79
+ :language: en
80
+ :title-intro-en: Introduction
81
+ :title-main-en: Main Title -- Title
82
+ :title-part-en: Title Part
83
+ :title-intro-fr: Introduction Française
84
+ :title-main-fr: Titre Principal
85
+ :title-part-fr: Part du Titre
86
+ :library-ics: 1,2,3
87
+ :accessibility-color-inside: true
88
+ :price-code: XC
89
+ :cen-processing: true
90
+ :secretary: Fred Nerk
91
+ :interest-to-committees: TC 6121, SC 12
92
+ :obsoletes: ABC; DEF
93
+ INPUT
94
+ <bibdata type="standard">
95
+ <title language="en" format="text/plain" type="main">Introduction — Main Title — Title — Title Part</title>
96
+ <title language="en" format="text/plain" type="title-intro">Introduction</title>
97
+ <title language="en" format="text/plain" type="title-main">Main Title — Title</title>
98
+ <title language="en" format="text/plain" type="title-part">Title Part</title>
99
+ <title language="fr" format="text/plain" type="main">Introduction Française — Titre Principal — Part du Titre</title>
100
+ <title language="fr" format="text/plain" type="title-intro">Introduction Française</title>
101
+ <title language="fr" format="text/plain" type="title-main">Titre Principal</title>
102
+ <title language="fr" format="text/plain" type="title-part">Part du Titre</title>
103
+ <docidentifier type="BS">BS/PreNP 1000-1</docidentifier>
104
+ <docnumber>1000</docnumber>
105
+ <contributor>
106
+ <role type="author"/>
107
+ <organization>
108
+ <name>British Standards Institute</name>
109
+ <abbreviation>BSI</abbreviation>
110
+ </organization>
111
+ </contributor>
112
+ <contributor>
113
+ <role type="publisher"/>
114
+ <organization>
115
+ <name>British Standards Institute</name>
116
+ <abbreviation>BSI</abbreviation>
117
+ </organization>
118
+ </contributor>
119
+ <edition>2</edition>
120
+ <version>
121
+ <revision-date>2000-01-01</revision-date>
122
+ <draft>0.3.4</draft>
123
+ </version>
124
+ <language>en</language>
125
+ <script>Latn</script>
126
+ <status>
127
+ <stage abbreviation="NP">10</stage>
128
+ <substage>20</substage>
129
+ <iteration>3</iteration>
130
+ </status>
131
+ <copyright>
132
+ <from>#{Date.today.year}</from>
133
+ <owner>
134
+ <organization>
135
+ <name>British Standards Institute</name>
136
+ <abbreviation>BSI</abbreviation>
137
+ </organization>
138
+ </owner>
139
+ </copyright>
140
+ <relation type='obsoletes'>
141
+ <bibitem>
142
+ <title>--</title>
143
+ <docidentifier>ABC</docidentifier>
144
+ </bibitem>
145
+ </relation>
146
+ <relation type='obsoletes'>
147
+ <bibitem>
148
+ <title>--</title>
149
+ <docidentifier>DEF</docidentifier>
150
+ </bibitem>
151
+ </relation>
152
+ <ext>
153
+ <doctype>article</doctype>
154
+ <editorialgroup>
155
+ <technical-committee number="1" type="A">TC</technical-committee>
156
+ <technical-committee number="11" type="A1">TC1</technical-committee>
157
+ <subcommittee number="2" type="B">SC</subcommittee>
158
+ <subcommittee number="21" type="B1">SC1</subcommittee>
159
+ <workgroup number="3" type="C">WG</workgroup>
160
+ <workgroup number="31" type="C1">WG1</workgroup>
161
+ <secretariat>SECRETARIAT</secretariat>
162
+ </editorialgroup>
163
+ <ics>
164
+ <code>1</code>
165
+ </ics>
166
+ <ics>
167
+ <code>2</code>
168
+ </ics>
169
+ <ics>
170
+ <code>3</code>
171
+ </ics>
172
+ <structuredidentifier>
173
+ <project-number part="1">BS 1000</project-number>
174
+ </structuredidentifier>
175
+ <stagename>New work item proposal</stagename>
176
+ </ext>
177
+ </bibdata>
178
+ OUTPUT
179
+ end
180
+
181
+
182
+ it "processes complex metadata" do
183
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
184
+ = Document title
185
+ Author
186
+ :docfile: test.adoc
187
+ :nodoc:
188
+ :novalid:
189
+ :no-isobib:
190
+ :docnumber: 1000
191
+ :partnumber: 1-1
192
+ :tc-docnumber: 2000
193
+ :language: el
194
+ :script: Grek
195
+ :publisher: BSI;IETF;ISO
196
+ :copyright-year: 2001
197
+ :docstage: 50
198
+ :doctype: technical-specification
199
+ :function: emc
200
+ :horizontal: true
201
+ INPUT
202
+ <bibdata type="standard">
203
+ <docidentifier type="BS">BS/IETF/ISO/FDTS TS 1000-1-1</docidentifier>
204
+ <docidentifier type="iso-tc">2000</docidentifier>
205
+ <docnumber>1000</docnumber>
206
+ <contributor>
207
+ <role type="author"/>
208
+ <organization>
209
+ <name>British Standards Institute</name>
210
+ <abbreviation>BSI</abbreviation>
211
+ </organization>
212
+ </contributor>
213
+ <contributor>
214
+ <role type="author"/>
215
+ <organization>
216
+ <name>IETF</name>
217
+ </organization>
218
+ </contributor>
219
+ <contributor>
220
+ <role type="author"/>
221
+ <organization>
222
+ <name>International Organization for Standardization</name>
223
+ <abbreviation>ISO</abbreviation>
224
+ </organization>
225
+ </contributor>
226
+ <contributor>
227
+ <role type="publisher"/>
228
+ <organization>
229
+ <name>British Standards Institute</name>
230
+ <abbreviation>BSI</abbreviation>
231
+ </organization>
232
+ </contributor>
233
+ <contributor>
234
+ <role type="publisher"/>
235
+ <organization>
236
+ <name>IETF</name>
237
+ </organization>
238
+ </contributor>
239
+ <contributor>
240
+ <role type="publisher"/>
241
+ <organization>
242
+ <name>International Organization for Standardization</name>
243
+ <abbreviation>ISO</abbreviation>
244
+ </organization>
245
+ </contributor>
246
+ <language>el</language>
247
+ <script>Grek</script>
248
+ <status>
249
+ <stage abbreviation="FDTS TS">50</stage>
250
+ <substage>00</substage>
251
+ </status>
252
+ <copyright>
253
+ <from>2001</from>
254
+ <owner>
255
+ <organization>
256
+ <name>British Standards Institute</name>
257
+ <abbreviation>BSI</abbreviation>
258
+ </organization>
259
+ </owner>
260
+ </copyright>
261
+ <copyright>
262
+ <from>2001</from>
263
+ <owner>
264
+ <organization>
265
+ <name>IETF</name>
266
+ </organization>
267
+ </owner>
268
+ </copyright>
269
+ <copyright>
270
+ <from>2001</from>
271
+ <owner>
272
+ <organization>
273
+ <name>International Organization for Standardization</name>
274
+ <abbreviation>ISO</abbreviation>
275
+ </organization>
276
+ </owner>
277
+ </copyright>
278
+ <ext>
279
+ <doctype>technical-specification</doctype>
280
+ <editorialgroup>
281
+ <technical-committee/>
282
+ <subcommittee/>
283
+ <workgroup/>
284
+ </editorialgroup>
285
+ <structuredidentifier>
286
+ <project-number part="1" subpart="1">BS/IETF/ISO 1000</project-number>
287
+ </structuredidentifier>
288
+ <stagename>Final draft</stagename>
289
+ </ext>
290
+ </bibdata>
291
+ OUTPUT
292
+ end
293
+
294
+ it "processes adoption of ISO standards" do
295
+ VCR.use_cassette "iso-639" do
296
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
297
+ = Document title
298
+ Author
299
+ :docfile: test.adoc
300
+ :docnumber: ISO 639
301
+ :partnumber: 2
302
+ :nodoc:
303
+ :novalid:
304
+ :adopted-from: ISO 639-2
305
+ :copyright-year: 2001
306
+ INPUT
307
+ <bibdata type='standard'>
308
+ <docidentifier type='BS'>BS ISO 639-2:2001</docidentifier>
309
+ <docnumber>ISO 639</docnumber>
310
+ <contributor>
311
+ <role type='author'/>
312
+ <organization>
313
+ <name>British Standards Institute</name>
314
+ <abbreviation>BSI</abbreviation>
315
+ </organization>
316
+ </contributor>
317
+ <contributor>
318
+ <role type='publisher'/>
319
+ <organization>
320
+ <name>British Standards Institute</name>
321
+ <abbreviation>BSI</abbreviation>
322
+ </organization>
323
+ </contributor>
324
+ <language>en</language>
325
+ <script>Latn</script>
326
+ <status>
327
+ <stage abbreviation='IS'>60</stage>
328
+ <substage>60</substage>
329
+ </status>
330
+ <copyright>
331
+ <from>2001</from>
332
+ <owner>
333
+ <organization>
334
+ <name>British Standards Institute</name>
335
+ <abbreviation>BSI</abbreviation>
336
+ </organization>
337
+ </owner>
338
+ </copyright>
339
+ <relation type='adoptedFrom'>
340
+ <bibitem type='standard'>
341
+ <fetched>2021-04-25</fetched>
342
+ <title type='title-main' format='text/plain' language='en' script='Latn'>Codes for the representation of names of languages</title>
343
+ <title type='title-part' format='text/plain' language='en' script='Latn'>Part 2: Alpha-3 code</title>
344
+ <title type='main' format='text/plain' language='en' script='Latn'>
345
+ Codes for the representation of names of
346
+ languages&#8201;&#8212;&#8201;Part 2: Alpha-3 code
347
+ </title>
348
+ <title type='title-main' format='text/plain' language='fr' script='Latn'>Codes pour la repr&#233;sentation des noms de langue</title>
349
+ <title type='title-part' format='text/plain' language='fr' script='Latn'>Partie 2: Code alpha-3</title>
350
+ <title type='main' format='text/plain' language='fr' script='Latn'>
351
+ Codes pour la repr&#233;sentation des noms de
352
+ langue&#8201;&#8212;&#8201;Partie 2: Code alpha-3
353
+ </title>
354
+ <uri type='src'>https://www.iso.org/standard/4767.html</uri>
355
+ <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:4767:en</uri>
356
+ <uri type='rss'>https://www.iso.org/contents/data/standard/00/47/4767.detail.rss</uri>
357
+ <docidentifier type='ISO'>ISO 639-2</docidentifier>
358
+ <docidentifier type='URN'>urn:iso:std:iso:639:-2:stage-90.20:ed-1:en,fr</docidentifier>
359
+ <docnumber>639</docnumber>
360
+ <contributor>
361
+ <role type='publisher'/>
362
+ <organization>
363
+ <name>International Organization for Standardization</name>
364
+ <abbreviation>ISO</abbreviation>
365
+ <uri>www.iso.org</uri>
366
+ </organization>
367
+ </contributor>
368
+ <edition>1</edition>
369
+ <language>en</language>
370
+ <language>fr</language>
371
+ <script>Latn</script>
372
+ <status>
373
+ <stage>90</stage>
374
+ <substage>20</substage>
375
+ </status>
376
+ <copyright>
377
+ <from>1998</from>
378
+ <owner>
379
+ <organization>
380
+ <name>ISO</name>
381
+ </organization>
382
+ </owner>
383
+ </copyright>
384
+ <relation type='instance'>
385
+ <bibitem type='standard'>
386
+ <fetched>2021-04-25</fetched>
387
+ <title type='title-main' format='text/plain' language='en' script='Latn'>Codes for the representation of names of languages</title>
388
+ <title type='title-part' format='text/plain' language='en' script='Latn'>Part 2: Alpha-3 code</title>
389
+ <title type='main' format='text/plain' language='en' script='Latn'>
390
+ Codes for the representation of names of
391
+ languages&#8201;&#8212;&#8201;Part 2: Alpha-3 code
392
+ </title>
393
+ <title type='title-main' format='text/plain' language='fr' script='Latn'>Codes pour la repr&#233;sentation des noms de langue</title>
394
+ <title type='title-part' format='text/plain' language='fr' script='Latn'>Partie 2: Code alpha-3</title>
395
+ <title type='main' format='text/plain' language='fr' script='Latn'>
396
+ Codes pour la repr&#233;sentation des noms de
397
+ langue&#8201;&#8212;&#8201;Partie 2: Code alpha-3
398
+ </title>
399
+ <uri type='src'>https://www.iso.org/standard/4767.html</uri>
400
+ <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:4767:en</uri>
401
+ <uri type='rss'>https://www.iso.org/contents/data/standard/00/47/4767.detail.rss</uri>
402
+ <docidentifier type='ISO'>ISO 639-2:1998</docidentifier>
403
+ <docidentifier type='URN'>urn:iso:std:iso:639:-2:stage-90.20:ed-1:en,fr</docidentifier>
404
+ <docnumber>639</docnumber>
405
+ <date type='published'>
406
+ <on>1998-11</on>
407
+ </date>
408
+ <contributor>
409
+ <role type='publisher'/>
410
+ <organization>
411
+ <name>International Organization for Standardization</name>
412
+ <abbreviation>ISO</abbreviation>
413
+ <uri>www.iso.org</uri>
414
+ </organization>
415
+ </contributor>
416
+ <edition>1</edition>
417
+ <language>en</language>
418
+ <language>fr</language>
419
+ <script>Latn</script>
420
+ <abstract format='text/plain' language='fr' script='Latn'>
421
+ La pr&#233;sente partie de l&#8217;ISO 639 fournit deux jeux de
422
+ codets &#224; trois caract&#232;res pour la repr&#233;sentation des
423
+ noms de langue, l&#8217;un destin&#233; &#224; des applications en
424
+ terminologie, l&#8217;autre destin&#233; &#224; des applications
425
+ bibliographiques. Les deux jeux de codets sont les m&#234;mes,
426
+ except&#233; pour vingt-cinq langues qui ont des codets
427
+ diff&#233;rents &#224; cause du crit&#232;re utilis&#233; pour les
428
+ former . &#192; l&#8217;origine, des codets de langues ont
429
+ &#233;t&#233; cr&#233;&#233;s &#224; l&#8217;usage des
430
+ biblioth&#232;ques, des services documentaires et des &#233;diteurs,
431
+ pour indiquer la langue dans l&#8217;&#233;change
432
+ d&#8217;information, particuli&#232;rement entre des syst&#232;mes
433
+ informatis&#233;s. Ces codets ont &#233;t&#233; utilis&#233;s
434
+ largement &#224; l&#8217;int&#233;rieur de la communaut&#233; des
435
+ biblioth&#232;ques, et ils peuvent &#234;tre adopt&#233;s pour toute
436
+ application qui requiert l&#8217;expression de la langue sous forme
437
+ cod&#233;e, en terminologie ou en lexicographie. Le code alpha-2 a
438
+ &#233;t&#233; cr&#233;&#233; pour un usage pratique pour la plupart
439
+ des grandes langues du monde, langues qui sont les plus souvent
440
+ repr&#233;sent&#233;es dans le corpus de la litt&#233;rature
441
+ mondiale. De nouveaux codets sont cr&#233;&#233;s quand il devient
442
+ &#233;vident qu&#8217;il existe un corpus significatif de
443
+ litt&#233;rature dans une langue particuli&#232;re. Les langages
444
+ cr&#233;&#233;s pour &#234;tre utilis&#233;s exclusivement par des
445
+ machines, comme les langages de programmation, ne sont pas inclus
446
+ dans le pr&#233;sent code.
447
+ </abstract>
448
+ <status>
449
+ <stage>90</stage>
450
+ <substage>20</substage>
451
+ </status>
452
+ <copyright>
453
+ <from>1998</from>
454
+ <owner>
455
+ <organization>
456
+ <name>ISO</name>
457
+ </organization>
458
+ </owner>
459
+ </copyright>
460
+ <place>Geneva</place>
461
+ </bibitem>
462
+ </relation>
463
+ <place>Geneva</place>
464
+ </bibitem>
465
+ </relation>
466
+ <ext>
467
+ <doctype>article</doctype>
468
+ <editorialgroup>
469
+ <technical-committee/>
470
+ <subcommittee/>
471
+ <workgroup/>
472
+ </editorialgroup>
473
+ <structuredidentifier>
474
+ <project-number part='2'>BS ISO 639</project-number>
475
+ </structuredidentifier>
476
+ <stagename>International standard</stagename>
477
+ </ext>
478
+ </bibdata>
479
+ OUTPUT
480
+ end
481
+ end
482
+
483
+ it "processes boilerplate in English" do
484
+ doc = (strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)))
485
+ = Document title
486
+ Author
487
+ :docfile: test.adoc
488
+ :nodoc:
489
+ :novalid:
490
+ :no-isobib:
491
+ :docnumber: 1000
492
+ :partnumber: 1-1
493
+ :tc-docnumber: 2000
494
+ :language: en
495
+ :script: Latn
496
+ :publisher: IEC,IETF,ISO
497
+ :copyright-year: 2001
498
+ INPUT
499
+ expect(doc).to include "Unless otherwise specified"
500
+ end
501
+
502
+ it "defaults substage" do
503
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
504
+ = Document title
505
+ Author
506
+ :docfile: test.adoc
507
+ :nodoc:
508
+ :novalid:
509
+ :no-isobib:
510
+ :docnumber: 1000
511
+ :docstage: 50
512
+ INPUT
513
+ <bibdata type="standard">
514
+ <docidentifier type="BS">BS/FDIS 1000</docidentifier>
515
+ <docnumber>1000</docnumber>
516
+ <contributor>
517
+ <role type="author"/>
518
+ <organization>
519
+ <name>British Standards Institute</name>
520
+ <abbreviation>BSI</abbreviation>
521
+ </organization>
522
+ </contributor>
523
+ <contributor>
524
+ <role type="publisher"/>
525
+ <organization>
526
+ <name>British Standards Institute</name>
527
+ <abbreviation>BSI</abbreviation>
528
+ </organization>
529
+ </contributor>
530
+
531
+ <language>en</language>
532
+ <script>Latn</script>
533
+ <status>
534
+ <stage abbreviation="FDIS">50</stage>
535
+ <substage>00</substage>
536
+ </status>
537
+ <copyright>
538
+ <from>#{Date.today.year}</from>
539
+ <owner>
540
+ <organization>
541
+ <name>British Standards Institute</name>
542
+ <abbreviation>BSI</abbreviation>
543
+ </organization>
544
+ </owner>
545
+ </copyright>
546
+ <ext>
547
+ <doctype>article</doctype>
548
+ <editorialgroup>
549
+ <technical-committee/>
550
+ <subcommittee/>
551
+ <workgroup/>
552
+ </editorialgroup>
553
+ <structuredidentifier>
554
+ <project-number>BS 1000</project-number>
555
+ </structuredidentifier>
556
+ <stagename>Final draft</stagename>
557
+ </ext>
558
+ </bibdata>
559
+ OUTPUT
560
+ end
561
+
562
+ it "defaults substage for stage 60" do
563
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
564
+ = Document title
565
+ Author
566
+ :docfile: test.adoc
567
+ :nodoc:
568
+ :novalid:
569
+ :no-isobib:
570
+ :docnumber: 1000
571
+ :docstage: 60
572
+ INPUT
573
+ <bibdata type="standard">
574
+ <docidentifier type="BS">BS 1000</docidentifier>
575
+ <docnumber>1000</docnumber>
576
+ <contributor>
577
+ <role type="author"/>
578
+ <organization>
579
+ <name>British Standards Institute</name>
580
+ <abbreviation>BSI</abbreviation>
581
+ </organization>
582
+ </contributor>
583
+ <contributor>
584
+ <role type="publisher"/>
585
+ <organization>
586
+ <name>British Standards Institute</name>
587
+ <abbreviation>BSI</abbreviation>
588
+ </organization>
589
+ </contributor>
590
+
591
+ <language>en</language>
592
+ <script>Latn</script>
593
+ <status>
594
+ <stage abbreviation='IS'>60</stage>
595
+ <substage>60</substage>
596
+ </status>
597
+ <copyright>
598
+ <from>#{Date.today.year}</from>
599
+ <owner>
600
+ <organization>
601
+ <name>British Standards Institute</name>
602
+ <abbreviation>BSI</abbreviation>
603
+ </organization>
604
+ </owner>
605
+ </copyright>
606
+ <ext>
607
+ <doctype>article</doctype>
608
+ <editorialgroup>
609
+ <technical-committee/>
610
+ <subcommittee/>
611
+ <workgroup/>
612
+ </editorialgroup>
613
+ <structuredidentifier>
614
+ <project-number>BS 1000</project-number>
615
+ </structuredidentifier>
616
+ <stagename>International standard</stagename>
617
+ </ext>
618
+ </bibdata>
619
+ OUTPUT
620
+ end
621
+
622
+ it "populates metadata for PRF" do
623
+ expect(xmlpp(strip_guid(Nokogiri::XML(Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)).at("//xmlns:bibdata").to_xml))).to be_equivalent_to xmlpp(<<~"OUTPUT")
624
+ = Document title
625
+ Author
626
+ :docfile: test.adoc
627
+ :nodoc:
628
+ :novalid:
629
+ :no-isobib:
630
+ :docnumber: 1000
631
+ :docstage: 60
632
+ :docsubstage: 00
633
+ INPUT
634
+ <bibdata type="standard">
635
+ <docidentifier type="BS">BS 1000</docidentifier>
636
+ <docnumber>1000</docnumber>
637
+ <contributor>
638
+ <role type="author"/>
639
+ <organization>
640
+ <name>British Standards Institute</name>
641
+ <abbreviation>BSI</abbreviation>
642
+ </organization>
643
+ </contributor>
644
+ <contributor>
645
+ <role type="publisher"/>
646
+ <organization>
647
+ <name>British Standards Institute</name>
648
+ <abbreviation>BSI</abbreviation>
649
+ </organization>
650
+ </contributor>
651
+
652
+ <language>en</language>
653
+ <script>Latn</script>
654
+ <status>
655
+ <stage abbreviation='PRF'>60</stage>
656
+ <substage>00</substage>
657
+ </status>
658
+ <copyright>
659
+ <from>#{Date.today.year}</from>
660
+ <owner>
661
+ <organization>
662
+ <name>British Standards Institute</name>
663
+ <abbreviation>BSI</abbreviation>
664
+ </organization>
665
+ </owner>
666
+ </copyright>
667
+ <ext>
668
+ <doctype>article</doctype>
669
+ <editorialgroup>
670
+ <technical-committee/>
671
+ <subcommittee/>
672
+ <workgroup/>
673
+ </editorialgroup>
674
+ <structuredidentifier>
675
+ <project-number>BS 1000</project-number>
676
+ </structuredidentifier>
677
+ <stagename>Proof</stagename>
678
+ </ext>
679
+ </bibdata>
680
+ OUTPUT
681
+ end
682
+
683
+
684
+ it "reads scripts into blank HTML document" do
685
+ FileUtils.rm_f "test.html"
686
+ Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
687
+ = Document title
688
+ Author
689
+ :docfile: test.adoc
690
+ :novalid:
691
+ :no-isobib:
692
+ :no-pdf:
693
+ INPUT
694
+ html = File.read("test.html", encoding: "utf-8")
695
+ expect(html).to match(%r{<script>})
696
+ end
697
+
698
+ it "uses default fonts" do
699
+ FileUtils.rm_f "test.html"
700
+ Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
701
+ = Document title
702
+ Author
703
+ :docfile: test.adoc
704
+ :novalid:
705
+ :no-isobib:
706
+ :no-pdf:
707
+ INPUT
708
+ html = File.read("test.html", encoding: "utf-8")
709
+ expect(html)
710
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
711
+ expect(html)
712
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Tahoma", sans-serif;]m)
713
+ expect(html)
714
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Tahoma", sans-serif;]m)
715
+ end
716
+
717
+ it "uses Chinese fonts" do
718
+ FileUtils.rm_f "test.html"
719
+ Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
720
+ = Document title
721
+ Author
722
+ :docfile: test.adoc
723
+ :novalid:
724
+ :no-isobib:
725
+ :script: Hans
726
+ :no-pdf:
727
+ INPUT
728
+ html = File.read("test.html", encoding: "utf-8")
729
+ expect(html)
730
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
731
+ expect(html)
732
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
733
+ expect(html)
734
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
735
+ end
736
+
737
+ it "uses specified fonts" do
738
+ FileUtils.rm_f "test.html"
739
+ Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
740
+ = Document title
741
+ Author
742
+ :docfile: test.adoc
743
+ :novalid:
744
+ :no-isobib:
745
+ :script: Hans
746
+ :body-font: Zapf Chancery
747
+ :header-font: Comic Sans
748
+ :monospace-font: Andale Mono
749
+ :no-pdf:
750
+ INPUT
751
+ html = File.read("test.html", encoding: "utf-8")
752
+ expect(html)
753
+ .to match(%r[\bpre[^{]+\{[^{]+font-family: Andale Mono;]m)
754
+ expect(html)
755
+ .to match(%r[blockquote[^{]+\{[^{]+font-family: Zapf Chancery;]m)
756
+ expect(html)
757
+ .to match(%r[\.h2Annex[^{]+\{[^{]+font-family: Comic Sans;]m)
758
+ end
759
+
760
+ it "strips MS-specific CSS" do
761
+ FileUtils.rm_f "test.html"
762
+ FileUtils.rm_f "test.doc"
763
+ Asciidoctor.convert(<<~"INPUT", backend: :bsi, header_footer: true)
764
+ = Document title
765
+ Author
766
+ :docfile: test.adoc
767
+ :novalid:
768
+ :no-isobib:
769
+ :no-pdf:
770
+ INPUT
771
+ word = File.read("test.doc", encoding: "utf-8")
772
+ html = File.read("test.html", encoding: "utf-8")
773
+ expect(word).to match(%r[mso-style-name: "Intro Title";]m)
774
+ expect(html).not_to match(%r[mso-style-name: "Intro Title";]m)
775
+ end
776
+
777
+
778
+ end