metanorma-standoc 1.3.24 → 1.3.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +2 -1
- data/.github/workflows/ubuntu.yml +5 -3
- data/.github/workflows/windows.yml +0 -1
- data/lib/asciidoctor/standoc/base.rb +22 -8
- data/lib/asciidoctor/standoc/biblio.rng +53 -26
- data/lib/asciidoctor/standoc/cleanup.rb +8 -7
- data/lib/asciidoctor/standoc/cleanup_inline.rb +3 -0
- data/lib/asciidoctor/standoc/cleanup_ref.rb +4 -0
- data/lib/asciidoctor/standoc/cleanup_section.rb +21 -6
- data/lib/asciidoctor/standoc/front.rb +5 -3
- data/lib/asciidoctor/standoc/inline.rb +42 -17
- data/lib/asciidoctor/standoc/isodoc.rng +28 -1
- data/lib/asciidoctor/standoc/macros.rb +2 -1
- data/lib/asciidoctor/standoc/macros_yaml2text.rb +142 -0
- data/lib/asciidoctor/standoc/ref.rb +5 -3
- data/lib/asciidoctor/standoc/section.rb +5 -0
- data/lib/asciidoctor/standoc/utils.rb +2 -11
- data/lib/metanorma/standoc/latexml_requirement.rb +14 -12
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +2 -2
- data/spec/asciidoctor-standoc/base_spec.rb +8 -0
- data/spec/asciidoctor-standoc/blocks_spec.rb +56 -1
- data/spec/asciidoctor-standoc/cleanup_spec.rb +26 -2
- data/spec/asciidoctor-standoc/inline_spec.rb +3 -2
- data/spec/asciidoctor-standoc/macros_spec.rb +4 -4
- data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +564 -0
- data/spec/asciidoctor-standoc/refs_spec.rb +234 -146
- data/spec/asciidoctor-standoc/section_spec.rb +58 -0
- data/spec/asciidoctor-standoc/validate_spec.rb +34 -0
- data/spec/assets/codes.yml +695 -0
- data/spec/examples/codes_table.html +3174 -0
- data/spec/metanorma/processor_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +71 -265
- data/spec/vcr_cassettes/isobib_get_123.yml +38 -84
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +20 -43
- data/spec/vcr_cassettes/isobib_get_124.yml +19 -101
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +35 -35
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 500052e6d1bd5c05e37f8bb82ef9a6169e5d172d6a72216436995611d398d3b2
|
4
|
+
data.tar.gz: 32bfbcaa5e44d661c9ca28a5b6abf38e2cdc772751cd74b90c959decfd7e6df5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d5d15e5456577b3178c875adce471b9e68debea793ce50d347fe16652ebbcc89a346267826846fb979c255ea24d166f8c5c79b0eb42a276dd070328f360e4a0
|
7
|
+
data.tar.gz: f496a942f64052abae15c8ea1864f8f977a40dc57c8264140b5d6f9b07626489998f85a1e30fdfcac9cda4049cd9131110f6642451c4e57f53375f5020161f9f
|
data/.github/workflows/macos.yml
CHANGED
@@ -28,7 +28,8 @@ jobs:
|
|
28
28
|
- name: Install LaTeXML
|
29
29
|
run: |
|
30
30
|
brew install libxml2 cpanminus
|
31
|
-
env PATH=$(brew --prefix libxml2)/bin:$PATH
|
31
|
+
env PATH=$(brew --prefix libxml2)/bin:$PATH \
|
32
|
+
cpanm --notest XML::LibXSLT@1.96 git://github.com/brucemiller/LaTeXML.git@9a0e7dc5
|
32
33
|
- name: Install PlantUML
|
33
34
|
run: |
|
34
35
|
brew install plantuml
|
@@ -31,14 +31,16 @@ jobs:
|
|
31
31
|
bundle install --jobs 4 --retry 3
|
32
32
|
- name: Install LaTeXML
|
33
33
|
run: |
|
34
|
-
sudo snap install latexml
|
35
|
-
|
34
|
+
sudo snap install latexml --edge
|
35
|
+
echo "::add-path::/snap/bin"
|
36
36
|
- name: Install PlantUML
|
37
37
|
run: |
|
38
38
|
curl -L https://raw.githubusercontent.com/metanorma/plantuml-install/master/ubuntu.sh | sudo bash
|
39
39
|
- name: Install puppeteer
|
40
40
|
run: |
|
41
|
-
|
41
|
+
sudo apt-get update
|
42
|
+
sudo apt-get install -y libgbm1
|
43
|
+
npm install -g puppeteer@3.0.1
|
42
44
|
- name: Run specs
|
43
45
|
run: |
|
44
46
|
bundle exec rake
|
@@ -15,6 +15,7 @@ module Asciidoctor
|
|
15
15
|
XML_NAMESPACE = "https://www.metanorma.org/ns/standoc".freeze
|
16
16
|
|
17
17
|
Asciidoctor::Extensions.register do
|
18
|
+
preprocessor Asciidoctor::Standoc::Yaml2TextPreprocessor
|
18
19
|
inline_macro Asciidoctor::Standoc::AltTermInlineMacro
|
19
20
|
inline_macro Asciidoctor::Standoc::DeprecatedTermInlineMacro
|
20
21
|
inline_macro Asciidoctor::Standoc::DomainTermInlineMacro
|
@@ -27,6 +28,14 @@ module Asciidoctor
|
|
27
28
|
block Asciidoctor::Standoc::PseudocodeBlockMacro
|
28
29
|
end
|
29
30
|
|
31
|
+
def xml_root_tag
|
32
|
+
self.class::XML_ROOT_TAG
|
33
|
+
end
|
34
|
+
|
35
|
+
def xml_namespace
|
36
|
+
self.class::XML_NAMESPACE
|
37
|
+
end
|
38
|
+
|
30
39
|
def content(node)
|
31
40
|
node.content
|
32
41
|
end
|
@@ -54,6 +63,7 @@ module Asciidoctor
|
|
54
63
|
datauriimage: node.attr("data-uri-image"),
|
55
64
|
htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"),
|
56
65
|
doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
|
66
|
+
break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
|
57
67
|
}
|
58
68
|
end
|
59
69
|
|
@@ -78,6 +88,7 @@ module Asciidoctor
|
|
78
88
|
olstyle: node.attr("olstyle"),
|
79
89
|
htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"),
|
80
90
|
doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
|
91
|
+
break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
|
81
92
|
}
|
82
93
|
end
|
83
94
|
|
@@ -165,17 +176,17 @@ module Asciidoctor
|
|
165
176
|
|
166
177
|
def makexml1(node)
|
167
178
|
result = ["<?xml version='1.0' encoding='UTF-8'?>",
|
168
|
-
"<#{
|
179
|
+
"<#{xml_root_tag}>"]
|
169
180
|
result << noko { |ixml| front node, ixml }
|
170
181
|
result << noko { |ixml| middle node, ixml }
|
171
|
-
result << "</#{
|
182
|
+
result << "</#{xml_root_tag}>"
|
172
183
|
textcleanup(result)
|
173
184
|
end
|
174
185
|
|
175
186
|
def makexml(node)
|
176
187
|
result = makexml1(node)
|
177
188
|
ret1 = cleanup(Nokogiri::XML(result))
|
178
|
-
ret1.root.add_namespace(nil,
|
189
|
+
ret1.root.add_namespace(nil, xml_namespace)
|
179
190
|
validate(ret1) unless @novalid
|
180
191
|
ret1
|
181
192
|
end
|
@@ -207,15 +218,19 @@ module Asciidoctor
|
|
207
218
|
end
|
208
219
|
|
209
220
|
def add_term_source(xml_t, seen_xref, m)
|
210
|
-
|
211
|
-
|
221
|
+
if seen_xref.children[0].name == "concept"
|
222
|
+
xml_t.origin { |o| o << seen_xref.children[0].to_xml }
|
223
|
+
else
|
224
|
+
xml_t.origin seen_xref.children[0].content,
|
225
|
+
**attr_code(term_source_attr(seen_xref))
|
226
|
+
end
|
212
227
|
m[:text] && xml_t.modification do |mod|
|
213
228
|
mod.p { |p| p << m[:text].sub(/^\s+/, "") }
|
214
229
|
end
|
215
230
|
end
|
216
231
|
|
217
232
|
TERM_REFERENCE_RE_STR = <<~REGEXP.freeze
|
218
|
-
^(?<xref><xref[^>]+>([^<]*</xref>)?)
|
233
|
+
^(?<xref><(xref|concept)[^>]+>([^<]*</(xref|concept)>)?)
|
219
234
|
(,\s(?<text>.*))?
|
220
235
|
$
|
221
236
|
REGEXP
|
@@ -226,8 +241,7 @@ module Asciidoctor
|
|
226
241
|
def extract_termsource_refs(text, node)
|
227
242
|
matched = TERM_REFERENCE_RE.match text
|
228
243
|
matched.nil? and
|
229
|
-
|
230
|
-
@log.add("Asciidoctor Input", node, "term reference not in expected format: #{text}")
|
244
|
+
@log.add("Asciidoctor Input", node, "term reference not in expected format: #{text}")
|
231
245
|
matched
|
232
246
|
end
|
233
247
|
|
@@ -767,6 +767,8 @@
|
|
767
767
|
<value>unchanged</value>
|
768
768
|
<value>circulated</value>
|
769
769
|
<value>adapted</value>
|
770
|
+
<value>vote-started</value>
|
771
|
+
<value>vote-ended</value>
|
770
772
|
</choice>
|
771
773
|
</define>
|
772
774
|
<define name="bdate">
|
@@ -1019,38 +1021,63 @@
|
|
1019
1021
|
</define>
|
1020
1022
|
<define name="DocRelationType">
|
1021
1023
|
<choice>
|
1022
|
-
<value>obsoletes</value>
|
1023
|
-
<value>obsoletedBy</value>
|
1024
|
-
<value>supersedes</value>
|
1025
|
-
<value>supersededBy</value>
|
1026
|
-
<value>updates</value>
|
1027
|
-
<value>updatedBy</value>
|
1028
|
-
<value>complements</value>
|
1029
|
-
<value>derivedFrom</value>
|
1030
|
-
<value>translatedFrom</value>
|
1031
|
-
<value>hasTranslation</value>
|
1032
|
-
<value>adoptedFrom</value>
|
1033
|
-
<value>equivalent</value>
|
1034
|
-
<value>identical</value>
|
1035
|
-
<value>nonequivalent</value>
|
1036
|
-
<value>includedIn</value>
|
1037
1024
|
<value>includes</value>
|
1038
|
-
<value>
|
1039
|
-
<value>instanceOf</value>
|
1040
|
-
<value>partOf</value>
|
1025
|
+
<value>includedIn</value>
|
1041
1026
|
<value>hasPart</value>
|
1042
|
-
<value>
|
1043
|
-
<value>draftOf</value>
|
1027
|
+
<value>partOf</value>
|
1044
1028
|
<value>merges</value>
|
1029
|
+
<value>mergedInto</value>
|
1045
1030
|
<value>splits</value>
|
1046
|
-
<value>
|
1047
|
-
<value>
|
1048
|
-
<value>
|
1049
|
-
<value>
|
1050
|
-
<value>
|
1051
|
-
<value>
|
1031
|
+
<value>splitInto</value>
|
1032
|
+
<value>instance</value>
|
1033
|
+
<value>hasInstance</value>
|
1034
|
+
<value>exemplarOf</value>
|
1035
|
+
<value>hasExemplar</value>
|
1036
|
+
<value>manifestationOf</value>
|
1037
|
+
<value>hasManifestation</value>
|
1038
|
+
<value>reproductionOf</value>
|
1039
|
+
<value>hasReproduction</value>
|
1040
|
+
<value>reprintOf</value>
|
1041
|
+
<value>hasReprint</value>
|
1042
|
+
<value>expressionOf</value>
|
1043
|
+
<value>hasExpression</value>
|
1044
|
+
<value>translatedFrom</value>
|
1045
|
+
<value>hasTranslation</value>
|
1046
|
+
<value>arrangementOf</value>
|
1047
|
+
<value>hasArrangement</value>
|
1048
|
+
<value>abridgementOf</value>
|
1049
|
+
<value>hasAbridgement</value>
|
1050
|
+
<value>annotationOf</value>
|
1051
|
+
<value>hasAnnotation</value>
|
1052
|
+
<value>draftOf</value>
|
1053
|
+
<value>hasDraft</value>
|
1054
|
+
<value>editionOf</value>
|
1055
|
+
<value>hasEdition</value>
|
1056
|
+
<value>updates</value>
|
1057
|
+
<value>updatedBy</value>
|
1058
|
+
<value>derivedFrom</value>
|
1059
|
+
<value>derives</value>
|
1052
1060
|
<value>describes</value>
|
1053
1061
|
<value>describedBy</value>
|
1062
|
+
<value>catalogues</value>
|
1063
|
+
<value>cataloguedBy</value>
|
1064
|
+
<value>hasSuccessor</value>
|
1065
|
+
<value>successorOf</value>
|
1066
|
+
<value>adaptedFrom</value>
|
1067
|
+
<value>hasAdaptation</value>
|
1068
|
+
<value>adoptedFrom</value>
|
1069
|
+
<value>adoptedAs</value>
|
1070
|
+
<value>reviewOf</value>
|
1071
|
+
<value>hasReview</value>
|
1072
|
+
<value>commentaryOf</value>
|
1073
|
+
<value>hasCommentary</value>
|
1074
|
+
<value>related</value>
|
1075
|
+
<value>complements</value>
|
1076
|
+
<value>complementOf</value>
|
1077
|
+
<value>obsoletes</value>
|
1078
|
+
<value>obsoletedBy</value>
|
1079
|
+
<value>cited</value>
|
1080
|
+
<value>isCitedIn</value>
|
1054
1081
|
</choice>
|
1055
1082
|
</define>
|
1056
1083
|
<define name="docrelation">
|
@@ -20,18 +20,18 @@ module Asciidoctor
|
|
20
20
|
"<amathstem>#{HTMLEntities.new.decode($1)}</amathstem>"
|
21
21
|
end
|
22
22
|
text = Html2Doc.
|
23
|
-
asciimath_to_mathml(text, ["<amathstem>", "</amathstem>"])
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
asciimath_to_mathml(text, ["<amathstem>", "</amathstem>"])
|
24
|
+
x = Nokogiri::XML(text)
|
25
|
+
x.xpath("//*[local-name() = 'math'][not(parent::stem)]").each do |y|
|
26
|
+
y.wrap("<stem type='MathML'></stem>")
|
27
|
+
end
|
28
|
+
text = x.to_xml
|
28
29
|
end
|
29
30
|
text.gsub(/\s+<fn /, "<fn ")
|
30
31
|
end
|
31
32
|
|
32
33
|
def cleanup(xmldoc)
|
33
34
|
element_name_cleanup(xmldoc)
|
34
|
-
termdef_cleanup(xmldoc)
|
35
35
|
sections_cleanup(xmldoc)
|
36
36
|
obligations_cleanup(xmldoc)
|
37
37
|
table_cleanup(xmldoc)
|
@@ -45,8 +45,9 @@ module Asciidoctor
|
|
45
45
|
reference_names(xmldoc)
|
46
46
|
symbols_cleanup(xmldoc)
|
47
47
|
xref_cleanup(xmldoc)
|
48
|
-
origin_cleanup(xmldoc)
|
49
48
|
concept_cleanup(xmldoc)
|
49
|
+
origin_cleanup(xmldoc)
|
50
|
+
termdef_cleanup(xmldoc)
|
50
51
|
RelatonIev::iev_cleanup(xmldoc, @bibdb)
|
51
52
|
element_name_cleanup(xmldoc)
|
52
53
|
bpart_cleanup(xmldoc)
|
@@ -90,6 +90,9 @@ module Asciidoctor
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def origin_cleanup(xmldoc)
|
93
|
+
xmldoc.xpath("//origin/concept[termref]").each do |x|
|
94
|
+
x.replace(x.children)
|
95
|
+
end
|
93
96
|
xmldoc.xpath("//origin").each do |x|
|
94
97
|
x["citeas"] = @anchors&.dig(x["bibitemid"], :xref) ||
|
95
98
|
@log.add("Crossreferences", x,
|
@@ -117,7 +117,7 @@ module Asciidoctor
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def obligations_cleanup_inherit(x)
|
120
|
-
x.xpath("//annex | //clause").each do |r|
|
120
|
+
x.xpath("//annex | //clause[not(ancestor::boilerplate)]").each do |r|
|
121
121
|
r["obligation"] = "normative" unless r["obligation"]
|
122
122
|
end
|
123
123
|
x.xpath(Utils::SUBCLAUSE_XPATH).each do |r|
|
@@ -192,7 +192,16 @@ module Asciidoctor
|
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
|
+
def termdef_from_termbase(xmldoc)
|
196
|
+
xmldoc.xpath("//term").each do |x|
|
197
|
+
if c = x.at("./origin/termref") and !x.at("./definition")
|
198
|
+
x.at("./origin").previous = fetch_termbase(c["base"], c.text)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
195
203
|
def termdef_cleanup(xmldoc)
|
204
|
+
termdef_from_termbase(xmldoc)
|
196
205
|
termdef_unnest_cleanup(xmldoc)
|
197
206
|
termdef_stem_cleanup(xmldoc)
|
198
207
|
termdomain_cleanup(xmldoc)
|
@@ -209,15 +218,21 @@ module Asciidoctor
|
|
209
218
|
# Numbers sort *after* letters; we use thorn to force that sort order.
|
210
219
|
def symbol_key(x)
|
211
220
|
key = x.dup
|
212
|
-
key.
|
213
|
-
|
221
|
+
key.traverse do |n|
|
222
|
+
next unless n.name == "math"
|
223
|
+
n.replace(grkletters(MathML2AsciiMath.m2a(n.to_xml)))
|
214
224
|
end
|
215
|
-
ret = Nokogiri::XML(
|
216
|
-
HTMLEntities.new.decode(ret.text).
|
225
|
+
ret = Nokogiri::XML(key.to_xml)
|
226
|
+
HTMLEntities.new.decode(ret.text).
|
227
|
+
gsub(/[\[\]\{\}<>\(\)]/, "").strip.
|
217
228
|
gsub(/[[:punct]]|[_^]/, ":\\0").gsub(/`/, "").
|
218
229
|
gsub(/[0-9]+/, "þ\\0")
|
219
230
|
end
|
220
231
|
|
232
|
+
def grkletters(x)
|
233
|
+
x.gsub(/\b(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\b/i, "&\\1;")
|
234
|
+
end
|
235
|
+
|
221
236
|
def extract_symbols_list(dl)
|
222
237
|
dl_out = []
|
223
238
|
dl.xpath("./dt | ./dd").each do |dtd|
|
@@ -233,7 +248,7 @@ module Asciidoctor
|
|
233
248
|
def symbols_cleanup(docxml)
|
234
249
|
docxml.xpath("//definitions/dl").each do |dl|
|
235
250
|
dl_out = extract_symbols_list(dl)
|
236
|
-
dl_out.sort! { |a, b| a[:key] <=> b[:key] }
|
251
|
+
dl_out.sort! { |a, b| a[:key] <=> b[:key] || a[:dt] <=> b[:dt] }
|
237
252
|
dl.children = dl_out.map { |d| d[:dt].to_s + d[:dd].to_s }.join("\n")
|
238
253
|
end
|
239
254
|
docxml
|
@@ -78,7 +78,9 @@ module Asciidoctor
|
|
78
78
|
|
79
79
|
def datetypes
|
80
80
|
%w{ published accessed created implemented obsoleted
|
81
|
-
confirmed updated issued circulated unchanged received
|
81
|
+
confirmed updated issued circulated unchanged received
|
82
|
+
vote-started vote-ended
|
83
|
+
}
|
82
84
|
end
|
83
85
|
|
84
86
|
def metadata_date(node, xml)
|
@@ -190,8 +192,8 @@ module Asciidoctor
|
|
190
192
|
["en"].each do |lang|
|
191
193
|
at = { language: lang, format: "text/plain" }
|
192
194
|
xml.title **attr_code(at) do |t|
|
193
|
-
t << Utils::asciidoc_sub(node.attr("title") || node.attr("title-en") ||
|
194
|
-
|
195
|
+
t << (Utils::asciidoc_sub(node.attr("title") || node.attr("title-en")) ||
|
196
|
+
node.title)
|
195
197
|
end
|
196
198
|
end
|
197
199
|
end
|
@@ -3,6 +3,7 @@ require "htmlentities"
|
|
3
3
|
require "unicode2latex"
|
4
4
|
require "mime/types"
|
5
5
|
require "base64"
|
6
|
+
require 'English'
|
6
7
|
|
7
8
|
module Asciidoctor
|
8
9
|
module Standoc
|
@@ -106,23 +107,47 @@ module Asciidoctor
|
|
106
107
|
gsub(/"/, '"').gsub(/
/, "\n")
|
107
108
|
end
|
108
109
|
|
110
|
+
def latex_run1(lxm_input, cmd)
|
111
|
+
IO.popen(cmd, "r+", external_encoding: "UTF-8") do |io|
|
112
|
+
io.write(lxm_input)
|
113
|
+
io.close_write
|
114
|
+
io.read
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def latex_run(lxm_input)
|
119
|
+
results = nil
|
120
|
+
Metanorma::Standoc::Requirements[:latexml].cmd.each_with_index do |cmd, i|
|
121
|
+
warn "Retrying with #{cmd}" if i > 0
|
122
|
+
results = latex_run1(lxm_input, cmd)
|
123
|
+
if $CHILD_STATUS.to_i.zero?
|
124
|
+
warn "Success!" if i > 0
|
125
|
+
break
|
126
|
+
end
|
127
|
+
end
|
128
|
+
$CHILD_STATUS.to_i.zero? ? results : nil
|
129
|
+
end
|
130
|
+
|
131
|
+
def latex_parse(text)
|
132
|
+
lxm_input = Unicode2LaTeX.unicode2latex(HTMLEntities.new.decode(text))
|
133
|
+
results = latex_run(lxm_input)
|
134
|
+
results.nil? and
|
135
|
+
@log.add('Math', nil,
|
136
|
+
"latexmlmath failed to process equation:\n#{lxm_input}")
|
137
|
+
results
|
138
|
+
end
|
139
|
+
|
109
140
|
def stem_parse(text, xml, style)
|
110
141
|
if /<([^:>&]+:)?math(\s+[^>&]+)?> |
|
111
142
|
<([^:>&]+:)?math(\s+[^>&]+)?>/x.match text
|
112
143
|
math = xml_encode(text)
|
113
144
|
xml.stem math, **{ type: "MathML" }
|
114
145
|
elsif style == :latexmath
|
115
|
-
|
116
|
-
latexmlmath_input =
|
117
|
-
Unicode2LaTeX::unicode2latex(HTMLEntities.new.decode(text)).
|
118
|
-
gsub(/'/, '\\').gsub(/\n/, " ")
|
119
|
-
latex = IO.popen(latex_cmd, "r+", external_encoding: "UTF-8") do |io|
|
120
|
-
io.write(latexmlmath_input)
|
121
|
-
io.close_write
|
122
|
-
io.read
|
123
|
-
end
|
146
|
+
latex = latex_parse(text) or return xml.stem **{ type: "MathML" }
|
124
147
|
xml.stem **{ type: "MathML" } do |s|
|
125
|
-
|
148
|
+
math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, "")).elements[0]
|
149
|
+
math.delete("alttext")
|
150
|
+
s.parent.children = math
|
126
151
|
end
|
127
152
|
else
|
128
153
|
xml.stem text, **{ type: "AsciiMath" }
|
@@ -173,13 +198,13 @@ module Asciidoctor
|
|
173
198
|
type = types.first.to_s
|
174
199
|
uri = uri.sub(%r{^data:image/\*;}, "data:#{type};")
|
175
200
|
attr_code(src: @datauriimage ? datauri(uri) : uri,
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
201
|
+
id: Utils::anchor_or_uuid,
|
202
|
+
mimetype: type,
|
203
|
+
height: node.attr("height") || "auto",
|
204
|
+
width: node.attr("width") || "auto" ,
|
205
|
+
filename: node.attr("filename"),
|
206
|
+
title: node.attr("titleattr"),
|
207
|
+
alt: node.alt == node.attr("default-alt") ? nil : node.alt)
|
183
208
|
end
|
184
209
|
|
185
210
|
def inline_image(node)
|
@@ -303,8 +303,23 @@
|
|
303
303
|
<ref name="paragraph"/>
|
304
304
|
</element>
|
305
305
|
</define>
|
306
|
+
<define name="TextElement" combine="choice">
|
307
|
+
<ref name="concept"/>
|
308
|
+
</define>
|
306
309
|
</include>
|
307
310
|
<!-- end overrides -->
|
311
|
+
<define name="concept">
|
312
|
+
<element name="concept">
|
313
|
+
<optional>
|
314
|
+
<attribute name="term"/>
|
315
|
+
</optional>
|
316
|
+
<choice>
|
317
|
+
<ref name="eref"/>
|
318
|
+
<ref name="xref"/>
|
319
|
+
<ref name="termref"/>
|
320
|
+
</choice>
|
321
|
+
</element>
|
322
|
+
</define>
|
308
323
|
<define name="BasicBlock" combine="choice">
|
309
324
|
<choice>
|
310
325
|
<ref name="requirement"/>
|
@@ -911,7 +926,10 @@
|
|
911
926
|
</define>
|
912
927
|
<define name="origin">
|
913
928
|
<element name="origin">
|
914
|
-
<
|
929
|
+
<choice>
|
930
|
+
<ref name="erefType"/>
|
931
|
+
<ref name="termref"/>
|
932
|
+
</choice>
|
915
933
|
</element>
|
916
934
|
</define>
|
917
935
|
<define name="modification">
|
@@ -919,6 +937,15 @@
|
|
919
937
|
<ref name="paragraph"/>
|
920
938
|
</element>
|
921
939
|
</define>
|
940
|
+
<define name="termref">
|
941
|
+
<element name="termref">
|
942
|
+
<attribute name="base"/>
|
943
|
+
<attribute name="target"/>
|
944
|
+
<optional>
|
945
|
+
<text/>
|
946
|
+
</optional>
|
947
|
+
</element>
|
948
|
+
</define>
|
922
949
|
<define name="structuredidentifier">
|
923
950
|
<element name="structuredidentifier">
|
924
951
|
<optional>
|
@@ -2,6 +2,7 @@ require "asciidoctor/extensions"
|
|
2
2
|
require "fileutils"
|
3
3
|
require "uuidtools"
|
4
4
|
require_relative "./macros_plantuml.rb"
|
5
|
+
require_relative "./macros_yaml2text.rb"
|
5
6
|
|
6
7
|
module Asciidoctor
|
7
8
|
module Standoc
|
@@ -58,7 +59,7 @@ module Asciidoctor
|
|
58
59
|
named :concept
|
59
60
|
name_positional_attributes "id", "word", "term"
|
60
61
|
#match %r{concept:(?<target>[^\[]*)\[(?<content>|.*?[^\\])\]$}
|
61
|
-
match /\{\{(?<content>|.*?[^\\])\}\}
|
62
|
+
match /\{\{(?<content>|.*?[^\\])\}\}/
|
62
63
|
using_format :short
|
63
64
|
|
64
65
|
# deal with locality attrs and their disruption of positional attrs
|