metanorma-bipm 1.0.7 → 1.1.4

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: 9e92f453fd51171c023324636e3d16215d4d2af372c2975da080d9b7f81f5ded
4
- data.tar.gz: 7066c446be4aa7b01e18c685b7c86b0e6bfd8883fc702e984d8a9fb0448df04f
3
+ metadata.gz: cf1b38fcb74e9bae79ffb3ebb3d6cb878d65f233f5cd50b6ca766028f273ed04
4
+ data.tar.gz: a34688db4dc19969f3749c84eb1c1055210e0791e836618de89ba82c9a80a2bc
5
5
  SHA512:
6
- metadata.gz: 7c11d1f4e93dde04a7f46498906bd8143a8bc7a3fb917e86706436894cc2989a7b4ac373c29ae29061f4e0d5967216c45b1e4724cac84ba664eb1fd4ec052cbb
7
- data.tar.gz: 28999ac1b868021ed0fe9aa63ba01f3dee7d66a3e111586624f5576f72962c06ea993be25cd52cd9d64ffa3fdbe035b6daf196fdc2e08b05ddce506ad9a31f43
6
+ metadata.gz: a41a0b7673959052e0dd0f1b8e6873018b0e1ee4846939ea74bf489c586b8cd387cf683b870bbd230d5b5d267babd0b3a603f2d2168a5c93c62aa0fc90a21ce0
7
+ data.tar.gz: 7a276e2c67a62742d61df4c3e85158123ff63d1bbbeaeea55945076a1f384a96794aeb8d60eeee3e37a242ab1436bdb5ee9b8386ee2d8036b7c4cefa320cfd45
@@ -16,19 +16,9 @@ jobs:
16
16
  strategy:
17
17
  fail-fast: false
18
18
  matrix:
19
- ruby: [ '2.7', '2.6', '2.5', '2.4' ]
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5', '2.4' ]
20
20
  os: [ ubuntu-latest, windows-latest, macos-latest ]
21
21
  experimental: [ false ]
22
- include:
23
- - ruby: '3.0'
24
- os: 'ubuntu-latest'
25
- experimental: true
26
- - ruby: '3.0'
27
- os: 'windows-latest'
28
- experimental: true
29
- - ruby: '3.0'
30
- os: 'macos-latest'
31
- experimental: true
32
22
  steps:
33
23
  - uses: actions/checkout@v2
34
24
  with:
@@ -40,3 +30,14 @@ jobs:
40
30
  bundler-cache: true
41
31
 
42
32
  - run: bundle exec rake
33
+
34
+ tests-passed:
35
+ needs: rake
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: peter-evans/repository-dispatch@v1
39
+ with:
40
+ token: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
41
+ repository: ${{ github.repository }}
42
+ event-type: tests-passed
43
+ client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
data/.gitignore CHANGED
@@ -1 +1,4 @@
1
- .rubocop-https--*
1
+ /.rubocop-https--*
2
+ /.byebug_history
3
+ /.rspec_status
4
+ /coverage/
data/.hound.yml ADDED
@@ -0,0 +1,5 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ ruby:
4
+ enabled: true
5
+ config_file: .rubocop.yml
data/.rubocop.yml CHANGED
@@ -1,14 +1,10 @@
1
- # This project follows the Ribose OSS style guide.
2
- # https://github.com/riboseinc/oss-guides
3
- # All project-specific additions and overrides should be specified in this file.
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
4
3
  inherit_from:
5
4
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
5
 
7
6
  # local repo-specific modifications
7
+ # ...
8
8
 
9
9
  AllCops:
10
- DisplayCopNames: false
11
- StyleGuideCopsOnly: false
12
- TargetRubyVersion: 2.4
13
- Rails:
14
- Enabled: true
10
+ TargetRubyVersion: 2.5
data/Gemfile CHANGED
@@ -6,6 +6,6 @@ git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
7
  gemspec
8
8
 
9
- if File.exist? 'Gemfile.devel'
10
- eval File.read('Gemfile.devel'), nil, 'Gemfile.devel' # rubocop:disable Security/Eval
9
+ if File.exist? "Gemfile.devel"
10
+ eval File.read("Gemfile.devel"), nil, "Gemfile.devel" # rubocop:disable Security/Eval
11
11
  end
data/Rakefile CHANGED
@@ -1,8 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
- require 'isodoc/gem_tasks'
3
+ require "isodoc/gem_tasks"
4
4
 
5
5
  IsoDoc::GemTasks.install
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- task :default => :spec
8
+ task default: :spec
@@ -787,6 +787,7 @@
787
787
  <value>adapted</value>
788
788
  <value>vote-started</value>
789
789
  <value>vote-ended</value>
790
+ <value>announced</value>
790
791
  </choice>
791
792
  </define>
792
793
  <define name="bdate">
@@ -245,6 +245,9 @@
245
245
  <optional>
246
246
  <ref name="doctype"/>
247
247
  </optional>
248
+ <optional>
249
+ <ref name="docsubtype"/>
250
+ </optional>
248
251
  <ref name="editorialgroup"/>
249
252
  <optional>
250
253
  <ref name="comment-period"/>
@@ -1,5 +1,5 @@
1
1
  require "asciidoctor/standoc/converter"
2
- require 'asciidoctor/generic/converter'
2
+ require "asciidoctor/generic/converter"
3
3
 
4
4
  module Asciidoctor
5
5
  module BIPM
@@ -19,20 +19,26 @@ module Asciidoctor
19
19
  end
20
20
 
21
21
  def org_abbrev
22
- { org_name_long => configuration.organization_name_short }
22
+ { org_name_long => configuration.organization_name_short }
23
23
  end
24
24
 
25
25
  def metadata_committee(node, xml)
26
26
  return unless node.attr("committee-en") || node.attr("committee-fr")
27
+
27
28
  xml.editorialgroup do |a|
28
29
  metadata_committee1(node, a)
29
- metadata_committee2(node, a)
30
+ i = 2
31
+ while node.attr("committee-en_#{i}") || node.attr("committee-fr_#{i}")
32
+ metadata_committee2(node, a, i)
33
+ i += 1
34
+ end
30
35
  metadata_workgroup(node, a)
31
36
  end
32
37
  end
33
38
 
34
- def metadata_committee1(node, a)
35
- a.committee **attr_code(acronym: node.attr("committee-acronym")) do |c|
39
+ def metadata_committee1(node, xml)
40
+ xml.committee **attr_code(acronym:
41
+ node.attr("committee-acronym")) do |c|
36
42
  e = node.attr("committee-en") and
37
43
  c.variant e, language: "en", script: "Latn"
38
44
  e = node.attr("committee-fr") and
@@ -40,24 +46,25 @@ module Asciidoctor
40
46
  end
41
47
  end
42
48
 
43
- def metadata_committee2(node, a)
44
- i = 2
45
- while node.attr("committee-en_#{i}") || node.attr("committee-fr_#{i}") do
46
- a.committee **attr_code(acronym: node.attr("committee-acronym_#{i}")) do |c|
47
- e = node.attr("committee-en_#{i}") and c.variant e, language: "en", script: "Latn"
48
- e = node.attr("committee-fr_#{i}") and c.variant e, language: "fr", script: "Latn"
49
+ def metadata_committee2(node, xml, num)
50
+ xml.committee **attr_code(acronym:
51
+ node.attr("committee-acronym_#{num}")) do |c|
52
+ %w(en fr).each do |lg|
53
+ e = node.attr("committee-#{lg}_#{num}") and
54
+ c.variant e, language: lg, script: "Latn"
49
55
  end
50
- i += 1
51
56
  end
52
57
  end
53
58
 
54
- def metadata_workgroup(node, a)
55
- a.workgroup node.attr("workgroup"),
56
- **attr_code(acronym: node.attr("workgroup-acronym"))
59
+ def metadata_workgroup(node, xml)
60
+ xml.workgroup(node.attr("workgroup"),
61
+ **attr_code(acronym: node.attr("workgroup-acronym")))
57
62
  i = 2
58
- while node.attr("workgroup_#{i}") do
59
- a.workgroup node.attr("workgroup_#{i}"),
63
+ while node.attr("workgroup_#{i}")
64
+ xml.workgroup(
65
+ node.attr("workgroup_#{i}"),
60
66
  **attr_code(acronym: node.attr("workgroup-acronym_#{i}"))
67
+ )
61
68
  i += 1
62
69
  end
63
70
  end
@@ -76,13 +83,15 @@ module Asciidoctor
76
83
  draft = node.attr("supersedes-draft#{suffix}")
77
84
  edition = node.attr("supersedes-edition#{suffix}")
78
85
  return false unless d || draft || edition
86
+
79
87
  relation_supersedes_self1(xml, d, edition, draft)
80
88
  end
81
89
 
82
- def relation_supersedes_self1(xml, d, edition, draft)
90
+ def relation_supersedes_self1(xml, date, edition, draft)
83
91
  xml.relation **{ type: "supersedes" } do |r|
84
92
  r.bibitem do |b|
85
- d and b.date d, **{ type: edition ? "published" : "circulated" }
93
+ date and b.date(date,
94
+ **{ type: edition ? "published" : "circulated" })
86
95
  edition and b.edition edition
87
96
  draft and b.version do |v|
88
97
  v.draft draft
@@ -91,13 +100,13 @@ module Asciidoctor
91
100
  end
92
101
  end
93
102
 
94
- def personal_role(node, c, suffix)
103
+ def personal_role(node, xml, suffix)
95
104
  role = node.attr("role#{suffix}") || "author"
96
105
  unless %w(author editor).include?(role.downcase)
97
106
  desc = role
98
107
  role = "editor"
99
108
  end
100
- c.role desc, **{ type: role.downcase }
109
+ xml.role desc, **{ type: role.downcase }
101
110
  end
102
111
 
103
112
  def title(node, xml)
@@ -106,7 +115,7 @@ module Asciidoctor
106
115
  xml.title **attr_code(at.merge(type: "main")) do |t1|
107
116
  t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-#{lang}"))
108
117
  end
109
- %w(cover appendix annex part subpart).each do |w|
118
+ %w(cover appendix annex part subpart provenance).each do |w|
110
119
  typed_title(node, xml, lang, w)
111
120
  end
112
121
  end
@@ -115,6 +124,7 @@ module Asciidoctor
115
124
  def typed_title(node, xml, lang, type)
116
125
  at = { language: lang, format: "text/plain" }
117
126
  return unless title = node.attr("title-#{type}-#{lang}")
127
+
118
128
  xml.title **attr_code(at.merge(type: type)) do |t1|
119
129
  t1 << Metanorma::Utils::asciidoc_sub(title)
120
130
  end
@@ -122,21 +132,28 @@ module Asciidoctor
122
132
 
123
133
  def sectiontype_streamline(ret)
124
134
  case ret
125
- when "introduction" then "clause"
135
+ when "introduction" then @jcgm ? "introduction" : "clause"
126
136
  else
127
137
  super
128
138
  end
129
139
  end
130
140
 
141
+ def sectiontype(node, level = true)
142
+ ret = sectiontype1(node)
143
+ return ret if ret == "terms and definitions"
144
+
145
+ super
146
+ end
147
+
131
148
  def inline_anchor_xref_attrs(node)
132
149
  flags = %w(pagenumber nosee nopage).each_with_object({}) do |w, m|
133
- if /#{w}%/.match(node.text)
150
+ if /#{w}%/.match?(node.text)
134
151
  node.text = node.text.sub(/#{w}%/, "")
135
152
  m[w] = true
136
153
  end
137
154
  end
138
155
  ret = super
139
- flags.keys.each { |k| ret[k.to_sym] = true }
156
+ flags.each_key { |k| ret[k.to_sym] = true }
140
157
  ret
141
158
  end
142
159
 
@@ -154,9 +171,6 @@ module Asciidoctor
154
171
  super.merge(attr_code(start: node.attr("start")))
155
172
  end
156
173
 
157
- def section_names_terms_cleanup(x)
158
- end
159
-
160
174
  def committee_validate(xml)
161
175
  committees = Array(configuration&.committees) || return
162
176
  committees.empty? and return
@@ -173,21 +187,45 @@ module Asciidoctor
173
187
  end
174
188
 
175
189
  def boilerplate_file(xmldoc)
176
- return super unless xmldoc&.at("//bibdata/ext/editorialgroup/committee/@acronym")&.value == "JCGM"
190
+ return super unless @jcgm
191
+
177
192
  File.join(File.dirname(__FILE__), "boilerplate-jcgm-en.xml")
178
193
  end
179
194
 
195
+ def sections_cleanup(xml)
196
+ super
197
+ jcgm_untitled_sections_cleanup(xml) if @jcgm
198
+ end
199
+
200
+ def jcgm_untitled_sections_cleanup(xml)
201
+ xml.xpath("//clause//clause | //annex//clause | //introduction/clause")
202
+ .each do |c|
203
+ next if !c&.at("./title")&.text&.empty?
204
+
205
+ c["inline-header"] = true
206
+ end
207
+ end
208
+
209
+ def section_names_terms_cleanup(xml); end
210
+
211
+ def section_names_refs_cleanup(xml); end
212
+
180
213
  def mathml_mi_italics
181
214
  { uppergreek: false, upperroman: false,
182
215
  lowergreek: false, lowerroman: true }
183
216
  end
184
217
 
218
+ def document(node)
219
+ @jcgm = node.attr("committee-acronym") == "JCGM"
220
+ super
221
+ end
222
+
185
223
  def outputs(node, ret)
186
- File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
187
- presentation_xml_converter(node).convert(@filename + ".xml")
188
- html_converter(node).convert(@filename + ".presentation.xml",
224
+ File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
225
+ presentation_xml_converter(node).convert("#{@filename}.xml")
226
+ html_converter(node).convert("#{@filename}.presentation.xml",
189
227
  nil, false, "#{@filename}.html")
190
- pdf_converter(node)&.convert(@filename + ".presentation.xml",
228
+ pdf_converter(node)&.convert("#{@filename}.presentation.xml",
191
229
  nil, false, "#{@filename}.pdf")
192
230
  end
193
231
 
@@ -201,6 +239,7 @@ module Asciidoctor
201
239
 
202
240
  def pdf_converter(node)
203
241
  return nil if node.attr("no-pdf")
242
+
204
243
  IsoDoc::BIPM::PdfConvert.new(doc_extract_attributes(node))
205
244
  end
206
245
  end
@@ -45,6 +45,11 @@
45
45
  <optional>
46
46
  <attribute name="alt"/>
47
47
  </optional>
48
+ <optional>
49
+ <attribute name="updatetype">
50
+ <data type="boolean"/>
51
+ </attribute>
52
+ </optional>
48
53
  <text/>
49
54
  </element>
50
55
  </define>
@@ -86,6 +91,35 @@
86
91
  <text/>
87
92
  </element>
88
93
  </define>
94
+ <define name="erefType">
95
+ <optional>
96
+ <attribute name="normative">
97
+ <data type="boolean"/>
98
+ </attribute>
99
+ </optional>
100
+ <attribute name="citeas"/>
101
+ <attribute name="type">
102
+ <ref name="ReferenceFormat"/>
103
+ </attribute>
104
+ <optional>
105
+ <attribute name="alt"/>
106
+ </optional>
107
+ <optional>
108
+ <attribute name="case">
109
+ <choice>
110
+ <value>capital</value>
111
+ <value>lowercase</value>
112
+ </choice>
113
+ </attribute>
114
+ </optional>
115
+ <optional>
116
+ <attribute name="droploc">
117
+ <data type="boolean"/>
118
+ </attribute>
119
+ </optional>
120
+ <ref name="CitationType"/>
121
+ <text/>
122
+ </define>
89
123
  <define name="ul">
90
124
  <element name="ul">
91
125
  <attribute name="id">
@@ -514,6 +548,9 @@
514
548
  </define>
515
549
  <define name="BibDataExtensionType">
516
550
  <ref name="doctype"/>
551
+ <optional>
552
+ <ref name="docsubtype"/>
553
+ </optional>
517
554
  <optional>
518
555
  <ref name="editorialgroup"/>
519
556
  </optional>
@@ -775,8 +812,100 @@
775
812
  <ref name="paragraph"/>
776
813
  </element>
777
814
  </define>
815
+ <define name="em">
816
+ <element name="em">
817
+ <zeroOrMore>
818
+ <choice>
819
+ <ref name="PureTextElement"/>
820
+ <ref name="stem"/>
821
+ <ref name="index"/>
822
+ </choice>
823
+ </zeroOrMore>
824
+ </element>
825
+ </define>
826
+ <define name="strong">
827
+ <element name="strong">
828
+ <zeroOrMore>
829
+ <choice>
830
+ <ref name="PureTextElement"/>
831
+ <ref name="stem"/>
832
+ <ref name="index"/>
833
+ </choice>
834
+ </zeroOrMore>
835
+ </element>
836
+ </define>
837
+ <define name="tt">
838
+ <element name="tt">
839
+ <zeroOrMore>
840
+ <choice>
841
+ <ref name="PureTextElement"/>
842
+ <ref name="index"/>
843
+ </choice>
844
+ </zeroOrMore>
845
+ </element>
846
+ </define>
847
+ <define name="keyword">
848
+ <element name="keyword">
849
+ <zeroOrMore>
850
+ <choice>
851
+ <ref name="PureTextElement"/>
852
+ <ref name="index"/>
853
+ </choice>
854
+ </zeroOrMore>
855
+ </element>
856
+ </define>
857
+ <define name="strike">
858
+ <element name="strike">
859
+ <zeroOrMore>
860
+ <choice>
861
+ <ref name="PureTextElement"/>
862
+ <ref name="index"/>
863
+ </choice>
864
+ </zeroOrMore>
865
+ </element>
866
+ </define>
867
+ <define name="underline">
868
+ <element name="underline">
869
+ <zeroOrMore>
870
+ <choice>
871
+ <ref name="PureTextElement"/>
872
+ <ref name="index"/>
873
+ </choice>
874
+ </zeroOrMore>
875
+ </element>
876
+ </define>
877
+ <define name="smallcap">
878
+ <element name="smallcap">
879
+ <zeroOrMore>
880
+ <choice>
881
+ <ref name="PureTextElement"/>
882
+ <ref name="index"/>
883
+ </choice>
884
+ </zeroOrMore>
885
+ </element>
886
+ </define>
887
+ <define name="pagebreak">
888
+ <element name="pagebreak">
889
+ <optional>
890
+ <attribute name="orientation">
891
+ <choice>
892
+ <value>landscape</value>
893
+ <value>portrait</value>
894
+ </choice>
895
+ </attribute>
896
+ </optional>
897
+ </element>
898
+ </define>
778
899
  </include>
779
900
  <!-- end overrides -->
901
+ <define name="docsubtype">
902
+ <element name="docsubtype">
903
+ <ref name="DocumentSubtype"/>
904
+ </element>
905
+ </define>
906
+ <define name="DocumentSubtype">
907
+ <text/>
908
+ </define>
780
909
  <define name="colgroup">
781
910
  <element name="colgroup">
782
911
  <oneOrMore>
@@ -793,7 +922,35 @@
793
922
  <value>internal</value>
794
923
  </define>
795
924
  <define name="TextElement" combine="choice">
796
- <ref name="concept"/>
925
+ <choice>
926
+ <ref name="concept"/>
927
+ <ref name="add"/>
928
+ <ref name="del"/>
929
+ </choice>
930
+ </define>
931
+ <define name="add">
932
+ <element name="add">
933
+ <choice>
934
+ <ref name="PureTextElement"/>
935
+ <ref name="eref"/>
936
+ <ref name="stem"/>
937
+ <ref name="keyword"/>
938
+ <ref name="xref"/>
939
+ <ref name="hyperlink"/>
940
+ </choice>
941
+ </element>
942
+ </define>
943
+ <define name="del">
944
+ <element name="del">
945
+ <choice>
946
+ <ref name="PureTextElement"/>
947
+ <ref name="eref"/>
948
+ <ref name="stem"/>
949
+ <ref name="keyword"/>
950
+ <ref name="xref"/>
951
+ <ref name="hyperlink"/>
952
+ </choice>
953
+ </element>
797
954
  </define>
798
955
  <define name="concept">
799
956
  <element name="concept">
@@ -814,8 +971,170 @@
814
971
  <ref name="permission"/>
815
972
  <ref name="imagemap"/>
816
973
  <ref name="svgmap"/>
974
+ <ref name="inputform"/>
975
+ </choice>
976
+ </define>
977
+ <define name="inputform">
978
+ <element name="form">
979
+ <attribute name="id">
980
+ <data type="ID"/>
981
+ </attribute>
982
+ <attribute name="name"/>
983
+ <attribute name="action"/>
984
+ <zeroOrMore>
985
+ <choice>
986
+ <ref name="TextElement"/>
987
+ <ref name="FormInput"/>
988
+ </choice>
989
+ </zeroOrMore>
990
+ </element>
991
+ </define>
992
+ <define name="FormInput">
993
+ <choice>
994
+ <ref name="input"/>
995
+ <ref name="formlabel"/>
996
+ <ref name="select"/>
997
+ <ref name="textarea"/>
998
+ </choice>
999
+ </define>
1000
+ <define name="InputType">
1001
+ <choice>
1002
+ <value>button</value>
1003
+ <value>checkbox</value>
1004
+ <value>date</value>
1005
+ <value>file</value>
1006
+ <value>password</value>
1007
+ <value>radio</value>
1008
+ <value>submit</value>
1009
+ <value>text</value>
817
1010
  </choice>
818
1011
  </define>
1012
+ <define name="input">
1013
+ <element name="input">
1014
+ <attribute name="type">
1015
+ <ref name="InputType"/>
1016
+ </attribute>
1017
+ <optional>
1018
+ <attribute name="checked">
1019
+ <data type="boolean"/>
1020
+ </attribute>
1021
+ </optional>
1022
+ <optional>
1023
+ <attribute name="disabled">
1024
+ <data type="boolean"/>
1025
+ </attribute>
1026
+ </optional>
1027
+ <optional>
1028
+ <attribute name="readonly">
1029
+ <data type="boolean"/>
1030
+ </attribute>
1031
+ </optional>
1032
+ <optional>
1033
+ <attribute name="maxlength">
1034
+ <data type="int"/>
1035
+ </attribute>
1036
+ </optional>
1037
+ <optional>
1038
+ <attribute name="minlength">
1039
+ <data type="int"/>
1040
+ </attribute>
1041
+ </optional>
1042
+ <optional>
1043
+ <attribute name="name"/>
1044
+ </optional>
1045
+ <optional>
1046
+ <attribute name="value"/>
1047
+ </optional>
1048
+ <optional>
1049
+ <attribute name="id">
1050
+ <data type="ID"/>
1051
+ </attribute>
1052
+ </optional>
1053
+ </element>
1054
+ </define>
1055
+ <define name="formlabel">
1056
+ <element name="label">
1057
+ <attribute name="for">
1058
+ <data type="IDREF"/>
1059
+ </attribute>
1060
+ <zeroOrMore>
1061
+ <ref name="PureTextElement"/>
1062
+ </zeroOrMore>
1063
+ </element>
1064
+ </define>
1065
+ <define name="select">
1066
+ <element name="select">
1067
+ <optional>
1068
+ <attribute name="name"/>
1069
+ </optional>
1070
+ <optional>
1071
+ <attribute name="value"/>
1072
+ </optional>
1073
+ <optional>
1074
+ <attribute name="id">
1075
+ <data type="ID"/>
1076
+ </attribute>
1077
+ </optional>
1078
+ <optional>
1079
+ <attribute name="disabled">
1080
+ <data type="boolean"/>
1081
+ </attribute>
1082
+ </optional>
1083
+ <optional>
1084
+ <attribute name="multiple">
1085
+ <data type="boolean"/>
1086
+ </attribute>
1087
+ </optional>
1088
+ <optional>
1089
+ <attribute name="size">
1090
+ <data type="int"/>
1091
+ </attribute>
1092
+ </optional>
1093
+ <oneOrMore>
1094
+ <ref name="option"/>
1095
+ </oneOrMore>
1096
+ </element>
1097
+ </define>
1098
+ <define name="option">
1099
+ <element name="option">
1100
+ <optional>
1101
+ <attribute name="disabled">
1102
+ <data type="boolean"/>
1103
+ </attribute>
1104
+ </optional>
1105
+ <optional>
1106
+ <attribute name="value"/>
1107
+ </optional>
1108
+ <zeroOrMore>
1109
+ <ref name="PureTextElement"/>
1110
+ </zeroOrMore>
1111
+ </element>
1112
+ </define>
1113
+ <define name="textarea">
1114
+ <element name="textarea">
1115
+ <optional>
1116
+ <attribute name="name"/>
1117
+ </optional>
1118
+ <optional>
1119
+ <attribute name="value"/>
1120
+ </optional>
1121
+ <optional>
1122
+ <attribute name="id">
1123
+ <data type="ID"/>
1124
+ </attribute>
1125
+ </optional>
1126
+ <optional>
1127
+ <attribute name="rows">
1128
+ <data type="int"/>
1129
+ </attribute>
1130
+ </optional>
1131
+ <optional>
1132
+ <attribute name="cols">
1133
+ <data type="int"/>
1134
+ </attribute>
1135
+ </optional>
1136
+ </element>
1137
+ </define>
819
1138
  <define name="bibliography">
820
1139
  <element name="bibliography">
821
1140
  <oneOrMore>
@@ -888,9 +1207,7 @@
888
1207
  </define>
889
1208
  <define name="IsoWorkgroup">
890
1209
  <optional>
891
- <attribute name="number">
892
- <data type="int"/>
893
- </attribute>
1210
+ <attribute name="number"/>
894
1211
  </optional>
895
1212
  <optional>
896
1213
  <attribute name="type"/>