metanorma-standoc 1.3.24 → 1.3.25

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/macos.yml +2 -1
  3. data/.github/workflows/ubuntu.yml +5 -3
  4. data/.github/workflows/windows.yml +0 -1
  5. data/lib/asciidoctor/standoc/base.rb +22 -8
  6. data/lib/asciidoctor/standoc/biblio.rng +53 -26
  7. data/lib/asciidoctor/standoc/cleanup.rb +8 -7
  8. data/lib/asciidoctor/standoc/cleanup_inline.rb +3 -0
  9. data/lib/asciidoctor/standoc/cleanup_ref.rb +4 -0
  10. data/lib/asciidoctor/standoc/cleanup_section.rb +21 -6
  11. data/lib/asciidoctor/standoc/front.rb +5 -3
  12. data/lib/asciidoctor/standoc/inline.rb +42 -17
  13. data/lib/asciidoctor/standoc/isodoc.rng +28 -1
  14. data/lib/asciidoctor/standoc/macros.rb +2 -1
  15. data/lib/asciidoctor/standoc/macros_yaml2text.rb +142 -0
  16. data/lib/asciidoctor/standoc/ref.rb +5 -3
  17. data/lib/asciidoctor/standoc/section.rb +5 -0
  18. data/lib/asciidoctor/standoc/utils.rb +2 -11
  19. data/lib/metanorma/standoc/latexml_requirement.rb +14 -12
  20. data/lib/metanorma/standoc/version.rb +1 -1
  21. data/metanorma-standoc.gemspec +2 -2
  22. data/spec/asciidoctor-standoc/base_spec.rb +8 -0
  23. data/spec/asciidoctor-standoc/blocks_spec.rb +56 -1
  24. data/spec/asciidoctor-standoc/cleanup_spec.rb +26 -2
  25. data/spec/asciidoctor-standoc/inline_spec.rb +3 -2
  26. data/spec/asciidoctor-standoc/macros_spec.rb +4 -4
  27. data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +564 -0
  28. data/spec/asciidoctor-standoc/refs_spec.rb +234 -146
  29. data/spec/asciidoctor-standoc/section_spec.rb +58 -0
  30. data/spec/asciidoctor-standoc/validate_spec.rb +34 -0
  31. data/spec/assets/codes.yml +695 -0
  32. data/spec/examples/codes_table.html +3174 -0
  33. data/spec/metanorma/processor_spec.rb +2 -2
  34. data/spec/spec_helper.rb +1 -0
  35. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +71 -265
  36. data/spec/vcr_cassettes/isobib_get_123.yml +38 -84
  37. data/spec/vcr_cassettes/isobib_get_123_2001.yml +20 -43
  38. data/spec/vcr_cassettes/isobib_get_124.yml +19 -101
  39. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
  40. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +35 -35
  41. metadata +10 -6
@@ -0,0 +1,142 @@
1
+ require 'ostruct'
2
+
3
+ module Asciidoctor
4
+ module Standoc
5
+ class YamlBlockStruct < OpenStruct
6
+ def to_a
7
+ @table.to_h.keys
8
+ end
9
+
10
+ def values
11
+ @table.to_h.values
12
+ end
13
+
14
+ def each
15
+ return to_a.each unless block_given?
16
+
17
+ to_a.each do |key|
18
+ yield(key)
19
+ end
20
+ end
21
+ end
22
+
23
+ class YamlContextRenderer
24
+ attr_reader :context_object, :context_name
25
+
26
+ def initialize(context_object:, context_name:)
27
+ @context_object = context_object
28
+ @context_name = context_name
29
+ end
30
+
31
+ def respond_to_missing?(name)
32
+ respond_to?(name)
33
+ end
34
+
35
+ def method_missing(name, *_args)
36
+ return context_object if name.to_s == context_name
37
+
38
+ super
39
+ end
40
+
41
+ def render(template)
42
+ ERB.new(template).result(binding)
43
+ end
44
+ end
45
+
46
+ class Yaml2TextPreprocessor < Asciidoctor::Extensions::Preprocessor
47
+ BLOCK_START_REGEXP = /\{(.+?)\.\*,(.+),(.+)\}/.freeze
48
+ BLOCK_END_REGEXP = /\A\{[A-Z]+\}\z/.freeze
49
+ # search document for block `yaml2text`
50
+ # after that take template from block and read file into this template
51
+ # example:
52
+ # [yaml2text,foobar.yaml]
53
+ # ----
54
+ # === {item.name}
55
+ # {item.desc}
56
+ #
57
+ # {item.symbol}:: {item.symbol_def}
58
+ # ----
59
+ #
60
+ # with content of `foobar.yaml` file equal to:
61
+ # - name: spaghetti
62
+ # desc: wheat noodles of 9mm diameter
63
+ # symbol: SPAG
64
+ # symbol_def: the situation is message like spaghetti at a kid's meal
65
+ #
66
+ # will produce:
67
+ # === spaghetti
68
+ # wheat noodles of 9mm diameter
69
+ #
70
+ # SPAG:: the situation is message like spaghetti at a kid's meal
71
+ def process(document, reader)
72
+ input_lines = reader.readlines.to_enum
73
+ Reader.new(processed_lines(document, input_lines))
74
+ end
75
+
76
+ private
77
+
78
+ def processed_lines(document, input_lines)
79
+ result = []
80
+ loop do
81
+ line = input_lines.next
82
+ if yaml_block_match = line.match(/^\[yaml2text,(.+?),(.+?)\]/)
83
+ mark = input_lines.next
84
+ current_yaml_block = []
85
+ while (yaml_block_line = input_lines.next) != mark
86
+ current_yaml_block.push(yaml_block_line)
87
+ end
88
+ content = nested_open_struct_from_yaml(yaml_block_match[1], document)
89
+ result.push(*
90
+ parse_blocks_recursively(lines: current_yaml_block,
91
+ attributes: content,
92
+ context_name: yaml_block_match[2]))
93
+ else
94
+ result.push(line)
95
+ end
96
+ end
97
+ result
98
+ end
99
+
100
+ def nested_open_struct_from_yaml(file_path, document)
101
+ docfile_directory = File.dirname(document.attributes['docfile'] || '.')
102
+ yaml_file_path = document.path_resolver.system_path(file_path, docfile_directory)
103
+ content = YAML.safe_load(File.read(yaml_file_path))
104
+ # Load content as json, then parse with JSON as nested open_struct
105
+ JSON.parse(content.to_json, object_class: YamlBlockStruct)
106
+ end
107
+
108
+ def parse_blocks_recursively(lines:,
109
+ attributes:,
110
+ context_name:,
111
+ parent_context: nil)
112
+ lines = lines.to_enum
113
+ result = []
114
+ loop do
115
+ line = lines.next
116
+ if line.match(BLOCK_START_REGEXP)
117
+ line.gsub!(BLOCK_START_REGEXP, '<% \1.each.with_index do |\2,index| %>')
118
+ end
119
+
120
+ if line.match(BLOCK_END_REGEXP)
121
+ line.gsub!(BLOCK_END_REGEXP, '<% end %>')
122
+ end
123
+ line = line.gsub(/{(.+?[^}]*)}/, '<%= \1 %>').gsub(/[a-z\.]+\#/, 'index')
124
+ result.push(line)
125
+ end
126
+ result = parse_context_block(context_lines: result,
127
+ context_items: attributes,
128
+ context_name: context_name,
129
+ parent_context: parent_context)
130
+ result
131
+ end
132
+
133
+ def parse_context_block(context_lines:,
134
+ context_items:,
135
+ context_name:,
136
+ parent_context: nil)
137
+ renderer = YamlContextRenderer.new(context_object: context_items, context_name: context_name)
138
+ renderer.render(context_lines.join('\n')).split('\n')
139
+ end
140
+ end
141
+ end
142
+ end
@@ -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
 
@@ -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
 
@@ -204,6 +204,11 @@ module Asciidoctor
204
204
  SYMBOLS_TITLES.include? s.title.downcase
205
205
  end
206
206
  return "Terms and definitions" if sub.empty?
207
+ sym = /symbol/i.match(node.title)
208
+ abbrev = /abbreviat/i.match(node.title)
209
+ sym && abbrev and return "Terms, definitions, symbols and abbreviated terms"
210
+ sym and return "Terms, definitions and symbols"
211
+ abbrev and return "Terms, definitions and abbreviated terms"
207
212
  "Terms, definitions, symbols and abbreviated terms"
208
213
  end
209
214
 
@@ -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 ||
@@ -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.25".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>
@@ -75,7 +75,7 @@ RSpec.describe Asciidoctor::Standoc do
75
75
  </formula>
76
76
  <formula id="_" subsequence="A">
77
77
  <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">
78
+ <math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
79
79
  <mrow>
80
80
  <mi>M</mi>
81
81
  <mo>=</mo>
@@ -924,6 +924,19 @@ RSpec.describe Asciidoctor::Standoc do
924
924
 
925
925
  [.source]
926
926
  <<ISO2191,section=1>>
927
+
928
+ === Term2
929
+
930
+ Definition
931
+
932
+ [.source]
933
+ {{IEV:xyz}}
934
+
935
+ [.source]
936
+ {{IEV:xyz,t1}}
937
+
938
+ [.source]
939
+ {{IEV:xyz,t1,t2}}
927
940
  INPUT
928
941
  #{BLANK_HDR}
929
942
  <sections>
@@ -940,6 +953,27 @@ RSpec.describe Asciidoctor::Standoc do
940
953
  </origin>
941
954
  </termsource>
942
955
  </term>
956
+ <term id='_'>
957
+ <preferred>Term2</preferred>
958
+ <definition>
959
+ <p id='_'>Definition</p>
960
+ </definition>
961
+ <termsource status='identical'>
962
+ <origin citeas=''>
963
+ <termref base='IEV' target='xyz'/>
964
+ </origin>
965
+ </termsource>
966
+ <termsource status='identical'>
967
+ <origin citeas=''>
968
+ <termref base='IEV' target='xyz'>t1</termref>
969
+ </origin>
970
+ </termsource>
971
+ <termsource status='identical'>
972
+ <origin citeas=''>
973
+ <termref base='IEV' target='xyz'>t1</termref>
974
+ </origin>
975
+ </termsource>
976
+ </term>
943
977
  </terms>
944
978
  </sections>
945
979
  </standard-document>
@@ -955,6 +989,13 @@ RSpec.describe Asciidoctor::Standoc do
955
989
 
956
990
  [.source]
957
991
  <<ISO2191,section=1>>, with adjustments
992
+
993
+ === Term2
994
+
995
+ Definition
996
+
997
+ [.source]
998
+ {{IEV:xyz}}, with adjustments
958
999
  INPUT
959
1000
  #{BLANK_HDR}
960
1001
  <sections>
@@ -975,6 +1016,20 @@ RSpec.describe Asciidoctor::Standoc do
975
1016
  </modification>
976
1017
  </termsource>
977
1018
  </term>
1019
+ <term id='_'>
1020
+ <preferred>Term2</preferred>
1021
+ <definition>
1022
+ <p id='_'>Definition</p>
1023
+ </definition>
1024
+ <termsource status='modified'>
1025
+ <origin citeas=''>
1026
+ <termref base='IEV' target='xyz'/>
1027
+ </origin>
1028
+ <modification>
1029
+ <p id='_'>with adjustments</p>
1030
+ </modification>
1031
+ </termsource>
1032
+ </term>
978
1033
  </terms>
979
1034
  </sections>
980
1035
  </standard-document>
@@ -336,6 +336,7 @@ RSpec.describe Asciidoctor::Standoc do
336
336
  <bibitem id="iso216" type="standard">
337
337
  <title format="text/plain">Reference</title>
338
338
  <docidentifier>ISO 216:2001</docidentifier>
339
+ <docnumber>216</docnumber>
339
340
  <date type="published">
340
341
  <on>2001</on>
341
342
  </date>
@@ -413,6 +414,7 @@ RSpec.describe Asciidoctor::Standoc do
413
414
  <bibitem id="iso216" type="standard">
414
415
  <title format="text/plain">Reference</title>
415
416
  <docidentifier>ISO 216</docidentifier>
417
+ <docnumber>216</docnumber>
416
418
  <contributor>
417
419
  <role type="publisher"/>
418
420
  <organization>
@@ -449,6 +451,7 @@ RSpec.describe Asciidoctor::Standoc do
449
451
  <bibitem id="iso216" type="standard">
450
452
  <title format="text/plain">Reference</title>
451
453
  <docidentifier>ISO 216</docidentifier>
454
+ <docnumber>216</docnumber>
452
455
  <contributor>
453
456
  <role type="publisher"/>
454
457
  <organization>
@@ -511,6 +514,7 @@ RSpec.describe Asciidoctor::Standoc do
511
514
  <bibitem id="iso216" type="standard">
512
515
  <title format="text/plain">Reference</title>
513
516
  <docidentifier>ISO 216</docidentifier>
517
+ <docnumber>216</docnumber>
514
518
  <contributor>
515
519
  <role type="publisher"/>
516
520
  <organization>
@@ -558,6 +562,7 @@ RSpec.describe Asciidoctor::Standoc do
558
562
  <bibitem id='iso216' type='standard'>
559
563
  <title format='text/plain'>Reference</title>
560
564
  <docidentifier>ISO 216</docidentifier>
565
+ <docnumber>216</docnumber>
561
566
  <contributor>
562
567
  <role type='publisher'/>
563
568
  <organization>
@@ -574,6 +579,7 @@ RSpec.describe Asciidoctor::Standoc do
574
579
  <bibitem id='iso216' type='standard'>
575
580
  <title format='text/plain'>Reference</title>
576
581
  <docidentifier>ISO 215</docidentifier>
582
+ <docnumber>215</docnumber>
577
583
  <contributor>
578
584
  <role type='publisher'/>
579
585
  <organization>
@@ -937,6 +943,7 @@ end
937
943
  <bibitem id="iso123" type="standard">
938
944
  <title format="text/plain">Standard</title>
939
945
  <docidentifier>ISO 123:—</docidentifier>
946
+ <docnumber>123</docnumber>
940
947
  <date type="published">
941
948
  <on>–</on>
942
949
  </date>
@@ -1378,6 +1385,7 @@ end
1378
1385
  <bibitem id="iso124" type="standard">
1379
1386
  <title format="text/plain">Standard 124</title>
1380
1387
  <docidentifier>ISO 124</docidentifier>
1388
+ <docnumber>124</docnumber>
1381
1389
  <contributor>
1382
1390
  <role type="publisher"/>
1383
1391
  <organization>
@@ -1433,6 +1441,7 @@ OUTPUT
1433
1441
  <bibitem id="iso124" type="standard">
1434
1442
  <title format="text/plain">Standard 124</title>
1435
1443
  <docidentifier>ISO 124</docidentifier>
1444
+ <docnumber>124</docnumber>
1436
1445
  <contributor>
1437
1446
  <role type="publisher"/>
1438
1447
  <organization>
@@ -1452,6 +1461,7 @@ OUTPUT
1452
1461
  <bibitem id="iso125" type="standard">
1453
1462
  <title format="text/plain">Standard 124</title>
1454
1463
  <docidentifier>ISO 125</docidentifier>
1464
+ <docnumber>125</docnumber>
1455
1465
  <contributor>
1456
1466
  <role type="publisher"/>
1457
1467
  <organization>
@@ -1691,11 +1701,25 @@ it "sorts symbols lists" do
1691
1701
  <dd>
1692
1702
  <p id='_'>Definition 5</p>
1693
1703
  </dd>
1694
- <dt><stem type='MathML'>x_m</stem></dt>
1704
+ <dt><stem type='MathML'>
1705
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1706
+ <msub>
1707
+ <mi>x</mi>
1708
+ <mi>m</mi>
1709
+ </msub>
1710
+ </math>
1711
+ </stem></dt>
1695
1712
  <dd>
1696
1713
  <p id='_'>Definition 4</p>
1697
1714
  </dd>
1698
- <dt><stem type='MathML'>x_1</stem></dt>
1715
+ <dt><stem type='MathML'>
1716
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1717
+ <msub>
1718
+ <mi>x</mi>
1719
+ <mn>1</mn>
1720
+ </msub>
1721
+ </math>
1722
+ </stem></dt>
1699
1723
  <dd>
1700
1724
  <p id='_'>Definition 3</p>
1701
1725
  </dd>
@@ -88,7 +88,7 @@ text, including <strong><em>nest</em></strong>ed markup.</p>
88
88
  <sections>
89
89
  <p id="_">
90
90
  <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>&lt;</mo><mn>1</mn></math></stem><br/>
91
- <stem type="MathML"> <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="n&lt;1" display="block"> <mrow> <mi>n</mi> <mo>&lt;</mo> <mn>1</mn> </mrow> </math></stem>
91
+ <stem type="MathML"> <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <mrow> <mi>n</mi> <mo>&lt;</mo> <mn>1</mn> </mrow> </math></stem>
92
92
  </p>
93
93
  </sections>
94
94
  </standard-document>
@@ -106,7 +106,7 @@ text, including <strong><em>nest</em></strong>ed markup.</p>
106
106
  <sections>
107
107
  <p id="_">
108
108
  <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi><mo>&lt;</mo><mn>1</mn></math></stem>
109
- <stem type="MathML"> <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="n&lt;1" display="block"> <mrow> <mi>n</mi> <mo>&lt;</mo> <mn>1</mn> </mrow> </math></stem>
109
+ <stem type="MathML"> <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <mrow> <mi>n</mi> <mo>&lt;</mo> <mn>1</mn> </mrow> </math></stem>
110
110
  </p>
111
111
  </sections>
112
112
  </standard-document>
@@ -237,6 +237,7 @@ text, including <strong><em>nest</em></strong>ed markup.</p>
237
237
  <bibitem id="ISO713">
238
238
  <formattedref format="application/x-isodoc+xml">Reference</formattedref>
239
239
  <docidentifier>ISO713</docidentifier>
240
+ <docnumber>713</docnumber>
240
241
  </bibitem>
241
242
  </references>
242
243
  </bibliography>
@@ -34,6 +34,7 @@ RSpec.describe Asciidoctor::Standoc do
34
34
  <em>Title</em>
35
35
  </formattedref>
36
36
  <docidentifier>XYZ 123</docidentifier>
37
+ <docnumber>123</docnumber>
37
38
  </bibitem>
38
39
  </references>
39
40
  </bibliography>
@@ -287,7 +288,7 @@ OUTPUT
287
288
  </standard-document>
288
289
  OUTPUT
289
290
  end
290
-
291
+
291
292
  it "processes the PlantUML macro" do
292
293
  expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{plantuml/plantuml[^./]+\.}, "plantuml/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
293
294
  #{ASCIIDOC_BLANK_HDR}
@@ -462,7 +463,6 @@ Alice &lt;-- Bob: another authentication Response
462
463
  OUTPUT
463
464
  end
464
465
 
465
-
466
466
  private
467
467
 
468
468
  def mock_plantuml_disabled
@@ -471,13 +471,13 @@ Alice &lt;-- Bob: another authentication Response
471
471
  false
472
472
  end
473
473
  end
474
-
474
+
475
475
  def mock_localdir_unwritable
476
476
  expect(Asciidoctor::Standoc::Utils).to receive(:localdir) do
477
477
  "/"
478
478
  end.exactly(2).times
479
479
  end
480
-
480
+
481
481
  def mock_localdir_unwritable
482
482
  expect(File).to receive(:writable?) do
483
483
  false