metanorma-iso 1.3.20 → 1.3.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +10 -10
  3. data/.github/workflows/ubuntu.yml +11 -11
  4. data/.github/workflows/windows.yml +11 -12
  5. data/Gemfile +2 -0
  6. data/README.adoc +3 -2
  7. data/lib/asciidoctor/iso/base.rb +17 -1
  8. data/lib/asciidoctor/iso/biblio.rng +131 -46
  9. data/lib/asciidoctor/iso/cleanup.rb +19 -2
  10. data/lib/asciidoctor/iso/front.rb +116 -17
  11. data/lib/asciidoctor/iso/isodoc.rng +32 -4
  12. data/lib/asciidoctor/iso/isostandard-amd.rng +98 -0
  13. data/lib/asciidoctor/iso/isostandard.rng +10 -0
  14. data/lib/asciidoctor/iso/macros.rb +21 -0
  15. data/lib/asciidoctor/iso/section.rb +18 -32
  16. data/lib/asciidoctor/iso/term_lookup_cleanup.rb +90 -0
  17. data/lib/asciidoctor/iso/validate.rb +41 -21
  18. data/lib/asciidoctor/iso/validate_section.rb +2 -2
  19. data/lib/asciidoctor/iso/validate_style.rb +1 -1
  20. data/lib/isodoc/iso/base_convert.rb +57 -41
  21. data/lib/isodoc/iso/html/header.html +5 -5
  22. data/lib/isodoc/iso/html/html_iso_titlepage.html +18 -18
  23. data/lib/isodoc/iso/html/isodoc.scss +28 -28
  24. data/lib/isodoc/iso/html/scripts.html +23 -21
  25. data/lib/isodoc/iso/html/style-human.scss +259 -423
  26. data/lib/isodoc/iso/html/style-iso.scss +151 -382
  27. data/lib/isodoc/iso/html/word_iso_titlepage.html +23 -2
  28. data/lib/isodoc/iso/html/wordstyle.scss +66 -39
  29. data/lib/isodoc/iso/html_convert.rb +7 -9
  30. data/lib/isodoc/iso/iso.international-standard.xsl +4386 -0
  31. data/lib/isodoc/iso/metadata.rb +48 -22
  32. data/lib/isodoc/iso/pdf_convert.rb +32 -0
  33. data/lib/metanorma-iso.rb +1 -0
  34. data/lib/metanorma/iso/processor.rb +13 -1
  35. data/lib/metanorma/iso/version.rb +1 -1
  36. data/spec/asciidoctor-iso/amd_spec.rb +318 -0
  37. data/spec/asciidoctor-iso/base_spec.rb +37 -17
  38. data/spec/asciidoctor-iso/blocks_spec.rb +21 -9
  39. data/spec/asciidoctor-iso/cleanup_spec.rb +203 -175
  40. data/spec/asciidoctor-iso/inline_spec.rb +2 -1
  41. data/spec/asciidoctor-iso/macros_spec.rb +273 -0
  42. data/spec/asciidoctor-iso/refs_spec.rb +7 -4
  43. data/spec/asciidoctor-iso/section_spec.rb +8 -8
  44. data/spec/asciidoctor-iso/validate_spec.rb +1 -1
  45. data/spec/assets/iso.xml +64 -1
  46. data/spec/isodoc/blocks_spec.rb +115 -0
  47. data/spec/isodoc/i18n_spec.rb +12 -20
  48. data/spec/isodoc/inline_spec.rb +2 -2
  49. data/spec/isodoc/iso_spec.rb +1 -1
  50. data/spec/isodoc/metadata_spec.rb +13 -4
  51. data/spec/isodoc/postproc_spec.rb +13 -112
  52. data/spec/isodoc/ref_spec.rb +4 -4
  53. data/spec/isodoc/section_spec.rb +8 -12
  54. data/spec/isodoc/table_spec.rb +24 -24
  55. data/spec/isodoc/terms_spec.rb +2 -2
  56. data/spec/isodoc/xref_spec.rb +19 -19
  57. data/spec/metanorma/processor_spec.rb +2 -2
  58. data/spec/spec_helper.rb +13 -1
  59. metadata +9 -3
  60. data/asciidoctor-iso.gemspec.old +0 -50
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0620b97c9f91f8019da7ec0cb25086303d5a98c9eda18740e14c581acd8bcea
4
- data.tar.gz: 35ca2d87cf4d58f1d8e8d174f8fe802c1e986ad5a6a6d13dc45125e2f4b9dfd6
3
+ metadata.gz: 766cfd076caf6c78f48542cc22353664f2ee4667be97659e201643418b4990ad
4
+ data.tar.gz: 667d8b7ed3ac77f49a88cd74cae0eaa3f097c2d65c3ed4269806351fdc87e07e
5
5
  SHA512:
6
- metadata.gz: 0c99794ef6ca381337f1be16465e1e97ac0656712608d69a7edbb5996213cca0cbe8c2558105e1543e0ef8760b7790dad9bed31b252b34cddd97d54b263be4d3
7
- data.tar.gz: 51ca61be6991b07fd9f3b044bbd268893297bba14b59af561a2082983998e183548108e945cf113a9d0046055ced4f56600b0decc4fde38acb6730dd8295f951
6
+ metadata.gz: 35ab4b8f52d75727d867920d7de2bd8696e37e38715dcc3895fe67f821311b6a13ac71e5d3a65096694ce800972e81fce5a881d861b534d911cdfcdf17d6f73f
7
+ data.tar.gz: 3d11aecb223c66aa9b2cc1c68bd9b6c227b6ea4710b3afa11556ba0351d969efcf8b39911899670aeab7af43ea6b1aeee8ba56196c575fd802fcb250cfb0a622
@@ -1,21 +1,28 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
3
  name: macos
4
4
 
5
5
  on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
- branches: [ '**' ]
9
+ paths-ignore:
10
+ - .github/workflows/ubuntu.yml
11
+ - .github/workflows/windows.yml
10
12
 
11
13
  jobs:
12
14
  test-macos:
13
15
  name: Test on Ruby ${{ matrix.ruby }} macOS
14
16
  runs-on: macos-latest
17
+ continue-on-error: ${{ matrix.experimental }}
15
18
  strategy:
16
19
  fail-fast: false
17
20
  matrix:
18
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
19
26
  steps:
20
27
  - uses: actions/checkout@master
21
28
  - name: Use Ruby
@@ -27,13 +34,6 @@ jobs:
27
34
  run: |
28
35
  sudo gem install bundler --force
29
36
  bundle install --jobs 4 --retry 3
30
- - name: Use Node
31
- uses: actions/setup-node@v1
32
- with:
33
- node-version: '8'
34
- - name: Install Puppeteer
35
- run: |
36
- npm install -g puppeteer
37
37
  - name: Install PlantUML
38
38
  run: |
39
39
  brew install plantuml
@@ -1,21 +1,28 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
3
  name: ubuntu
4
4
 
5
5
  on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
- branches: [ '**' ]
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/windows.yml
10
12
 
11
13
  jobs:
12
14
  test-linux:
13
15
  name: Test on Ruby ${{ matrix.ruby }} Ubuntu
14
16
  runs-on: ubuntu-latest
17
+ continue-on-error: ${{ matrix.experimental }}
15
18
  strategy:
16
19
  fail-fast: false
17
20
  matrix:
18
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
19
26
  steps:
20
27
  - uses: actions/checkout@master
21
28
  - name: Use Ruby
@@ -25,15 +32,8 @@ jobs:
25
32
  architecture: 'x64'
26
33
  - name: Update gems
27
34
  run: |
28
- gem install bundler
35
+ gem install bundler
29
36
  bundle install --jobs 4 --retry 3
30
- - name: Use Node
31
- uses: actions/setup-node@v1
32
- with:
33
- node-version: '8'
34
- - name: Install Puppeteer
35
- run: |
36
- npm install -g puppeteer
37
37
  - name: Install PlantUML
38
38
  run: |
39
39
  sudo bash -c "curl -L https://github.com/riboseinc/plantuml-install/raw/master/ubuntu.sh | bash"
@@ -1,21 +1,28 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
3
  name: windows
4
4
 
5
5
  on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
- branches: [ '**' ]
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/ubuntu.yml
10
12
 
11
13
  jobs:
12
14
  test-windows:
13
15
  name: Test on Ruby ${{ matrix.ruby }} Windows
14
16
  runs-on: windows-latest
17
+ continue-on-error: ${{ matrix.experimental }}
15
18
  strategy:
16
19
  fail-fast: false
17
20
  matrix:
18
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
19
26
  steps:
20
27
  - uses: actions/checkout@master
21
28
  - name: Use Ruby
@@ -26,17 +33,9 @@ jobs:
26
33
  - name: Update gems
27
34
  shell: pwsh
28
35
  run: |
29
- gem install bundler
36
+ gem install bundler
30
37
  bundle config --local path vendor/bundle
31
- bundle update
32
38
  bundle install --jobs 4 --retry 3
33
- - name: Use Node
34
- uses: actions/setup-node@v1
35
- with:
36
- node-version: '8'
37
- - name: Install Puppeteer
38
- run: |
39
- npm install -g puppeteer
40
39
  - name: Install PlantUML
41
40
  run: |
42
41
  cinst -y plantuml
data/Gemfile CHANGED
@@ -4,8 +4,10 @@ Encoding.default_internal = Encoding::UTF_8
4
4
  source "https://rubygems.org"
5
5
  git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
+ #gem "asciimath", git: "https://github.com/asciidoctor/asciimath"
7
8
  gemspec
8
9
 
9
10
  if File.exist? 'Gemfile.devel'
10
11
  eval File.read('Gemfile.devel'), nil, 'Gemfile.devel' # rubocop:disable Security/Eval
11
12
  end
13
+
@@ -1,8 +1,9 @@
1
1
  = Metanorma-ISO: Metanorma processor for ISO standards
2
2
 
3
3
  image:https://img.shields.io/gem/v/metanorma-iso.svg["Gem Version", link="https://rubygems.org/gems/metanorma-iso"]
4
- image:https://travis-ci.com/metanorma/metanorma-iso.svg["Build Status", link="https://travis-ci.com/metanorma/metanorma-iso"]
5
- image:https://ci.appveyor.com/api/projects/status/t874i1cbarhnrwki?svg=true["Appveyor Build Status", link="https://ci.appveyor.com/project/metanorma/metanorma-iso"]
4
+ image:https://github.com/metanorma/metanorma-iso/workflows/macos/badge.svg["Build Status (macOS)", link="https://github.com/metanorma/metanorma-iso/actions?workflow=macos"]
5
+ image:https://github.com/metanorma/metanorma-iso/workflows/ubuntu/badge.svg["Build Status (ubuntu)", link="https://github.com/metanorma/metanorma-iso/actions?workflow=ubuntu"]
6
+ image:https://github.com/metanorma/metanorma-iso/workflows/windows/badge.svg["Build Status (Windows)", link="https://github.com/metanorma/metanorma-iso/actions?workflow=windows"]
6
7
  image:https://codeclimate.com/github/metanorma/metanorma-iso/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/metanorma-iso"]
7
8
  image:https://img.shields.io/github/issues-pr-raw/metanorma/metanorma-iso.svg["Pull Requests", link="https://github.com/metanorma/metanorma-iso/pulls"]
8
9
  image:https://img.shields.io/github/commits-since/metanorma/metanorma-iso/latest.svg["Commits since latest",link="https://github.com/metanorma/metanorma-iso/releases"]
@@ -6,6 +6,7 @@ require "open-uri"
6
6
  require "pp"
7
7
  require "isodoc"
8
8
  require "fileutils"
9
+ require 'asciidoctor/iso/macros'
9
10
 
10
11
  module Asciidoctor
11
12
  module ISO
@@ -13,6 +14,10 @@ module Asciidoctor
13
14
  XML_ROOT_TAG = "iso-standard".freeze
14
15
  XML_NAMESPACE = "https://www.metanorma.org/ns/iso".freeze
15
16
 
17
+ Asciidoctor::Extensions.register do
18
+ inline_macro Asciidoctor::Iso::TermRefInlineMacro
19
+ end
20
+
16
21
  def html_converter(node)
17
22
  IsoDoc::Iso::HtmlConvert.new(html_extract_attributes(node))
18
23
  end
@@ -26,6 +31,16 @@ module Asciidoctor
26
31
  IsoDoc::Iso::WordConvert.new(doc_extract_attributes(node))
27
32
  end
28
33
 
34
+ def pdf_converter(node)
35
+ return nil if node.attr("no-pdf")
36
+ IsoDoc::Iso::PdfConvert.new(doc_extract_attributes(node))
37
+ end
38
+
39
+ def init(node)
40
+ super
41
+ @amd = %w(amendment technical-corrigendum).include? node.attr("doctype")
42
+ end
43
+
29
44
  def document(node)
30
45
  init(node)
31
46
  ret = makexml(node).to_xml(indent: 2)
@@ -35,8 +50,9 @@ module Asciidoctor
35
50
  FileUtils.mv "#{@filename}.html", "#{@filename}_alt.html"
36
51
  html_converter(node).convert(@filename + ".xml")
37
52
  doc_converter(node).convert(@filename + ".xml")
53
+ pdf_converter(node)&.convert(@filename + ".xml")
38
54
  end
39
- @log.write(@filename + ".err") unless @novalid
55
+ @log.write(@localdir + @filename + ".err") unless @novalid
40
56
  @files_to_delete.each { |f| FileUtils.rm f }
41
57
  ret
42
58
  end
@@ -49,11 +49,17 @@
49
49
  </define>
50
50
  <define name="stage">
51
51
  <element name="stage">
52
+ <optional>
53
+ <attribute name="abbreviation"/>
54
+ </optional>
52
55
  <text/>
53
56
  </element>
54
57
  </define>
55
58
  <define name="substage">
56
59
  <element name="substage">
60
+ <optional>
61
+ <attribute name="abbreviation"/>
62
+ </optional>
57
63
  <text/>
58
64
  </element>
59
65
  </define>
@@ -82,7 +88,7 @@
82
88
  <text/>
83
89
  </element>
84
90
  </define>
85
- <define name="LocalizedString">
91
+ <define name="LocalizedString1">
86
92
  <optional>
87
93
  <!-- multiple languages and scripts possible: comma delimit them if so -->
88
94
  <attribute name="language"/>
@@ -92,6 +98,16 @@
92
98
  </optional>
93
99
  <text/>
94
100
  </define>
101
+ <define name="LocalizedString">
102
+ <choice>
103
+ <ref name="LocalizedString1"/>
104
+ <oneOrMore>
105
+ <element name="variant">
106
+ <ref name="LocalizedString1"/>
107
+ </element>
108
+ </oneOrMore>
109
+ </choice>
110
+ </define>
95
111
  <!--
96
112
  Unlike UML, change type to format: type is overloaded
97
113
  Would be need if plain were default value and could omit the attribute
@@ -115,7 +131,7 @@
115
131
  </optional>
116
132
  <ref name="LocalizedStringOrXsAny"/>
117
133
  </define>
118
- <define name="LocalizedStringOrXsAny">
134
+ <define name="LocalizedStringOrXsAny1">
119
135
  <optional>
120
136
  <!-- multiple languages and scripts possible: comma delimit them if so -->
121
137
  <attribute name="language"/>
@@ -130,6 +146,16 @@
130
146
  </choice>
131
147
  </oneOrMore>
132
148
  </define>
149
+ <define name="LocalizedStringOrXsAny">
150
+ <choice>
151
+ <ref name="LocalizedStringOrXsAny1"/>
152
+ <oneOrMore>
153
+ <element name="variant">
154
+ <ref name="LocalizedStringOrXsAny1"/>
155
+ </element>
156
+ </oneOrMore>
157
+ </choice>
158
+ </define>
133
159
  <define name="contributor">
134
160
  <element name="contributor">
135
161
  <zeroOrMore>
@@ -452,9 +478,14 @@
452
478
  <attribute name="bibitemid">
453
479
  <data type="IDREF"/>
454
480
  </attribute>
455
- <zeroOrMore>
456
- <ref name="locality"/>
457
- </zeroOrMore>
481
+ <choice>
482
+ <zeroOrMore>
483
+ <ref name="locality"/>
484
+ </zeroOrMore>
485
+ <zeroOrMore>
486
+ <ref name="localityStack"/>
487
+ </zeroOrMore>
488
+ </choice>
458
489
  <optional>
459
490
  <ref name="date"/>
460
491
  </optional>
@@ -469,6 +500,25 @@
469
500
  <ref name="BibItemLocality"/>
470
501
  </element>
471
502
  </define>
503
+ <define name="localityStack">
504
+ <element name="localityStack">
505
+ <zeroOrMore>
506
+ <ref name="locality"/>
507
+ </zeroOrMore>
508
+ </element>
509
+ </define>
510
+ <define name="sourceLocality">
511
+ <element name="sourceLocality">
512
+ <ref name="BibItemLocality"/>
513
+ </element>
514
+ </define>
515
+ <define name="sourceLocalityStack">
516
+ <element name="sourceLocalityStack">
517
+ <zeroOrMore>
518
+ <ref name="sourceLocality"/>
519
+ </zeroOrMore>
520
+ </element>
521
+ </define>
472
522
  <define name="BibItemLocality">
473
523
  <attribute name="type">
474
524
  <ref name="LocalityType"/>
@@ -703,21 +753,11 @@
703
753
  </define>
704
754
  <define name="TypedTitleString">
705
755
  <optional>
706
- <attribute name="type">
707
- <ref name="TitleType"/>
708
- </attribute>
756
+ <attribute name="type"/>
709
757
  </optional>
710
758
  <ref name="FormattedString"/>
711
759
  </define>
712
- <define name="TitleType">
713
- <choice>
714
- <value>alternative</value>
715
- <value>original</value>
716
- <value>unofficial</value>
717
- <value>subtitle</value>
718
- <value>main</value>
719
- </choice>
720
- </define>
760
+ <!-- TitleType = ( "alternative" | "original" | "unofficial" | "subtitle" | "main" ) -->
721
761
  <define name="TypedUri">
722
762
  <optional>
723
763
  <attribute name="type"/>
@@ -747,6 +787,8 @@
747
787
  <value>unchanged</value>
748
788
  <value>circulated</value>
749
789
  <value>adapted</value>
790
+ <value>vote-started</value>
791
+ <value>vote-ended</value>
750
792
  </choice>
751
793
  </define>
752
794
  <define name="bdate">
@@ -999,38 +1041,63 @@
999
1041
  </define>
1000
1042
  <define name="DocRelationType">
1001
1043
  <choice>
1002
- <value>obsoletes</value>
1003
- <value>obsoletedBy</value>
1004
- <value>supersedes</value>
1005
- <value>supersededBy</value>
1006
- <value>updates</value>
1007
- <value>updatedBy</value>
1008
- <value>complements</value>
1009
- <value>derivedFrom</value>
1010
- <value>translatedFrom</value>
1011
- <value>hasTranslation</value>
1012
- <value>adoptedFrom</value>
1013
- <value>equivalent</value>
1014
- <value>identical</value>
1015
- <value>nonequivalent</value>
1016
- <value>includedIn</value>
1017
1044
  <value>includes</value>
1018
- <value>instance</value>
1019
- <value>instanceOf</value>
1020
- <value>partOf</value>
1045
+ <value>includedIn</value>
1021
1046
  <value>hasPart</value>
1022
- <value>hasDraft</value>
1023
- <value>draftOf</value>
1047
+ <value>partOf</value>
1024
1048
  <value>merges</value>
1049
+ <value>mergedInto</value>
1025
1050
  <value>splits</value>
1026
- <value>amends</value>
1027
- <value>amendedBy</value>
1028
- <value>corrects</value>
1029
- <value>correctedBy</value>
1030
- <value>revises</value>
1031
- <value>revisedBy</value>
1051
+ <value>splitInto</value>
1052
+ <value>instance</value>
1053
+ <value>hasInstance</value>
1054
+ <value>exemplarOf</value>
1055
+ <value>hasExemplar</value>
1056
+ <value>manifestationOf</value>
1057
+ <value>hasManifestation</value>
1058
+ <value>reproductionOf</value>
1059
+ <value>hasReproduction</value>
1060
+ <value>reprintOf</value>
1061
+ <value>hasReprint</value>
1062
+ <value>expressionOf</value>
1063
+ <value>hasExpression</value>
1064
+ <value>translatedFrom</value>
1065
+ <value>hasTranslation</value>
1066
+ <value>arrangementOf</value>
1067
+ <value>hasArrangement</value>
1068
+ <value>abridgementOf</value>
1069
+ <value>hasAbridgement</value>
1070
+ <value>annotationOf</value>
1071
+ <value>hasAnnotation</value>
1072
+ <value>draftOf</value>
1073
+ <value>hasDraft</value>
1074
+ <value>editionOf</value>
1075
+ <value>hasEdition</value>
1076
+ <value>updates</value>
1077
+ <value>updatedBy</value>
1078
+ <value>derivedFrom</value>
1079
+ <value>derives</value>
1032
1080
  <value>describes</value>
1033
1081
  <value>describedBy</value>
1082
+ <value>catalogues</value>
1083
+ <value>cataloguedBy</value>
1084
+ <value>hasSuccessor</value>
1085
+ <value>successorOf</value>
1086
+ <value>adaptedFrom</value>
1087
+ <value>hasAdaptation</value>
1088
+ <value>adoptedFrom</value>
1089
+ <value>adoptedAs</value>
1090
+ <value>reviewOf</value>
1091
+ <value>hasReview</value>
1092
+ <value>commentaryOf</value>
1093
+ <value>hasCommentary</value>
1094
+ <value>related</value>
1095
+ <value>complements</value>
1096
+ <value>complementOf</value>
1097
+ <value>obsoletes</value>
1098
+ <value>obsoletedBy</value>
1099
+ <value>cited</value>
1100
+ <value>isCitedIn</value>
1034
1101
  </choice>
1035
1102
  </define>
1036
1103
  <define name="docrelation">
@@ -1038,12 +1105,30 @@
1038
1105
  <attribute name="type">
1039
1106
  <ref name="DocRelationType"/>
1040
1107
  </attribute>
1108
+ <optional>
1109
+ <element name="description">
1110
+ <ref name="FormattedString"/>
1111
+ </element>
1112
+ </optional>
1041
1113
  <element name="bibitem">
1042
1114
  <ref name="BibliographicItem"/>
1043
1115
  </element>
1044
- <zeroOrMore>
1045
- <ref name="locality"/>
1046
- </zeroOrMore>
1116
+ <choice>
1117
+ <zeroOrMore>
1118
+ <ref name="locality"/>
1119
+ </zeroOrMore>
1120
+ <zeroOrMore>
1121
+ <ref name="localityStack"/>
1122
+ </zeroOrMore>
1123
+ </choice>
1124
+ <choice>
1125
+ <zeroOrMore>
1126
+ <ref name="sourceLocality"/>
1127
+ </zeroOrMore>
1128
+ <zeroOrMore>
1129
+ <ref name="sourceLocalityStack"/>
1130
+ </zeroOrMore>
1131
+ </choice>
1047
1132
  </element>
1048
1133
  </define>
1049
1134
  <define name="version">