metanorma-standoc 2.9.6 → 2.9.8
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/lib/isodoc/html/htmlstyle.css +4 -1
- data/lib/metanorma/standoc/basicdoc.rng +861 -481
- data/lib/metanorma/standoc/biblio-standoc.rng +100 -20
- data/lib/metanorma/standoc/biblio.rng +897 -333
- data/lib/metanorma/standoc/cleanup_bibdata.rb +2 -0
- data/lib/metanorma/standoc/cleanup_maths.rb +13 -11
- data/lib/metanorma/standoc/cleanup_text.rb +9 -2
- data/lib/metanorma/standoc/converter.rb +2 -0
- data/lib/metanorma/standoc/front.rb +6 -0
- data/lib/metanorma/standoc/init.rb +19 -6
- data/lib/metanorma/standoc/inline.rb +15 -7
- data/lib/metanorma/standoc/isodoc.rng +1031 -915
- data/lib/metanorma/standoc/macros_embed.rb +2 -2
- data/lib/metanorma/standoc/macros_inline.rb +8 -6
- data/lib/metanorma/standoc/render.rb +1 -1
- data/lib/metanorma/standoc/reqt.rng +94 -75
- data/lib/metanorma/standoc/spans_to_bibitem.rb +7 -0
- data/lib/metanorma/standoc/spans_to_bibitem_preprocessing.rb +13 -4
- data/lib/metanorma/standoc/utils.rb +12 -1
- data/lib/metanorma/standoc/version.rb +1 -1
- metadata +2 -2
@@ -101,6 +101,8 @@ module Metanorma
|
|
101
101
|
m = /:mn-document-class: (\S+)/.match(hdr[:text])
|
102
102
|
if m then m[1].to_sym
|
103
103
|
else Processor.new.asciidoctor_backend
|
104
|
+
# don't want processor() : we will leave embedded headers as standoc,
|
105
|
+
# not local flavour
|
104
106
|
end
|
105
107
|
end
|
106
108
|
|
@@ -20,7 +20,7 @@ module Metanorma
|
|
20
20
|
def asciimath2mathml_indiv(elem)
|
21
21
|
elem["type"] = "MathML"
|
22
22
|
expr = @c.decode(elem.text)
|
23
|
-
ret = asciimath_parse(expr, elem)
|
23
|
+
ret = asciimath_parse(expr, elem)&.strip
|
24
24
|
ret += "<asciimath>#{@c.encode(expr, :basic)}</asciimath>"
|
25
25
|
elem.children = ret
|
26
26
|
rescue StandardError => e
|
@@ -40,7 +40,8 @@ module Metanorma
|
|
40
40
|
MATH
|
41
41
|
else
|
42
42
|
Plurimath::Math.parse(expr, "asciimath")
|
43
|
-
.to_mathml(display_style: elem["block"]
|
43
|
+
.to_mathml(display_style: elem["block"],
|
44
|
+
unitsml_xml: expr.include?("unitsml"))
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
@@ -102,7 +103,7 @@ module Metanorma
|
|
102
103
|
ins
|
103
104
|
end
|
104
105
|
|
105
|
-
def
|
106
|
+
def mathml_unitsml(xmldoc)
|
106
107
|
xmldoc.at(".//m:*", "m" => UNITSML_NS) or return
|
107
108
|
misc = add_misc_container(xmldoc)
|
108
109
|
unitsml = misc.add_child("<UnitsML xmlns='#{UNITSML_NS}'/>").first
|
@@ -131,7 +132,7 @@ module Metanorma
|
|
131
132
|
profile = mathml_mn_profile(m)
|
132
133
|
attr = profile.each_with_object([]) do |(k, v), acc|
|
133
134
|
v == "nil" and next
|
134
|
-
acc << "#{k}='#{v}'"
|
135
|
+
acc << "#{k}='#{@c.decode v}'"
|
135
136
|
end.join(",")
|
136
137
|
attr.empty? or m["data-metanorma-numberformat"] = attr
|
137
138
|
end
|
@@ -152,10 +153,10 @@ module Metanorma
|
|
152
153
|
f = mathml_stem_format_attr(stem) or return
|
153
154
|
attr = quoted_csv_split(f, ",").map do |x|
|
154
155
|
m = /^(.+?)=(.+)?$/.match(x) or next
|
155
|
-
"#{m[1]}='#{m[2]}'"
|
156
|
+
"#{m[1]}='#{@c.decode m[2]}'"
|
156
157
|
end.join(",")
|
157
158
|
stem.xpath(".//m:mn", "m" => MATHML_NS).each do |m|
|
158
|
-
m["data-metanorma-numberformat"] = attr
|
159
|
+
attr.empty? or m["data-metanorma-numberformat"] = attr
|
159
160
|
end
|
160
161
|
end
|
161
162
|
|
@@ -168,7 +169,7 @@ module Metanorma
|
|
168
169
|
f == "default" or return f
|
169
170
|
if @numberfmt_default.empty?
|
170
171
|
"notation='basic'"
|
171
|
-
else @numberfmt_default&.map { |k, v| "#{k}
|
172
|
+
else @numberfmt_default&.map { |k, v| "#{k}='#{v}'" }&.join(",")
|
172
173
|
end
|
173
174
|
end
|
174
175
|
|
@@ -179,15 +180,16 @@ module Metanorma
|
|
179
180
|
end
|
180
181
|
|
181
182
|
def mathml_cleanup(xmldoc)
|
182
|
-
|
183
|
+
a2u = Asciimath2UnitsML::Conv.new(asciimath2unitsml_options)
|
183
184
|
xmldoc.xpath("//stem[@type = 'MathML'][not(@validate = 'false')]")
|
184
185
|
.each do |x|
|
185
186
|
mathml_xml_cleanup(x)
|
186
|
-
|
187
|
+
a2u.MathML2UnitsML(x)
|
187
188
|
mathml_mathvariant(x)
|
188
|
-
mathml_number_format(x)
|
189
189
|
end
|
190
|
-
|
190
|
+
xmldoc.xpath("//stem[@type = 'MathML']")
|
191
|
+
.each { |x| mathml_number_format(x) }
|
192
|
+
mathml_unitsml(xmldoc)
|
191
193
|
end
|
192
194
|
end
|
193
195
|
end
|
@@ -40,14 +40,21 @@ module Metanorma
|
|
40
40
|
def linebreak_cleanup_block(block)
|
41
41
|
block.each_with_index do |e, i|
|
42
42
|
e[:skip] and next
|
43
|
-
lines = e[
|
44
|
-
e[:last] or lines << block[i + 1][:text].lines.first # next token context
|
43
|
+
lines = lines_strip_textspan(e, block[i + 1])
|
45
44
|
out = Metanorma::Utils.line_sanitise(lines)
|
46
45
|
e[:last] or out.pop
|
47
46
|
e[:elem].replace(out.join)
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
50
|
+
def lines_strip_textspan(span, nextspan)
|
51
|
+
lines = span[:text].lines[0..-2].map(&:rstrip) <<
|
52
|
+
span[:text].lines[-1]&.sub(/\n$/, "")
|
53
|
+
# no final line rstrip: can be space linking to next line
|
54
|
+
span[:last] or lines << nextspan[:text].lines.first # next token context
|
55
|
+
lines
|
56
|
+
end
|
57
|
+
|
51
58
|
def gather_text_for_linebreak_cleanup(block)
|
52
59
|
x = block.xpath(".//text()").map do |e|
|
53
60
|
{ elem: e, text: e.text,
|
@@ -25,6 +25,7 @@ module Metanorma
|
|
25
25
|
preprocessor Metanorma::Plugin::Lutaml::LutamlPreprocessor
|
26
26
|
preprocessor Metanorma::Plugin::Lutaml::LutamlUmlAttributesTablePreprocessor
|
27
27
|
preprocessor Metanorma::Plugin::Lutaml::LutamlUmlDatamodelDescriptionPreprocessor
|
28
|
+
preprocessor Metanorma::Plugin::Lutaml::LutamlEaXmiPreprocessor
|
28
29
|
preprocessor Metanorma::Plugin::Lutaml::LutamlUmlClassPreprocessor
|
29
30
|
inline_macro Metanorma::Plugin::Lutaml::LutamlFigureInlineMacro
|
30
31
|
inline_macro Metanorma::Plugin::Lutaml::LutamlTableInlineMacro
|
@@ -33,6 +34,7 @@ module Metanorma
|
|
33
34
|
block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
|
34
35
|
block_macro Metanorma::Plugin::Lutaml::LutamlGmlDictionaryBlockMacro
|
35
36
|
block Metanorma::Plugin::Lutaml::LutamlGmlDictionaryBlock
|
37
|
+
block_macro Metanorma::Plugin::Lutaml::LutamlKlassTableBlockMacro
|
36
38
|
preprocessor Metanorma::Standoc::EmbedIncludeProcessor
|
37
39
|
preprocessor Metanorma::Standoc::LinkProtectPreprocessor
|
38
40
|
preprocessor Metanorma::Standoc::Datamodel::AttributesTablePreprocessor
|
@@ -127,6 +127,7 @@ module Metanorma
|
|
127
127
|
def relation_normalise(type)
|
128
128
|
type.sub(/-by$/, "By").sub(/-of$/, "Of").sub(/-from$/, "From")
|
129
129
|
.sub(/-in$/, "In")
|
130
|
+
.sub(/^has-([a-z])/) { "has#{$1.upcase}" }
|
130
131
|
end
|
131
132
|
|
132
133
|
def metadata_getrelation(node, xml, type, desc = nil)
|
@@ -189,6 +190,7 @@ module Metanorma
|
|
189
190
|
def metadata_ext(node, ext)
|
190
191
|
metadata_doctype(node, ext)
|
191
192
|
metadata_subdoctype(node, ext)
|
193
|
+
metadata_flavor(node, ext)
|
192
194
|
metadata_committee(node, ext)
|
193
195
|
metadata_ics(node, ext)
|
194
196
|
end
|
@@ -201,6 +203,10 @@ module Metanorma
|
|
201
203
|
s = node.attr("docsubtype") and xml.subdoctype s
|
202
204
|
end
|
203
205
|
|
206
|
+
def metadata_flavor(_node, ext)
|
207
|
+
ext.flavor processor.new.asciidoctor_backend
|
208
|
+
end
|
209
|
+
|
204
210
|
def metadata_note(node, xml); end
|
205
211
|
|
206
212
|
def metadata_series(node, xml); end
|
@@ -7,6 +7,8 @@ module Metanorma
|
|
7
7
|
init_vars
|
8
8
|
init_misc(node)
|
9
9
|
init_processing(node)
|
10
|
+
init_log(node)
|
11
|
+
init_image(node)
|
10
12
|
init_reqt(node)
|
11
13
|
init_toc(node)
|
12
14
|
init_output(node) # feeds init_biblio
|
@@ -47,11 +49,22 @@ module Metanorma
|
|
47
49
|
@smartquotes = node.attr("smartquotes") != "false"
|
48
50
|
@sourcecode_markup_start = node.attr("sourcecode-markup-start") || "{{{"
|
49
51
|
@sourcecode_markup_end = node.attr("sourcecode-markup-end") || "}}}"
|
52
|
+
@blockunnumbered = (node.attr("block-unnumbered") || "").split(",")
|
53
|
+
.map(&:strip)
|
54
|
+
end
|
55
|
+
|
56
|
+
def init_log(node)
|
57
|
+
@log or return
|
58
|
+
severity = node.attr("log-filter-severity")&.to_i || 4
|
59
|
+
category = node.attr("log-filter-category") || ""
|
60
|
+
category = category.split(",").map(&:strip)
|
61
|
+
@log.suppress_log = { severity:, category: }
|
62
|
+
end
|
63
|
+
|
64
|
+
def init_image(node)
|
50
65
|
@datauriimage = node.attr("data-uri-image") != "false"
|
51
66
|
@datauriattachment = node.attr("data-uri-attachment") != "false"
|
52
67
|
@dataurimaxsize = node.attr("data-uri-maxsize")&.to_i || 13981013
|
53
|
-
@blockunnumbered = (node.attr("block-unnumbered") || "").split(",")
|
54
|
-
.map(&:strip)
|
55
68
|
end
|
56
69
|
|
57
70
|
def init_reqt(node)
|
@@ -123,15 +136,15 @@ module Metanorma
|
|
123
136
|
def init_math(node)
|
124
137
|
@keepasciimath = node.attr("mn-keep-asciimath") &&
|
125
138
|
node.attr("mn-keep-asciimath") != "false"
|
126
|
-
@numberfmt_default = kv_parse(node.attr("number-presentation"))
|
127
|
-
@numberfmt_formula = node.attr("number-presentation-formula")
|
139
|
+
@numberfmt_default = kv_parse(@c.decode(node.attr("number-presentation")))
|
140
|
+
@numberfmt_formula = @c.decode(node.attr("number-presentation-formula"))
|
128
141
|
@numberfmt_formula == "number-presentation" and
|
129
|
-
@numberfmt_formula = node.attr("number-presentation")
|
142
|
+
@numberfmt_formula = @c.decode(node.attr("number-presentation"))
|
130
143
|
@numberfmt_formula == "default" and
|
131
144
|
@numberfmt_formula = "notation='basic'"
|
132
145
|
@numberfmt_prof = node.attributes.each_with_object({}) do |(k, v), m|
|
133
146
|
p = /^number-presentation-profile-(.*)$/.match(k) or next
|
134
|
-
m[p[1]] = kv_parse(v)
|
147
|
+
m[p[1]] = kv_parse(@c.decode(v))
|
135
148
|
end
|
136
149
|
end
|
137
150
|
|
@@ -40,21 +40,29 @@ module Metanorma
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def stem_parse(text, xml, style, node)
|
43
|
-
|
43
|
+
attrs, text = stem_attrs(node, text)
|
44
44
|
if /<([^:>&]+:)?math(\s+[^>&]+)?> |
|
45
45
|
<([^:>&]+:)?math(\s+[^>&]+)?>/x.match? text
|
46
|
-
xml.stem **
|
46
|
+
xml.stem **attrs.merge(type: "MathML") do |s|
|
47
47
|
s << xml_encode(text)
|
48
48
|
end
|
49
|
-
elsif style == :latexmath then latex_parse(text, xml,
|
49
|
+
elsif style == :latexmath then latex_parse(text, xml, attrs)
|
50
50
|
else
|
51
|
-
xml.stem text&.gsub("&#", "&#"), **
|
51
|
+
xml.stem text&.gsub("&#", "&#"), **attrs.merge(type: "AsciiMath")
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
STEM_ATTRS = "number-format".freeze
|
56
|
+
|
57
|
+
def stem_attrs(node, text)
|
58
|
+
attrs = STEM_ATTRS.split("|").each_with_object({}) do |k, m|
|
59
|
+
n = node.attr(k) and m[k.to_sym] = n
|
60
|
+
end
|
61
|
+
while m = /^(#{STEM_ATTRS})(=[^%]+)?%(.*)$/o.match(text)
|
62
|
+
text = m[3]
|
63
|
+
attrs[m[1].to_sym] = m[2]&.sub(/^=/, "")
|
64
|
+
end
|
65
|
+
[{ block: node.block? }.merge(attrs), text]
|
58
66
|
end
|
59
67
|
|
60
68
|
def latex_parse(text, xml, attr)
|