metanorma-standoc 2.9.5 → 2.9.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/isodoc/html/htmlstyle.css +4 -1
- data/lib/metanorma/standoc/base.rb +8 -8
- data/lib/metanorma/standoc/basicdoc.rng +909 -464
- data/lib/metanorma/standoc/biblio-standoc.rng +87 -20
- data/lib/metanorma/standoc/biblio.rng +884 -325
- data/lib/metanorma/standoc/blocks.rb +1 -1
- data/lib/metanorma/standoc/cleanup.rb +4 -2
- data/lib/metanorma/standoc/cleanup_bibitem.rb +18 -6
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +9 -93
- data/lib/metanorma/standoc/cleanup_inline.rb +1 -1
- data/lib/metanorma/standoc/cleanup_maths.rb +51 -101
- data/lib/metanorma/standoc/cleanup_mathvariant.rb +88 -0
- data/lib/metanorma/standoc/cleanup_terms.rb +4 -1
- data/lib/metanorma/standoc/cleanup_terms_boilerplate.rb +106 -0
- data/lib/metanorma/standoc/cleanup_terms_designations.rb +1 -2
- data/lib/metanorma/standoc/cleanup_text.rb +11 -4
- data/lib/metanorma/standoc/cleanup_xref.rb +1 -1
- data/lib/metanorma/standoc/converter.rb +2 -0
- data/lib/metanorma/standoc/datamodel/plantuml_renderer.rb +1 -1
- data/lib/metanorma/standoc/init.rb +23 -4
- data/lib/metanorma/standoc/inline.rb +27 -14
- data/lib/metanorma/standoc/isodoc.rng +1031 -912
- data/lib/metanorma/standoc/localbib.rb +1 -1
- data/lib/metanorma/standoc/macros.rb +1 -1
- data/lib/metanorma/standoc/macros_inline.rb +11 -9
- data/lib/metanorma/standoc/macros_plantuml.rb +1 -1
- data/lib/metanorma/standoc/ref.rb +1 -1
- data/lib/metanorma/standoc/ref_queue.rb +1 -1
- data/lib/metanorma/standoc/ref_utility.rb +7 -6
- data/lib/metanorma/standoc/reqt.rng +94 -72
- data/lib/metanorma/standoc/section.rb +2 -2
- data/lib/metanorma/standoc/term_lookup_cleanup.rb +2 -2
- data/lib/metanorma/standoc/utils.rb +4 -2
- data/lib/metanorma/standoc/version.rb +1 -1
- metadata +4 -2
@@ -2,8 +2,8 @@ module Metanorma
|
|
2
2
|
module Standoc
|
3
3
|
module Cleanup
|
4
4
|
def textcleanup(result)
|
5
|
-
text = result.flatten.map
|
6
|
-
text = text.gsub(
|
5
|
+
text = result.flatten.map(&:rstrip) * "\n"
|
6
|
+
text = text.gsub(/(?<!\s)\s+<fn /, "<fn ")
|
7
7
|
%w(passthrough passthrough-inline).each do |v|
|
8
8
|
text.gsub!(%r{<#{v}\s+formats="metanorma">([^<]*)
|
9
9
|
</#{v}>}mx) { @c.decode($1) }
|
@@ -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,
|
@@ -176,7 +176,7 @@ module Metanorma
|
|
176
176
|
|
177
177
|
def xref_compound_cleanup1(xref, locations)
|
178
178
|
xref.children.empty? and xref.children = "<sentinel/>"
|
179
|
-
xref_parse_compound_locations(locations).
|
179
|
+
xref_parse_compound_locations(locations).reverse_each do |y|
|
180
180
|
xref.children.first.previous =
|
181
181
|
"<xref target='#{y[1]}' connective='#{y[0]}'/>"
|
182
182
|
end
|
@@ -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
|
@@ -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)
|
@@ -103,6 +116,7 @@ module Metanorma
|
|
103
116
|
def init_biblio(node)
|
104
117
|
@no_isobib_cache = node.attr("no-isobib-cache")
|
105
118
|
@no_isobib = node.attr("no-isobib")
|
119
|
+
@flush_caches = node.attr("flush-caches")
|
106
120
|
init_bib_log
|
107
121
|
@bibdb = nil
|
108
122
|
init_bib_caches(node)
|
@@ -122,10 +136,15 @@ module Metanorma
|
|
122
136
|
def init_math(node)
|
123
137
|
@keepasciimath = node.attr("mn-keep-asciimath") &&
|
124
138
|
node.attr("mn-keep-asciimath") != "false"
|
125
|
-
@numberfmt_default = kv_parse(node.attr("number-presentation"))
|
139
|
+
@numberfmt_default = kv_parse(@c.decode(node.attr("number-presentation")))
|
140
|
+
@numberfmt_formula = @c.decode(node.attr("number-presentation-formula"))
|
141
|
+
@numberfmt_formula == "number-presentation" and
|
142
|
+
@numberfmt_formula = @c.decode(node.attr("number-presentation"))
|
143
|
+
@numberfmt_formula == "default" and
|
144
|
+
@numberfmt_formula = "notation='basic'"
|
126
145
|
@numberfmt_prof = node.attributes.each_with_object({}) do |(k, v), m|
|
127
146
|
p = /^number-presentation-profile-(.*)$/.match(k) or next
|
128
|
-
m[p[1]] = kv_parse(v)
|
147
|
+
m[p[1]] = kv_parse(@c.decode(v))
|
129
148
|
end
|
130
149
|
end
|
131
150
|
|
@@ -39,25 +39,38 @@ module Metanorma
|
|
39
39
|
results.sub(%r{<math ([^>]+ )?display="block"}, "<math \\1")
|
40
40
|
end
|
41
41
|
|
42
|
-
def stem_parse(text, xml, style,
|
42
|
+
def stem_parse(text, xml, style, node)
|
43
|
+
attrs, text = stem_attrs(node, text)
|
43
44
|
if /<([^:>&]+:)?math(\s+[^>&]+)?> |
|
44
45
|
<([^:>&]+:)?math(\s+[^>&]+)?>/x.match? text
|
45
|
-
|
46
|
-
|
47
|
-
s << math
|
46
|
+
xml.stem **attrs.merge(type: "MathML") do |s|
|
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("&#", "&#"), type: "AsciiMath"
|
51
|
+
xml.stem text&.gsub("&#", "&#"), **attrs.merge(type: "AsciiMath")
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
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]
|
66
|
+
end
|
67
|
+
|
68
|
+
def latex_parse(text, xml, attr)
|
69
|
+
latex = latex_parse1(text, attr[:block]) or
|
70
|
+
return xml.stem **attr.merge(type: "MathML")
|
71
|
+
xml.stem **attr.merge(type: "MathML") do |s|
|
59
72
|
math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, ""))
|
60
|
-
|
73
|
+
.elements[0]
|
61
74
|
math.delete("alttext")
|
62
75
|
s.parent.children = math
|
63
76
|
s << "<latexmath>#{text}</latexmath>"
|
@@ -78,8 +91,8 @@ module Metanorma
|
|
78
91
|
when :single then xml << "'#{node.text}'"
|
79
92
|
when :superscript then xml.sup { |s| s << node.text }
|
80
93
|
when :subscript then xml.sub { |s| s << node.text }
|
81
|
-
when :asciimath then stem_parse(node.text, xml, :asciimath,
|
82
|
-
when :latexmath then stem_parse(node.text, xml, :latexmath,
|
94
|
+
when :asciimath then stem_parse(node.text, xml, :asciimath, node)
|
95
|
+
when :latexmath then stem_parse(node.text, xml, :latexmath, node)
|
83
96
|
when :mark then highlight_parse(node.text, xml)
|
84
97
|
else
|
85
98
|
case node.role
|
@@ -123,7 +136,7 @@ module Metanorma
|
|
123
136
|
end
|
124
137
|
uri = node.image_uri (nodetarget)
|
125
138
|
if Gem.win_platform? && /^\/[a-zA-Z]:/.match?(uri)
|
126
|
-
uri = uri[1
|
139
|
+
uri = uri[1..]
|
127
140
|
end
|
128
141
|
types = if /^data:/.match?(uri) then Vectory::Utils::datauri2mime(uri)
|
129
142
|
else MIME::Types.type_for(uri)
|