metanorma-standoc 2.7.1 → 2.7.2
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/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
|