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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22383a78927c434e7f982f01118ce27f61d0f55d1a31b09b1b6af67602df204f
|
4
|
+
data.tar.gz: 7c9b2043c8c862dac50bac349fd432020c9e40d08cba1c1efa57519137a65d2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc525a7aea4c9efac2351a7b0983f82c62a3f19602a811ec80206fcb5855b9611a6e3b0aceb2c516e6ce450c182b88c4c477272e926f0dabb61e31bf72b4d327
|
7
|
+
data.tar.gz: aeef26d6f58f7f9d3d188b716d3bd4f8298e09fd9eaea3461aa3f74c3efd204d920bc7e86afe7a2d5073234e8675e1a38d66934c9e27b4fa67f244a36ed5bf37
|
@@ -19,7 +19,7 @@ module Metanorma
|
|
19
19
|
XML_NAMESPACE = "https://www.metanorma.org/ns/standoc".freeze
|
20
20
|
FONTS_MANIFEST = "fonts-manifest".freeze
|
21
21
|
|
22
|
-
attr_accessor :log
|
22
|
+
attr_accessor :log
|
23
23
|
|
24
24
|
def xml_root_tag
|
25
25
|
self.class::XML_ROOT_TAG
|
@@ -110,7 +110,6 @@ module Metanorma
|
|
110
110
|
end
|
111
111
|
@localdir = Metanorma::Utils::localdir(node)
|
112
112
|
@output_dir = outputdir node
|
113
|
-
@fatalerror = []
|
114
113
|
end
|
115
114
|
|
116
115
|
def init_i18n(node)
|
@@ -141,7 +140,7 @@ module Metanorma
|
|
141
140
|
clean_exit
|
142
141
|
ret
|
143
142
|
rescue StandardError => e
|
144
|
-
@log.add("Fatal Error", nil, e.message)
|
143
|
+
@log.add("Fatal Error", nil, e.message, severity: 0)
|
145
144
|
clean_exit
|
146
145
|
raise e
|
147
146
|
end
|
@@ -374,6 +374,16 @@
|
|
374
374
|
<ref name="image"/>
|
375
375
|
</element>
|
376
376
|
</define>
|
377
|
+
<define name="depiction">
|
378
|
+
<element name="depiction">
|
379
|
+
<optional>
|
380
|
+
<attribute name="scope"/>
|
381
|
+
</optional>
|
382
|
+
<zeroOrMore>
|
383
|
+
<ref name="image"/>
|
384
|
+
</zeroOrMore>
|
385
|
+
</element>
|
386
|
+
</define>
|
377
387
|
<define name="NameWithVariants">
|
378
388
|
<element name="primary">
|
379
389
|
<ref name="LocalizedString"/>
|
@@ -760,6 +770,9 @@
|
|
760
770
|
<optional>
|
761
771
|
<ref name="validity"/>
|
762
772
|
</optional>
|
773
|
+
<optional>
|
774
|
+
<ref name="depiction"/>
|
775
|
+
</optional>
|
763
776
|
</define>
|
764
777
|
<define name="ReducedBibliographicItem">
|
765
778
|
<optional>
|
@@ -22,7 +22,7 @@ module Metanorma
|
|
22
22
|
unless id
|
23
23
|
@log.add("Anchors", clause,
|
24
24
|
"The following reference is missing an anchor:\n" \
|
25
|
-
"#{clause.to_xml}")
|
25
|
+
"#{clause.to_xml}", severity: 1)
|
26
26
|
return
|
27
27
|
end
|
28
28
|
@refids << id
|
@@ -31,10 +31,12 @@ module Metanorma
|
|
31
31
|
|
32
32
|
def validate_ref_dl1(bib, id, clause)
|
33
33
|
bib["title"] or
|
34
|
-
@log.add("Bibliography", clause, "Reference #{id} is missing a title"
|
34
|
+
@log.add("Bibliography", clause, "Reference #{id} is missing a title",
|
35
|
+
severity: 1)
|
35
36
|
bib["docid"] or
|
36
37
|
@log.add("Bibliography", clause,
|
37
|
-
"Reference #{id} is missing a document identifier (docid)"
|
38
|
+
"Reference #{id} is missing a document identifier (docid)",
|
39
|
+
severity: 1)
|
38
40
|
end
|
39
41
|
|
40
42
|
def extract_from_p(tag, bib, key)
|
@@ -0,0 +1,144 @@
|
|
1
|
+
module Metanorma
|
2
|
+
module Standoc
|
3
|
+
module Cleanup
|
4
|
+
def formattedref_spans(xmldoc)
|
5
|
+
xmldoc.xpath("//bibitem[formattedref//span]").each do |b|
|
6
|
+
ret = new_bibitem_from_formattedref_spans(b)
|
7
|
+
merge_bibitem_from_formattedref_spans(b, ret)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_bibitem_from_formattedref_spans(bib)
|
12
|
+
ret = SpansToBibitem.new(bib).convert
|
13
|
+
ret.err.each do |e|
|
14
|
+
@log.add("Bibliography", bib, e[:msg], severity: e[:fatal] ? 0 : 1)
|
15
|
+
end
|
16
|
+
ret.out
|
17
|
+
end
|
18
|
+
|
19
|
+
def merge_bibitem_from_formattedref_spans(bib, new)
|
20
|
+
new["type"] and bib["type"] = new["type"]
|
21
|
+
if bib.at("./title") # there already is a fetched record here: merge
|
22
|
+
bib.children = MergeBibitems
|
23
|
+
.new(bib.to_xml, new.to_xml).merge.to_noko.children
|
24
|
+
else bib << new.children.to_xml
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def fold_notes_into_biblio(refs)
|
29
|
+
refs.xpath("./bibitem").each do |r|
|
30
|
+
while r&.next_element&.name == "note"
|
31
|
+
r.next_element["appended"] = true
|
32
|
+
r << r.next_element.remove
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def extract_notes_from_biblio(refs)
|
38
|
+
refs.xpath("./bibitem").each do |r|
|
39
|
+
r.xpath("./note[@appended]").reverse.each do |n|
|
40
|
+
n.delete("appended")
|
41
|
+
r.next = n
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def biblio_hidden_inherit(xmldoc)
|
47
|
+
xmldoc.xpath("//references[@hidden = 'true']").each do |r|
|
48
|
+
r.xpath("./bibitem").each { |b| b["hidden"] = true }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def biblio_no_ext(xmldoc)
|
53
|
+
xmldoc.xpath("//bibitem/ext").each(&:remove)
|
54
|
+
end
|
55
|
+
|
56
|
+
def format_ref(ref, type)
|
57
|
+
ret = Nokogiri::XML.fragment(ref)
|
58
|
+
ret.traverse { |x| x.remove if x.name == "fn" }
|
59
|
+
ref = to_xml(ret)
|
60
|
+
type != "metanorma" and return @isodoc.docid_prefix(type, ref)
|
61
|
+
/^\d+$/.match(ref) && !/^\[.*\]$/.match(ref) and return "[#{ref}]"
|
62
|
+
ref
|
63
|
+
end
|
64
|
+
|
65
|
+
def reference_names(xmldoc)
|
66
|
+
xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
|
67
|
+
@anchors[ref["id"]] =
|
68
|
+
if docid = select_docid(ref)
|
69
|
+
reference = format_ref(docid.children.to_xml, docid["type"])
|
70
|
+
{ xref: reference, id: idtype2cit(ref) }
|
71
|
+
else { xref: ref["id"], id: { "" => ref["id"] } }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def idtype2cit(ref)
|
77
|
+
ref.xpath("./docidentifier/@type").each_with_object({}) do |t, m|
|
78
|
+
m[t.text] and next
|
79
|
+
docid = select_docid(ref, t.text) or next
|
80
|
+
m[t.text] = format_ref(docid.children.to_xml, docid["type"])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def select_docid(ref, type = nil)
|
85
|
+
type and t = "[@type = '#{type}']"
|
86
|
+
ref.at("./docidentifier[@type = 'metanorma']#{t}") ||
|
87
|
+
ref.at("./docidentifier[@primary = 'true'][@language = '#{@lang}']#{t}") ||
|
88
|
+
ref.at("./docidentifier[@primary = 'true'][not(@language)]#{t}") ||
|
89
|
+
ref.at("./docidentifier[@primary = 'true']#{t}") ||
|
90
|
+
ref.at("./docidentifier[not(@type = 'DOI')][@language = '#{@lang}']#{t}") ||
|
91
|
+
ref.at("./docidentifier[not(@type = 'DOI')][not(@language)]#{t}") ||
|
92
|
+
ref.at("./docidentifier[not(@type = 'DOI')]#{t}")
|
93
|
+
end
|
94
|
+
|
95
|
+
def fetch_termbase(_termbase, _id)
|
96
|
+
""
|
97
|
+
end
|
98
|
+
|
99
|
+
def read_local_bibitem(uri)
|
100
|
+
xml = read_local_bibitem_file(uri) or return nil
|
101
|
+
ret = xml.at("//*[local-name() = 'bibdata']") or return nil
|
102
|
+
ret = Nokogiri::XML(ret.to_xml
|
103
|
+
.sub(%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
|
104
|
+
ret.name = "bibitem"
|
105
|
+
ins = ret.at("./*[local-name() = 'docidentifier']") or return nil
|
106
|
+
ins.previous = %{<uri type="citation">#{uri}</uri>}
|
107
|
+
ret&.at("./*[local-name() = 'ext']")&.remove
|
108
|
+
ret
|
109
|
+
end
|
110
|
+
|
111
|
+
def read_local_bibitem_file(uri)
|
112
|
+
%r{^https?://}.match?(uri) and return nil
|
113
|
+
file = "#{@localdir}#{uri}.rxl"
|
114
|
+
File.file?(file) or file = "#{@localdir}#{uri}.xml"
|
115
|
+
File.file?(file) or return nil
|
116
|
+
Nokogiri::XML(File.read(file, encoding: "utf-8"))
|
117
|
+
end
|
118
|
+
|
119
|
+
# if citation uri points to local file, get bibitem from it
|
120
|
+
def fetch_local_bibitem(xmldoc)
|
121
|
+
xmldoc.xpath("//bibitem[formattedref][uri[@type = 'citation']]")
|
122
|
+
.each do |b|
|
123
|
+
uri = b&.at("./uri[@type = 'citation']")&.text
|
124
|
+
bibitem = read_local_bibitem(uri) or next
|
125
|
+
bibitem["id"] = b["id"]
|
126
|
+
b.replace(bibitem)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def bibitem_nested_id(xmldoc)
|
131
|
+
xmldoc.xpath("//bibitem//bibitem").each do |b|
|
132
|
+
b.delete("id")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def bibitem_cleanup(xmldoc)
|
137
|
+
bibitem_nested_id(xmldoc)
|
138
|
+
ref_dl_cleanup(xmldoc)
|
139
|
+
formattedref_spans(xmldoc)
|
140
|
+
fetch_local_bibitem(xmldoc)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -20,7 +20,7 @@ module Metanorma
|
|
20
20
|
source.each do |s|
|
21
21
|
@anchors[s["bibitemid"]] or
|
22
22
|
@log.add("Crossreferences", nil,
|
23
|
-
"term source #{s['bibitemid']} not referenced")
|
23
|
+
"term source #{s['bibitemid']} not referenced", severity: 1)
|
24
24
|
end
|
25
25
|
a = if source.empty? && term.nil? then @i18n.no_terms_boilerplate
|
26
26
|
else term_defs_boilerplate_cont(source, term, isodoc)
|
@@ -114,7 +114,7 @@ module Metanorma
|
|
114
114
|
|
115
115
|
def footnote_block_error(fnote)
|
116
116
|
@log.add("Crossreferences", fnote,
|
117
|
-
"Could not resolve footnoteblock:[#{fnote.text}]")
|
117
|
+
"Could not resolve footnoteblock:[#{fnote.text}]", severity: 1)
|
118
118
|
fnote.children = "[ERROR]"
|
119
119
|
end
|
120
120
|
|
@@ -212,9 +212,7 @@ module Metanorma
|
|
212
212
|
l["target"] = Addressable::URI.parse(l["target"]).to_s
|
213
213
|
rescue Addressable::URI::InvalidURIError
|
214
214
|
err = "Malformed URI: #{l['target']}"
|
215
|
-
@log.add("Anchors", l, err)
|
216
|
-
@fatalerror << err
|
217
|
-
warn err
|
215
|
+
@log.add("Anchors", l, err, severity: 0)
|
218
216
|
end
|
219
217
|
end
|
220
218
|
|
@@ -29,9 +29,7 @@ module Metanorma
|
|
29
29
|
|
30
30
|
def asciimath2mathml_err(text, expr)
|
31
31
|
err = "Malformed MathML: #{expr}\n#{text}"
|
32
|
-
@log.add("Maths", nil, err)
|
33
|
-
@fatalerror << err
|
34
|
-
warn err
|
32
|
+
@log.add("Maths", nil, err, severity: 0)
|
35
33
|
end
|
36
34
|
|
37
35
|
def asciimath2mathml_wrap(xml)
|
@@ -2,35 +2,11 @@ require "set"
|
|
2
2
|
require "relaton_bib"
|
3
3
|
require_relative "merge_bibitems"
|
4
4
|
require_relative "spans_to_bibitem"
|
5
|
+
require_relative "cleanup_bibitem"
|
5
6
|
|
6
7
|
module Metanorma
|
7
8
|
module Standoc
|
8
9
|
module Cleanup
|
9
|
-
def formattedref_spans(xmldoc)
|
10
|
-
xmldoc.xpath("//bibitem[formattedref//span]").each do |b|
|
11
|
-
ret = new_bibitem_from_formattedref_spans(b)
|
12
|
-
merge_bibitem_from_formattedref_spans(b, ret)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def new_bibitem_from_formattedref_spans(bib)
|
17
|
-
ret = SpansToBibitem.new(bib).convert
|
18
|
-
ret.err.each do |e|
|
19
|
-
@log.add("Bibliography", bib, e[:msg])
|
20
|
-
e[:fatal] and @fatalerror << e[:msg]
|
21
|
-
end
|
22
|
-
ret.out
|
23
|
-
end
|
24
|
-
|
25
|
-
def merge_bibitem_from_formattedref_spans(bib, new)
|
26
|
-
new["type"] and bib["type"] = new["type"]
|
27
|
-
if bib.at("./title") # there already is a fetched record here: merge
|
28
|
-
bib.children = MergeBibitems
|
29
|
-
.new(bib.to_xml, new.to_xml).merge.to_noko.children
|
30
|
-
else bib << new.children.to_xml
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
10
|
def biblio_reorder(xmldoc)
|
35
11
|
xmldoc.xpath("//references[@normative = 'false']").each do |r|
|
36
12
|
biblio_reorder1(r)
|
@@ -40,7 +16,7 @@ module Metanorma
|
|
40
16
|
def biblio_reorder1(refs)
|
41
17
|
fold_notes_into_biblio(refs)
|
42
18
|
bib = sort_biblio(refs.xpath("./bibitem"))
|
43
|
-
insert = refs
|
19
|
+
insert = refs.at("./bibitem")&.previous_element
|
44
20
|
refs.xpath("./bibitem").each(&:remove)
|
45
21
|
bib.reverse.each do |b|
|
46
22
|
(insert and insert.next = b.to_xml) or
|
@@ -50,24 +26,6 @@ module Metanorma
|
|
50
26
|
refs.xpath("./references").each { |r| biblio_reorder1(r) }
|
51
27
|
end
|
52
28
|
|
53
|
-
def fold_notes_into_biblio(refs)
|
54
|
-
refs.xpath("./bibitem").each do |r|
|
55
|
-
while r&.next_element&.name == "note"
|
56
|
-
r.next_element["appended"] = true
|
57
|
-
r << r.next_element.remove
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def extract_notes_from_biblio(refs)
|
63
|
-
refs.xpath("./bibitem").each do |r|
|
64
|
-
r.xpath("./note[@appended]").reverse.each do |n|
|
65
|
-
n.delete("appended")
|
66
|
-
r.next = n
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
29
|
def sort_biblio(bib)
|
72
30
|
bib
|
73
31
|
end
|
@@ -114,12 +72,6 @@ module Metanorma
|
|
114
72
|
biblio_no_ext(xmldoc)
|
115
73
|
end
|
116
74
|
|
117
|
-
def biblio_hidden_inherit(xmldoc)
|
118
|
-
xmldoc.xpath("//references[@hidden = 'true']").each do |r|
|
119
|
-
r.xpath("./bibitem").each { |b| b["hidden"] = true }
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
75
|
def biblio_linkonly(xmldoc)
|
124
76
|
xmldoc.at("//xref[@hidden]") or return
|
125
77
|
ins = xmldoc.at("//bibliography")
|
@@ -139,10 +91,6 @@ module Metanorma
|
|
139
91
|
reference_populate(refs)
|
140
92
|
end
|
141
93
|
|
142
|
-
def biblio_no_ext(xmldoc)
|
143
|
-
xmldoc.xpath("//bibitem/ext").each(&:remove)
|
144
|
-
end
|
145
|
-
|
146
94
|
def biblio_annex(xmldoc)
|
147
95
|
xmldoc.xpath("//annex[references/references]").each do |t|
|
148
96
|
t.xpath("./clause | ./references | ./terms").size == 1 or next
|
@@ -153,101 +101,29 @@ module Metanorma
|
|
153
101
|
end
|
154
102
|
|
155
103
|
def biblio_nested(xmldoc)
|
156
|
-
xmldoc
|
157
|
-
|
158
|
-
t.xpath("./references").each { |r| r["normative"] = t["normative"] }
|
159
|
-
t.delete("normative")
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def format_ref(ref, type)
|
164
|
-
ret = Nokogiri::XML.fragment(ref)
|
165
|
-
ret.traverse { |x| x.remove if x.name == "fn" }
|
166
|
-
ref = to_xml(ret)
|
167
|
-
return @isodoc.docid_prefix(type, ref) if type != "metanorma"
|
168
|
-
return "[#{ref}]" if /^\d+$/.match(ref) && !/^\[.*\]$/.match(ref)
|
169
|
-
|
170
|
-
ref
|
171
|
-
end
|
172
|
-
|
173
|
-
def reference_names(xmldoc)
|
174
|
-
xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
|
175
|
-
@anchors[ref["id"]] = if docid = select_docid(ref)
|
176
|
-
reference = format_ref(docid.children.to_xml,
|
177
|
-
docid["type"])
|
178
|
-
{ xref: reference, id: idtype2cit(ref) }
|
179
|
-
else
|
180
|
-
{ xref: ref["id"], id: { "" => ref["id"] } }
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
def idtype2cit(ref)
|
186
|
-
ref.xpath("./docidentifier/@type").each_with_object({}) do |t, m|
|
187
|
-
m[t.text] and next
|
188
|
-
docid = select_docid(ref, t.text) or next
|
189
|
-
m[t.text] = format_ref(docid.children.to_xml, docid["type"])
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def select_docid(ref, type = nil)
|
194
|
-
type and t = "[@type = '#{type}']"
|
195
|
-
ref.at("./docidentifier[@type = 'metanorma']#{t}") ||
|
196
|
-
ref.at("./docidentifier[@primary = 'true'][@language = '#{@lang}']#{t}") ||
|
197
|
-
ref.at("./docidentifier[@primary = 'true'][not(@language)]#{t}") ||
|
198
|
-
ref.at("./docidentifier[@primary = 'true']#{t}") ||
|
199
|
-
ref.at("./docidentifier[not(@type = 'DOI')][@language = '#{@lang}']#{t}") ||
|
200
|
-
ref.at("./docidentifier[not(@type = 'DOI')][not(@language)]#{t}") ||
|
201
|
-
ref.at("./docidentifier[not(@type = 'DOI')]#{t}")
|
202
|
-
end
|
203
|
-
|
204
|
-
def fetch_termbase(_termbase, _id)
|
205
|
-
""
|
206
|
-
end
|
207
|
-
|
208
|
-
def read_local_bibitem(uri)
|
209
|
-
xml = read_local_bibitem_file(uri) or return nil
|
210
|
-
ret = xml.at("//*[local-name() = 'bibdata']") or return nil
|
211
|
-
ret = Nokogiri::XML(ret.to_xml
|
212
|
-
.sub(%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
|
213
|
-
ret.name = "bibitem"
|
214
|
-
ins = ret.at("./*[local-name() = 'docidentifier']") or return nil
|
215
|
-
ins.previous = %{<uri type="citation">#{uri}</uri>}
|
216
|
-
ret&.at("./*[local-name() = 'ext']")&.remove
|
217
|
-
ret
|
104
|
+
biblio_nested_initial_items(xmldoc)
|
105
|
+
biblio_nested_sections(xmldoc)
|
218
106
|
end
|
219
107
|
|
220
|
-
def
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
def fetch_local_bibitem(xmldoc)
|
230
|
-
xmldoc.xpath("//bibitem[formattedref][uri[@type = 'citation']]")
|
231
|
-
.each do |b|
|
232
|
-
uri = b&.at("./uri[@type = 'citation']")&.text
|
233
|
-
bibitem = read_local_bibitem(uri) or next
|
234
|
-
bibitem["id"] = b["id"]
|
235
|
-
b.replace(bibitem)
|
108
|
+
def biblio_nested_initial_items(xmldoc)
|
109
|
+
xmldoc.xpath("//references[references][bibitem]").each do |t|
|
110
|
+
r = t.at("./references")
|
111
|
+
ref = t.at("./bibitem")
|
112
|
+
.before("<references unnumbered='true'></references>").previous
|
113
|
+
(ref.xpath("./following-sibling::*") &
|
114
|
+
r.xpath("./preceding-sibling::*")).each do |x|
|
115
|
+
ref << x
|
116
|
+
end
|
236
117
|
end
|
237
118
|
end
|
238
119
|
|
239
|
-
def
|
240
|
-
xmldoc.xpath("//
|
241
|
-
|
120
|
+
def biblio_nested_sections(xmldoc)
|
121
|
+
xmldoc.xpath("//references[references]").each do |t|
|
122
|
+
t.name = "clause"
|
123
|
+
t.xpath("./references").each { |r| r["normative"] = t["normative"] }
|
124
|
+
t.delete("normative")
|
242
125
|
end
|
243
126
|
end
|
244
|
-
|
245
|
-
def bibitem_cleanup(xmldoc)
|
246
|
-
bibitem_nested_id(xmldoc)
|
247
|
-
ref_dl_cleanup(xmldoc)
|
248
|
-
formattedref_spans(xmldoc)
|
249
|
-
fetch_local_bibitem(xmldoc)
|
250
|
-
end
|
251
127
|
end
|
252
128
|
end
|
253
129
|
end
|
@@ -5,8 +5,7 @@ module Metanorma
|
|
5
5
|
xmldoc.xpath("//term//expression/name[stem]").each do |n|
|
6
6
|
test = n.dup
|
7
7
|
test.at("./stem").remove
|
8
|
-
|
9
|
-
|
8
|
+
test.text.strip.empty? or next
|
10
9
|
n.parent.name = "letter-symbol"
|
11
10
|
end
|
12
11
|
end
|
@@ -107,10 +106,11 @@ module Metanorma
|
|
107
106
|
end
|
108
107
|
|
109
108
|
def term_to_letter_symbol(prev, dlist)
|
110
|
-
ls = dlist.at("./dt[text()='letter-symbol']/following::dd/p")
|
111
|
-
|
112
|
-
|
113
|
-
|
109
|
+
ls = dlist.at("./dt[text()='letter-symbol']/following::dd/p")&.text
|
110
|
+
!ls || ls == "false" and return
|
111
|
+
e = prev.at(".//expression")
|
112
|
+
e.name = "letter-symbol"
|
113
|
+
ls != "true" and e["type"] = ls
|
114
114
|
end
|
115
115
|
|
116
116
|
def dl_to_designation(dlist)
|
@@ -39,8 +39,8 @@ module Metanorma
|
|
39
39
|
|
40
40
|
def uninterrupt_quotes_around_xml_skip(elem)
|
41
41
|
!(/\A['"]/.match?(elem.text) &&
|
42
|
-
elem.previous.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
|
43
|
-
intersection(IGNORE_QUOTES_ELEMENTS).empty? &&
|
42
|
+
elem.previous.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
|
43
|
+
.intersection(IGNORE_QUOTES_ELEMENTS).empty? &&
|
44
44
|
((elem.previous.text.strip.empty? &&
|
45
45
|
!empty_tag_with_text_content?(elem.previous)) ||
|
46
46
|
ignoretext?(elem.previous)))
|
@@ -50,8 +50,8 @@ module Metanorma
|
|
50
50
|
prev = elem.at(".//preceding::text()[1]") or return
|
51
51
|
/\S\Z/.match?(prev.text) or return
|
52
52
|
foll = elem.at(".//following::text()[1]")
|
53
|
-
m = /\A(["'][[:punct:]]*)(\s|\Z)
|
54
|
-
match(@c.decode(foll&.text)) or return
|
53
|
+
m = /\A(["'][[:punct:]]*)(\s|\Z)/
|
54
|
+
.match(@c.decode(foll&.text)) or return
|
55
55
|
foll.content = foll.text.sub(/\A(["'][[:punct:]]*)/, "")
|
56
56
|
prev.content = "#{prev.text}#{m[1]}"
|
57
57
|
end
|
@@ -103,8 +103,8 @@ module Metanorma
|
|
103
103
|
next unless n.text? && /\u2019/.match?(n.text)
|
104
104
|
|
105
105
|
n.replace(@c.encode(
|
106
|
-
@c.decode(n.text)
|
107
|
-
gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"),
|
106
|
+
@c.decode(n.text)
|
107
|
+
.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"),
|
108
108
|
:basic, :hexadecimal
|
109
109
|
))
|
110
110
|
end
|
@@ -114,7 +114,7 @@ module Metanorma
|
|
114
114
|
def skip(node, name = nil)
|
115
115
|
name = name || node.node_name
|
116
116
|
w = "converter missing for #{name} node in Metanorma backend"
|
117
|
-
@log.add("AsciiDoc Input", node, w)
|
117
|
+
@log.add("AsciiDoc Input", node, w, severity: 1)
|
118
118
|
nil
|
119
119
|
end
|
120
120
|
|
@@ -149,8 +149,7 @@ module Metanorma
|
|
149
149
|
end
|
150
150
|
|
151
151
|
def metadata_keywords(node, xml)
|
152
|
-
|
153
|
-
|
152
|
+
node.attr("keywords") or return
|
154
153
|
node.attr("keywords").split(/,\s*/).each do |kw|
|
155
154
|
xml.keyword kw
|
156
155
|
end
|
@@ -225,9 +224,8 @@ module Metanorma
|
|
225
224
|
|
226
225
|
def title_otherlangs(node, xml)
|
227
226
|
node.attributes.each do |k, v|
|
228
|
-
|
229
|
-
|
230
|
-
|
227
|
+
/^title-(?<titlelang>.+)$/ =~ k or next
|
228
|
+
titlelang == "en" and next
|
231
229
|
xml.title v, { language: titlelang, format: "text/plain" }
|
232
230
|
end
|
233
231
|
end
|