metanorma-gb 1.3.25 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9efcb324d7f28f302f1073443d496b76765b20d46fe99cadc7870baec271b853
4
- data.tar.gz: ad193685cdf7e18f9a026738d4a50ca1186cb3ddedb273e6af01a220c57d0381
3
+ metadata.gz: 8174bc7b39fa8089f62c94500ef94424ecbc48ac4ebe78022873307e2b619da5
4
+ data.tar.gz: 88b8c6ba983a7f49648edcf1839536bd947784b549bd29a9ced0a9bf2496d9e6
5
5
  SHA512:
6
- metadata.gz: 75c3dbf1aa5b18fa3d4a88e9b8a9093d7f75265c11990fdb451d11a68c1df1ea2acd4c211d4a4881e7bcc951c8f27daa030d9ba8b477a21b3e2e7e276c836efb
7
- data.tar.gz: 2d77b43ed7a34a62e3ee3bec617bd6db6e2679151590e2b9c22aa54e0f955e3168acea78c1de95317832cebfe0e36a39da9cec518e9b80011a193c09b88e27e6
6
+ metadata.gz: e6c702a9ea7b33d36a7d2ed08a12966472c475268037a19ca1f94a272d34a63a58b14090fb92b9f7ee066b6d879cabf01f35eacd91b4d794b62a71f4721b94ab
7
+ data.tar.gz: 6da57b1874fbff0ea896bd645d930a44c161647bc6a392848d5cb9244d7e7e8c6373ea08de696d44bfb1e4c6ffae4f6da9134e0e552a3b05368f3de34f9a07e0
@@ -29,7 +29,6 @@ jobs:
29
29
  uses: actions/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
- architecture: 'x64'
33
32
  - name: Update gems
34
33
  run: |
35
34
  sudo gem install bundler --force
@@ -31,7 +31,6 @@ jobs:
31
31
  uses: actions/setup-ruby@v1
32
32
  with:
33
33
  ruby-version: ${{ matrix.ruby }}
34
- architecture: 'x64'
35
34
  - name: Update gems
36
35
  run: |
37
36
  gem install bundler
@@ -39,15 +38,19 @@ jobs:
39
38
  - name: Run specs
40
39
  run: |
41
40
  bundle exec rake
42
- - name: Trigger dependent repositories
43
- if: github.ref == 'refs/heads/master' && matrix.ruby == '2.6'
41
+ - name: Trigger repositories
42
+ if: matrix.ruby == '2.6'
44
43
  env:
45
- GH_USERNAME: ${{ secrets.PAT_USERNAME }}
46
- GH_ACCESS_TOKEN: ${{ secrets.PAT_TOKEN }}
44
+ GH_USERNAME: metanorma-ci
45
+ GH_ACCESS_TOKEN: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
47
46
  run: |
48
47
  curl -LO --retry 3 https://raw.githubusercontent.com/metanorma/metanorma-build-scripts/master/trigger-gh-actions.sh
49
48
  [[ -f ".github/workflows/dependent_repos.env" ]] && source .github/workflows/dependent_repos.env
50
- for repo in $DEPENDENT_REPOS
49
+ CLIENT_PAYLOAD=$(cat <<EOF
50
+ "{ "ref": "${GITHUB_REF}", "repo": "${GITHUB_REPOSITORY}" }"
51
+ EOF
52
+ )
53
+ for repo in $REPOS
51
54
  do
52
- sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY "{ \"ref\": \"${GITHUB_REF}\" }"
55
+ sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY "$CLIENT_PAYLOAD"
53
56
  done
@@ -29,7 +29,6 @@ jobs:
29
29
  uses: actions/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
- architecture: 'x64'
33
32
  - name: Update gems
34
33
  shell: pwsh
35
34
  run: |
data/Gemfile CHANGED
@@ -3,7 +3,6 @@ Encoding.default_internal = Encoding::UTF_8
3
3
 
4
4
  source "https://rubygems.org"
5
5
  git_source(:github) { |repo| "https://github.com/#{repo}" }
6
-
7
6
  gemspec
8
7
 
9
8
  if File.exist? 'Gemfile.devel'
data/Rakefile CHANGED
@@ -1,6 +1,23 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require 'isodoc/gem_tasks'
3
4
 
5
+ module IsoDoc
6
+ module GemTasks
7
+ module_function
8
+
9
+ def fonts_placeholder
10
+ <<~TEXT
11
+ $bodyfont: '{{bodyfont}}';
12
+ $headerfont: '{{headerfont}}';
13
+ $monospacefont: '{{monospacefont}}';
14
+ $titlefont: '{{titlefont}}';
15
+ TEXT
16
+ end
17
+ end
18
+ end
19
+
20
+ IsoDoc::GemTasks.install
4
21
  RSpec::Core::RakeTask.new(:spec)
5
22
 
6
23
  task :default => :spec
@@ -532,7 +532,7 @@
532
532
  </define>
533
533
  <define name="LocalityType">
534
534
  <data type="string">
535
- <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|locality:[a-zA-Z0-9_]+</param>
535
+ <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
536
536
  </data>
537
537
  </define>
538
538
  <define name="referenceFrom">
@@ -661,9 +661,9 @@
661
661
  <optional>
662
662
  <ref name="status"/>
663
663
  </optional>
664
- <optional>
664
+ <zeroOrMore>
665
665
  <ref name="copyright"/>
666
- </optional>
666
+ </zeroOrMore>
667
667
  <zeroOrMore>
668
668
  <ref name="docrelation"/>
669
669
  </zeroOrMore>
@@ -1024,6 +1024,14 @@
1024
1024
  <oneOrMore>
1025
1025
  <ref name="owner"/>
1026
1026
  </oneOrMore>
1027
+ <optional>
1028
+ <ref name="copyright_scope"/>
1029
+ </optional>
1030
+ </element>
1031
+ </define>
1032
+ <define name="copyright_scope">
1033
+ <element name="scope">
1034
+ <text/>
1027
1035
  </element>
1028
1036
  </define>
1029
1037
  <define name="from">
@@ -1,8 +1,10 @@
1
1
  require "asciidoctor"
2
2
  require "asciidoctor/iso/converter"
3
3
  require "metanorma/gb/version"
4
- require "isodoc/gb/gbconvert"
5
- require "isodoc/gb/gbwordconvert"
4
+ require "isodoc/gb/common"
5
+ require "isodoc/gb/word_convert"
6
+ require "isodoc/gb/pdf_convert"
7
+ require "isodoc/gb/presentation_xml_convert"
6
8
  require "gb_agencies"
7
9
  require_relative "./section_input.rb"
8
10
  require_relative "./front.rb"
@@ -58,20 +60,24 @@ module Asciidoctor
58
60
  IsoDoc::Gb::WordConvert.new(doc_extract_attributes(node))
59
61
  end
60
62
 
61
- def document(node)
62
- init(node)
63
- ret = makexml(node).to_xml(indent: 2)
64
- unless node.attr("nodoc") || !node.attr("docfile")
65
- filename = node.attr("docfile").gsub(/\.adoc$/, "").gsub(%r{^.*/}, "")
66
- File.open(filename + ".xml", "w:utf-8") { |f| f.write(ret) }
67
- html_compliant_converter(node).convert(filename + ".xml")
68
- FileUtils.mv "#{filename}.html", "#{filename}_compliant.html"
69
- html_converter(node).convert(filename + ".xml")
70
- doc_converter(node).convert(filename + ".xml")
71
- end
72
- @log.write(@localdir + @filename + ".err") unless @novalid
73
- @files_to_delete.each { |f| FileUtils.rm f }
74
- ret
63
+ def pdf_converter(node)
64
+ return nil if node.attr("no-pdf")
65
+ node.nil? ? IsoDoc::Gb::PdfConvert.new({}) :
66
+ IsoDoc::Gb::PdfConvert.new(doc_extract_attributes(node))
67
+ end
68
+
69
+ def presentation_xml_converter(node)
70
+ node.nil? ? IsoDoc::Gb::PresentationXMLConvert.new({}) :
71
+ IsoDoc::Gb::PresentationXMLConvert.new(html_extract_attributes(node))
72
+ end
73
+
74
+ def outputs(node, ret)
75
+ File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
76
+ presentation_xml_converter(node).convert(@filename + ".xml")
77
+ html_compliant_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}_compliant.html")
78
+ html_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.html")
79
+ doc_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.doc")
80
+ pdf_converter(node)&.convert(@filename + ".presentation.xml", nil, false, "#{@filename}.pdf")
75
81
  end
76
82
 
77
83
  def termdef_cleanup(xmldoc)
@@ -1,24 +1,8 @@
1
+ require_relative "front_id"
2
+
1
3
  module Asciidoctor
2
4
  module Gb
3
5
  class Converter < ISO::Converter
4
- STAGE_ABBRS_CN = {
5
- "00": "新工作项目建议",
6
- "10": "新工作项目",
7
- "20": "标准草案工作组讨论稿",
8
- "30": "标准草案征求意见稿",
9
- "40": "标准草案送审稿",
10
- "50": "标准草案报批稿",
11
- "60": "国家标准",
12
- "90": "(Review)",
13
- "95": "(Withdrawal)",
14
- }.freeze
15
-
16
- def stage_name(stage, substage)
17
- return "Proof" if stage == "60" && substage == "00"
18
- @language == "en" ?
19
- STAGE_NAMES[stage.to_sym] : STAGE_ABBRS_CN[stage.to_sym]
20
- end
21
-
22
6
  def doctype(node)
23
7
  type = node.attr("mandate") || "mandatory"
24
8
  type = "standard" if type == "mandatory"
@@ -192,40 +176,6 @@ module Asciidoctor
192
176
  metadata_contributor1(node, xml, "issuer", "issuer")
193
177
  end
194
178
 
195
- def iso_id(node, xml)
196
- return unless node.attr("docnumber")
197
- part = node.attr("partnumber")
198
- dn = add_id_parts(node.attr("docnumber"), part, nil)
199
- dn = id_stage_prefix(dn, node)
200
- xml.docidentifier dn, **attr_code(type: "gb")
201
- end
202
-
203
- def structured_id(node, xml)
204
- part = node.attr("partnumber")
205
- xml.structuredidentifier do |i|
206
- i.project_number node.attr("docnumber"),
207
- **attr_code(part: part)
208
- end
209
- end
210
-
211
- def add_id_parts(dn, part, subpart)
212
- dn += ".#{part}" if part
213
- dn += ".#{subpart}" if subpart
214
- dn
215
- end
216
-
217
- def id_stage_prefix(dn, node)
218
- if node.attr("docstage") && node.attr("docstage").to_i < 60
219
- abbr = IsoDoc::Gb::Metadata.new("en", "Latn", {}).
220
- status_abbrev(node.attr("docstage"), nil, node.attr("iteration"),
221
- node.attr("draft"), node.attr("doctype"))
222
- dn = "/#{abbr} #{dn}" # prefixes added in cleanup
223
- else
224
- dn += "-#{node.attr("copyright-year")}" if node.attr("copyright-year")
225
- end
226
- dn
227
- end
228
-
229
179
  def metadata_language(node, xml)
230
180
  xml.language (node.attr("language") || "zh")
231
181
  end
@@ -0,0 +1,57 @@
1
+ module Asciidoctor
2
+ module Gb
3
+ class Converter < ISO::Converter
4
+ STAGE_ABBRS_CN = {
5
+ "00": "新工作项目建议",
6
+ "10": "新工作项目",
7
+ "20": "标准草案工作组讨论稿",
8
+ "30": "标准草案征求意见稿",
9
+ "40": "标准草案送审稿",
10
+ "50": "标准草案报批稿",
11
+ "60": "国家标准",
12
+ "90": "(Review)",
13
+ "95": "(Withdrawal)",
14
+ }.freeze
15
+
16
+ def stage_name(stage, substage)
17
+ return "Proof" if stage == "60" && substage == "00"
18
+ @lang == "en" ?
19
+ STAGE_NAMES[stage.to_sym] : STAGE_ABBRS_CN[stage.to_sym]
20
+ end
21
+
22
+ def iso_id(node, xml)
23
+ return unless node.attr("docnumber")
24
+ part = node.attr("partnumber")
25
+ dn = add_id_parts(node.attr("docnumber"), part, nil)
26
+ dn = id_stage_prefix(dn, node)
27
+ xml.docidentifier dn, **attr_code(type: "gb")
28
+ end
29
+
30
+ def structured_id(node, xml)
31
+ part = node.attr("partnumber")
32
+ xml.structuredidentifier do |i|
33
+ i.project_number node.attr("docnumber"),
34
+ **attr_code(part: part)
35
+ end
36
+ end
37
+
38
+ def add_id_parts(dn, part, subpart)
39
+ dn += ".#{part}" if part
40
+ dn += ".#{subpart}" if subpart
41
+ dn
42
+ end
43
+
44
+ def id_stage_prefix(dn, node)
45
+ if node.attr("docstage") && node.attr("docstage").to_i < 60
46
+ abbr = IsoDoc::Gb::Metadata.new("en", "Latn", {}).
47
+ status_abbrev(node.attr("docstage"), nil, node.attr("iteration"),
48
+ node.attr("draft"), node.attr("doctype"))
49
+ dn = "/#{abbr} #{dn}" # prefixes added in cleanup
50
+ else
51
+ dn += "-#{node.attr("copyright-year")}" if node.attr("copyright-year")
52
+ end
53
+ dn
54
+ end
55
+ end
56
+ end
57
+ end
@@ -53,9 +53,96 @@
53
53
  <optional>
54
54
  <attribute name="alt"/>
55
55
  </optional>
56
+ <optional>
57
+ <attribute name="case">
58
+ <choice>
59
+ <value>capital</value>
60
+ <value>lowercase</value>
61
+ </choice>
62
+ </attribute>
63
+ </optional>
56
64
  <text/>
57
65
  </element>
58
66
  </define>
67
+ <define name="ul">
68
+ <element name="ul">
69
+ <attribute name="id">
70
+ <data type="ID"/>
71
+ </attribute>
72
+ <optional>
73
+ <attribute name="keep-with-next">
74
+ <data type="boolean"/>
75
+ </attribute>
76
+ </optional>
77
+ <optional>
78
+ <attribute name="keep-lines-together">
79
+ <data type="boolean"/>
80
+ </attribute>
81
+ </optional>
82
+ <oneOrMore>
83
+ <ref name="li"/>
84
+ </oneOrMore>
85
+ <zeroOrMore>
86
+ <ref name="note"/>
87
+ </zeroOrMore>
88
+ </element>
89
+ </define>
90
+ <define name="ol">
91
+ <element name="ol">
92
+ <attribute name="id">
93
+ <data type="ID"/>
94
+ </attribute>
95
+ <optional>
96
+ <attribute name="keep-with-next">
97
+ <data type="boolean"/>
98
+ </attribute>
99
+ </optional>
100
+ <optional>
101
+ <attribute name="keep-lines-together">
102
+ <data type="boolean"/>
103
+ </attribute>
104
+ </optional>
105
+ <attribute name="type">
106
+ <choice>
107
+ <value>roman</value>
108
+ <value>alphabet</value>
109
+ <value>arabic</value>
110
+ <value>roman_upper</value>
111
+ <value>alphabet_upper</value>
112
+ </choice>
113
+ </attribute>
114
+ <oneOrMore>
115
+ <ref name="li"/>
116
+ </oneOrMore>
117
+ <zeroOrMore>
118
+ <ref name="note"/>
119
+ </zeroOrMore>
120
+ </element>
121
+ </define>
122
+ <define name="dl">
123
+ <element name="dl">
124
+ <attribute name="id">
125
+ <data type="ID"/>
126
+ </attribute>
127
+ <optional>
128
+ <attribute name="keep-with-next">
129
+ <data type="boolean"/>
130
+ </attribute>
131
+ </optional>
132
+ <optional>
133
+ <attribute name="keep-lines-together">
134
+ <data type="boolean"/>
135
+ </attribute>
136
+ </optional>
137
+ <oneOrMore>
138
+ <ref name="dt"/>
139
+ <ref name="dd"/>
140
+ </oneOrMore>
141
+ <zeroOrMore>
142
+ <ref name="note"/>
143
+ </zeroOrMore>
144
+ </element>
145
+ </define>
59
146
  <define name="example">
60
147
  <element name="example">
61
148
  <attribute name="id">
@@ -69,6 +156,19 @@
69
156
  <optional>
70
157
  <attribute name="subsequence"/>
71
158
  </optional>
159
+ <optional>
160
+ <attribute name="number"/>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-with-next">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
167
+ <optional>
168
+ <attribute name="keep-lines-together">
169
+ <data type="boolean"/>
170
+ </attribute>
171
+ </optional>
72
172
  <optional>
73
173
  <ref name="tname"/>
74
174
  </optional>
@@ -89,6 +189,296 @@
89
189
  </zeroOrMore>
90
190
  </element>
91
191
  </define>
192
+ <define name="table">
193
+ <element name="table">
194
+ <attribute name="id">
195
+ <data type="ID"/>
196
+ </attribute>
197
+ <optional>
198
+ <attribute name="unnumbered">
199
+ <data type="boolean"/>
200
+ </attribute>
201
+ </optional>
202
+ <optional>
203
+ <attribute name="number"/>
204
+ </optional>
205
+ <optional>
206
+ <attribute name="subsequence"/>
207
+ </optional>
208
+ <optional>
209
+ <attribute name="alt"/>
210
+ </optional>
211
+ <optional>
212
+ <attribute name="summary"/>
213
+ </optional>
214
+ <optional>
215
+ <attribute name="uri">
216
+ <data type="anyURI"/>
217
+ </attribute>
218
+ </optional>
219
+ <optional>
220
+ <attribute name="keep-with-next">
221
+ <data type="boolean"/>
222
+ </attribute>
223
+ </optional>
224
+ <optional>
225
+ <attribute name="keep-lines-together">
226
+ <data type="boolean"/>
227
+ </attribute>
228
+ </optional>
229
+ <optional>
230
+ <ref name="tname"/>
231
+ </optional>
232
+ <optional>
233
+ <ref name="thead"/>
234
+ </optional>
235
+ <ref name="tbody"/>
236
+ <optional>
237
+ <ref name="tfoot"/>
238
+ </optional>
239
+ <zeroOrMore>
240
+ <ref name="table-note"/>
241
+ </zeroOrMore>
242
+ <optional>
243
+ <ref name="dl"/>
244
+ </optional>
245
+ </element>
246
+ </define>
247
+ <define name="figure">
248
+ <element name="figure">
249
+ <attribute name="id">
250
+ <data type="ID"/>
251
+ </attribute>
252
+ <optional>
253
+ <attribute name="unnumbered">
254
+ <data type="boolean"/>
255
+ </attribute>
256
+ </optional>
257
+ <optional>
258
+ <attribute name="number"/>
259
+ </optional>
260
+ <optional>
261
+ <attribute name="subsequence"/>
262
+ </optional>
263
+ <optional>
264
+ <attribute name="keep-with-next">
265
+ <data type="boolean"/>
266
+ </attribute>
267
+ </optional>
268
+ <optional>
269
+ <attribute name="keep-lines-together">
270
+ <data type="boolean"/>
271
+ </attribute>
272
+ </optional>
273
+ <optional>
274
+ <attribute name="class"/>
275
+ </optional>
276
+ <optional>
277
+ <ref name="source"/>
278
+ </optional>
279
+ <optional>
280
+ <ref name="tname"/>
281
+ </optional>
282
+ <choice>
283
+ <ref name="image"/>
284
+ <ref name="video"/>
285
+ <ref name="audio"/>
286
+ <ref name="pre"/>
287
+ <oneOrMore>
288
+ <ref name="paragraph-with-footnote"/>
289
+ </oneOrMore>
290
+ <zeroOrMore>
291
+ <ref name="figure"/>
292
+ </zeroOrMore>
293
+ </choice>
294
+ <zeroOrMore>
295
+ <ref name="fn"/>
296
+ </zeroOrMore>
297
+ <optional>
298
+ <ref name="dl"/>
299
+ </optional>
300
+ <zeroOrMore>
301
+ <ref name="note"/>
302
+ </zeroOrMore>
303
+ </element>
304
+ </define>
305
+ <define name="sourcecode">
306
+ <element name="sourcecode">
307
+ <attribute name="id">
308
+ <data type="ID"/>
309
+ </attribute>
310
+ <optional>
311
+ <attribute name="unnumbered">
312
+ <data type="boolean"/>
313
+ </attribute>
314
+ </optional>
315
+ <optional>
316
+ <attribute name="number"/>
317
+ </optional>
318
+ <optional>
319
+ <attribute name="subsequence"/>
320
+ </optional>
321
+ <optional>
322
+ <attribute name="keep-with-next">
323
+ <data type="boolean"/>
324
+ </attribute>
325
+ </optional>
326
+ <optional>
327
+ <attribute name="keep-lines-together">
328
+ <data type="boolean"/>
329
+ </attribute>
330
+ </optional>
331
+ <optional>
332
+ <attribute name="lang"/>
333
+ </optional>
334
+ <optional>
335
+ <ref name="tname"/>
336
+ </optional>
337
+ <oneOrMore>
338
+ <choice>
339
+ <text/>
340
+ <ref name="callout"/>
341
+ </choice>
342
+ </oneOrMore>
343
+ <zeroOrMore>
344
+ <ref name="annotation"/>
345
+ </zeroOrMore>
346
+ <zeroOrMore>
347
+ <ref name="note"/>
348
+ </zeroOrMore>
349
+ </element>
350
+ </define>
351
+ <define name="formula">
352
+ <element name="formula">
353
+ <attribute name="id">
354
+ <data type="ID"/>
355
+ </attribute>
356
+ <optional>
357
+ <attribute name="unnumbered">
358
+ <data type="boolean"/>
359
+ </attribute>
360
+ </optional>
361
+ <optional>
362
+ <attribute name="number"/>
363
+ </optional>
364
+ <optional>
365
+ <attribute name="subsequence"/>
366
+ </optional>
367
+ <optional>
368
+ <attribute name="keep-with-next">
369
+ <data type="boolean"/>
370
+ </attribute>
371
+ </optional>
372
+ <optional>
373
+ <attribute name="keep-lines-together">
374
+ <data type="boolean"/>
375
+ </attribute>
376
+ </optional>
377
+ <optional>
378
+ <attribute name="inequality">
379
+ <data type="boolean"/>
380
+ </attribute>
381
+ </optional>
382
+ <ref name="stem"/>
383
+ <optional>
384
+ <ref name="dl"/>
385
+ </optional>
386
+ <zeroOrMore>
387
+ <ref name="note"/>
388
+ </zeroOrMore>
389
+ </element>
390
+ </define>
391
+ <define name="ParagraphType">
392
+ <attribute name="id">
393
+ <data type="ID"/>
394
+ </attribute>
395
+ <optional>
396
+ <attribute name="align">
397
+ <ref name="Alignments"/>
398
+ </attribute>
399
+ </optional>
400
+ <optional>
401
+ <attribute name="keep-with-next">
402
+ <data type="boolean"/>
403
+ </attribute>
404
+ </optional>
405
+ <optional>
406
+ <attribute name="keep-lines-together">
407
+ <data type="boolean"/>
408
+ </attribute>
409
+ </optional>
410
+ <zeroOrMore>
411
+ <ref name="TextElement"/>
412
+ </zeroOrMore>
413
+ <zeroOrMore>
414
+ <ref name="note"/>
415
+ </zeroOrMore>
416
+ </define>
417
+ <define name="paragraph-with-footnote">
418
+ <element name="p">
419
+ <attribute name="id">
420
+ <data type="ID"/>
421
+ </attribute>
422
+ <optional>
423
+ <attribute name="align">
424
+ <ref name="Alignments"/>
425
+ </attribute>
426
+ </optional>
427
+ <optional>
428
+ <attribute name="keep-with-next">
429
+ <data type="boolean"/>
430
+ </attribute>
431
+ </optional>
432
+ <optional>
433
+ <attribute name="keep-lines-together">
434
+ <data type="boolean"/>
435
+ </attribute>
436
+ </optional>
437
+ <zeroOrMore>
438
+ <choice>
439
+ <ref name="TextElement"/>
440
+ <ref name="fn"/>
441
+ </choice>
442
+ </zeroOrMore>
443
+ <zeroOrMore>
444
+ <ref name="note"/>
445
+ </zeroOrMore>
446
+ </element>
447
+ </define>
448
+ <define name="quote">
449
+ <element name="quote">
450
+ <attribute name="id">
451
+ <data type="ID"/>
452
+ </attribute>
453
+ <optional>
454
+ <attribute name="alignment">
455
+ <ref name="Alignments"/>
456
+ </attribute>
457
+ </optional>
458
+ <optional>
459
+ <attribute name="keep-with-next">
460
+ <data type="boolean"/>
461
+ </attribute>
462
+ </optional>
463
+ <optional>
464
+ <attribute name="keep-lines-together">
465
+ <data type="boolean"/>
466
+ </attribute>
467
+ </optional>
468
+ <optional>
469
+ <ref name="quote-source"/>
470
+ </optional>
471
+ <optional>
472
+ <ref name="quote-author"/>
473
+ </optional>
474
+ <oneOrMore>
475
+ <ref name="paragraph-with-footnote"/>
476
+ </oneOrMore>
477
+ <zeroOrMore>
478
+ <ref name="note"/>
479
+ </zeroOrMore>
480
+ </element>
481
+ </define>
92
482
  <define name="BibDataExtensionType">
93
483
  <ref name="doctype"/>
94
484
  <optional>
@@ -157,6 +547,30 @@
157
547
  <attribute name="id">
158
548
  <data type="ID"/>
159
549
  </attribute>
550
+ <optional>
551
+ <attribute name="unnumbered">
552
+ <data type="boolean"/>
553
+ </attribute>
554
+ </optional>
555
+ <optional>
556
+ <attribute name="number"/>
557
+ </optional>
558
+ <optional>
559
+ <attribute name="subsequence"/>
560
+ </optional>
561
+ <optional>
562
+ <attribute name="keep-with-next">
563
+ <data type="boolean"/>
564
+ </attribute>
565
+ </optional>
566
+ <optional>
567
+ <attribute name="keep-lines-together">
568
+ <data type="boolean"/>
569
+ </attribute>
570
+ </optional>
571
+ <optional>
572
+ <attribute name="type"/>
573
+ </optional>
160
574
  <oneOrMore>
161
575
  <choice>
162
576
  <ref name="paragraph"/>
@@ -902,7 +1316,36 @@
902
1316
  <attribute name="id">
903
1317
  <data type="ID"/>
904
1318
  </attribute>
905
- <ref name="paragraph"/>
1319
+ <optional>
1320
+ <attribute name="unnumbered">
1321
+ <data type="boolean"/>
1322
+ </attribute>
1323
+ </optional>
1324
+ <optional>
1325
+ <attribute name="number"/>
1326
+ </optional>
1327
+ <optional>
1328
+ <attribute name="subsequence"/>
1329
+ </optional>
1330
+ <optional>
1331
+ <attribute name="keep-with-next">
1332
+ <data type="boolean"/>
1333
+ </attribute>
1334
+ </optional>
1335
+ <optional>
1336
+ <attribute name="keep-lines-together">
1337
+ <data type="boolean"/>
1338
+ </attribute>
1339
+ </optional>
1340
+ <oneOrMore>
1341
+ <choice>
1342
+ <ref name="paragraph"/>
1343
+ <ref name="ul"/>
1344
+ <ref name="ol"/>
1345
+ <ref name="dl"/>
1346
+ <ref name="formula"/>
1347
+ </choice>
1348
+ </oneOrMore>
906
1349
  </element>
907
1350
  </define>
908
1351
  <define name="termexample">