asciidoctor-iso 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ require "nokogiri"
2
+
3
+ module Asciidoctor
4
+ module ISO
5
+ module Validate
6
+ class << self
7
+ def title_validate(root)
8
+ if root.at("//title_en/title_intro").nil? &&
9
+ !root.at("//title_fr/title_intro").nil?
10
+ warn "No English Title Intro!"
11
+ end
12
+ if !root.at("//title_en/title_intro").nil? &&
13
+ root.at("//title_fr/title_intro").nil?
14
+ warn "No French Title Intro!"
15
+ end
16
+ if root.at("//title_en/title_part").nil? &&
17
+ !root.at("//title_fr/title_part").nil?
18
+ warn "No English Title Part!"
19
+ end
20
+ if !root.at("//title_en/title_part").nil? &&
21
+ root.at("//title_fr/title_part").nil?
22
+ warn "No French Title Part!"
23
+ end
24
+ end
25
+
26
+ def validate(doc)
27
+ filename = File.join(File.dirname(__FILE__), "validate.rng")
28
+ schema = Nokogiri::XML::RelaxNG(File.read(filename))
29
+ title_validate(doc.root)
30
+ schema.validate(doc).each do |error|
31
+ warn "RELAXNG Validation: #{error.message}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,444 @@
1
+ start = iso_standard
2
+
3
+ iso_standard =
4
+ element iso-standard {
5
+ front,
6
+ middle,
7
+ back?
8
+ }
9
+
10
+ front =
11
+ element front {
12
+ title,
13
+ documenttype,
14
+ documentstatus?,
15
+ id,
16
+ language,
17
+ version?,
18
+ author,
19
+ foreword,
20
+ introduction?
21
+ }
22
+
23
+ language =
24
+ element language {
25
+ ( "en" | "fr" )
26
+ }
27
+
28
+ version =
29
+ element version {
30
+ edition?,
31
+ revdate?,
32
+ copyright_year?
33
+ }
34
+
35
+ id =
36
+ element id {
37
+ documentnumber,
38
+ tc_documentnumber?,
39
+ ref_documentnumber?
40
+ }
41
+
42
+ author =
43
+ element author {
44
+ technical_committee,
45
+ subcommittee?,
46
+ workgroup?,
47
+ secretariat?
48
+ }
49
+
50
+ documenttype =
51
+ element documenttype {
52
+ ("international-standard" | "technical-specification" | "technical-report" | "publicly-available-specification" | "international-workshop-agreement" | "guide" )
53
+ }
54
+
55
+ documentstatus =
56
+ element documentstatus {
57
+ stage,
58
+ substage?
59
+ }
60
+
61
+ stage =
62
+ element stage {
63
+ ("00" | "10" | "20" | "30" | "40" | "50" | "60" | "90" | "95" )
64
+ }
65
+
66
+ substage =
67
+ element substage {
68
+ ("00" | "20" | "60" | "90" | "92" | "93" | "98" | "99" )
69
+ }
70
+
71
+ documentnumber =
72
+ element documentnumber {
73
+ attribute partnumber { text }?,
74
+ text
75
+ }
76
+
77
+ tc_documentnumber =
78
+ element tc_documentnumber {
79
+ text
80
+ }
81
+
82
+ ref_documentnumber =
83
+ element ref_documentnumber {
84
+ text
85
+ }
86
+
87
+ technical_committee =
88
+ element technical_committee {
89
+ attribute number { text }?,
90
+ text
91
+ }
92
+
93
+ subcommittee =
94
+ element subcommittee {
95
+ attribute number { text }?,
96
+ text
97
+ }
98
+
99
+ workgroup =
100
+ element workgroup {
101
+ attribute number { text }?,
102
+ text
103
+ }
104
+
105
+ secretariat =
106
+ element secretariat { text }
107
+
108
+ revdate =
109
+ element revdate { text }
110
+
111
+ copyright_year =
112
+ element copyright_year { text }
113
+
114
+ edition =
115
+ element edition { text }
116
+
117
+ title =
118
+ element title {title_en, title_fr}
119
+
120
+ title_en =
121
+ element en { title_intro?, title_main, title_part? }
122
+
123
+ title_fr =
124
+ element fr { title_intro?, title_main, title_part? }
125
+
126
+ title_intro =
127
+ element title_intro { text }
128
+
129
+ title_main =
130
+ element title_main { text }
131
+
132
+ title_part =
133
+ element title_part {
134
+ text
135
+ }
136
+
137
+ foreword =
138
+ element foreword {
139
+ ( para | table | note | formula | warning | ol | ul | dl | figure | quote | sourcecode | review_note )*
140
+ }
141
+
142
+ introduction =
143
+ element introduction {
144
+ attribute anchor { xsd:ID }?,
145
+ ( para | table | note | formula | warning | ol | ul | dl | figure | quote | sourcecode | review_note )*,
146
+ patent_notice?
147
+ }
148
+
149
+ patent_notice =
150
+ element patent_notice {
151
+ attribute anchor { xsd:ID }?,
152
+ para+
153
+ }
154
+
155
+ middle =
156
+ element middle {
157
+ scope, norm_ref, terms_defs, clause+
158
+ }
159
+
160
+ scope =
161
+ element scope {
162
+ attribute anchor { xsd:ID }?,
163
+ para+
164
+ }
165
+
166
+ norm_ref =
167
+ element norm_ref {
168
+ attribute anchor { xsd:ID }?,
169
+ # boilerplate
170
+ para,
171
+ iso_ref_title*
172
+ }
173
+
174
+ iso_ref_title =
175
+ element iso_ref_title {
176
+ attribute anchor { xsd:ID },
177
+ isocode, (isodate, date_footnote?)?, isotitle
178
+ }
179
+
180
+ isocode =
181
+ element isocode { text }
182
+
183
+ isodate =
184
+ element isodate { text }
185
+
186
+ date_footnote =
187
+ element date_footnote { text }
188
+
189
+ isotitle =
190
+ element isotitle { text }
191
+
192
+ terms_defs =
193
+ element terms_defs {
194
+ attribute anchor { xsd:ID }?,
195
+ # boilerplate
196
+ para, para, ul,
197
+ termdef+
198
+ }
199
+
200
+ termdef =
201
+ element termdef {
202
+ attribute anchor { xsd:ID }?,
203
+ term, admitted_term*, termsymbol?, deprecated_term*,
204
+ termdomain?, para, termnote*, termexample*, termref*
205
+ }
206
+
207
+ term =
208
+ element term { text }
209
+
210
+ admitted_term =
211
+ element admitted_term { text }
212
+
213
+ termsymbol =
214
+ element termsymbol { stem }
215
+
216
+ deprecated_term =
217
+ element deprecated_term { text }
218
+
219
+ termdomain =
220
+ element termdomain { text }
221
+
222
+ termnote =
223
+ element termnote { (text | xref | eref)* }
224
+
225
+ termexample =
226
+ element termexample { text }
227
+
228
+ termref =
229
+ element termref { xref, (isosection, modification?)? }
230
+
231
+ isosection =
232
+ element isosection { text }
233
+
234
+ modification =
235
+ element modification { text }
236
+
237
+ clause =
238
+ element clause {
239
+ attribute anchor { xsd:ID }?,
240
+ tname?,
241
+ ( para | table | note | formula | warning | ol | ul | dl | figure | quote | sourcecode | review_note )*,
242
+ clause*
243
+ }
244
+
245
+ quote =
246
+ element quote {
247
+ attribute anchor { xsd:ID }?,
248
+ ( para | table | note | formula | warning | ol | ul | dl | figure | quote | sourcecode | review_note )*
249
+ }
250
+
251
+
252
+ back =
253
+ element back {
254
+ annex*,
255
+ bibliography
256
+ }
257
+
258
+ annex =
259
+ element annex {
260
+ attribute anchor { xsd:ID }?,
261
+ tname?,
262
+ ( para | table | note | formula | warning | ol | ul | dl | figure | quote | sourcecode | review_note )*,
263
+ clause*
264
+ }
265
+
266
+ bibliography =
267
+ element bibliography {
268
+ attribute anchor { xsd:ID }?,
269
+ (iso_ref_title | reference)+
270
+ }
271
+
272
+ reference =
273
+ element reference { ref, para }
274
+
275
+ ref =
276
+ element ref {
277
+ attribute anchor { xsd:ID }?,
278
+ text
279
+ }
280
+
281
+ para =
282
+ element p {
283
+ (text | em | eref | strong | stem | sub | sup | tt | xref | fn | br)*
284
+ }
285
+
286
+ figure =
287
+ element figure {
288
+ attribute src { text }?,
289
+ attribute anchor { xsd:ID }?,
290
+ tname?,
291
+ dl?,
292
+ figure*
293
+ }
294
+
295
+ sourcecode =
296
+ element sourcecode {
297
+ attribute anchor { xsd:ID }?,
298
+ tname?,
299
+ ( text | callout )*,
300
+ colist?
301
+ }
302
+
303
+ review_note =
304
+ element review_note {
305
+ attribute color { text }?,
306
+ text
307
+ }
308
+
309
+ callout =
310
+ element callout {
311
+ xsd:ID
312
+ }
313
+
314
+ colist =
315
+ element colist {
316
+ annotation+
317
+ }
318
+
319
+ annotation =
320
+ element annotation {
321
+ attribute anchor { xsd:ID }?,
322
+ text
323
+ }
324
+
325
+ fn =
326
+ element fn {
327
+ (text | em | eref | stem | strong | sub | sup | tt | xref | br)*
328
+ }
329
+
330
+ ol =
331
+ element ol {
332
+ attribute type { text },
333
+ li+
334
+ }
335
+
336
+ ul =
337
+ element ul { li+ }
338
+
339
+ li =
340
+ element li {
341
+ ( para | table | note | formula | warning | ol | ul | dl | quote | sourcecode | review_note )+
342
+ }
343
+
344
+ dl =
345
+ element dl {
346
+ (dt, dd)+
347
+ }
348
+
349
+ dt =
350
+ element dt {
351
+ (text | em | eref | stem | strong | sub | sup | tt | xref | br)
352
+ }
353
+
354
+ dd =
355
+ element dd {
356
+ ( para | table | note | formula | warning | ol | ul | dl | quote | sourcecode | review_note )*
357
+ }
358
+
359
+ note =
360
+ element note { para+ }
361
+
362
+ warning =
363
+ element warning { para+ }
364
+
365
+ formula =
366
+ element formula {
367
+ attribute anchor { xsd:ID }?,
368
+ stem,
369
+ dl?
370
+ }
371
+
372
+ xref =
373
+ element xref {
374
+ attribute format { "footnote" | "inline" }?,
375
+ attribute target { text },
376
+ ( text | iso_ref )
377
+ }
378
+
379
+ iso_ref =
380
+ element iso_ref { isocode, (isodate, (isosection?)?)? }
381
+
382
+ eref =
383
+ element eref {
384
+ attribute target { text },
385
+ text
386
+ }
387
+
388
+ br =
389
+ element br { empty }
390
+
391
+ em =
392
+ element em { text }
393
+
394
+ strong =
395
+ element strong { text }
396
+
397
+ stem =
398
+ element stem { text }
399
+
400
+ sub =
401
+ element sub { text }
402
+
403
+ sup =
404
+ element sup { text }
405
+
406
+ tt =
407
+ element tt { text }
408
+
409
+ table =
410
+ element table {
411
+ attribute anchor { xsd:ID }?,
412
+ tname?, thead?, tbody, tfoot?, note*
413
+ }
414
+
415
+ tname =
416
+ element name { text }
417
+
418
+ thead =
419
+ element thead { tr+ }
420
+
421
+ tbody =
422
+ element tbody { tr+ }
423
+
424
+ tfoot =
425
+ element tfoot { tr+ }
426
+
427
+ tr =
428
+ element tr { (td | th)+ }
429
+
430
+ th =
431
+ element th {
432
+ attribute colspan { text }?,
433
+ attribute rowspan { text }?,
434
+ attribute align { text }?,
435
+ (text | em | eref | stem | strong | sub | sup | tt | xref | fn | br | para)*
436
+ }
437
+
438
+ td =
439
+ element td {
440
+ attribute colspan { text }?,
441
+ attribute rowspan { text }?,
442
+ attribute align { text }?,
443
+ (text | em | eref | stem | strong | sub | sup | tt | xref | fn | br | para)*
444
+ }