metanorma-standoc 2.7.1 → 2.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/metanorma/standoc/base.rb +2 -3
- data/lib/metanorma/standoc/biblio.rng +13 -0
- data/lib/metanorma/standoc/cleanup_asciibib.rb +5 -3
- data/lib/metanorma/standoc/cleanup_bibitem.rb +144 -0
- data/lib/metanorma/standoc/cleanup_block.rb +1 -1
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +1 -1
- data/lib/metanorma/standoc/cleanup_footnotes.rb +1 -1
- data/lib/metanorma/standoc/cleanup_inline.rb +1 -3
- data/lib/metanorma/standoc/cleanup_maths.rb +1 -3
- data/lib/metanorma/standoc/cleanup_ref.rb +18 -142
- data/lib/metanorma/standoc/cleanup_terms_designations.rb +6 -6
- data/lib/metanorma/standoc/cleanup_text.rb +6 -6
- data/lib/metanorma/standoc/converter.rb +1 -1
- data/lib/metanorma/standoc/front.rb +3 -5
- data/lib/metanorma/standoc/front_contributor.rb +1 -159
- data/lib/metanorma/standoc/front_organisation.rb +163 -0
- data/lib/metanorma/standoc/inline.rb +8 -7
- data/lib/metanorma/standoc/isodoc.rng +11 -1
- data/lib/metanorma/standoc/localbib.rb +3 -6
- data/lib/metanorma/standoc/macros.rb +7 -0
- data/lib/metanorma/standoc/ref.rb +1 -1
- data/lib/metanorma/standoc/ref_queue.rb +2 -2
- data/lib/metanorma/standoc/render.rb +2 -1
- data/lib/metanorma/standoc/term_lookup_cleanup.rb +3 -4
- data/lib/metanorma/standoc/terms.rb +1 -1
- data/lib/metanorma/standoc/validate.rb +12 -12
- data/lib/metanorma/standoc/validate_section.rb +2 -6
- data/lib/metanorma/standoc/validate_table.rb +2 -5
- data/lib/metanorma/standoc/validate_term.rb +4 -8
- data/lib/metanorma/standoc/version.rb +1 -1
- metadata +4 -2
@@ -1,42 +1,8 @@
|
|
1
|
-
|
1
|
+
require_relative "./front_organisation"
|
2
2
|
|
3
3
|
module Metanorma
|
4
4
|
module Standoc
|
5
5
|
module Front
|
6
|
-
def committee_component(compname, node, out)
|
7
|
-
i = 1
|
8
|
-
suffix = ""
|
9
|
-
while node.attr(compname + suffix)
|
10
|
-
out.send compname.gsub(/-/, "_"), node.attr(compname + suffix),
|
11
|
-
**attr_code(number: node.attr("#{compname}-number#{suffix}"),
|
12
|
-
type: node.attr("#{compname}-type#{suffix}"))
|
13
|
-
i += 1
|
14
|
-
suffix = "_#{i}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def organization(org, orgname, node = nil, default_org = nil)
|
19
|
-
abbrevs = org_abbrev
|
20
|
-
n = abbrevs.invert[orgname] and orgname = n
|
21
|
-
org.name orgname
|
22
|
-
default_org and a = node&.attr("subdivision") and org.subdivision a
|
23
|
-
abbr = org_abbrev[orgname]
|
24
|
-
default_org && b = node&.attr("subdivision-abbr") and abbr = b
|
25
|
-
abbr and org.abbreviation abbr
|
26
|
-
end
|
27
|
-
|
28
|
-
def org_address(org, xml)
|
29
|
-
p = org[:address] and xml.address do |ad|
|
30
|
-
ad.formattedAddress do |f|
|
31
|
-
f << p.gsub(/ \+\n/, "<br/>")
|
32
|
-
end
|
33
|
-
end
|
34
|
-
p = org[:phone] and xml.phone p
|
35
|
-
p = org[:fax] and xml.phone p, type: "fax"
|
36
|
-
p = org[:email] and xml.email p
|
37
|
-
p = org[:uri] and xml.uri p
|
38
|
-
end
|
39
|
-
|
40
6
|
def metadata_author(node, xml)
|
41
7
|
org_contributor(node, xml,
|
42
8
|
{ source: ["publisher", "pub"], role: "author",
|
@@ -108,55 +74,6 @@ module Metanorma
|
|
108
74
|
end
|
109
75
|
end
|
110
76
|
|
111
|
-
def person_organization(node, suffix, xml)
|
112
|
-
xml.name node.attr("affiliation#{suffix}")
|
113
|
-
abbr = node.attr("affiliation_abbrev#{suffix}") and
|
114
|
-
xml.abbreviation abbr
|
115
|
-
csv_split(node.attr("affiliation_subdiv#{suffix}"))&.each do |s|
|
116
|
-
xml.subdivision s
|
117
|
-
end
|
118
|
-
person_address(node, suffix, xml)
|
119
|
-
person_org_logo(node, suffix, xml)
|
120
|
-
end
|
121
|
-
|
122
|
-
def person_address(node, suffix, xml)
|
123
|
-
if node.attr("address#{suffix}")
|
124
|
-
xml.address do |ad|
|
125
|
-
ad.formattedAddress do |f|
|
126
|
-
f << node.attr("address#{suffix}").gsub(/ \+\n/, "<br/>")
|
127
|
-
end
|
128
|
-
end
|
129
|
-
elsif node.attr("country#{suffix}") || node.attr("city#{suffix}")
|
130
|
-
person_address_components(node, suffix, xml)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def person_address_components(node, suffix, xml)
|
135
|
-
xml.address do |ad|
|
136
|
-
%w(street city state country postcode).each do |k|
|
137
|
-
s = node.attr("#{k}#{suffix}") and ad.send k, s
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def person_org_logo(node, suffix, xml)
|
143
|
-
p = node.attr("affiliation_logo#{suffix}") and org_logo(xml, p)
|
144
|
-
end
|
145
|
-
|
146
|
-
def org_logo(xml, logo)
|
147
|
-
logo and xml.logo do |l|
|
148
|
-
l.image src: logo
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def default_publisher
|
153
|
-
nil
|
154
|
-
end
|
155
|
-
|
156
|
-
def org_abbrev
|
157
|
-
{}
|
158
|
-
end
|
159
|
-
|
160
77
|
def metadata_publisher(node, xml)
|
161
78
|
o = { source: ["publisher", "pub"], role: "publisher",
|
162
79
|
default: default_publisher }
|
@@ -168,81 +85,6 @@ module Metanorma
|
|
168
85
|
org_contributor(node, xml, o)
|
169
86
|
end
|
170
87
|
|
171
|
-
def org_contributor(node, xml, opts)
|
172
|
-
org_attrs_parse(node, opts).each do |o|
|
173
|
-
xml.contributor do |c|
|
174
|
-
org_contributor_role(c, o)
|
175
|
-
c.organization do |a|
|
176
|
-
org_organization(node, a, o)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
def org_contributor_role(xml, org)
|
183
|
-
xml.role type: org[:role] do |r|
|
184
|
-
org[:desc] and r.description do |d|
|
185
|
-
d << org[:desc]
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def org_organization(node, xml, org)
|
191
|
-
organization(xml, org[:name], node, !node.attr("publisher"))
|
192
|
-
org_address(org, xml)
|
193
|
-
org_logo(xml, org[:logo])
|
194
|
-
end
|
195
|
-
|
196
|
-
def org_attrs_parse(node, opts)
|
197
|
-
source = opts[:source]&.detect { |s| node.attr(s) }
|
198
|
-
org_attrs_simple_parse(node, opts, source) ||
|
199
|
-
org_attrs_complex_parse(node, opts, source)
|
200
|
-
end
|
201
|
-
|
202
|
-
def org_attrs_simple_parse(node, opts, source)
|
203
|
-
!source and return org_attrs_simple_parse_no_source(node, opts)
|
204
|
-
orgs = csv_split(node.attr(source))
|
205
|
-
orgs.size > 1 and return orgs.map do |o|
|
206
|
-
{ name: o, role: opts[:role], desc: opts[:desc] }
|
207
|
-
end
|
208
|
-
nil
|
209
|
-
end
|
210
|
-
|
211
|
-
def org_attrs_simple_parse_no_source(node, opts)
|
212
|
-
!opts[:default] && !opts[:name] and return []
|
213
|
-
[{ name: opts[:name] || opts[:default],
|
214
|
-
role: opts[:role], desc: opts[:desc] }
|
215
|
-
.compact.merge(extract_org_attrs_address(node, opts, ""))]
|
216
|
-
end
|
217
|
-
|
218
|
-
def org_attrs_complex_parse(node, opts, source)
|
219
|
-
i = 1
|
220
|
-
suffix = ""
|
221
|
-
ret = []
|
222
|
-
while node.attr(source + suffix)
|
223
|
-
ret << extract_org_attrs_complex(node, opts, source, suffix)
|
224
|
-
i += 1
|
225
|
-
suffix = "_#{i}"
|
226
|
-
end
|
227
|
-
ret
|
228
|
-
end
|
229
|
-
|
230
|
-
def extract_org_attrs_complex(node, opts, source, suffix)
|
231
|
-
{ name: node.attr(source + suffix),
|
232
|
-
role: opts[:role], desc: opts[:desc],
|
233
|
-
logo: node.attr("#{source}_logo#{suffix}") }.compact
|
234
|
-
.merge(extract_org_attrs_address(node, opts, suffix))
|
235
|
-
end
|
236
|
-
|
237
|
-
def extract_org_attrs_address(node, opts, suffix)
|
238
|
-
%w(address phone fax email uri).each_with_object({}) do |a, m|
|
239
|
-
opts[:source]&.each do |s|
|
240
|
-
p = node.attr("#{s}-#{a}#{suffix}") and
|
241
|
-
m[a.to_sym] = p
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
88
|
def copyright_parse(node)
|
247
89
|
opt = { source: ["copyright-holder", "publisher", "pub"],
|
248
90
|
role: "publisher", default: default_publisher }
|
@@ -0,0 +1,163 @@
|
|
1
|
+
module Metanorma
|
2
|
+
module Standoc
|
3
|
+
module Front
|
4
|
+
def committee_component(compname, node, out)
|
5
|
+
i = 1
|
6
|
+
suffix = ""
|
7
|
+
while node.attr(compname + suffix)
|
8
|
+
out.send compname.gsub(/-/, "_"), node.attr(compname + suffix),
|
9
|
+
**attr_code(number: node.attr("#{compname}-number#{suffix}"),
|
10
|
+
type: node.attr("#{compname}-type#{suffix}"))
|
11
|
+
i += 1
|
12
|
+
suffix = "_#{i}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def organization(org, orgname, node = nil, default_org = nil)
|
17
|
+
abbrevs = org_abbrev
|
18
|
+
n = abbrevs.invert[orgname] and orgname = n
|
19
|
+
org.name orgname
|
20
|
+
default_org and a = node&.attr("subdivision") and org.subdivision a
|
21
|
+
abbr = org_abbrev[orgname]
|
22
|
+
default_org && b = node&.attr("subdivision-abbr") and abbr = b
|
23
|
+
abbr and org.abbreviation abbr
|
24
|
+
end
|
25
|
+
|
26
|
+
def org_address(org, xml)
|
27
|
+
p = org[:address] and xml.address do |ad|
|
28
|
+
ad.formattedAddress do |f|
|
29
|
+
f << p.gsub(/ \+\n/, "<br/>")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
p = org[:phone] and xml.phone p
|
33
|
+
p = org[:fax] and xml.phone p, type: "fax"
|
34
|
+
p = org[:email] and xml.email p
|
35
|
+
p = org[:uri] and xml.uri p
|
36
|
+
end
|
37
|
+
|
38
|
+
def person_organization(node, suffix, xml)
|
39
|
+
xml.name node.attr("affiliation#{suffix}")
|
40
|
+
abbr = node.attr("affiliation_abbrev#{suffix}") and
|
41
|
+
xml.abbreviation abbr
|
42
|
+
csv_split(node.attr("affiliation_subdiv#{suffix}"))&.each do |s|
|
43
|
+
xml.subdivision s
|
44
|
+
end
|
45
|
+
person_address(node, suffix, xml)
|
46
|
+
person_org_logo(node, suffix, xml)
|
47
|
+
end
|
48
|
+
|
49
|
+
def person_address(node, suffix, xml)
|
50
|
+
if node.attr("address#{suffix}")
|
51
|
+
xml.address do |ad|
|
52
|
+
ad.formattedAddress do |f|
|
53
|
+
f << node.attr("address#{suffix}").gsub(/ \+\n/, "<br/>")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
elsif node.attr("country#{suffix}") || node.attr("city#{suffix}")
|
57
|
+
person_address_components(node, suffix, xml)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def person_address_components(node, suffix, xml)
|
62
|
+
xml.address do |ad|
|
63
|
+
%w(street city state country postcode).each do |k|
|
64
|
+
s = node.attr("#{k}#{suffix}") and ad.send k, s
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def person_org_logo(node, suffix, xml)
|
70
|
+
p = node.attr("affiliation_logo#{suffix}") and org_logo(xml, p)
|
71
|
+
end
|
72
|
+
|
73
|
+
def org_logo(xml, logo)
|
74
|
+
logo and xml.logo do |l|
|
75
|
+
l.image src: logo
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def default_publisher
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
|
83
|
+
def org_abbrev
|
84
|
+
{}
|
85
|
+
end
|
86
|
+
|
87
|
+
def org_contributor(node, xml, opts)
|
88
|
+
org_attrs_parse(node, opts).each do |o|
|
89
|
+
xml.contributor do |c|
|
90
|
+
org_contributor_role(c, o)
|
91
|
+
c.organization do |a|
|
92
|
+
org_organization(node, a, o)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def org_contributor_role(xml, org)
|
99
|
+
xml.role type: org[:role] do |r|
|
100
|
+
org[:desc] and r.description do |d|
|
101
|
+
d << org[:desc]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def org_organization(node, xml, org)
|
107
|
+
organization(xml, org[:name], node, !node.attr("publisher"))
|
108
|
+
org_address(org, xml)
|
109
|
+
org_logo(xml, org[:logo])
|
110
|
+
end
|
111
|
+
|
112
|
+
def org_attrs_parse(node, opts)
|
113
|
+
source = opts[:source]&.detect { |s| node.attr(s) }
|
114
|
+
org_attrs_simple_parse(node, opts, source) ||
|
115
|
+
org_attrs_complex_parse(node, opts, source)
|
116
|
+
end
|
117
|
+
|
118
|
+
def org_attrs_simple_parse(node, opts, source)
|
119
|
+
!source and return org_attrs_simple_parse_no_source(node, opts)
|
120
|
+
orgs = csv_split(node.attr(source))
|
121
|
+
orgs.size > 1 and return orgs.map do |o|
|
122
|
+
{ name: o, role: opts[:role], desc: opts[:desc] }
|
123
|
+
end
|
124
|
+
nil
|
125
|
+
end
|
126
|
+
|
127
|
+
def org_attrs_simple_parse_no_source(node, opts)
|
128
|
+
!opts[:default] && !opts[:name] and return []
|
129
|
+
[{ name: opts[:name] || opts[:default],
|
130
|
+
role: opts[:role], desc: opts[:desc] }
|
131
|
+
.compact.merge(extract_org_attrs_address(node, opts, ""))]
|
132
|
+
end
|
133
|
+
|
134
|
+
def org_attrs_complex_parse(node, opts, source)
|
135
|
+
i = 1
|
136
|
+
suffix = ""
|
137
|
+
ret = []
|
138
|
+
while node.attr(source + suffix)
|
139
|
+
ret << extract_org_attrs_complex(node, opts, source, suffix)
|
140
|
+
i += 1
|
141
|
+
suffix = "_#{i}"
|
142
|
+
end
|
143
|
+
ret
|
144
|
+
end
|
145
|
+
|
146
|
+
def extract_org_attrs_complex(node, opts, source, suffix)
|
147
|
+
{ name: node.attr(source + suffix),
|
148
|
+
role: opts[:role], desc: opts[:desc],
|
149
|
+
logo: node.attr("#{source}_logo#{suffix}") }.compact
|
150
|
+
.merge(extract_org_attrs_address(node, opts, suffix))
|
151
|
+
end
|
152
|
+
|
153
|
+
def extract_org_attrs_address(node, opts, suffix)
|
154
|
+
%w(address phone fax email uri).each_with_object({}) do |a, m|
|
155
|
+
opts[:source]&.each do |s|
|
156
|
+
p = node.attr("#{s}-#{a}#{suffix}") and
|
157
|
+
m[a.to_sym] = p
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -27,11 +27,12 @@ module Metanorma
|
|
27
27
|
|
28
28
|
def latex_parse1(text, block)
|
29
29
|
lxm_input = Unicode2LaTeX.unicode2latex(@c.decode(text))
|
30
|
-
results = Plurimath::Math.parse(lxm_input, "latex")
|
31
|
-
to_mathml(display_style: block)
|
30
|
+
results = Plurimath::Math.parse(lxm_input, "latex")
|
31
|
+
.to_mathml(display_style: block)
|
32
32
|
if results.nil?
|
33
33
|
@log.add("Math", nil,
|
34
|
-
"latexmlmath failed to process equation:\n#{lxm_input}"
|
34
|
+
"latexmlmath failed to process equation:\n#{lxm_input}",
|
35
|
+
severity: 1)
|
35
36
|
return
|
36
37
|
end
|
37
38
|
results.sub(%r{<math ([^>]+ )?display="block"}, "<math \\1")
|
@@ -54,8 +55,8 @@ module Metanorma
|
|
54
55
|
latex = latex_parse1(text, block) or
|
55
56
|
return xml.stem type: "MathML", block: block
|
56
57
|
xml.stem type: "MathML", block: block do |s|
|
57
|
-
math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, ""))
|
58
|
-
elements[0]
|
58
|
+
math = Nokogiri::XML.fragment(latex.sub(/<\?[^>]+>/, ""))
|
59
|
+
.elements[0]
|
59
60
|
math.delete("alttext")
|
60
61
|
s.parent.children = math
|
61
62
|
s << "<latexmath>#{text}</latexmath>"
|
@@ -104,8 +105,8 @@ module Metanorma
|
|
104
105
|
end
|
105
106
|
|
106
107
|
def hash2styles(role)
|
107
|
-
CSV.parse_line(role, liberal_parsing: true)
|
108
|
-
each_with_object({}) do |r, m|
|
108
|
+
CSV.parse_line(role, liberal_parsing: true)
|
109
|
+
.each_with_object({}) do |r, m|
|
109
110
|
kv = r.split(":", 2).map(&:strip)
|
110
111
|
case kv[0]
|
111
112
|
when "custom-charset"
|
@@ -17,7 +17,7 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<!-- VERSION v1.2.
|
20
|
+
<!-- VERSION v1.2.9 -->
|
21
21
|
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
22
22
|
<include href="reqt.rng"/>
|
23
23
|
<include href="basicdoc.rng">
|
@@ -1958,6 +1958,16 @@
|
|
1958
1958
|
<data type="boolean"/>
|
1959
1959
|
</attribute>
|
1960
1960
|
</optional>
|
1961
|
+
<optional>
|
1962
|
+
<attribute name="type">
|
1963
|
+
<choice>
|
1964
|
+
<value>letter</value>
|
1965
|
+
<value>symbol</value>
|
1966
|
+
<value>formula</value>
|
1967
|
+
<value>equation</value>
|
1968
|
+
</choice>
|
1969
|
+
</attribute>
|
1970
|
+
</optional>
|
1961
1971
|
<element name="name">
|
1962
1972
|
<oneOrMore>
|
1963
1973
|
<choice>
|
@@ -50,16 +50,14 @@ module Metanorma
|
|
50
50
|
def file_error(config)
|
51
51
|
msg = "Cannot process file #{config['file']} for local relaton " \
|
52
52
|
"data source #{config['key']}"
|
53
|
-
@parent.
|
54
|
-
@parent.log.add("Bibliography", nil, msg)
|
53
|
+
@parent.log.add("Bibliography", nil, msg, severity: 0)
|
55
54
|
""
|
56
55
|
end
|
57
56
|
|
58
57
|
def format_error(config)
|
59
58
|
msg = "Cannot process format #{config['format']} for local relaton " \
|
60
59
|
"data source #{config['key']}"
|
61
|
-
@parent.
|
62
|
-
@parent.log.add("Bibliography", nil, msg)
|
60
|
+
@parent.log.add("Bibliography", nil, msg, severity: 0)
|
63
61
|
{}
|
64
62
|
end
|
65
63
|
|
@@ -68,8 +66,7 @@ module Metanorma
|
|
68
66
|
|
69
67
|
msg = "Cannot find reference #{id} for local relaton " \
|
70
68
|
"data source #{file}"
|
71
|
-
@parent.
|
72
|
-
@parent.log.add("Bibliography", nil, msg)
|
69
|
+
@parent.log.add("Bibliography", nil, msg, severity: 0)
|
73
70
|
Nokogiri::XML("<bibitem/>")
|
74
71
|
end
|
75
72
|
end
|
@@ -97,6 +97,8 @@ module Metanorma
|
|
97
97
|
|
98
98
|
def pass_status(status, text)
|
99
99
|
text == "++++" && !status[:delimln] and status[:pass] = !status[:pass]
|
100
|
+
status[:midline_docattr] && !/^:[^ :]+: /.match?(text) and
|
101
|
+
status[:midline_docattr] = false
|
100
102
|
if (status[:is_delim] && /^(-+|\*+|=+|_+)$/.match?(text)) ||
|
101
103
|
(!status[:is_delim] && !status[:delimln] && text == "----")
|
102
104
|
status[:delimln] = text
|
@@ -106,9 +108,14 @@ module Metanorma
|
|
106
108
|
elsif status[:delimln] && text == status[:delimln]
|
107
109
|
status[:pass] = false
|
108
110
|
status[:delimln] = nil
|
111
|
+
elsif /^:[^ :]+: /.match?(text) &&
|
112
|
+
(status[:prev_line].empty? || status[:midline_docattr])
|
113
|
+
status[:pass] = true
|
114
|
+
status[:midline_docattr] = true
|
109
115
|
end
|
110
116
|
status[:is_delim] = /^\[(source|listing|literal|pass)\b/.match?(text)
|
111
117
|
status[:pass_delim] = /^\[(pass)\b/.match?(text)
|
118
|
+
status[:prev_line] = text.strip
|
112
119
|
status
|
113
120
|
end
|
114
121
|
|
@@ -142,7 +142,7 @@ module Metanorma
|
|
142
142
|
def refitemcode(item, node)
|
143
143
|
m = NON_ISO_REF.match(item) and return refitem1code(item, m).compact
|
144
144
|
m = NON_ISO_REF1.match(item) and return refitem1code(item, m).compact
|
145
|
-
@log.add("AsciiDoc Input", node, "#{MALFORMED_REF}: #{item}")
|
145
|
+
@log.add("AsciiDoc Input", node, "#{MALFORMED_REF}: #{item}", severity: 1)
|
146
146
|
{}
|
147
147
|
end
|
148
148
|
|
@@ -43,7 +43,7 @@ module Metanorma
|
|
43
43
|
m[i.to_i] = { ref: ref }
|
44
44
|
if doc.is_a?(RelatonBib::RequestError)
|
45
45
|
@log.add("Bibliography", nil, "Could not retrieve #{ref[:code]}: " \
|
46
|
-
"no access to online site")
|
46
|
+
"no access to online site", severity: 1)
|
47
47
|
else m[i.to_i][:doc] = doc end
|
48
48
|
end
|
49
49
|
end
|
@@ -138,7 +138,7 @@ module Metanorma
|
|
138
138
|
xml
|
139
139
|
rescue RelatonBib::RequestError
|
140
140
|
@log.add("Bibliography", nil, "Could not retrieve #{code}: " \
|
141
|
-
"no access to online site")
|
141
|
+
"no access to online site", severity: 1)
|
142
142
|
nil
|
143
143
|
end
|
144
144
|
|
@@ -104,7 +104,8 @@ module Metanorma
|
|
104
104
|
def presentation_xml_converter(node)
|
105
105
|
IsoDoc::PresentationXMLConvert
|
106
106
|
.new(html_extract_attributes(node)
|
107
|
-
.merge(output_formats: ::Metanorma::Standoc::Processor.new
|
107
|
+
.merge(output_formats: ::Metanorma::Standoc::Processor.new
|
108
|
+
.output_formats))
|
108
109
|
end
|
109
110
|
|
110
111
|
def default_fonts(node)
|
@@ -112,11 +112,11 @@ module Metanorma
|
|
112
112
|
def remove_missing_ref(node, target)
|
113
113
|
if node.at("./parent::concept[@type = 'symbol']")
|
114
114
|
log.add("AsciiDoc Input", node,
|
115
|
-
remove_missing_ref_msg(node, target, :symbol))
|
115
|
+
remove_missing_ref_msg(node, target, :symbol), severity: 1)
|
116
116
|
remove_missing_ref_term(node, target, "symbol")
|
117
117
|
else
|
118
118
|
log.add("AsciiDoc Input", node,
|
119
|
-
remove_missing_ref_msg(node, target, :term))
|
119
|
+
remove_missing_ref_msg(node, target, :term), severity: 1)
|
120
120
|
remove_missing_ref_term(node, target, "term")
|
121
121
|
end
|
122
122
|
end
|
@@ -253,9 +253,8 @@ module Metanorma
|
|
253
253
|
@idhash["#{prefix}-#{text}"] or
|
254
254
|
return "#{prefix}-#{text}"
|
255
255
|
(1..Float::INFINITY).lazy.each do |index|
|
256
|
-
|
256
|
+
@idhash["#{prefix}-#{text}-#{index}"] or
|
257
257
|
break("#{prefix}-#{text}-#{index}")
|
258
|
-
end
|
259
258
|
end
|
260
259
|
end
|
261
260
|
|
@@ -22,11 +22,14 @@ module Metanorma
|
|
22
22
|
concept_validate(doc, "related", "preferred//name")
|
23
23
|
preferred_validate(doc)
|
24
24
|
table_validate(doc)
|
25
|
-
|
25
|
+
requirement_validate(doc).each do |e|
|
26
|
+
@log.add("Requirements", nil, e, severity: 0)
|
27
|
+
end
|
26
28
|
image_validate(doc)
|
27
29
|
math_validate(doc)
|
28
|
-
@
|
29
|
-
|
30
|
+
fatalerrors = @log.abort_messages
|
31
|
+
fatalerrors.empty? or
|
32
|
+
clean_abort(fatalerrors.join("\n"), doc)
|
30
33
|
end
|
31
34
|
|
32
35
|
MATHML_NS = "http://www.w3.org/1998/Math/MathML".freeze
|
@@ -53,8 +56,7 @@ module Metanorma
|
|
53
56
|
a and orig += "\n\tAsciimath original: #{@c.decode(a.children.to_xml)}"
|
54
57
|
l and orig += "\n\tLatexmath original: #{@c.decode(l.children.to_xml)}"
|
55
58
|
@log.add("Mathematics", elem,
|
56
|
-
"Invalid MathML: #{math}\n #{error}#{orig}")
|
57
|
-
@fatalerror << "Invalid MathML: #{math}"
|
59
|
+
"Invalid MathML: #{math}\n #{error}#{orig}", severity: 0)
|
58
60
|
end
|
59
61
|
|
60
62
|
def nested_asset_validate(doc)
|
@@ -92,7 +94,6 @@ module Metanorma
|
|
92
94
|
err2 = "There is a crossreference to an instance of #{inner.name} " \
|
93
95
|
"nested within #{outer.name}: #{i.to_xml}"
|
94
96
|
@log.add("Style", i, err2)
|
95
|
-
# @fatalerror << err2
|
96
97
|
end
|
97
98
|
|
98
99
|
def schema_validate(doc, schema)
|
@@ -149,8 +150,7 @@ module Metanorma
|
|
149
150
|
Metanorma::Utils::datauri?(i["src"]) and next
|
150
151
|
expand_path(i["src"]) and next
|
151
152
|
@log.add("Images", i.parent,
|
152
|
-
"Image not found: #{i['src']}")
|
153
|
-
@fatalerror << "Image not found: #{i['src']}"
|
153
|
+
"Image not found: #{i['src']}", severity: 0)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -189,9 +189,9 @@ module Metanorma
|
|
189
189
|
|
190
190
|
def repeat_id_validate1(elem)
|
191
191
|
if @doc_ids[elem["id"]]
|
192
|
-
@log.add("Anchors", elem,
|
193
|
-
|
194
|
-
|
192
|
+
@log.add("Anchors", elem,
|
193
|
+
"Anchor #{elem['id']} has already been " \
|
194
|
+
"used at line #{@doc_ids[elem['id']]}", severity: 0)
|
195
195
|
end
|
196
196
|
@doc_ids[elem["id"]] = elem.line
|
197
197
|
end
|
@@ -210,7 +210,7 @@ module Metanorma
|
|
210
210
|
m[x.text] = x
|
211
211
|
@doc_ids[x.text] and next
|
212
212
|
@log.add("Anchors", x.parent,
|
213
|
-
"Crossreference target #{x} is undefined")
|
213
|
+
"Crossreference target #{x} is undefined", severity: 1)
|
214
214
|
end
|
215
215
|
end
|
216
216
|
end
|
@@ -21,8 +21,7 @@ module Metanorma
|
|
21
21
|
if callouts.size != annotations.size && !annotations.empty?
|
22
22
|
err = "mismatch of callouts (#{callouts.size}) and annotations " \
|
23
23
|
"(#{annotations.size})"
|
24
|
-
@log.add("AsciiDoc Input", elem, err)
|
25
|
-
@fatalerror << err
|
24
|
+
@log.add("AsciiDoc Input", elem, err, severity: 0)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
@@ -58,15 +57,12 @@ module Metanorma
|
|
58
57
|
end
|
59
58
|
|
60
59
|
def norm_ref_validate(doc)
|
61
|
-
found = false
|
62
60
|
doc.xpath("//references[@normative = 'true']/bibitem").each do |b|
|
63
61
|
docid = b.at("./docidentifier[@type = 'metanorma']") or next
|
64
62
|
/^\[\d+\]$/.match?(docid.text) or next
|
65
63
|
@log.add("Bibliography", b,
|
66
|
-
"Numeric reference in normative references")
|
67
|
-
found = true
|
64
|
+
"Numeric reference in normative references", severity: 0)
|
68
65
|
end
|
69
|
-
found and @fatalerror << "Numeric reference in normative references"
|
70
66
|
end
|
71
67
|
end
|
72
68
|
end
|
@@ -72,8 +72,7 @@ module Metanorma
|
|
72
72
|
mode == "thead_row" and err = "cannot go outside #{tablechild}"
|
73
73
|
err = "Table rows in table #{err}: check rowspan"
|
74
74
|
if cells2d.any? { |x| x.size != cells2d.first.size }
|
75
|
-
@log.add("Table", table, err)
|
76
|
-
@fatalerror << err
|
75
|
+
@log.add("Table", table, err, severity: 0)
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
@@ -81,9 +80,7 @@ module Metanorma
|
|
81
80
|
def maxcols_check(col, maxcols, tcell)
|
82
81
|
if maxcols.positive? && col > maxcols
|
83
82
|
@log.add("Table", tcell, "Table exceeds maximum number of columns "\
|
84
|
-
"defined (#{maxcols})")
|
85
|
-
@fatalerror << "Table exceeds maximum number of columns defined "\
|
86
|
-
"(#{maxcols})"
|
83
|
+
"defined (#{maxcols})", severity: 0)
|
87
84
|
end
|
88
85
|
end
|
89
86
|
end
|