metanorma-standoc 1.8.3 → 1.8.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/lib/asciidoctor/standoc/base.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup.rb +2 -2
- data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +2 -2
- data/lib/asciidoctor/standoc/cleanup_maths.rb +37 -0
- data/lib/asciidoctor/standoc/cleanup_ref.rb +4 -13
- data/lib/asciidoctor/standoc/cleanup_section.rb +5 -0
- data/lib/asciidoctor/standoc/inline.rb +2 -15
- data/lib/asciidoctor/standoc/isodoc.rng +19 -1
- data/lib/asciidoctor/standoc/section.rb +9 -0
- data/lib/asciidoctor/standoc/utils.rb +0 -24
- data/lib/asciidoctor/standoc/validate.rb +16 -1
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +1 -1
- data/spec/asciidoctor/cleanup_spec.rb +119 -1
- data/spec/asciidoctor/refs_spec.rb +20 -20
- data/spec/asciidoctor/section_spec.rb +17 -0
- data/spec/asciidoctor/validate_spec.rb +20 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +45 -45
- data/spec/vcr_cassettes/isobib_get_123.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_123_1.yml +22 -22
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +28 -28
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_124.yml +13 -13
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +22 -22
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +85 -65
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d069ef191d60dfccff15d8a39e2c961c343f1e19928e06645c78833be951f052
|
4
|
+
data.tar.gz: 61dff9a129459b4f2b0c4cb426dabd84a822285c8cce41cd88ce20cc4706d3a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a5991f1f7b0262f7b2e3069572d4221f0f944be86a869e9a6bb5bdabe26441305882898788840ef373dfb1671d7c2a8d9d59e1d5942e8d2df6ccc17eee1c114
|
7
|
+
data.tar.gz: 7e9c4dbf9f8d28970756ed8d516df46d5a4c2710754065818c2966de478ed32e1d189d0eec12de1ca5b0b23de5e077f9c4254e738442a7d4a1005e62d6a304d1
|
data/.rubocop.yml
CHANGED
@@ -139,7 +139,7 @@ module Asciidoctor
|
|
139
139
|
|
140
140
|
def document(node)
|
141
141
|
init(node)
|
142
|
-
ret = makexml(node).to_xml(indent: 2)
|
142
|
+
ret = makexml(node).to_xml(encoding: "US-ASCII", indent: 2)
|
143
143
|
outputs(node, ret) unless node.attr("nodoc") || !node.attr("docfile")
|
144
144
|
clean_exit
|
145
145
|
ret
|
@@ -45,7 +45,6 @@ module Asciidoctor
|
|
45
45
|
xref_cleanup(xmldoc)
|
46
46
|
concept_cleanup(xmldoc)
|
47
47
|
origin_cleanup(xmldoc)
|
48
|
-
svgmap_cleanup(xmldoc)
|
49
48
|
termdef_cleanup(xmldoc)
|
50
49
|
RelatonIev::iev_cleanup(xmldoc, @bibdb)
|
51
50
|
element_name_cleanup(xmldoc)
|
@@ -59,6 +58,7 @@ module Asciidoctor
|
|
59
58
|
bookmark_cleanup(xmldoc)
|
60
59
|
requirement_cleanup(xmldoc)
|
61
60
|
bibdata_cleanup(xmldoc)
|
61
|
+
svgmap_cleanup(xmldoc)
|
62
62
|
boilerplate_cleanup(xmldoc)
|
63
63
|
smartquotes_cleanup(xmldoc)
|
64
64
|
variant_cleanup(xmldoc)
|
@@ -172,7 +172,7 @@ module Asciidoctor
|
|
172
172
|
|
173
173
|
def img_cleanup(xmldoc)
|
174
174
|
return xmldoc unless @datauriimage
|
175
|
-
xmldoc.xpath("//image").each { |i| i["src"] = datauri(i["src"]) }
|
175
|
+
xmldoc.xpath("//image").each { |i| i["src"] = Metanorma::Utils::datauri(i["src"], @localdir) }
|
176
176
|
end
|
177
177
|
|
178
178
|
def variant_cleanup(xmldoc)
|
@@ -106,7 +106,7 @@ module Asciidoctor
|
|
106
106
|
def bibdata_cleanup(xmldoc)
|
107
107
|
bibdata_anchor_cleanup(xmldoc)
|
108
108
|
bibdata_docidentifier_cleanup(xmldoc)
|
109
|
-
|
109
|
+
biblio_indirect_erefs(xmldoc, @internal_eref_namespaces&.uniq)
|
110
110
|
end
|
111
111
|
|
112
112
|
def bibdata_anchor_cleanup(xmldoc)
|
@@ -124,7 +124,7 @@ module Asciidoctor
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
|
127
|
+
def gather_indirect_erefs(xmldoc, prefix)
|
128
128
|
xmldoc.xpath("//eref[@type = '#{prefix}']").each_with_object({}) do |e, m|
|
129
129
|
e.delete("type")
|
130
130
|
m[e["bibitemid"]] = true
|
@@ -2,6 +2,7 @@ require "nokogiri"
|
|
2
2
|
require "pathname"
|
3
3
|
require "open-uri"
|
4
4
|
require "html2doc"
|
5
|
+
require "asciimath2unitsml"
|
5
6
|
require_relative "./cleanup_block.rb"
|
6
7
|
require_relative "./cleanup_footnotes.rb"
|
7
8
|
require_relative "./cleanup_ref.rb"
|
@@ -73,13 +74,49 @@ module Asciidoctor
|
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
77
|
+
UNITSML_NS = "http://unitsml.nist.gov/2005".freeze
|
78
|
+
|
79
|
+
def add_misc_container(xmldoc)
|
80
|
+
unless ins = xmldoc.at("//misc-container")
|
81
|
+
a = xmldoc.at("//termdocsource") || xmldoc.at("//bibdata")
|
82
|
+
a.next = "<misc-container/>"
|
83
|
+
ins = xmldoc.at("//misc-container")
|
84
|
+
end
|
85
|
+
ins
|
86
|
+
end
|
87
|
+
|
88
|
+
def mathml_unitsML(xmldoc)
|
89
|
+
return unless xmldoc.at(".//m:*", "m" => UNITSML_NS)
|
90
|
+
misc = add_misc_container(xmldoc)
|
91
|
+
unitsml = misc.add_child("<UnitsML xmlns='#{UNITSML_NS}'/>").first
|
92
|
+
%w(Unit CountedItem Quantity Dimension Prefix).each do |t|
|
93
|
+
gather_unitsml(unitsml, xmldoc, t)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def gather_unitsml(unitsml, xmldoc, t)
|
98
|
+
tags = xmldoc.xpath(".//m:#{t}", "m" => UNITSML_NS).each_with_object({}) do |x, m|
|
99
|
+
m[x["id"]] = x.remove
|
100
|
+
end
|
101
|
+
return if tags.empty?
|
102
|
+
set = unitsml.add_child("<#{t}Set/>").first
|
103
|
+
tags.values.each { |v| set << v }
|
104
|
+
end
|
105
|
+
|
106
|
+
def asciimath2unitsml_options
|
107
|
+
{ multiplier: :space }
|
108
|
+
end
|
109
|
+
|
76
110
|
def mathml_cleanup(xmldoc)
|
111
|
+
unitsml = Asciimath2UnitsML::Conv.new(asciimath2unitsml_options)
|
77
112
|
xmldoc.xpath("//stem[@type = 'MathML']").each do |x|
|
78
113
|
xml_unescape_mathml(x)
|
79
114
|
mathml_namespace(x)
|
80
115
|
mathml_preserve_space(x)
|
81
116
|
mathml_italicise(x)
|
117
|
+
unitsml.MathML2UnitsML(x)
|
82
118
|
end
|
119
|
+
mathml_unitsML(xmldoc)
|
83
120
|
end
|
84
121
|
end
|
85
122
|
end
|
@@ -50,6 +50,7 @@ module Asciidoctor
|
|
50
50
|
def biblio_renumber(xmldoc)
|
51
51
|
i = 0
|
52
52
|
xmldoc.xpath("//bibliography//references | //clause//references | //annex//references").each do |r|
|
53
|
+
next if r["normative"] == "true"
|
53
54
|
r.xpath("./bibitem").each do |b|
|
54
55
|
i += 1
|
55
56
|
next unless docid = b.at("./docidentifier[@type = 'metanorma']")
|
@@ -88,18 +89,8 @@ module Asciidoctor
|
|
88
89
|
end
|
89
90
|
end
|
90
91
|
|
91
|
-
def
|
92
|
-
|
93
|
-
docid
|
94
|
-
end
|
95
|
-
|
96
|
-
def omit_docid_prefix(prefix)
|
97
|
-
return true if prefix.nil? || prefix.empty?
|
98
|
-
%(ISO IEC IEV ITU metanorma).include? prefix
|
99
|
-
end
|
100
|
-
|
101
|
-
def format_ref(ref, type, isopub)
|
102
|
-
return docid_prefix(type, ref) if isopub
|
92
|
+
def format_ref(ref, type)
|
93
|
+
return @isodoc.docid_prefix(type, ref) if type != "metanorma"
|
103
94
|
return "[#{ref}]" if /^\d+$/.match(ref) && !/^\[.*\]$/.match(ref)
|
104
95
|
ref
|
105
96
|
end
|
@@ -115,7 +106,7 @@ module Asciidoctor
|
|
115
106
|
isopub = ref.at(ISO_PUBLISHER_XPATH)
|
116
107
|
docid = ref.at("./docidentifier[@type = 'metanorma']") ||
|
117
108
|
ref.at("./docidentifier[not(@type = 'DOI')]") or next
|
118
|
-
reference = format_ref(docid.text, docid["type"]
|
109
|
+
reference = format_ref(docid.text, docid["type"])
|
119
110
|
@anchors[ref["id"]] = { xref: reference }
|
120
111
|
end
|
121
112
|
end
|
@@ -62,10 +62,15 @@ module Asciidoctor
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
def make_indexsect(x, s)
|
66
|
+
x.xpath("//sections/indexsect").reverse_each { |r| s.next = r.remove }
|
67
|
+
end
|
68
|
+
|
65
69
|
def sections_order_cleanup(x)
|
66
70
|
s = x.at("//sections")
|
67
71
|
make_preface(x, s)
|
68
72
|
make_annexes(x)
|
73
|
+
make_indexsect(x, s)
|
69
74
|
make_bibliography(x, s)
|
70
75
|
x.xpath("//sections/annex").reverse_each { |r| s.next = r.remove }
|
71
76
|
end
|
@@ -175,25 +175,12 @@ module Asciidoctor
|
|
175
175
|
end.join
|
176
176
|
end
|
177
177
|
|
178
|
-
def datauri(uri)
|
179
|
-
return uri if /^data:/.match(uri)
|
180
|
-
types = MIME::Types.type_for(@localdir + uri)
|
181
|
-
type = types ? types.first.to_s : 'text/plain; charset="utf-8"'
|
182
|
-
# FIXME: nested uri path error(
|
183
|
-
# sources/plantuml/plantuml20200524-90467-1iqek5i.png ->
|
184
|
-
# sources/sources/plantuml/plantuml20200524-90467-1iqek5i.png)
|
185
|
-
path = File.file?(uri) ? uri : @localdir + uri
|
186
|
-
bin = File.open(path, 'rb', &:read)
|
187
|
-
data = Base64.strict_encode64(bin)
|
188
|
-
"data:#{type};base64,#{data}"
|
189
|
-
end
|
190
|
-
|
191
178
|
def image_attributes(node)
|
192
179
|
uri = node.image_uri (node.attr("target") || node.target)
|
193
|
-
types = /^data:/.match(uri) ? datauri2mime(uri) : MIME::Types.type_for(uri)
|
180
|
+
types = /^data:/.match(uri) ? Metanorma::Utils::datauri2mime(uri) : MIME::Types.type_for(uri)
|
194
181
|
type = types.first.to_s
|
195
182
|
uri = uri.sub(%r{^data:image/\*;}, "data:#{type};")
|
196
|
-
attr_code(src: uri,
|
183
|
+
attr_code(src: uri,
|
197
184
|
id: Metanorma::Utils::anchor_or_uuid,
|
198
185
|
mimetype: type,
|
199
186
|
height: node.attr("height") || "auto",
|
@@ -919,6 +919,9 @@
|
|
919
919
|
</choice>
|
920
920
|
</attribute>
|
921
921
|
<ref name="bibdata"/>
|
922
|
+
<optional>
|
923
|
+
<ref name="misccontainer"/>
|
924
|
+
</optional>
|
922
925
|
<optional>
|
923
926
|
<ref name="boilerplate"/>
|
924
927
|
</optional>
|
@@ -929,11 +932,21 @@
|
|
929
932
|
<zeroOrMore>
|
930
933
|
<ref name="annex"/>
|
931
934
|
</zeroOrMore>
|
935
|
+
<optional>
|
936
|
+
<ref name="bibliography"/>
|
937
|
+
</optional>
|
932
938
|
<zeroOrMore>
|
933
|
-
<ref name="
|
939
|
+
<ref name="indexsect"/>
|
934
940
|
</zeroOrMore>
|
935
941
|
</element>
|
936
942
|
</define>
|
943
|
+
<define name="misccontainer">
|
944
|
+
<element name="misc-container">
|
945
|
+
<oneOrMore>
|
946
|
+
<ref name="AnyElement"/>
|
947
|
+
</oneOrMore>
|
948
|
+
</element>
|
949
|
+
</define>
|
937
950
|
<define name="preface">
|
938
951
|
<element name="preface">
|
939
952
|
<oneOrMore>
|
@@ -957,6 +970,11 @@
|
|
957
970
|
<ref name="Content-Section"/>
|
958
971
|
</element>
|
959
972
|
</define>
|
973
|
+
<define name="indexsect">
|
974
|
+
<element name="indexsect">
|
975
|
+
<ref name="Content-Section"/>
|
976
|
+
</element>
|
977
|
+
</define>
|
960
978
|
<define name="boilerplate">
|
961
979
|
<element name="boilerplate">
|
962
980
|
<optional>
|
@@ -88,6 +88,8 @@ module Asciidoctor
|
|
88
88
|
bibliography_parse(a, xml, node)
|
89
89
|
elsif node.attr("style") == "abstract"
|
90
90
|
abstract_parse(a, xml, node)
|
91
|
+
elsif node.attr("style") == "index"
|
92
|
+
indexsect_parse(a, xml, node)
|
91
93
|
elsif node.attr("style") == "appendix" && node.level == 1
|
92
94
|
annex_parse(a, xml, node)
|
93
95
|
else
|
@@ -114,6 +116,13 @@ module Asciidoctor
|
|
114
116
|
end.join("\n")
|
115
117
|
end
|
116
118
|
|
119
|
+
def indexsect_parse(attrs, xml, node)
|
120
|
+
xml.indexsect **attr_code(attrs) do |xml_section|
|
121
|
+
xml_section.title { |name| name << node.title }
|
122
|
+
xml_section << node.content
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
117
126
|
def abstract_parse(attrs, xml, node)
|
118
127
|
xml.abstract **attr_code(attrs) do |xml_section|
|
119
128
|
xml_section << node.content
|
@@ -5,7 +5,6 @@ require "json"
|
|
5
5
|
require "pathname"
|
6
6
|
require "open-uri"
|
7
7
|
require "uuidtools"
|
8
|
-
require "mimemagic"
|
9
8
|
|
10
9
|
module Asciidoctor
|
11
10
|
module Standoc
|
@@ -57,29 +56,6 @@ module Asciidoctor
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
|
-
def datauri2mime(uri)
|
61
|
-
%r{^data:image/(?<imgtype>[^;]+);base64,(?<imgdata>.+)$} =~ uri
|
62
|
-
type = nil
|
63
|
-
imgtype = "png" unless /^[a-z0-9]+$/.match imgtype
|
64
|
-
Tempfile.open(["imageuri", ".#{imgtype}"]) do |file|
|
65
|
-
type = datauri2mime1(file, imgdata)
|
66
|
-
end
|
67
|
-
[type]
|
68
|
-
end
|
69
|
-
|
70
|
-
def datauri2mime1(file, imgdata)
|
71
|
-
type = nil
|
72
|
-
begin
|
73
|
-
file.binmode
|
74
|
-
file.write(Base64.strict_decode64(imgdata))
|
75
|
-
file.rewind
|
76
|
-
type = MimeMagic.by_magic(file)
|
77
|
-
ensure
|
78
|
-
file.close!
|
79
|
-
end
|
80
|
-
type
|
81
|
-
end
|
82
|
-
|
83
59
|
SUBCLAUSE_XPATH = "//clause[not(parent::sections)]"\
|
84
60
|
"[not(ancestor::boilerplate)]".freeze
|
85
61
|
|
@@ -35,10 +35,25 @@ module Asciidoctor
|
|
35
35
|
|
36
36
|
def content_validate(doc)
|
37
37
|
section_validate(doc)
|
38
|
+
norm_ref_validate(doc)
|
38
39
|
repeat_id_validate(doc.root)
|
39
40
|
iev_validate(doc.root)
|
40
41
|
end
|
41
42
|
|
43
|
+
def norm_ref_validate(doc)
|
44
|
+
found = false
|
45
|
+
doc.xpath("//references[@normative = 'true']/bibitem").each do |b|
|
46
|
+
next unless docid = b.at("./docidentifier[@type = 'metanorma']")
|
47
|
+
next unless /^\[\d+\]$/.match(docid.text)
|
48
|
+
@log.add("Bibliography", b, "Numeric reference in normative references")
|
49
|
+
found = true
|
50
|
+
end
|
51
|
+
if found
|
52
|
+
clean_exit
|
53
|
+
abort("Numeric reference in normative references")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
42
57
|
def repeat_id_validate1(ids, x)
|
43
58
|
if ids[x["id"]]
|
44
59
|
@log.add("Anchors", x, "Anchor #{x['id']} has already been used "\
|
@@ -89,7 +104,7 @@ module Asciidoctor
|
|
89
104
|
def formattedstr_strip(doc)
|
90
105
|
doc.xpath("//*[@format] | //stem | //bibdata//description | "\
|
91
106
|
"//formattedref | //bibdata//note | //bibdata/abstract | "\
|
92
|
-
"//bibitem/abstract | //bibitem/note").each do |n|
|
107
|
+
"//bibitem/abstract | //bibitem/note | //misc-container").each do |n|
|
93
108
|
n.elements.each do |e|
|
94
109
|
e.traverse do |e1|
|
95
110
|
e1.element? and e1.each { |k, _v| e1.delete(k) }
|
data/metanorma-standoc.gemspec
CHANGED
@@ -38,9 +38,9 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_dependency "concurrent-ruby"
|
39
39
|
spec.add_dependency "unicode2latex", "~> 0.0.1"
|
40
40
|
spec.add_dependency "metanorma-utils", "~> 1.0.2"
|
41
|
-
spec.add_dependency "mimemagic"
|
42
41
|
spec.add_dependency "mathml2asciimath"
|
43
42
|
spec.add_dependency "latexmath"
|
43
|
+
spec.add_dependency "asciimath2unitsml", "~> 0.1.1"
|
44
44
|
|
45
45
|
spec.add_development_dependency "byebug"
|
46
46
|
spec.add_development_dependency "sassc", "2.4.0"
|
@@ -2118,6 +2118,120 @@ expect(xmlpp(Asciidoctor.convert(input, backend: :standoc, header_footer: true))
|
|
2118
2118
|
OUTPUT
|
2119
2119
|
|
2120
2120
|
end
|
2121
|
+
|
2122
|
+
it "converts UnitsML to MathML" do
|
2123
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~INPUT, backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2124
|
+
= Document title
|
2125
|
+
Author
|
2126
|
+
:stem:
|
2127
|
+
|
2128
|
+
[stem]
|
2129
|
+
++++
|
2130
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
2131
|
+
<mrow>
|
2132
|
+
<mn>7</mn>
|
2133
|
+
<mtext>unitsml(m*kg^-2)</mtext>
|
2134
|
+
<mo>+</mo>
|
2135
|
+
<mn>8</mn>
|
2136
|
+
<mtext>unitsml(m*kg^-2)</mtext>
|
2137
|
+
</mrow>
|
2138
|
+
</math>
|
2139
|
+
++++
|
2140
|
+
INPUT
|
2141
|
+
#{BLANK_HDR}
|
2142
|
+
<misc-container>
|
2143
|
+
<UnitsML xmlns='http://unitsml.nist.gov/2005'>
|
2144
|
+
<UnitSet>
|
2145
|
+
<Unit xml:id='U_m.kg-2' dimensionURL='#D_LM-2'>
|
2146
|
+
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
2147
|
+
<UnitName xml:lang='en'>m*kg^-2</UnitName>
|
2148
|
+
<UnitSymbol type='HTML'>
|
2149
|
+
m kg
|
2150
|
+
<sup>−2</sup>
|
2151
|
+
</UnitSymbol>
|
2152
|
+
<UnitSymbol type='MathML'>
|
2153
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
2154
|
+
<mrow>
|
2155
|
+
<mi mathvariant='normal'>m</mi>
|
2156
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
2157
|
+
<msup>
|
2158
|
+
<mrow>
|
2159
|
+
<mi mathvariant='normal'>kg</mi>
|
2160
|
+
</mrow>
|
2161
|
+
<mrow>
|
2162
|
+
<mo>−</mo>
|
2163
|
+
<mn>2</mn>
|
2164
|
+
</mrow>
|
2165
|
+
</msup>
|
2166
|
+
</mrow>
|
2167
|
+
</math>
|
2168
|
+
</UnitSymbol>
|
2169
|
+
<RootUnits>
|
2170
|
+
<EnumeratedRootUnit unit='meter'/>
|
2171
|
+
<EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
|
2172
|
+
</RootUnits>
|
2173
|
+
</Unit>
|
2174
|
+
</UnitSet>
|
2175
|
+
<DimensionSet>
|
2176
|
+
<Dimension xml:id='D_LM-2'>
|
2177
|
+
<Length symbol='L' powerNumerator='1'/>
|
2178
|
+
<Mass symbol='M' powerNumerator='-2'/>
|
2179
|
+
</Dimension>
|
2180
|
+
</DimensionSet>
|
2181
|
+
<PrefixSet>
|
2182
|
+
<Prefix prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
2183
|
+
<PrefixName xml:lang='en'>kilo</PrefixName>
|
2184
|
+
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
2185
|
+
</Prefix>
|
2186
|
+
</PrefixSet>
|
2187
|
+
</UnitsML>
|
2188
|
+
</misc-container>
|
2189
|
+
<sections>
|
2190
|
+
<formula id='_'>
|
2191
|
+
<stem type='MathML'>
|
2192
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
2193
|
+
<mrow>
|
2194
|
+
<mn>7</mn>
|
2195
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
2196
|
+
<mrow xref='U_m.kg-2'>
|
2197
|
+
<mi mathvariant='normal'>m</mi>
|
2198
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
2199
|
+
<msup>
|
2200
|
+
<mrow>
|
2201
|
+
<mi mathvariant='normal'>kg</mi>
|
2202
|
+
</mrow>
|
2203
|
+
<mrow>
|
2204
|
+
<mo>−</mo>
|
2205
|
+
<mn>2</mn>
|
2206
|
+
</mrow>
|
2207
|
+
</msup>
|
2208
|
+
</mrow>
|
2209
|
+
<mo>+</mo>
|
2210
|
+
<mn>8</mn>
|
2211
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
2212
|
+
<mrow xref='U_m.kg-2'>
|
2213
|
+
<mi mathvariant='normal'>m</mi>
|
2214
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
2215
|
+
<msup>
|
2216
|
+
<mrow>
|
2217
|
+
<mi mathvariant='normal'>kg</mi>
|
2218
|
+
</mrow>
|
2219
|
+
<mrow>
|
2220
|
+
<mo>−</mo>
|
2221
|
+
<mn>2</mn>
|
2222
|
+
</mrow>
|
2223
|
+
</msup>
|
2224
|
+
</mrow>
|
2225
|
+
</mrow>
|
2226
|
+
</math>
|
2227
|
+
</stem>
|
2228
|
+
</formula>
|
2229
|
+
</sections>
|
2230
|
+
</standard-document>
|
2231
|
+
OUTPUT
|
2232
|
+
|
2233
|
+
end
|
2234
|
+
|
2121
2235
|
it "customises italicisation of MathML" do
|
2122
2236
|
input = <<~INPUT
|
2123
2237
|
= Document title
|
@@ -2350,14 +2464,17 @@ end
|
|
2350
2464
|
it "process express_ref macro with no existing bibliography" do
|
2351
2465
|
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true, agree_to_terms: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2352
2466
|
#{ASCIIDOC_BLANK_HDR}
|
2467
|
+
[[B]]
|
2468
|
+
[type="express-schema"]
|
2353
2469
|
== Clause
|
2354
2470
|
|
2355
2471
|
<<express-schema:A:A.B.C,C>>
|
2356
2472
|
<<express-schema:A>>
|
2473
|
+
<<express-schema:B>>
|
2357
2474
|
INPUT
|
2358
2475
|
#{BLANK_HDR}
|
2359
2476
|
<sections>
|
2360
|
-
<clause id='
|
2477
|
+
<clause id='B' inline-header='false' obligation='normative' type="express-schema">
|
2361
2478
|
<title>Clause</title>
|
2362
2479
|
<p id='_'>
|
2363
2480
|
<eref bibitemid='express-schema_A' citeas="">
|
@@ -2367,6 +2484,7 @@ end
|
|
2367
2484
|
C
|
2368
2485
|
</eref>
|
2369
2486
|
<eref bibitemid='express-schema_A' citeas=""/>
|
2487
|
+
<xref target='B'/>
|
2370
2488
|
</p>
|
2371
2489
|
</clause>
|
2372
2490
|
</sections>
|