asciidoctor-iso 0.7.2 → 0.7.3

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.
@@ -17,20 +17,6 @@
17
17
  <value>Latn</value>
18
18
  </element>
19
19
  </define>
20
- <!-- draft into isodoc? To replace version/version? -->
21
- <define name="version">
22
- <element name="version">
23
- <optional>
24
- <ref name="edition"/>
25
- </optional>
26
- <optional>
27
- <ref name="revision-date"/>
28
- </optional>
29
- <optional>
30
- <ref name="draft"/>
31
- </optional>
32
- </element>
33
- </define>
34
20
  <!-- add type to docidentifier in isodoc? -->
35
21
  <define name="docidentifier">
36
22
  <element name="docidentifier">
@@ -128,9 +114,9 @@
128
114
  <optional>
129
115
  <ref name="editorialgroup"/>
130
116
  </optional>
131
- <optional>
117
+ <zeroOrMore>
132
118
  <ref name="ics"/>
133
- </optional>
119
+ </zeroOrMore>
134
120
  </define>
135
121
  <define name="BibData">
136
122
  <optional>
@@ -182,9 +168,9 @@
182
168
  <ref name="docrelation"/>
183
169
  </zeroOrMore>
184
170
  <ref name="editorialgroup"/>
185
- <optional>
171
+ <zeroOrMore>
186
172
  <ref name="ics"/>
187
- </optional>
173
+ </zeroOrMore>
188
174
  </define>
189
175
  <define name="bfrom">
190
176
  <element name="from">
@@ -213,6 +199,9 @@
213
199
  <optional>
214
200
  <ref name="substage"/>
215
201
  </optional>
202
+ <optional>
203
+ <ref name="iteration"/>
204
+ </optional>
216
205
  </group>
217
206
  </choice>
218
207
  </element>
@@ -236,9 +225,12 @@
236
225
  <define name="sections">
237
226
  <element name="sections">
238
227
  <ref name="clause"/>
239
- <ref name="terms"/>
228
+ <choice>
229
+ <ref name="term-clause"/>
230
+ <ref name="terms"/>
231
+ </choice>
240
232
  <optional>
241
- <ref name="symbols-abbrevs"/>
233
+ <ref name="definitions"/>
242
234
  </optional>
243
235
  <oneOrMore>
244
236
  <ref name="clause"/>
@@ -276,6 +268,42 @@
276
268
  </oneOrMore>
277
269
  </choice>
278
270
  </define>
271
+ <define name="Clause-Section">
272
+ <optional>
273
+ <attribute name="id">
274
+ <data type="ID"/>
275
+ </attribute>
276
+ </optional>
277
+ <optional>
278
+ <attribute name="inline-header">
279
+ <data type="boolean"/>
280
+ </attribute>
281
+ </optional>
282
+ <optional>
283
+ <attribute name="obligation">
284
+ <choice>
285
+ <value>normative</value>
286
+ <value>informative</value>
287
+ </choice>
288
+ </attribute>
289
+ </optional>
290
+ <optional>
291
+ <ref name="section-title"/>
292
+ </optional>
293
+ <choice>
294
+ <group>
295
+ <oneOrMore>
296
+ <ref name="BasicBlock"/>
297
+ </oneOrMore>
298
+ <zeroOrMore>
299
+ <ref name="note"/>
300
+ </zeroOrMore>
301
+ </group>
302
+ <oneOrMore>
303
+ <ref name="clause-subsection"/>
304
+ </oneOrMore>
305
+ </choice>
306
+ </define>
279
307
  <define name="references">
280
308
  <element name="references">
281
309
  <optional>
@@ -302,8 +330,8 @@
302
330
  </zeroOrMore>
303
331
  </element>
304
332
  </define>
305
- <define name="symbols-abbrevs">
306
- <element name="symbols-abbrevs">
333
+ <define name="definitions">
334
+ <element name="definitions">
307
335
  <optional>
308
336
  <attribute name="id">
309
337
  <data type="ID"/>
@@ -338,9 +366,6 @@
338
366
  <optional>
339
367
  <ref name="section-title"/>
340
368
  </optional>
341
- <zeroOrMore>
342
- <ref name="termdocsource"/>
343
- </zeroOrMore>
344
369
  <choice>
345
370
  <oneOrMore>
346
371
  <ref name="term"/>
@@ -350,7 +375,7 @@
350
375
  <ref name="terms"/>
351
376
  </zeroOrMore>
352
377
  <optional>
353
- <ref name="symbols-abbrevs"/>
378
+ <ref name="definitions"/>
354
379
  </optional>
355
380
  </group>
356
381
  </choice>
@@ -594,42 +619,6 @@
594
619
  <ref name="paragraph"/>
595
620
  </element>
596
621
  </define>
597
- <define name="Clause-Section">
598
- <optional>
599
- <attribute name="id">
600
- <data type="ID"/>
601
- </attribute>
602
- </optional>
603
- <optional>
604
- <attribute name="inline-header">
605
- <data type="boolean"/>
606
- </attribute>
607
- </optional>
608
- <optional>
609
- <attribute name="obligation">
610
- <choice>
611
- <value>normative</value>
612
- <value>informative</value>
613
- </choice>
614
- </attribute>
615
- </optional>
616
- <optional>
617
- <ref name="section-title"/>
618
- </optional>
619
- <choice>
620
- <group>
621
- <oneOrMore>
622
- <ref name="BasicBlock"/>
623
- </oneOrMore>
624
- <zeroOrMore>
625
- <ref name="note"/>
626
- </zeroOrMore>
627
- </group>
628
- <oneOrMore>
629
- <ref name="clause-subsection"/>
630
- </oneOrMore>
631
- </choice>
632
- </define>
633
622
  </include>
634
623
  <!-- end overrides -->
635
624
  <!--
@@ -642,6 +631,9 @@
642
631
  <optional>
643
632
  <ref name="version"/>
644
633
  </optional>
634
+ <zeroOrMore>
635
+ <ref name="termdocsource"/>
636
+ </zeroOrMore>
645
637
  <ref name="foreword"/>
646
638
  <optional>
647
639
  <ref name="introduction"/>
@@ -653,7 +645,10 @@
653
645
  <ref name="annex"/>
654
646
  </zeroOrMore>
655
647
  <oneOrMore>
656
- <ref name="references"/>
648
+ <choice>
649
+ <ref name="references"/>
650
+ <ref name="reference-clause"/>
651
+ </choice>
657
652
  </oneOrMore>
658
653
  </element>
659
654
  </define>
@@ -691,11 +686,6 @@
691
686
  <ref name="Content-Section"/>
692
687
  </element>
693
688
  </define>
694
- <define name="draft">
695
- <element name="draft">
696
- <text/>
697
- </element>
698
- </define>
699
689
  <define name="stage">
700
690
  <element name="stage">
701
691
  <choice>
@@ -725,6 +715,11 @@
725
715
  </choice>
726
716
  </element>
727
717
  </define>
718
+ <define name="iteration">
719
+ <element name="iteration">
720
+ <data type="int"/>
721
+ </element>
722
+ </define>
728
723
  <define name="documentnumber">
729
724
  <element name="project-number">
730
725
  <optional>
@@ -838,7 +833,7 @@
838
833
  </element>
839
834
  </define>
840
835
  <define name="termdocsource">
841
- <element name="source">
836
+ <element name="termdocsource">
842
837
  <ref name="erefType"/>
843
838
  </element>
844
839
  </define>
@@ -847,4 +842,73 @@
847
842
  <text/>
848
843
  </element>
849
844
  </define>
845
+ <define name="term-clause">
846
+ <element name="clause">
847
+ <optional>
848
+ <attribute name="id">
849
+ <data type="ID"/>
850
+ </attribute>
851
+ </optional>
852
+ <optional>
853
+ <attribute name="inline-header">
854
+ <data type="boolean"/>
855
+ </attribute>
856
+ </optional>
857
+ <optional>
858
+ <attribute name="obligation">
859
+ <choice>
860
+ <value>normative</value>
861
+ <value>informative</value>
862
+ </choice>
863
+ </attribute>
864
+ </optional>
865
+ <optional>
866
+ <ref name="section-title"/>
867
+ </optional>
868
+ <choice>
869
+ <oneOrMore>
870
+ <ref name="term-clause"/>
871
+ </oneOrMore>
872
+ <zeroOrMore>
873
+ <choice>
874
+ <ref name="terms"/>
875
+ <ref name="definitions"/>
876
+ </choice>
877
+ </zeroOrMore>
878
+ </choice>
879
+ </element>
880
+ </define>
881
+ <define name="reference-clause">
882
+ <element name="clause">
883
+ <optional>
884
+ <attribute name="id">
885
+ <data type="ID"/>
886
+ </attribute>
887
+ </optional>
888
+ <optional>
889
+ <attribute name="inline-header">
890
+ <data type="boolean"/>
891
+ </attribute>
892
+ </optional>
893
+ <optional>
894
+ <attribute name="obligation">
895
+ <choice>
896
+ <value>normative</value>
897
+ <value>informative</value>
898
+ </choice>
899
+ </attribute>
900
+ </optional>
901
+ <optional>
902
+ <ref name="section-title"/>
903
+ </optional>
904
+ <choice>
905
+ <oneOrMore>
906
+ <ref name="reference-clause"/>
907
+ </oneOrMore>
908
+ <zeroOrMore>
909
+ <ref name="references"/>
910
+ </zeroOrMore>
911
+ </choice>
912
+ </element>
913
+ </define>
850
914
  </grammar>
@@ -77,8 +77,8 @@ module Asciidoctor
77
77
  xml.bibitem **attr_code(ref_attributes(m)) do |t|
78
78
  t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
79
79
  t.docidentifier "#{m[:code]}:All Parts"
80
- m[:year] and t.date **{ type: "published" } do |d|
81
- set_date_range(d, m[:year])
80
+ if m.named_captures.has_key?("year")
81
+ t.date **{ type: "published" } { |d| set_date_range(d, m[:year]) }
82
82
  end
83
83
  iso_publisher(t, m[:code])
84
84
  end
@@ -98,7 +98,7 @@ module Asciidoctor
98
98
  end
99
99
 
100
100
  def symbols_parse(attrs, xml, node)
101
- xml.symbols_abbrevs **attr_code(attrs) do |xml_section|
101
+ xml.definitions **attr_code(attrs) do |xml_section|
102
102
  xml_section << node.content
103
103
  end
104
104
  end
@@ -128,7 +128,7 @@ module Asciidoctor
128
128
  xml.terms **attr_code(attrs) do |section|
129
129
  section.title { |t| t << term_def_title(toplevel, node) }
130
130
  (s = node.attr("source")) && s.split(/,/).each do |s1|
131
- section.source(nil, **attr_code(target: s1, type: "inline"))
131
+ section.termdocsource(nil, **attr_code(target: s1, type: "inline"))
132
132
  end
133
133
  section << node.content
134
134
  end
@@ -32,7 +32,7 @@ module Asciidoctor
32
32
  "only contain a definition list".freeze
33
33
 
34
34
  def symbols_validate(root)
35
- f = root.xpath("//symbols-abbrevs")
35
+ f = root.xpath("//definitions")
36
36
  f.empty? && return
37
37
  (f.size == 1) || warn(ONE_SYMBOLS_WARNING)
38
38
  f.first.elements.each do |e|
@@ -74,18 +74,23 @@ module Asciidoctor
74
74
  "Terms and Definitions",
75
75
  val: [
76
76
  { tag: "terms", title: "Terms and Definitions" },
77
+ { tag: "clause", title: "Terms and Definitions" },
77
78
  {
78
79
  tag: "terms",
79
80
  title: "Terms, Definitions, Symbols and Abbreviated Terms",
80
81
  },
82
+ {
83
+ tag: "clause",
84
+ title: "Terms, Definitions, Symbols and Abbreviated Terms",
85
+ },
81
86
  ],
82
87
  },
83
88
  ].freeze
84
89
 
85
90
  SECTIONS_XPATH =
86
- " //foreword | //introduction | //sections/terms | "\
87
- "//symbols-abbrevs | "\
88
- "//sections/clause | ./references | ./annex".freeze
91
+ "//foreword | //introduction | //sections/terms | .//annex | "\
92
+ "//definitions | //sections/clause | //references[not(parent::clause)] | "\
93
+ "//clause[descendant::references][not(parent::clause)]".freeze
89
94
 
90
95
  def sections_sequence_validate(root)
91
96
  f = root.xpath(SECTIONS_XPATH)
@@ -98,7 +103,7 @@ module Asciidoctor
98
103
  end
99
104
  names = seqcheck(names, SEQ[3][:msg], SEQ[3][:val]) || return
100
105
  n = names.shift
101
- if n == { tag: "symbols-abbrevs", title: nil }
106
+ if n == { tag: "definitions", title: nil }
102
107
  n = names.shift || return
103
108
  end
104
109
  unless n
@@ -1,5 +1,5 @@
1
1
  module Asciidoctor
2
2
  module ISO
3
- VERSION = "0.7.2".freeze
3
+ VERSION = "0.7.3".freeze
4
4
  end
5
5
  end
@@ -36,7 +36,6 @@ RSpec.describe Asciidoctor::ISO do
36
36
  expect(File.exist?("test.doc")).to be true
37
37
  end
38
38
 
39
-
40
39
  it "processes default metadata" do
41
40
  expect(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)).to be_equivalent_to <<~'OUTPUT'
42
41
  = Document title
@@ -62,6 +61,7 @@ RSpec.describe Asciidoctor::ISO do
62
61
  :copyright-year: 2001
63
62
  :docstage: 10
64
63
  :docsubstage: 20
64
+ :iteration: 3
65
65
  :language: en
66
66
  :title-intro-en: Introduction
67
67
  :title-main-en: Main Title
@@ -69,6 +69,7 @@ RSpec.describe Asciidoctor::ISO do
69
69
  :title-intro-fr: Introduction Française
70
70
  :title-main-fr: Titre Principal
71
71
  :title-part-fr: Part du Titre
72
+ :library-ics: 1,2,3
72
73
  INPUT
73
74
  <?xml version="1.0" encoding="UTF-8"?>
74
75
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -105,6 +106,7 @@ RSpec.describe Asciidoctor::ISO do
105
106
  <status>
106
107
  <stage>10</stage>
107
108
  <substage>20</substage>
109
+ <iteration>3</iteration>
108
110
  </status>
109
111
  <copyright>
110
112
  <from>2001</from>
@@ -121,6 +123,9 @@ RSpec.describe Asciidoctor::ISO do
121
123
  <workgroup number="3" type="C">WG</workgroup>
122
124
  <secretariat>SECRETARIAT</secretariat>
123
125
  </editorialgroup>
126
+ <ics>1</ics>
127
+ <ics>2</ics>
128
+ <ics>3</ics>
124
129
  </bibdata><version>
125
130
  <edition>2</edition>
126
131
  <revision-date>2000-01-01</revision-date>
@@ -219,4 +224,67 @@ RSpec.describe Asciidoctor::ISO do
219
224
  OUTPUT
220
225
  end
221
226
 
227
+ it "uses default fonts" do
228
+ system "rm -f test.html"
229
+ Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)
230
+ = Document title
231
+ Author
232
+ :docfile: test.adoc
233
+ :novalid:
234
+ INPUT
235
+ html = File.read("test.html")
236
+ expect(html).to match(%r[p\.Sourcecode[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
237
+ expect(html).to match(%r[p\.Biblio[^{]+\{[^{]+font-family: "Cambria", serif;]m)
238
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Cambria", serif;]m)
239
+ end
240
+
241
+ it "uses Chinese fonts" do
242
+ system "rm -f test.html"
243
+ Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)
244
+ = Document title
245
+ Author
246
+ :docfile: test.adoc
247
+ :novalid:
248
+ :script: Hans
249
+ INPUT
250
+ html = File.read("test.html")
251
+ expect(html).to match(%r[p\.Sourcecode[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
252
+ expect(html).to match(%r[p\.Biblio[^{]+\{[^{]+font-family: "SimSun", serif;]m)
253
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "SimHei", sans-serif;]m)
254
+ end
255
+
256
+ it "uses specified fonts" do
257
+ system "rm -f test.html"
258
+ Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)
259
+ = Document title
260
+ Author
261
+ :docfile: test.adoc
262
+ :novalid:
263
+ :script: Hans
264
+ :body-font: Zapf Chancery
265
+ :header-font: Comic Sans
266
+ :monospace-font: Andale Mono
267
+ INPUT
268
+ html = File.read("test.html")
269
+ expect(html).to match(%r[p\.Sourcecode[^{]+\{[^{]+font-family: Andale Mono;]m)
270
+ expect(html).to match(%r[p\.Biblio[^{]+\{[^{]+font-family: Zapf Chancery;]m)
271
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: Comic Sans;]m)
272
+ end
273
+
274
+ it "strips MS-specific CSS" do
275
+ system "rm -f test.html"
276
+ system "rm -f test.doc"
277
+ Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true)
278
+ = Document title
279
+ Author
280
+ :docfile: test.adoc
281
+ :novalid:
282
+ INPUT
283
+ word = File.read("test.doc", encoding: "utf-8")
284
+ html = File.read("test.html", encoding: "utf-8")
285
+ expect(word).to match(%r[mso-style-name: "Intro Title";]m)
286
+ expect(html).not_to match(%r[mso-style-name: "Intro Title";]m)
287
+ end
288
+
289
+
222
290
  end