metanorma-standoc 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +15 -15
  3. data/lib/asciidoctor/standoc/base.rb +3 -0
  4. data/lib/asciidoctor/standoc/blocks.rb +0 -53
  5. data/lib/asciidoctor/standoc/cleanup.rb +2 -0
  6. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +66 -0
  7. data/lib/asciidoctor/standoc/cleanup_ref.rb +1 -2
  8. data/lib/asciidoctor/standoc/converter.rb +3 -0
  9. data/lib/asciidoctor/standoc/front.rb +1 -1
  10. data/lib/asciidoctor/standoc/i18n.rb +38 -0
  11. data/lib/asciidoctor/standoc/reqt.rb +62 -0
  12. data/lib/asciidoctor-yaml/i18n-en.yaml +20 -0
  13. data/lib/asciidoctor-yaml/i18n-fr.yaml +13 -0
  14. data/lib/asciidoctor-yaml/i18n-zh-Hans.yaml +15 -0
  15. data/lib/metanorma/standoc/version.rb +1 -1
  16. data/spec/asciidoctor-standoc/blocks_spec.rb +13 -3
  17. data/spec/asciidoctor-standoc/cleanup_spec.rb +80 -1
  18. data/spec/asciidoctor-standoc/inline_spec.rb +1 -0
  19. data/spec/asciidoctor-standoc/isobib_cache_spec.rb +4 -0
  20. data/spec/asciidoctor-standoc/refs_dl_spec.rb +3 -0
  21. data/spec/asciidoctor-standoc/refs_spec.rb +15 -0
  22. data/spec/asciidoctor-standoc/section_spec.rb +141 -1
  23. data/spec/metanorma/processor_spec.rb +1 -2
  24. data/spec/spec_helper.rb +4 -0
  25. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +30 -30
  26. data/spec/vcr_cassettes/isobib_get_123.yml +24 -24
  27. data/spec/vcr_cassettes/isobib_get_123_2001.yml +23 -23
  28. data/spec/vcr_cassettes/isobib_get_124.yml +13 -13
  29. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +4 -4
  30. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +35 -35
  31. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3549faf588ef5ac25ac0f5fc7793fb1b8ec5f43b0e1cf6782c8db9858583b023
4
- data.tar.gz: 191776185cad00c0691dab60a744a7d41cac34276b118d3440a4697e5f969043
3
+ metadata.gz: da7f659bff4d006bb019e303f8d6df764a6870e5ddf6b68d5a710fa160aae5dd
4
+ data.tar.gz: 65427fce326003810d75ca1fe4a004a117d9d6076f3c676930c8e286b140dd71
5
5
  SHA512:
6
- metadata.gz: 44ae4a1c90f48a83a4d727d28534736d7c714a8abc3b6cf85f2eadab0c4834a8d47d61e852e1070301c50044677aeb774e74dc1eeb99b106d9e35ae7ce13d4c4
7
- data.tar.gz: 698b0a2f29a7c4739234307995ef89da77185d1dd1d4da7511c8036f043f91a0d7ad6fc19eb2df9abf76fd31e712f2ea1a23a9136a1494c6749b3663aef40009
6
+ metadata.gz: '08993a10718efddd39418bb9af4018d55a9e6e0882d6d4cb39cbe8d0b274b4b419c9cb353e2f1606e4851d42b1e668cb8579c5a660bbd1ed651b32bd76823879'
7
+ data.tar.gz: aa26abdc106f10ea716c2bc98a811e5734cad920f70076dc392fb0ab2743e079cae42195483d81dc271494af8f60592fc7b9f16dfe28f6d39c03e4f6b63c8cb6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- metanorma-standoc (1.3.0)
4
+ metanorma-standoc (1.3.1)
5
5
  asciidoctor (~> 1.5.7)
6
6
  concurrent-ruby
7
7
  html2doc (~> 0.8.11)
@@ -16,8 +16,8 @@ PATH
16
16
  GEM
17
17
  remote: https://rubygems.org/
18
18
  specs:
19
- addressable (2.6.0)
20
- public_suffix (>= 2.0.2, < 4.0)
19
+ addressable (2.7.0)
20
+ public_suffix (>= 2.0.2, < 5.0)
21
21
  algoliasearch (1.26.1)
22
22
  httpclient (~> 2.8, >= 2.8.3)
23
23
  json (>= 1.5.1)
@@ -65,13 +65,13 @@ GEM
65
65
  iev (0.2.2)
66
66
  nokogiri
67
67
  image_size (2.0.2)
68
- isodoc (1.0.0)
68
+ isodoc (1.0.1)
69
69
  asciimath
70
70
  html2doc (~> 0.8.11)
71
71
  htmlentities (~> 4.3.4)
72
72
  liquid
73
73
  metanorma (~> 0.3.0)
74
- nokogiri (>= 1)
74
+ nokogiri (>= 1.10.4)
75
75
  rake (~> 12.0)
76
76
  roman-numerals
77
77
  sassc (~> 2)
@@ -101,19 +101,19 @@ GEM
101
101
  shellany (~> 0.0)
102
102
  optout (0.0.2)
103
103
  parallel (1.17.0)
104
- parser (2.6.3.0)
104
+ parser (2.6.4.0)
105
105
  ast (~> 2.4.0)
106
106
  powerpack (0.1.2)
107
107
  pry (0.12.2)
108
108
  coderay (~> 1.1.0)
109
109
  method_source (~> 0.9.0)
110
- public_suffix (3.1.1)
110
+ public_suffix (4.0.1)
111
111
  rainbow (3.0.0)
112
112
  rake (12.3.3)
113
113
  rb-fsevent (0.10.3)
114
114
  rb-inotify (0.10.0)
115
115
  ffi (~> 1.0)
116
- relaton (0.5.2)
116
+ relaton (0.5.3)
117
117
  algoliasearch
118
118
  relaton-gb (~> 0.6.0)
119
119
  relaton-iec (~> 0.4.0)
@@ -124,18 +124,18 @@ GEM
124
124
  relaton-bib (0.3.5)
125
125
  addressable
126
126
  nokogiri (~> 1.10)
127
- relaton-gb (0.6.1)
127
+ relaton-gb (0.6.2)
128
128
  cnccs (~> 0.1.1)
129
129
  gb-agencies (~> 0.0.1)
130
130
  relaton-iso-bib (~> 0.3.0)
131
- relaton-iec (0.4.2)
131
+ relaton-iec (0.4.3)
132
132
  addressable
133
133
  relaton-iso-bib (~> 0.3.0)
134
- relaton-ietf (0.6.2)
134
+ relaton-ietf (0.6.3)
135
135
  relaton-bib (~> 0.3.0)
136
136
  relaton-iev (0.1.1)
137
137
  relaton (~> 0.5.0)
138
- relaton-iso (0.6.3)
138
+ relaton-iso (0.6.4)
139
139
  relaton-iec (~> 0.4.0)
140
140
  relaton-iso-bib (~> 0.3.0)
141
141
  relaton-iso-bib (0.3.4)
@@ -144,7 +144,7 @@ GEM
144
144
  ruby_deep_clone (~> 0.8.0)
145
145
  relaton-itu (0.3.2)
146
146
  relaton-iso-bib (~> 0.3.0)
147
- relaton-nist (0.3.2)
147
+ relaton-nist (0.3.3)
148
148
  relaton-bib (~> 0.3.0)
149
149
  rubyzip
150
150
  roman-numerals (0.3.0)
@@ -175,7 +175,7 @@ GEM
175
175
  ruby_dep (1.5.0)
176
176
  rubyzip (1.2.3)
177
177
  safe_yaml (1.0.5)
178
- sassc (2.1.0)
178
+ sassc (2.2.0)
179
179
  ffi (~> 1.9)
180
180
  shellany (0.0.1)
181
181
  simplecov (0.17.0)
@@ -192,7 +192,7 @@ GEM
192
192
  unicode2latex (0.0.2)
193
193
  uuidtools (2.1.5)
194
194
  vcr (5.0.0)
195
- webmock (3.6.2)
195
+ webmock (3.7.0)
196
196
  addressable (>= 2.3.6)
197
197
  crack (>= 0.3.2)
198
198
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -101,6 +101,9 @@ module Asciidoctor
101
101
  @datauriimage = node.attr("data-uri-image")
102
102
  init_bib_caches(node)
103
103
  init_iev_caches(node)
104
+ lang = (node.attr("language") || "en")
105
+ script = (node.attr("script") || "en")
106
+ i18n_init(lang, script)
104
107
  end
105
108
 
106
109
  def init_bib_caches(node)
@@ -29,16 +29,6 @@ module Asciidoctor
29
29
  result
30
30
  end
31
31
 
32
- def requirement_subpart(node)
33
- name = node.role || node.attr("style")
34
- noko do |xml|
35
- xml.send name, **attr_code(exclude: node.option?("exclude"),
36
- type: node.attr("type")) do |o|
37
- o << node.content
38
- end
39
- end.join("\n")
40
- end
41
-
42
32
  def literal(node)
43
33
  noko do |xml|
44
34
  xml.figure **id_attr(node) do |f|
@@ -161,48 +151,6 @@ module Asciidoctor
161
151
  end.join("\n")
162
152
  end
163
153
 
164
- def req_classif_parse(classif)
165
- ret = []
166
- classif.split(/;\s*/).each do |c|
167
- c1 = c.split(/:\s*/)
168
- next unless c1.size == 2
169
- c1[1].split(/,\s*/).each { |v| ret << [ c1[0], v ] }
170
- end
171
- ret
172
- end
173
-
174
- def requirement_classification(classif, ex)
175
- req_classif_parse(classif).each do |r|
176
- ex.classification do |c|
177
- c.tag r[0]
178
- c.value r[1]
179
- end
180
- end
181
- end
182
-
183
- def reqt_attributes(node)
184
- {
185
- id: Utils::anchor_or_uuid,
186
- unnumbered: node.option?("unnumbered") ? "true" : nil,
187
- obligation: node.attr("obligation"),
188
- filename: node.attr("filename")
189
- }
190
- end
191
-
192
- def requirement(node, obligation)
193
- classif = node.attr("classification")
194
- noko do |xml|
195
- xml.send obligation, **attr_code(reqt_attributes(node)) do |ex|
196
- ex.title node.title if node.title
197
- ex.label node.attr("label") if node.attr("label")
198
- ex.subject node.attr("subject") if node.attr("subject")
199
- ex.inherit node.attr("inherit") if node.attr("inherit")
200
- requirement_classification(classif, ex) if classif
201
- wrap_in_para(node, ex)
202
- end
203
- end.join("\n")
204
- end
205
-
206
154
  def preamble(node)
207
155
  noko do |xml|
208
156
  xml.foreword do |xml_abstract|
@@ -254,7 +202,6 @@ module Asciidoctor
254
202
  end.join("")
255
203
  end
256
204
 
257
-
258
205
  def paragraph(node)
259
206
  return termsource(node) if node.role == "source"
260
207
  attrs = { align: node.attr("align"),
@@ -7,6 +7,7 @@ require "pp"
7
7
  require_relative "./cleanup_block.rb"
8
8
  require_relative "./cleanup_footnotes.rb"
9
9
  require_relative "./cleanup_ref.rb"
10
+ require_relative "./cleanup_boilerplate.rb"
10
11
  require "relaton_iev"
11
12
 
12
13
  module Asciidoctor
@@ -57,6 +58,7 @@ module Asciidoctor
57
58
  bookmark_cleanup(xmldoc)
58
59
  smartquotes_cleanup(xmldoc)
59
60
  requirement_cleanup(xmldoc)
61
+ boilerplate_cleanup(xmldoc)
60
62
  xmldoc
61
63
  end
62
64
 
@@ -0,0 +1,66 @@
1
+ module Asciidoctor
2
+ module Standoc
3
+ module Cleanup
4
+ def external_terms_boilerplate(sources)
5
+ IsoDoc::Function::I18n::l10n(
6
+ @external_terms_boilerplate.gsub(/%/, sources || "???"),
7
+ @lang, @script)
8
+ end
9
+
10
+ def internal_external_terms_boilerplate(sources)
11
+ IsoDoc::Function::I18n::l10n(
12
+ @internal_external_terms_boilerplate.gsub(/%/, sources || "??"),
13
+ @lang, @script)
14
+ end
15
+
16
+ def term_defs_boilerplate(div, source, term, preface, isodoc)
17
+ div.next = @term_def_boilerplate
18
+ source.each { |s| @anchors[s["bibitemid"]] or
19
+ warn "term source #{s['bibitemid']} not referenced" }
20
+ if source.empty? && term.nil?
21
+ div.next = @no_terms_boilerplate
22
+ else
23
+ div.next = term_defs_boilerplate_cont(source, term, isodoc)
24
+ end
25
+ end
26
+
27
+ def term_defs_boilerplate_cont(src, term, isodoc)
28
+ sources = isodoc.sentence_join(src.map do |s|
29
+ %{<eref bibitem="#{s['bibitemid']}"/>}
30
+ end)
31
+ if src.empty? then @internal_terms_boilerplate
32
+ elsif term.nil? then external_terms_boilerplate(sources)
33
+ else
34
+ internal_external_terms_boilerplate(sources)
35
+ end
36
+ end
37
+
38
+ def norm_ref_preface(f)
39
+ refs = f.elements.select do |e|
40
+ ["reference", "bibitem"].include? e.name
41
+ end
42
+ f.at("./title").next =
43
+ "<p>#{(refs.empty? ? @norm_empty_pref : @norm_with_refs_pref)}</p>"
44
+ end
45
+
46
+ TERM_CLAUSE = "//sections/terms | "\
47
+ "//sections/clause[descendant::terms]".freeze
48
+
49
+ NORM_REF = "//bibliography/references[title = 'Normative References' or "\
50
+ "title = 'Normative references']".freeze
51
+
52
+ def boilerplate_cleanup(xmldoc)
53
+ isodoc = IsoDoc::Convert.new({})
54
+ @lang = xmldoc&.at("//bibdata/language")&.text
55
+ @script = xmldoc&.at("//bibdata/script")&.text
56
+ isodoc.i18n_init(@lang, @script)
57
+ f = xmldoc.at(self.class::TERM_CLAUSE) and
58
+ term_defs_boilerplate(f.at("./title"),
59
+ xmldoc.xpath(".//termdocsource"),
60
+ f.at(".//term"), f.at(".//p"), isodoc)
61
+ f = xmldoc.at(self.class::NORM_REF) and
62
+ norm_ref_preface(f)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -116,8 +116,7 @@ module Asciidoctor
116
116
  end
117
117
 
118
118
  def normref_cleanup(xmldoc)
119
- q = "//references[title = 'Normative References']"
120
- r = xmldoc.at(q) || return
119
+ r = xmldoc.at(NORM_REF) || return
121
120
  r.elements.each do |n|
122
121
  n.remove unless ["title", "bibitem"].include? n.name
123
122
  end
@@ -11,6 +11,8 @@ require "asciidoctor/standoc/table"
11
11
  require "asciidoctor/standoc/validate"
12
12
  require "asciidoctor/standoc/utils"
13
13
  require "asciidoctor/standoc/cleanup"
14
+ require "asciidoctor/standoc/i18n"
15
+ require "asciidoctor/standoc/reqt"
14
16
  require_relative "./macros.rb"
15
17
 
16
18
  module Asciidoctor
@@ -29,6 +31,7 @@ module Asciidoctor
29
31
  include ::Asciidoctor::Standoc::Section
30
32
  include ::Asciidoctor::Standoc::Table
31
33
  include ::Asciidoctor::Standoc::Utils
34
+ include ::Asciidoctor::Standoc::I18n
32
35
  include ::Asciidoctor::Standoc::Cleanup
33
36
  include ::Asciidoctor::Standoc::Validate
34
37
 
@@ -192,7 +192,7 @@ module Asciidoctor
192
192
  end
193
193
 
194
194
  def relation_normalise(type)
195
- type.sub(/-by$/, "By").sub(/-of$/, "Of")
195
+ type.sub(/-by$/, "By").sub(/-of$/, "Of").sub(/-from$/, "From")
196
196
  end
197
197
 
198
198
  def metadata_getrelation(node, xml, type)
@@ -0,0 +1,38 @@
1
+ require "yaml"
2
+
3
+ module Asciidoctor
4
+ module Standoc
5
+ module I18n
6
+ def load_yaml(lang, script)
7
+ if @i18nyaml then YAML.load_file(@i18nyaml)
8
+ elsif lang == "en"
9
+ YAML.load_file(File.join(File.dirname(__FILE__),
10
+ "../../asciidoctor-yaml/i18n-en.yaml"))
11
+ elsif lang == "fr"
12
+ YAML.load_file(File.join(File.dirname(__FILE__),
13
+ "../../asciidoctor-yaml/i18n-fr.yaml"))
14
+ elsif lang == "zh" && script == "Hans"
15
+ YAML.load_file(File.join(File.dirname(__FILE__),
16
+ "../../asciidoctor-yaml/i18n-zh-Hans.yaml"))
17
+ else
18
+ YAML.load_file(File.join(File.dirname(__FILE__),
19
+ "../../asciidoctor-yaml/i18n-en.yaml"))
20
+ end
21
+ end
22
+
23
+ def i18n_init(lang, script)
24
+ @lang = lang
25
+ @script = script
26
+ y = load_yaml(lang, script)
27
+ @term_def_boilerplate = y["term_def_boilerplate"] || ""
28
+ @no_terms_boilerplate = y["no_terms_boilerplate"] || ""
29
+ @internal_terms_boilerplate = y["internal_terms_boilerplate"] || ""
30
+ @norm_with_refs_pref = y["norm_with_refs_pref"] || ""
31
+ @norm_empty_pref = y["norm_empty_pref"] || ""
32
+ @external_terms_boilerplate = y["external_terms_boilerplate"] || ""
33
+ @internal_external_terms_boilerplate =
34
+ y["internal_external_terms_boilerplate"] || ""
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,62 @@
1
+ require "htmlentities"
2
+ require "uri"
3
+ require "mime/types"
4
+ require "base64"
5
+
6
+ module Asciidoctor
7
+ module Standoc
8
+ module Blocks
9
+ def requirement_subpart(node)
10
+ name = node.role || node.attr("style")
11
+ noko do |xml|
12
+ xml.send name, **attr_code(exclude: node.option?("exclude"),
13
+ type: node.attr("type")) do |o|
14
+ o << node.content
15
+ end
16
+ end.join("\n")
17
+ end
18
+
19
+ def req_classif_parse(classif)
20
+ ret = []
21
+ classif.split(/;\s*/).each do |c|
22
+ c1 = c.split(/:\s*/)
23
+ next unless c1.size == 2
24
+ c1[1].split(/,\s*/).each { |v| ret << [ c1[0], v ] }
25
+ end
26
+ ret
27
+ end
28
+
29
+ def requirement_classification(classif, ex)
30
+ req_classif_parse(classif).each do |r|
31
+ ex.classification do |c|
32
+ c.tag r[0]
33
+ c.value r[1]
34
+ end
35
+ end
36
+ end
37
+
38
+ def reqt_attributes(node)
39
+ {
40
+ id: Utils::anchor_or_uuid,
41
+ unnumbered: node.option?("unnumbered") ? "true" : nil,
42
+ obligation: node.attr("obligation"),
43
+ filename: node.attr("filename")
44
+ }
45
+ end
46
+
47
+ def requirement(node, obligation)
48
+ classif = node.attr("classification")
49
+ noko do |xml|
50
+ xml.send obligation, **attr_code(reqt_attributes(node)) do |ex|
51
+ ex.title node.title if node.title
52
+ ex.label node.attr("label") if node.attr("label")
53
+ ex.subject node.attr("subject") if node.attr("subject")
54
+ ex.inherit node.attr("inherit") if node.attr("inherit")
55
+ requirement_classification(classif, ex) if classif
56
+ wrap_in_para(node, ex)
57
+ end
58
+ end.join("\n")
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,20 @@
1
+ term_def_boilerplate:
2
+ no_terms_boilerplate: |
3
+ <p>No terms and definitions are listed in this document.</p>
4
+ internal_terms_boilerplate: |
5
+ <p>For the purposes of this document,
6
+ the following terms and definitions apply.</p>
7
+ norm_with_refs_pref:
8
+ The following documents are referred to in the text in such a way
9
+ that some or all of their content constitutes requirements of this
10
+ document. For dated references, only the edition cited applies.
11
+ For undated references, the latest edition of the referenced
12
+ document (including any amendments) applies.
13
+ norm_empty_pref:
14
+ There are no normative references in this document.
15
+ external_terms_boilerplate: |
16
+ <p>For the purposes of this document,
17
+ the terms and definitions given in % apply.</p>
18
+ internal_external_terms_boilerplate: |
19
+ <p>For the purposes of this document, the terms and definitions
20
+ given in % and the following apply.</p>
@@ -0,0 +1,13 @@
1
+ term_def_boilerplate:
2
+ no_terms_boilerplate: |
3
+ <p>Aucun terme n'est defini dans le présent document.</p>
4
+ internal_terms_boilerplate: |
5
+ <p>Pour les besoins du présent document, les termes et définitions suivants s'appliquent.</p>
6
+ norm_with_refs_pref:
7
+ Les documents suivants cités dans le texte constituent, pour tout ou partie de leur contenu, des exigences du présent document. Pour les références datées, seule l’édition citée s'applique. Pour les références non datées, la dernière édition du document de référence s'applique (y compris les éventuels amendements).
8
+ norm_empty_pref:
9
+ Le présent document ne contient aucune référence normative.
10
+ external_terms_boilerplate: |
11
+ <p>Pour les besoins du présent document, les termes et définitions de % s'appliquent.</p>
12
+ internal_external_terms_boilerplate: |
13
+ <p>Pour les besoins du présent document, les termes et définitions de % ainsi que les suivants, s'appliquent.</p>
@@ -0,0 +1,15 @@
1
+ term_def_boilerplate:
2
+ no_terms_boilerplate: |
3
+ <p>本文件不提供术语和定义。</p>
4
+ internal_terms_boilerplate: |
5
+ <p>下列术语和定义适用于本文件。</p>
6
+ norm_with_refs_pref:
7
+ 下列文件对于本文件的应用是必不可少的。
8
+ 凡是注日期的引用文件,仅注日期的版本适用于本文件。
9
+ 凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
10
+ norm_empty_pref:
11
+ 本文件并没有规范性引用文件。
12
+ external_terms_boilerplate: |
13
+ <p>% 界定的术语和定义适用于本文件。</p>
14
+ internal_external_terms_boilerplate: |
15
+ <p>% 界定的以及下列术语和定义适用于本文件。</p>
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Standoc
3
- VERSION = "1.3.0".freeze
3
+ VERSION = "1.3.1".freeze
4
4
  end
5
5
  end
@@ -315,6 +315,7 @@ RSpec.describe Asciidoctor::Standoc do
315
315
  <sections>
316
316
  <terms id="_" obligation="normative">
317
317
  <title>Terms and definitions</title>
318
+ <p>For the purposes of this document, the following terms and definitions apply.</p>
318
319
  <term id="_">
319
320
  <preferred>Term1</preferred>
320
321
  <termnote id="_">
@@ -341,6 +342,7 @@ RSpec.describe Asciidoctor::Standoc do
341
342
  <sections>
342
343
  <terms id="_" obligation="normative">
343
344
  <title>Terms and definitions</title>
345
+ <p>No terms and definitions are listed in this document.</p>
344
346
  <clause id="_" inline-header="false" obligation="normative">
345
347
  <title>Term1</title>
346
348
  <note id="_">
@@ -367,7 +369,9 @@ RSpec.describe Asciidoctor::Standoc do
367
369
  INPUT
368
370
  #{BLANK_HDR}
369
371
  <sections>
370
- <terms id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><term id="_">
372
+ <terms id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
373
+ <p>For the purposes of this document, the following terms and definitions apply.</p>
374
+ <term id="_">
371
375
  <preferred>Term1</preferred>
372
376
  </term>
373
377
  <definitions id="_">
@@ -493,6 +497,7 @@ RSpec.describe Asciidoctor::Standoc do
493
497
  <sections>
494
498
  <terms id="_" obligation="normative">
495
499
  <title>Terms and definitions</title>
500
+ <p>For the purposes of this document, the following terms and definitions apply.</p>
496
501
  <term id="_">
497
502
  <preferred>Term1</preferred>
498
503
 
@@ -520,6 +525,7 @@ RSpec.describe Asciidoctor::Standoc do
520
525
  <sections>
521
526
  <terms id="_" obligation="normative">
522
527
  <title>Terms and definitions</title>
528
+ <p>No terms and definitions are listed in this document.</p>
523
529
  <clause id="_" inline-header="false" obligation="normative">
524
530
  <title>Term1</title>
525
531
  <example id="_">
@@ -546,7 +552,8 @@ RSpec.describe Asciidoctor::Standoc do
546
552
  INPUT
547
553
  #{BLANK_HDR}
548
554
  <sections>
549
- <terms id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><term id="_">
555
+ <terms id="_" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title>
556
+ <p>For the purposes of this document, the following terms and definitions apply.</p><term id="_">
550
557
  <preferred>Term1</preferred>
551
558
  </term>
552
559
  <definitions id="_">
@@ -806,7 +813,8 @@ RSpec.describe Asciidoctor::Standoc do
806
813
  #{BLANK_HDR}
807
814
  <sections>
808
815
  <terms id="_" obligation="normative">
809
- <title>Terms and definitions</title>
816
+ <title>Terms and definitions</title><p>For the purposes of this document,
817
+ the following terms and definitions apply.</p>
810
818
  <term id="_">
811
819
  <preferred>Term1</preferred>
812
820
  <termsource status="identical">
@@ -833,6 +841,8 @@ RSpec.describe Asciidoctor::Standoc do
833
841
  <sections>
834
842
  <terms id="_" obligation="normative">
835
843
  <title>Terms and definitions</title>
844
+ <p>For the purposes of this document,
845
+ the following terms and definitions apply.</p>
836
846
  <term id="_">
837
847
  <preferred>Term1</preferred>
838
848
  <termsource status="modified">