metanorma-standoc 1.3.24 → 1.3.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +10 -1
  3. data/.github/workflows/ubuntu.yml +13 -3
  4. data/.github/workflows/windows.yml +8 -1
  5. data/lib/asciidoctor/standoc/base.rb +29 -11
  6. data/lib/asciidoctor/standoc/biblio.rng +75 -28
  7. data/lib/asciidoctor/standoc/blocks.rb +12 -5
  8. data/lib/asciidoctor/standoc/cleanup.rb +17 -8
  9. data/lib/asciidoctor/standoc/cleanup_block.rb +3 -0
  10. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +1 -3
  11. data/lib/asciidoctor/standoc/cleanup_inline.rb +3 -0
  12. data/lib/asciidoctor/standoc/cleanup_ref.rb +15 -6
  13. data/lib/asciidoctor/standoc/cleanup_section.rb +36 -8
  14. data/lib/asciidoctor/standoc/front.rb +5 -3
  15. data/lib/asciidoctor/standoc/inline.rb +43 -18
  16. data/lib/asciidoctor/standoc/isodoc.rng +31 -1
  17. data/lib/asciidoctor/standoc/macros.rb +2 -1
  18. data/lib/asciidoctor/standoc/macros_yaml2text.rb +142 -0
  19. data/lib/asciidoctor/standoc/ref.rb +6 -4
  20. data/lib/asciidoctor/standoc/section.rb +41 -9
  21. data/lib/asciidoctor/standoc/utils.rb +2 -11
  22. data/lib/asciidoctor/standoc/validate.rb +8 -2
  23. data/lib/asciidoctor/standoc/validate_section.rb +1 -3
  24. data/lib/metanorma/standoc/latexml_requirement.rb +14 -12
  25. data/lib/metanorma/standoc/version.rb +1 -1
  26. data/metanorma-standoc.gemspec +2 -2
  27. data/spec/asciidoctor-standoc/base_spec.rb +8 -0
  28. data/spec/asciidoctor-standoc/blocks_spec.rb +74 -2
  29. data/spec/asciidoctor-standoc/cleanup_spec.rb +75 -28
  30. data/spec/asciidoctor-standoc/inline_spec.rb +4 -3
  31. data/spec/asciidoctor-standoc/macros_spec.rb +9 -8
  32. data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +564 -0
  33. data/spec/asciidoctor-standoc/refs_dl_spec.rb +91 -3
  34. data/spec/asciidoctor-standoc/refs_spec.rb +272 -166
  35. data/spec/asciidoctor-standoc/section_spec.rb +197 -6
  36. data/spec/asciidoctor-standoc/validate_spec.rb +67 -2
  37. data/spec/assets/codes.yml +695 -0
  38. data/spec/assets/xref_error.adoc +7 -0
  39. data/spec/examples/codes_table.html +3174 -0
  40. data/spec/metanorma/processor_spec.rb +2 -2
  41. data/spec/spec_helper.rb +1 -0
  42. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +77 -271
  43. data/spec/vcr_cassettes/isobib_get_123.yml +36 -82
  44. data/spec/vcr_cassettes/isobib_get_123_2001.yml +17 -40
  45. data/spec/vcr_cassettes/isobib_get_124.yml +19 -101
  46. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
  47. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +34 -34
  48. metadata +11 -6
@@ -62,6 +62,7 @@ module Asciidoctor
62
62
  t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
63
63
  docid(t, m[:usrlbl]) if m[:usrlbl]
64
64
  docid(t, id_and_year(m[:code], yr))
65
+ t.docnumber m[:code].sub(/^[^\d]*/, "")
65
66
  yr and t.date **{ type: "published" } do |d|
66
67
  set_date_range(d, yr)
67
68
  end
@@ -78,6 +79,7 @@ module Asciidoctor
78
79
  t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
79
80
  docid(t, m[:usrlbl]) if m[:usrlbl]
80
81
  docid(t, id_and_year(m[:code], "--"))
82
+ t.docnumber m[:code].sub(/^[^\d]*/, "")
81
83
  t.date **{ type: "published" } do |d|
82
84
  d.on "--"
83
85
  end
@@ -108,6 +110,7 @@ module Asciidoctor
108
110
  t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
109
111
  docid(t, m[:usrlbl]) if m[:usrlbl]
110
112
  docid(t, id_and_year(m[:code], yr) + " (all parts)")
113
+ t.docnumber m[:code].sub(/^[^\d]*/, "")
111
114
  conditional_date(t, m, noyr)
112
115
  iso_publisher(t, m[:code])
113
116
  m.names.include?("fn") && m[:fn] and
@@ -139,6 +142,7 @@ module Asciidoctor
139
142
  end
140
143
  docid(t, m[:usrlbl]) if m[:usrlbl]
141
144
  docid(t, /^\d+$/.match(m[:code]) ? "[#{m[:code]}]" : m[:code])
145
+ t.docnumber m[:code].sub(/^[^\d]*/, "") unless /^\d+$|^\(.+\)$/.match(m[:code])
142
146
  end
143
147
  end
144
148
 
@@ -149,7 +153,7 @@ module Asciidoctor
149
153
  # TODO: alternative where only title is available
150
154
  def refitem(xml, item, node)
151
155
  unless m = NON_ISO_REF.match(item)
152
- @log.add("Asciidoctor Input", node, "#{MALFORMED_REF}: #{item}")
156
+ @log.add("AsciiDoc Input", node, "#{MALFORMED_REF}: #{item}")
153
157
  return
154
158
  end
155
159
  unless m[:code] && /^\d+$/.match(m[:code])
@@ -206,9 +210,7 @@ module Asciidoctor
206
210
 
207
211
  def reference(node)
208
212
  noko do |xml|
209
- node.items.each do |item|
210
- reference1(node, item.text, xml)
211
- end
213
+ node.items.each { |item| reference1(node, item.text, xml) }
212
214
  end.join
213
215
  end
214
216
 
@@ -53,7 +53,15 @@ module Asciidoctor
53
53
  def section_attributes(node)
54
54
  { id: Utils::anchor_or_uuid(node),
55
55
  language: node.attributes["language"],
56
- script: node.attributes["script"] }
56
+ script: node.attributes["script"],
57
+ annex: (
58
+ ((node.attr("style") == "appendix" || node.role == "appendix") &&
59
+ node.level == 1) ? true : nil
60
+ ),
61
+ preface: (
62
+ (node.role == "preface" || node.attr("style") == "preface") ?
63
+ true : nil),
64
+ }
57
65
  end
58
66
 
59
67
  def section(node)
@@ -75,7 +83,12 @@ module Asciidoctor
75
83
  else
76
84
  if @term_def then term_def_subclause_parse(a, xml, node)
77
85
  elsif @definitions then symbols_parse(a, xml, node)
86
+ elsif @norm_ref then norm_ref_parse(a, xml, node)
78
87
  elsif @biblio then bibliography_parse(a, xml, node)
88
+ elsif node.attr("style") == "bibliography" && sectiontype(node, false) == "normative references"
89
+ norm_ref_parse(a, xml, node)
90
+ elsif node.attr("style") == "bibliography" && sectiontype(node, false) == "bibliography"
91
+ bibliography_parse(a, xml, node)
79
92
  elsif node.attr("style") == "bibliography"
80
93
  bibliography_parse(a, xml, node)
81
94
  elsif node.attr("style") == "abstract"
@@ -118,7 +131,6 @@ module Asciidoctor
118
131
  def clause_parse(attrs, xml, node)
119
132
  attrs["inline-header".to_sym] = node.option? "inline-header"
120
133
  attrs[:bibitem] = true if node.option? "bibitem"
121
- attrs[:preface] = true if node.role == "preface" || node.attr("style") == "preface"
122
134
  attrs[:level] = node.attr("level")
123
135
  set_obligation(attrs, node)
124
136
  xml.send "clause", **attr_code(attrs) do |xml_section|
@@ -137,11 +149,11 @@ module Asciidoctor
137
149
  end
138
150
 
139
151
  def bibliography_parse(attrs, xml, node)
152
+ node.option? "bibitem" and return bibitem_parse(attrs, xml, node)
140
153
  node.attr("style") == "bibliography" or
141
- #warn "Section not marked up as [bibliography]!"
142
- @log.add("Asciidoctor Input", node, "Section not marked up as [bibliography]!")
154
+ @log.add("AsciiDoc Input", node, "Section not marked up as [bibliography]!")
143
155
  @biblio = true
144
- xml.references **attr_code(attrs) do |xml_section|
156
+ xml.references **attr_code(attrs.merge(normative: false)) do |xml_section|
145
157
  title = node.level == 1 ? "Bibliography" : node.title
146
158
  xml_section.title { |t| t << title }
147
159
  xml_section << node.content
@@ -180,14 +192,16 @@ module Asciidoctor
180
192
 
181
193
  # subclause contains subclauses
182
194
  def term_def_subclause_parse(attrs, xml, node)
183
- node.role == "nonterm" ||
184
- sectiontype(node, false) == "terms and definitions" and
195
+ node.role == "nonterm" and
185
196
  return nonterm_term_def_subclause_parse(attrs, xml, node)
197
+ st = sectiontype(node, false)
186
198
  return symbols_parse(attrs, xml, node) if @definitions
187
199
  sub = node.find_by(context: :section) { |s| s.level == node.level + 1 }
188
200
  sub.empty? || (return term_def_parse(attrs, xml, node, false))
189
- sectiontype(node, false) == "symbols and abbreviated terms" and
201
+ st == "symbols and abbreviated terms" and
190
202
  (return symbols_parse(attrs, xml, node))
203
+ st == "terms and definitions" and
204
+ return clause_parse(attrs, xml, node)
191
205
  term_def_subclause_parse1(attrs, xml, node)
192
206
  end
193
207
 
@@ -204,6 +218,11 @@ module Asciidoctor
204
218
  SYMBOLS_TITLES.include? s.title.downcase
205
219
  end
206
220
  return "Terms and definitions" if sub.empty?
221
+ sym = /symbol/i.match(node.title)
222
+ abbrev = /abbreviat/i.match(node.title)
223
+ sym && abbrev and return "Terms, definitions, symbols and abbreviated terms"
224
+ sym and return "Terms, definitions and symbols"
225
+ abbrev and return "Terms, definitions and abbreviated terms"
207
226
  "Terms, definitions, symbols and abbreviated terms"
208
227
  end
209
228
 
@@ -217,9 +236,22 @@ module Asciidoctor
217
236
  end
218
237
  end
219
238
 
239
+ def bibitem_parse(attrs, xml, node)
240
+ norm_ref = @norm_ref
241
+ biblio = @biblio
242
+ @biblio = false
243
+ @norm_ref = false
244
+ clause_parse(attrs, xml, node)
245
+ @biblio = biblio
246
+ @norm_ref = norm_ref
247
+ end
248
+
220
249
  def norm_ref_parse(attrs, xml, node)
250
+ node.option? "bibitem" and return bibitem_parse(attrs, xml, node)
251
+ node.attr("style") == "bibliography" or
252
+ @log.add("AsciiDoc Input", node, "Section not marked up as [bibliography]!")
221
253
  @norm_ref = true
222
- xml.references **attr_code(attrs) do |xml_section|
254
+ xml.references **attr_code(attrs.merge(normative: true)) do |xml_section|
223
255
  xml_section.title { |t| t << "Normative References" }
224
256
  xml_section << node.content
225
257
  end
@@ -20,7 +20,8 @@ module Asciidoctor
20
20
  def asciidoc_sub(x)
21
21
  return nil if x.nil?
22
22
  return "" if x.empty?
23
- d = Asciidoctor::Document.new(x.lines.entries, {header_footer: false})
23
+ d = Asciidoctor::Document.new(x.lines.entries, { header_footer: false,
24
+ backend: :standoc })
24
25
  b = d.parse.blocks.first
25
26
  b.apply_subs(b.source)
26
27
  end
@@ -66,16 +67,6 @@ module Asciidoctor
66
67
  end
67
68
  end
68
69
 
69
- =begin
70
- def warning(node, msg, text)
71
- return if @novalid
72
- warntext = "asciidoctor: WARNING"\
73
- "(#{current_location(node)}): #{msg}"
74
- warntext += ": #{text}" if text
75
- warn warntext
76
- end
77
- =end
78
-
79
70
  def flatten_rawtext_lines(node, result)
80
71
  node.lines.each do |x|
81
72
  if node.respond_to?(:context) && (node.context == :literal ||
@@ -25,7 +25,6 @@ module Asciidoctor
25
25
  @iev = init_iev or return
26
26
  iev = @iev.fetch(locality, xmldoc&.at("//language")&.text || "en") or next
27
27
  pref.include?(iev.downcase) or
28
- #warn %(Term "#{pref[0]}" does not match IEV #{locality} "#{iev}")
29
28
  @log.add("Bibliography", t, %(Term "#{pref[0]}" does not match IEV #{locality} "#{iev}"))
30
29
  end
31
30
  end
@@ -38,14 +37,20 @@ module Asciidoctor
38
37
 
39
38
  def repeat_id_validate(doc)
40
39
  ids = {}
40
+ crash = false
41
41
  doc.xpath("//*[@id]").each do |x|
42
42
  if ids[x["id"]]
43
- @log.add("Anchors", x, "Anchor #{x['id']} has already been used at line #{ids[x['id']]}")
43
+ @log.add("Anchors", x, "Anchor #{x['id']} has already been used at line #{ids[x['id']]}")
44
+ crash = true
44
45
  else
45
46
  ids[x["id"]] = x.line
46
47
  end
47
48
  end
49
+ if crash
50
+ clean_exit
51
+ abort("Cannot deal with multiple instances of same ID")
48
52
  end
53
+ end
49
54
 
50
55
  def schema_validate(doc, schema)
51
56
  Tempfile.open(["tmp", ".xml"], :encoding => 'UTF-8') do |f|
@@ -58,6 +63,7 @@ module Asciidoctor
58
63
  @log.add("Syntax", "XML Line #{"%06d" % error[:line]}:#{error[:column]}", error[:message])
59
64
  end
60
65
  rescue Jing::Error => e
66
+ clean_exit
61
67
  abort "Jing failed with error: #{e}"
62
68
  ensure
63
69
  f.close!
@@ -14,8 +14,7 @@ module Asciidoctor
14
14
  callouts = x.elements.select { |e| e.name == "callout" }
15
15
  annotations = x.elements.select { |e| e.name == "annotation" }
16
16
  if callouts.size != annotations.size
17
- #warn "#{x['id']}: mismatch of callouts and annotations"
18
- @log.add("Asciidoctor Input", x, "mismatch of callouts and annotations")
17
+ @log.add("AsciiDoc Input", x, "mismatch of callouts and annotations")
19
18
  end
20
19
  end
21
20
  end
@@ -23,7 +22,6 @@ module Asciidoctor
23
22
  def style_warning(node, msg, text = nil)
24
23
  w = msg
25
24
  w += ": #{text}" if text
26
- #warn w
27
25
  @log.add("Style Warning", node, w)
28
26
  end
29
27
 
@@ -11,31 +11,33 @@ module Metanorma
11
11
  version = version_output&.match(%r{\d+(.\d+)*})
12
12
 
13
13
  if version.to_s.empty?
14
- @error_message = "LaTeXML not installed (or don't works properly)."\
15
- " You must upgrade/install LaTeXML to #{@recommended_version} version"
14
+ @error_message = "LaTeXML is not available. (Or is PATH not setup properly?)"\
15
+ " You must upgrade/install LaTeXML to a version higher than `#{@recommended_version}`"
16
16
 
17
17
  elsif Gem::Version.new(version) < Gem::Version.new(@minimal_version)
18
- @error_message = "Minimal supported LaTeXML version is #{@minimal_version} "\
19
- "found #{version}, recommended version is #{@recommended_version}"
18
+ @error_message = "Minimal supported LaTeXML version is `#{@minimal_version}` "\
19
+ "Version `#{version}` found; recommended version is `#{@recommended_version}`"
20
20
 
21
21
  elsif Gem::Version.new(version) < Gem::Version.new(@recommended_version)
22
22
  version = "unknown" if version.to_s.empty?
23
- header_msg = "latexmlmath version #{version} below #{@recommended_version}!"
23
+ header_msg = "latexmlmath version `#{version}` below `#{@recommended_version}`!"
24
24
  suggestion = if Gem.win_platform?
25
25
  "cmd encoding is set to UTF-8 with `chcp 65001`"
26
26
  else
27
27
  "terminal encoding is set to UTF-8 with `export LANG=en_US.UTF-8`"
28
28
  end
29
29
 
30
- @error_message = "WARNING #{header_msg} Please sure that #{suggestion} command"
30
+ @error_message = "WARNING #{header_msg} Please sure that #{suggestion} command."
31
31
 
32
- @cmd = "latexmlmath --preload=amsmath -- -"
32
+ @cmd = 'latexmlmath --strict --preload=amsmath -- -'
33
+ @cmd2 = 'latexmlmath --strict -- -'
33
34
  else
34
- @cmd = "latexmlmath --preload=amsmath --inputencoding=UTF-8 -- -"
35
+ @cmd = 'latexmlmath --strict --preload=amsmath --inputencoding=UTF-8 -- -'
36
+ @cmd2 = 'latexmlmath --strict --inputencoding=UTF-8 -- -'
35
37
  end
36
38
  rescue
37
- @error_message = "LaTeXML not installed (or don't works properly)."\
38
- " You must upgrade/install LaTeXML to #{@recommended_version} version"
39
+ @error_message = "LaTeXML is not available. (Or is PATH not setup properly?)"\
40
+ " You must upgrade/install LaTeXML to a version higher than `#{@recommended_version}`"
39
41
  end
40
42
 
41
43
  def satisfied(abort = false)
@@ -53,8 +55,8 @@ module Metanorma
53
55
  def cmd
54
56
  abort @error_message unless @error_message.nil?
55
57
 
56
- @cmd
58
+ [@cmd, @cmd2]
57
59
  end
58
60
  end
59
61
  end
60
- end
62
+ end
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Standoc
3
- VERSION = "1.3.24".freeze
3
+ VERSION = "1.3.29".freeze
4
4
  end
5
5
  end
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "ruby-jing"
31
31
  spec.add_dependency "isodoc", "~> 1.0.20"
32
32
  spec.add_dependency "iev", "~> 0.2.1"
33
- spec.add_dependency "relaton", "~> 0.11.0"
34
- spec.add_dependency "relaton-iev", "~> 0.1.0"
33
+ spec.add_dependency "relaton", "~> 1.0.0"
34
+ spec.add_dependency "relaton-iev", "~> 1.0.0"
35
35
  spec.add_dependency "sterile", "~> 1.0.14"
36
36
  spec.add_dependency "concurrent-ruby"
37
37
  spec.add_dependency "unicode2latex", "~> 0.0.1"
@@ -53,6 +53,8 @@ RSpec.describe Asciidoctor::Standoc do
53
53
  :issued-date: 1007-01-01
54
54
  :circulated-date: 1008-01-01
55
55
  :unchanged-date: 1009-01-01
56
+ :vote-started-date: 1011-01-01
57
+ :vote-ended-date: 1012-01-01
56
58
  :date: Fred 1010-01-01
57
59
  :date_2: Jack 1010-01-01
58
60
  :draft: 3.4
@@ -141,6 +143,12 @@ RSpec.describe Asciidoctor::Standoc do
141
143
  <date type="unchanged">
142
144
  <on>1009-01-01</on>
143
145
  </date>
146
+ <date type='vote-started'>
147
+ <on>1011-01-01</on>
148
+ </date>
149
+ <date type='vote-ended'>
150
+ <on>1012-01-01</on>
151
+ </date>
144
152
  <date type="Fred">
145
153
  <on>1010-01-01</on>
146
154
  </date>
@@ -6,13 +6,14 @@ RSpec.describe Asciidoctor::Standoc do
6
6
  expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
7
7
  #{ASCIIDOC_BLANK_HDR}
8
8
 
9
+ [format="rfc,html"]
9
10
  ++++
10
11
  <abc>X &gt; Y</abc>
11
12
  ++++
12
13
  INPUT
13
14
  #{BLANK_HDR}
14
15
  <sections>
15
- <abc>X &gt; Y</abc>
16
+ <passthrough formats='rfc,html'>&lt;abc&gt;X &gt; Y&lt;/abc&gt;</passthrough>
16
17
  </sections>
17
18
  </standard-document>
18
19
  OUTPUT
@@ -75,7 +76,7 @@ RSpec.describe Asciidoctor::Standoc do
75
76
  </formula>
76
77
  <formula id="_" subsequence="A">
77
78
  <stem type="MathML">
78
- <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="M=\\begin{bmatrix}-\\sin\\lambda_{0}&amp;\\cos\\lambda_{0}&amp;0\\\\&#10;-\\sin\\varphi_{0}\\cos\\lambda_{0}&amp;-\\sin\\varphi_{0}\\sin\\lambda_{0}&amp;\\cos\\varphi_{0%&#10;}\\\\&#10;\\cos\\varphi_{0}\\cos\\lambda_{0}&amp;\\cos\\varphi_{0}\\sin\\lambda_{0}&amp;\\sin\\varphi_{0}%&#10;\\end{bmatrix}" display="block">
79
+ <math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
79
80
  <mrow>
80
81
  <mi>M</mi>
81
82
  <mo>=</mo>
@@ -309,6 +310,11 @@ RSpec.describe Asciidoctor::Standoc do
309
310
  === Term1
310
311
 
311
312
  NOTE: This is a note
313
+
314
+ [NOTE,keep-separate=true]
315
+ ====
316
+ XYZ
317
+ ====
312
318
  INPUT
313
319
  #{BLANK_HDR}
314
320
  <sections>
@@ -320,6 +326,9 @@ RSpec.describe Asciidoctor::Standoc do
320
326
  <termnote id="_">
321
327
  <p id="_">This is a note</p>
322
328
  </termnote>
329
+ <termnote id='_'>
330
+ <p id='_'>XYZ</p>
331
+ </termnote>
323
332
  </term>
324
333
  </terms>
325
334
  </sections>
@@ -394,6 +403,11 @@ RSpec.describe Asciidoctor::Standoc do
394
403
 
395
404
  [[ABC]]
396
405
  NOTE: This is a note
406
+
407
+ [NOTE,keep-separate=true]
408
+ ====
409
+ XYZ
410
+ ====
397
411
  INPUT
398
412
  #{BLANK_HDR}
399
413
  <preface><foreword id="_" obligation="informative">
@@ -407,6 +421,9 @@ RSpec.describe Asciidoctor::Standoc do
407
421
  <note id="ABC">
408
422
  <p id="_">This is a note</p>
409
423
  </note>
424
+ <note id='_'>
425
+ <p id='_'>XYZ</p>
426
+ </note>
410
427
  </clause></sections>
411
428
 
412
429
  </standard-document>
@@ -924,6 +941,19 @@ RSpec.describe Asciidoctor::Standoc do
924
941
 
925
942
  [.source]
926
943
  <<ISO2191,section=1>>
944
+
945
+ === Term2
946
+
947
+ Definition
948
+
949
+ [.source]
950
+ {{IEV:xyz}}
951
+
952
+ [.source]
953
+ {{IEV:xyz,t1}}
954
+
955
+ [.source]
956
+ {{IEV:xyz,t1,t2}}
927
957
  INPUT
928
958
  #{BLANK_HDR}
929
959
  <sections>
@@ -940,6 +970,27 @@ RSpec.describe Asciidoctor::Standoc do
940
970
  </origin>
941
971
  </termsource>
942
972
  </term>
973
+ <term id='_'>
974
+ <preferred>Term2</preferred>
975
+ <definition>
976
+ <p id='_'>Definition</p>
977
+ </definition>
978
+ <termsource status='identical'>
979
+ <origin citeas=''>
980
+ <termref base='IEV' target='xyz'/>
981
+ </origin>
982
+ </termsource>
983
+ <termsource status='identical'>
984
+ <origin citeas=''>
985
+ <termref base='IEV' target='xyz'>t1</termref>
986
+ </origin>
987
+ </termsource>
988
+ <termsource status='identical'>
989
+ <origin citeas=''>
990
+ <termref base='IEV' target='xyz'>t1</termref>
991
+ </origin>
992
+ </termsource>
993
+ </term>
943
994
  </terms>
944
995
  </sections>
945
996
  </standard-document>
@@ -955,6 +1006,13 @@ RSpec.describe Asciidoctor::Standoc do
955
1006
 
956
1007
  [.source]
957
1008
  <<ISO2191,section=1>>, with adjustments
1009
+
1010
+ === Term2
1011
+
1012
+ Definition
1013
+
1014
+ [.source]
1015
+ {{IEV:xyz}}, with adjustments
958
1016
  INPUT
959
1017
  #{BLANK_HDR}
960
1018
  <sections>
@@ -975,6 +1033,20 @@ RSpec.describe Asciidoctor::Standoc do
975
1033
  </modification>
976
1034
  </termsource>
977
1035
  </term>
1036
+ <term id='_'>
1037
+ <preferred>Term2</preferred>
1038
+ <definition>
1039
+ <p id='_'>Definition</p>
1040
+ </definition>
1041
+ <termsource status='modified'>
1042
+ <origin citeas=''>
1043
+ <termref base='IEV' target='xyz'/>
1044
+ </origin>
1045
+ <modification>
1046
+ <p id='_'>with adjustments</p>
1047
+ </modification>
1048
+ </termsource>
1049
+ </term>
978
1050
  </terms>
979
1051
  </sections>
980
1052
  </standard-document>