metanorma-itu 1.2.16 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +12 -11
  3. data/.hound.yml +3 -1
  4. data/.rubocop.yml +3 -7
  5. data/lib/asciidoctor/itu/biblio.rng +1 -0
  6. data/lib/asciidoctor/itu/cleanup.rb +9 -6
  7. data/lib/asciidoctor/itu/converter.rb +31 -27
  8. data/lib/asciidoctor/itu/front.rb +35 -23
  9. data/lib/asciidoctor/itu/isodoc.rng +321 -4
  10. data/lib/asciidoctor/itu/itu.rng +3 -30
  11. data/lib/isodoc/itu/base_convert.rb +25 -37
  12. data/lib/isodoc/itu/html/_coverpage.css +7 -0
  13. data/lib/isodoc/itu/html/header.html +8 -8
  14. data/lib/isodoc/itu/html/htmlstyle.css +14 -7
  15. data/lib/isodoc/itu/html/htmlstyle.scss +0 -9
  16. data/lib/isodoc/itu/html/itu.css +0 -7
  17. data/lib/isodoc/itu/html/itu.scss +0 -7
  18. data/lib/isodoc/itu/html_convert.rb +0 -1
  19. data/lib/isodoc/itu/i18n-ar.yaml +87 -0
  20. data/lib/isodoc/itu/i18n-de.yaml +87 -0
  21. data/lib/isodoc/itu/i18n-en.yaml +1 -0
  22. data/lib/isodoc/itu/i18n-es.yaml +88 -0
  23. data/lib/isodoc/itu/i18n-fr.yaml +88 -0
  24. data/lib/isodoc/itu/i18n-ru.yaml +88 -0
  25. data/lib/isodoc/itu/i18n-zh-Hans.yaml +81 -0
  26. data/lib/isodoc/itu/i18n.rb +14 -4
  27. data/lib/isodoc/itu/itu.implementers-guide.xsl +816 -332
  28. data/lib/isodoc/itu/itu.in-force.xsl +816 -332
  29. data/lib/isodoc/itu/itu.recommendation-annex.xsl +816 -332
  30. data/lib/isodoc/itu/itu.recommendation-supplement.xsl +816 -332
  31. data/lib/isodoc/itu/itu.recommendation.xsl +816 -332
  32. data/lib/isodoc/itu/itu.resolution.xsl +816 -332
  33. data/lib/isodoc/itu/itu.technical-paper.xsl +816 -332
  34. data/lib/isodoc/itu/itu.technical-report.xsl +816 -332
  35. data/lib/isodoc/itu/metadata.rb +3 -3
  36. data/lib/isodoc/itu/presentation_xml_convert.rb +1 -1
  37. data/lib/isodoc/itu/xref.rb +1 -2
  38. data/lib/metanorma/itu/version.rb +1 -1
  39. data/metanorma-itu.gemspec +4 -4
  40. metadata +34 -29
  41. data/lib/asciidoctor/itu/macros.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74f8f79bc99c8ff459c43ec1dd68f5fc1486f9f55d2632408a3d22514b5c9d9e
4
- data.tar.gz: 9c15a9900916ffaad81a23b3d44e8238da413fbf2bc042a8c5aa2ff34a67e62b
3
+ metadata.gz: 621588f887228ab3427bf392ab3bedbdf1716c551cd7806c48eac05fdf5dfdae
4
+ data.tar.gz: 2a290310e1b75d15766786b02b462b9cd94eb982be50235dfb83b24d63d7ecba
5
5
  SHA512:
6
- metadata.gz: 00f039f6898254841544adace9b22ecc17e9e470198885be2027dc2b435401203fd240ccbcc0a61dae4bf239791e42a62ec27235e940060aea64168f07b5526e
7
- data.tar.gz: ca7a801478f776e35b0dc25fac1b32cc9e5b610466a85ad381e4b689bef95159fbdb5e3017e3a542f0eaa8329bef5b724104b50b9abc5a6a070c63a00381376e
6
+ metadata.gz: 8d2c873817838b6cb6d4a518403c97d981a8046e420f0c8a2e020d4b2bb2558805275e3e5d17bcddf685151113d41b21aebec45d7cec39faf4990bae6c7f2dc3
7
+ data.tar.gz: 6d6048e9fa1500f1f97facb582b582cf950e3f34b48ae255e0fc69a37c0166f31a218d85acc1d459a3c5a2eaec414a338157ca72413f2d6a503f7c29e9c164f5
@@ -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/.hound.yml CHANGED
@@ -1,3 +1,5 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
1
3
  ruby:
2
- Enabled: true
4
+ enabled: true
3
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
10
  TargetRubyVersion: 2.4
13
- Rails:
14
- Enabled: true
@@ -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">
@@ -24,12 +24,12 @@ module Asciidoctor
24
24
  end
25
25
  end
26
26
 
27
- def insert_missing_sections(x)
28
- insert_scope(x)
29
- insert_norm_ref(x)
30
- insert_terms(x)
31
- insert_symbols(x)
32
- insert_conventions(x)
27
+ def insert_missing_sections(xml)
28
+ insert_scope(xml)
29
+ insert_norm_ref(xml)
30
+ insert_terms(xml)
31
+ insert_symbols(xml)
32
+ insert_conventions(xml)
33
33
  end
34
34
 
35
35
  def add_id
@@ -109,8 +109,10 @@ module Asciidoctor
109
109
 
110
110
  def smartquotes_cleanup(xmldoc)
111
111
  return super if @smartquotes
112
+
112
113
  xmldoc.traverse do |n|
113
114
  next unless n.text?
115
+
114
116
  n.replace(HTMLEntities.new.encode(
115
117
  n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'").
116
118
  gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic))
@@ -175,6 +177,7 @@ module Asciidoctor
175
177
  return 4 if bib.at("./docidentifier[@type][not(@type = 'DOI' or "\
176
178
  "@type = 'metanorma' or @type = 'ISSN' or @type = "\
177
179
  "'ISBN')]")
180
+
178
181
  5
179
182
  end
180
183
 
@@ -1,10 +1,9 @@
1
1
  require "asciidoctor"
2
2
  require "asciidoctor/standoc/converter"
3
3
  require "fileutils"
4
- require_relative "./front.rb"
5
- require_relative "./validate.rb"
6
- require_relative "./cleanup.rb"
7
- require_relative "./macros.rb"
4
+ require_relative "./front"
5
+ require_relative "./validate"
6
+ require_relative "./cleanup"
8
7
 
9
8
  module Asciidoctor
10
9
  module ITU
@@ -17,12 +16,7 @@ module Asciidoctor
17
16
 
18
17
  register_for "itu"
19
18
 
20
- Asciidoctor::Extensions.register do
21
- inline_macro AddMacro
22
- inline_macro DelMacro
23
- end
24
-
25
- def title_validate(root)
19
+ def title_validate(_root)
26
20
  nil
27
21
  end
28
22
 
@@ -54,14 +48,14 @@ module Asciidoctor
54
48
  end
55
49
 
56
50
  def outputs(node, ret)
57
- File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
58
- presentation_xml_converter(node).convert(@filename + ".xml")
59
- html_converter(node).convert(@filename + ".presentation.xml",
51
+ File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
52
+ presentation_xml_converter(node).convert("#{@filename}.xml")
53
+ html_converter(node).convert("#{@filename}.presentation.xml",
60
54
  nil, false, "#{@filename}.html")
61
- doc_converter(node).convert(@filename + ".presentation.xml",
55
+ doc_converter(node).convert("#{@filename}.presentation.xml",
62
56
  nil, false, "#{@filename}.doc")
63
57
  node.attr("no-pdf") or
64
- pdf_converter(node)&.convert(@filename + ".presentation.xml",
58
+ pdf_converter(node)&.convert("#{@filename}.presentation.xml",
65
59
  nil, false, "#{@filename}.pdf")
66
60
  end
67
61
 
@@ -71,8 +65,8 @@ module Asciidoctor
71
65
  File.join(File.dirname(__FILE__), "itu.rng"))
72
66
  end
73
67
 
74
- def style(n, t)
75
- return
68
+ def style(_node, _text)
69
+ nil
76
70
  end
77
71
 
78
72
  def sectiontype_streamline(ret)
@@ -90,15 +84,16 @@ module Asciidoctor
90
84
  def sectiontype(node, level = true)
91
85
  ret = super
92
86
  hdr = sectiontype_streamline(node&.attr("heading")&.downcase)
93
- return nil if ret == "terms and definitions" &&
87
+ return nil if ret == "terms and definitions" &&
94
88
  hdr != "terms and definitions" && node.level > 1
95
- return nil if ret == "symbols and abbreviated terms" &&
89
+ return nil if ret == "symbols and abbreviated terms" &&
96
90
  hdr != "symbols and abbreviated terms" && node.level > 1
91
+
97
92
  ret
98
93
  end
99
94
 
100
95
  def term_def_subclause_parse(attrs, xml, node)
101
- case clausetype = sectiontype1(node)
96
+ case sectiontype1(node)
102
97
  when "terms defined in this recommendation"
103
98
  term_def_parse(attrs.merge(type: "internal"), xml, node, false)
104
99
  when "terms defined elsewhere"
@@ -110,29 +105,38 @@ module Asciidoctor
110
105
 
111
106
  def metadata_keywords(node, xml)
112
107
  return unless node.attr("keywords")
113
- node.attr("keywords").split(/,[ ]*/).sort.each_with_index do |kw, i|
114
- xml.keyword (i == 0 ? kw.capitalize : kw)
108
+
109
+ node.attr("keywords").split(/, */).sort.each_with_index do |kw, i|
110
+ xml.keyword (i.zero? ? strict_capitalize(kw) : kw)
115
111
  end
116
112
  end
117
113
 
114
+ def strict_capitalize(str)
115
+ letters = str.split("")
116
+ letters.first.upcase!
117
+ letters.join
118
+ end
119
+
118
120
  def clause_parse(attrs, xml, node)
119
121
  node.option?("unnumbered") and attrs[:unnumbered] = true
120
- case clausetype = sectiontype1(node)
122
+ case sectiontype1(node)
121
123
  when "conventions" then attrs = attrs.merge(type: "conventions")
122
- when "history"
124
+ when "history"
123
125
  attrs[:preface] and attrs = attrs.merge(type: "history")
124
- when "source"
126
+ when "source"
125
127
  attrs[:preface] and attrs = attrs.merge(type: "source")
126
128
  end
127
129
  super
128
130
  end
129
131
 
130
132
  def html_extract_attributes(node)
131
- super.merge(hierarchical_assets: node.attr("hierarchical-object-numbering"))
133
+ super.merge(hierarchical_assets:
134
+ node.attr("hierarchical-object-numbering"))
132
135
  end
133
136
 
134
137
  def doc_extract_attributes(node)
135
- super.merge(hierarchical_assets: node.attr("hierarchical-object-numbering"))
138
+ super.merge(hierarchical_assets:
139
+ node.attr("hierarchical-object-numbering"))
136
140
  end
137
141
 
138
142
  def presentation_xml_converter(node)
@@ -6,21 +6,24 @@ module Asciidoctor
6
6
  module ITU
7
7
  class Converter < Standoc::Converter
8
8
  def metadata_status(node, xml)
9
+ stage = (node.attr("status") || node.attr("docstage") || "published")
10
+ stage = "draft" if node.attributes.has_key?("draft")
9
11
  xml.status do |s|
10
- s.stage (node.attributes.has_key?("draft") ? "draft" :
11
- (node.attr("status") || node.attr("docstage") || "published" ))
12
+ s.stage stage
12
13
  end
13
14
  end
14
15
 
16
+ def title_attr(type, lang = "en")
17
+ { language: lang, format: "text/plain", type: type }
18
+ end
19
+
15
20
  def title_english(node, xml)
16
- at = { language: "en", format: "text/plain", type: "main" }
17
21
  a = node.attr("title") || node.attr("title-en")
18
- xml.title **attr_code(at) do |t|
22
+ xml.title **attr_code(title_attr("main")) do |t|
19
23
  t << (Metanorma::Utils::asciidoc_sub(a) || node.title)
20
24
  end
21
25
  if a = node.attr("annextitle") || node.attr("annextitle-en")
22
- at[:type] = "annex"
23
- xml.title **attr_code(at) do |t|
26
+ xml.title **attr_code(title_attr("annex")) do |t|
24
27
  t << Metanorma::Utils::asciidoc_sub(a)
25
28
  end
26
29
  end
@@ -30,8 +33,9 @@ module Asciidoctor
30
33
  node.attributes.each do |k, v|
31
34
  next unless /^(annex)?title-(?<lang>.+)$/ =~ k
32
35
  next if lang == "en"
33
- type = /^annex/.match(k) ? "annex" : "main"
34
- xml.title **attr_code(language: lang, format: "text/plain", type: type) do |t|
36
+
37
+ type = /^annex/.match?(k) ? "annex" : "main"
38
+ xml.title **attr_code(title_attr(type, lang)) do |t|
35
39
  t << Metanorma::Utils::asciidoc_sub(v)
36
40
  end
37
41
  end
@@ -40,15 +44,14 @@ module Asciidoctor
40
44
  def title(node, xml)
41
45
  super
42
46
  %w(subtitle amendment-title corrigendum-title).each do |t|
43
- other_title_english(node, xml, t)
44
- other_title_otherlangs(node, xml, t)
47
+ other_title_english(node, xml, t)
48
+ other_title_otherlangs(node, xml, t)
45
49
  end
46
50
  end
47
51
 
48
52
  def other_title_english(node, xml, type)
49
- at = { language: "en", format: "text/plain", type: type.sub(/-title/, "") }
50
53
  a = node.attr(type) || node.attr("#{type}-en")
51
- xml.title **attr_code(at) do |t|
54
+ xml.title **attr_code(title_attr(type.sub(/-title/, ""))) do |t|
52
55
  t << Metanorma::Utils::asciidoc_sub(a)
53
56
  end
54
57
  end
@@ -57,8 +60,9 @@ module Asciidoctor
57
60
  node.attributes.each do |k, v|
58
61
  next unless m = /^#{type}-(?<lang>.+)$/.match(k)
59
62
  next if m[:lang] == "en"
60
- xml.title **attr_code(language: m[:lang], format: "text/plain",
61
- type: type.sub(/-title/, "")) do |t|
63
+
64
+ xml.title **attr_code(title_attr(type.sub(/-title/, ""),
65
+ m[:lang])) do |t|
62
66
  t << Metanorma::Utils::asciidoc_sub(v)
63
67
  end
64
68
  end
@@ -79,7 +83,7 @@ module Asciidoctor
79
83
 
80
84
  def metadata_committee1(node, xml, suffix)
81
85
  xml.editorialgroup do |a|
82
- a.bureau ( node.attr("bureau#{suffix}") || "T" )
86
+ a.bureau ( node.attr("bureau#{suffix}") || "T")
83
87
  if node.attr("group#{suffix}")
84
88
  a.group **attr_code(type: node.attr("grouptype#{suffix}")) do |g|
85
89
  metadata_committee2(node, g, suffix, "")
@@ -119,27 +123,30 @@ module Asciidoctor
119
123
 
120
124
  def provisional_id(node, xml)
121
125
  return unless node.attr("provisional-name")
122
- xml.docidentifier **{type: "ITU-provisional"} do |i|
126
+
127
+ xml.docidentifier **{ type: "ITU-provisional" } do |i|
123
128
  i << node.attr("provisional-name")
124
129
  end
125
130
  end
126
131
 
127
- ITULANG = { "en" => "E", "fr" => "F", "ar" => "A", "es" => "S", "zh" => "C", "ru" => "R" }.freeze
132
+ ITULANG = { "en" => "E", "fr" => "F", "ar" => "A", "es" => "S",
133
+ "zh" => "C", "ru" => "R" }.freeze
128
134
 
129
135
  def itu_id1(node, lang)
130
136
  bureau = node.attr("bureau") || "T"
131
137
  id = doctype(node) == "service-publication" ?
132
138
  @i18n.annex_to_itu_ob_abbrev.sub(/%/, node.attr("docnumber")) :
133
- "ITU-#{bureau} #{node.attr("docnumber")}"
139
+ "ITU-#{bureau} #{node.attr('docnumber')}"
134
140
  id + (lang ? "-#{ITULANG[@lang]}" : "")
135
141
  end
136
142
 
137
143
  def itu_id(node, xml)
138
144
  return unless node.attr("docnumber")
139
- xml.docidentifier **{type: "ITU"} do |i|
145
+
146
+ xml.docidentifier **{ type: "ITU" } do |i|
140
147
  i << itu_id1(node, false)
141
148
  end
142
- xml.docidentifier **{type: "ITU-lang"} do |i|
149
+ xml.docidentifier **{ type: "ITU-lang" } do |i|
143
150
  i << itu_id1(node, true)
144
151
  end
145
152
  xml.docnumber { |i| i << node.attr("docnumber") }
@@ -147,8 +154,9 @@ module Asciidoctor
147
154
 
148
155
  def recommendation_id(node, xml)
149
156
  return unless node.attr("recommendationnumber")
157
+
150
158
  node.attr("recommendationnumber").split("/").each do |s|
151
- xml.docidentifier **{type: "ITU-Recommendation"} do |i|
159
+ xml.docidentifier **{ type: "ITU-Recommendation" } do |i|
152
160
  i << s
153
161
  end
154
162
  end
@@ -171,11 +179,12 @@ module Asciidoctor
171
179
 
172
180
  def metadata_recommendationstatus(node, xml)
173
181
  return unless node.attr("recommendation-from")
182
+
174
183
  xml.recommendationstatus do |s|
175
184
  s.from node.attr("recommendation-from")
176
185
  s.to node.attr("recommendation-to") if node.attr("recommendation-to")
177
186
  if node.attr("approval-process")
178
- s.approvalstage **{process: node.attr("approval-process")} do |a|
187
+ s.approvalstage **{ process: node.attr("approval-process") } do |a|
179
188
  a << node.attr("approval-status")
180
189
  end
181
190
  end
@@ -188,6 +197,7 @@ module Asciidoctor
188
197
 
189
198
  def structured_id(node, xml)
190
199
  return unless node.attr("docnumber")
200
+
191
201
  xml.structuredidentifier do |i|
192
202
  i.bureau node.attr("bureau") || "T"
193
203
  i.docnumber node.attr("docnumber")
@@ -198,7 +208,8 @@ module Asciidoctor
198
208
  end
199
209
 
200
210
  def metadata_techreport(node, xml)
201
- a = node.attr("meeting") and metadata_meeting(a, node.attr("meeting-acronym"), xml)
211
+ a = node.attr("meeting") and
212
+ metadata_meeting(a, node.attr("meeting-acronym"), xml)
202
213
  a = node.attr("meeting-place") and xml.meeting_place a
203
214
  a = node.attr("meeting-date") and metadata_meeting_date(a, xml)
204
215
  a = node.attr("intended-type") and xml.intended_type a
@@ -233,6 +244,7 @@ module Asciidoctor
233
244
 
234
245
  def metadata_ext(node, xml)
235
246
  metadata_doctype(node, xml)
247
+ metadata_subdoctype(node, xml)
236
248
  metadata_committee(node, xml)
237
249
  metadata_ics(node, xml)
238
250
  metadata_recommendationstatus(node, xml)
@@ -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"/>