metanorma 2.0.11 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/metanorma/collection/collection.rb +3 -0
- data/lib/metanorma/collection/config/config.rb +3 -4
- data/lib/metanorma/collection/config/converters.rb +1 -1
- data/lib/metanorma/collection/config/manifest.rb +0 -1
- data/lib/metanorma/collection/manifest/manifest.rb +7 -0
- data/lib/metanorma/collection/renderer/fileparse.rb +23 -17
- data/lib/metanorma/collection/renderer/fileprocess.rb +1 -0
- data/lib/metanorma/collection/renderer/renderer.rb +1 -1
- data/lib/metanorma/collection/renderer/svg.rb +13 -5
- data/lib/metanorma/collection/renderer/utils.rb +4 -3
- data/lib/metanorma/collection/sectionsplit/sectionsplit.rb +12 -4
- data/lib/metanorma/collection/util/util.rb +6 -4
- data/lib/metanorma/collection/xrefprocess/xrefprocess.rb +27 -23
- data/lib/metanorma/compile/compile_validate.rb +1 -0
- data/lib/metanorma/version.rb +1 -1
- data/metanorma.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fd9ecb51192449d7c6a5b31614eb8e40d2410fe123cbef2999560d749653e83
|
4
|
+
data.tar.gz: bfaf64c6fa530debbde4a02fc12532a3c3749c14da9733900a82b4e82bc5a4f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d408a147959d442051abbf6398f0ce8cc9ba092e12a02765234d16a0185f05b590918438c3e571da2353f93ec61514d754b4ab01accabaa75fcc2416b188e92c
|
7
|
+
data.tar.gz: 00446dfeb4998cdd8b3c6e5e8e817555eb078b7c7c89ba1452b5f2f942ae58cf123c929addc208a137c4c5823abc7de91e3620f7fc57b3e26d90ff6229aa6150
|
@@ -214,6 +214,9 @@ module Metanorma
|
|
214
214
|
# @param fileref [String]
|
215
215
|
# @return [String]
|
216
216
|
def resolve_fileref(ref_folder, fileref)
|
217
|
+
warn ref_folder
|
218
|
+
warn fileref
|
219
|
+
#require "debug"; binding.b
|
217
220
|
unless @fileref_resolver
|
218
221
|
(Pathname.new fileref).absolute? or
|
219
222
|
fileref = File.join(ref_folder, fileref)
|
@@ -9,7 +9,6 @@ require_relative "manifest"
|
|
9
9
|
module Metanorma
|
10
10
|
class Collection
|
11
11
|
module Config
|
12
|
-
require "shale/adapter/nokogiri"
|
13
12
|
Lutaml::Model::Config.configure do |config|
|
14
13
|
config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
|
15
14
|
end
|
@@ -71,7 +70,7 @@ module Metanorma
|
|
71
70
|
end
|
72
71
|
|
73
72
|
def manifest_from_xml(model, node)
|
74
|
-
model.manifest = Manifest.from_xml(node.
|
73
|
+
model.manifest = Manifest.from_xml(node.to_xml)
|
75
74
|
end
|
76
75
|
|
77
76
|
def manifest_to_xml(model, parent, doc)
|
@@ -80,7 +79,7 @@ module Metanorma
|
|
80
79
|
end
|
81
80
|
|
82
81
|
def prefatory_from_xml(model, node)
|
83
|
-
model.prefatory_content = node
|
82
|
+
model.prefatory_content = node.children.map(&:to_xml).join
|
84
83
|
end
|
85
84
|
|
86
85
|
def prefatory_to_xml(model, parent, doc)
|
@@ -105,7 +104,7 @@ module Metanorma
|
|
105
104
|
end
|
106
105
|
|
107
106
|
def final_from_xml(model, node)
|
108
|
-
model.final_content = node
|
107
|
+
model.final_content = node.children.map(&:to_xml).join
|
109
108
|
end
|
110
109
|
|
111
110
|
def directives_from_yaml(model, value)
|
@@ -14,6 +14,7 @@ module Metanorma
|
|
14
14
|
# @param docref [Array<Hash{String=>String}>]
|
15
15
|
# @param manifest [Array<Metanorma::Collection::Manifest>]
|
16
16
|
def initialize(config, collection, dir)
|
17
|
+
#require "debug"; binding.b
|
17
18
|
@collection = collection
|
18
19
|
@dir = dir
|
19
20
|
@disambig = ::Metanorma::Collection::Util::DisambigFiles.new
|
@@ -21,6 +22,7 @@ module Metanorma
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def manifest_postprocess(config)
|
25
|
+
#require "debug"; binding.b
|
24
26
|
manifest_bibdata(config)
|
25
27
|
manifest_expand_yaml(config, @dir)
|
26
28
|
manifest_compile_adoc(config)
|
@@ -94,6 +96,7 @@ module Metanorma
|
|
94
96
|
|
95
97
|
def manifest_filexist(config)
|
96
98
|
if config.file
|
99
|
+
#require "debug"; binding.b
|
97
100
|
file = @collection.class.resolve_fileref(@dir, config.file)
|
98
101
|
@collection.class.check_file_existence(file)
|
99
102
|
config.file = Pathname.new(file).relative_path_from(Pathname.new(@dir))
|
@@ -108,6 +111,7 @@ module Metanorma
|
|
108
111
|
currdir = dir
|
109
112
|
/\.ya?ml$/.match?(e.file) and
|
110
113
|
currdir = manifest_expand_yaml_entry(e, dir)
|
114
|
+
#require "debug"; binding.b
|
111
115
|
manifest_expand_yaml(e, currdir)
|
112
116
|
end
|
113
117
|
config
|
@@ -118,8 +122,10 @@ module Metanorma
|
|
118
122
|
currdir = File.dirname(f)
|
119
123
|
@collection.class.check_file_existence(f)
|
120
124
|
entry.file = nil
|
125
|
+
#require 'debug'; binding.b
|
121
126
|
entry.entry = ::Metanorma::Collection::Config::Config.from_yaml(File.read(f)).manifest
|
122
127
|
if currdir != dir
|
128
|
+
#require "debug"; binding.b
|
123
129
|
prefix = Pathname.new(currdir).relative_path_from(Pathname.new(dir))
|
124
130
|
update_filepaths(entry.entry, prefix.to_s)
|
125
131
|
end
|
@@ -127,6 +133,7 @@ module Metanorma
|
|
127
133
|
end
|
128
134
|
|
129
135
|
def update_filepaths(entry, prefix)
|
136
|
+
#require "debug"; binding.b
|
130
137
|
entry.file && !(Pathname.new entry.file).absolute? and
|
131
138
|
entry.file = File.join(prefix, entry.file)
|
132
139
|
entry.entry.each do |f|
|
@@ -16,20 +16,23 @@ module Metanorma
|
|
16
16
|
# @return [String] XML content
|
17
17
|
def update_xrefs(file, docid, internal_refs)
|
18
18
|
xml, sso = update_xrefs_prep(file, docid)
|
19
|
+
#require "debug"; binding.b if /This document is also unrelated/.match?(xml.to_xml)
|
20
|
+
#warn (/fmt-title/.match?(xml.to_xml) ? "*** PRESENTATION" : "*** SEMANTIC")
|
19
21
|
@nested || sso or
|
20
22
|
Metanorma::Collection::XrefProcess::xref_process(xml, xml, nil, docid,
|
21
|
-
@isodoc)
|
23
|
+
@isodoc, sso)
|
22
24
|
@ncnames = {}
|
23
|
-
@nested or update_indirect_refs_to_docs(xml, docid, internal_refs)
|
25
|
+
@nested or update_indirect_refs_to_docs(xml, docid, internal_refs, sso)
|
24
26
|
@files.add_document_suffix(docid, xml)
|
25
|
-
@nested or update_sectionsplit_refs_to_docs(xml, internal_refs)
|
26
|
-
update_direct_refs_to_docs(xml, docid)
|
27
|
+
@nested or update_sectionsplit_refs_to_docs(xml, internal_refs, sso)
|
28
|
+
update_direct_refs_to_docs(xml, docid, sso)
|
27
29
|
hide_refs(xml)
|
28
|
-
sso and eref2link(xml)
|
29
|
-
@nested or svgmap_resolve(xml, docid)
|
30
|
+
sso and eref2link(xml, sso)
|
31
|
+
@nested or svgmap_resolve(xml, docid, sso)
|
30
32
|
xml.to_xml
|
31
33
|
end
|
32
34
|
|
35
|
+
## sso files are Presentation XML; otherwise, Semantic XML
|
33
36
|
def update_xrefs_prep(file, docid)
|
34
37
|
docxml = file.is_a?(String) ? Nokogiri::XML(file, &:huge) : file
|
35
38
|
supply_repo_ids(docxml)
|
@@ -37,8 +40,8 @@ module Metanorma
|
|
37
40
|
[docxml, sso]
|
38
41
|
end
|
39
42
|
|
40
|
-
def update_sectionsplit_refs_to_docs(docxml, internal_refs)
|
41
|
-
Util::gather_citeases(docxml).each do |k, v|
|
43
|
+
def update_sectionsplit_refs_to_docs(docxml, internal_refs, presxml)
|
44
|
+
Util::gather_citeases(docxml, presxml).each do |k, v|
|
42
45
|
(@files.get(k) && @files.get(k, :sectionsplit)) or next
|
43
46
|
opts = { key: @files.get(k, :indirect_key),
|
44
47
|
source_suffix: docxml.root["document_suffix"],
|
@@ -81,9 +84,9 @@ module Metanorma
|
|
81
84
|
# Any erefs to that bibitem id are replaced with relative URL
|
82
85
|
# Preferably with anchor, and is a job to realise dynamic lookup
|
83
86
|
# of localities.
|
84
|
-
def update_direct_refs_to_docs(docxml, identifier)
|
87
|
+
def update_direct_refs_to_docs(docxml, identifier, presxml)
|
85
88
|
erefs, erefs_no_anchor, anchors, erefs1 =
|
86
|
-
update_direct_refs_to_docs_prep(docxml)
|
89
|
+
update_direct_refs_to_docs_prep(docxml, presxml)
|
87
90
|
docxml.xpath(ns("//bibitem")).each do |b|
|
88
91
|
docid = b.at(ns("./docidentifier[@type = 'repository']")) or next
|
89
92
|
strip_unresolved_repo_erefs(identifier, docid, erefs1, b) or next
|
@@ -96,8 +99,8 @@ module Metanorma
|
|
96
99
|
end
|
97
100
|
|
98
101
|
# Hash(docid) of arrays
|
99
|
-
def update_direct_refs_to_docs_prep(docxml)
|
100
|
-
erefs = Util::gather_citeases(docxml)
|
102
|
+
def update_direct_refs_to_docs_prep(docxml, presxml)
|
103
|
+
erefs = Util::gather_citeases(docxml, presxml)
|
101
104
|
no_anchor = erefs.keys.each_with_object({}) { |k, m| m[k] = [] }
|
102
105
|
anchors = erefs.keys.each_with_object({}) { |k, m| m[k] = [] }
|
103
106
|
erefs.each do |k, v|
|
@@ -106,7 +109,8 @@ module Metanorma
|
|
106
109
|
else no_anchor[k] << e end
|
107
110
|
end
|
108
111
|
end
|
109
|
-
|
112
|
+
#require "debug"; binding.b
|
113
|
+
[erefs, no_anchor, anchors, Util::gather_bibitemids(docxml, presxml)]
|
110
114
|
end
|
111
115
|
|
112
116
|
# strip erefs if they are repository erefs, but do not point to a document
|
@@ -124,8 +128,8 @@ module Metanorma
|
|
124
128
|
|
125
129
|
# Resolve erefs to a container of ids in another doc,
|
126
130
|
# to an anchor eref (direct link)
|
127
|
-
def update_indirect_refs_to_docs(docxml, _docidentifier, internal_refs)
|
128
|
-
bib, erefs, doc_suffix, doc_type, f = update_indirect_refs_prep(docxml)
|
131
|
+
def update_indirect_refs_to_docs(docxml, _docidentifier, internal_refs, presxml)
|
132
|
+
bib, erefs, doc_suffix, doc_type, f = update_indirect_refs_prep(docxml, presxml)
|
129
133
|
internal_refs.each do |schema, ids|
|
130
134
|
add_suffix = doc_suffix && doc_type && doc_type != schema
|
131
135
|
ids.each do |id, file|
|
@@ -138,13 +142,14 @@ module Metanorma
|
|
138
142
|
end
|
139
143
|
end
|
140
144
|
|
141
|
-
def update_indirect_refs_prep(docxml)
|
145
|
+
def update_indirect_refs_prep(docxml, presxml)
|
142
146
|
@updated_anchors = {}
|
143
147
|
@indirect_keys = {}
|
144
|
-
[Util::gather_bibitems(docxml), Util::gather_bibitemids(docxml),
|
148
|
+
[Util::gather_bibitems(docxml), Util::gather_bibitemids(docxml, presxml),
|
145
149
|
docxml.root["document_suffix"], docxml.root["type"], {}]
|
146
150
|
end
|
147
151
|
|
152
|
+
# KILL
|
148
153
|
def indirect_ref_key(schema, id, doc_suffix, doc_type)
|
149
154
|
/^#{schema}_/.match?(id) and return id
|
150
155
|
key = [schema, id, doc_suffix, doc_type].join("::")
|
@@ -168,6 +173,7 @@ module Metanorma
|
|
168
173
|
end
|
169
174
|
end
|
170
175
|
|
176
|
+
# KILL
|
171
177
|
def indirect_ref_keyx(schema, id, doc_suffix, doc_type)
|
172
178
|
/^#{schema}_/.match?(id) and return id
|
173
179
|
ret = "#{schema}_#{id}"
|
@@ -44,7 +44,7 @@ module Metanorma
|
|
44
44
|
@compile.load_flavor(@flavor)
|
45
45
|
|
46
46
|
# output processor for flavour
|
47
|
-
@isodoc = Util::isodoc_create(@flavor, @lang, @
|
47
|
+
@isodoc = Util::isodoc_create(@flavor, @lang, @script, @xml)
|
48
48
|
@outdir = dir_name_cleanse(options[:output_folder])
|
49
49
|
@coverpage = options[:coverpage] || collection.coverpage
|
50
50
|
@format = ::Metanorma::Util.sort_extensions_execution(options[:format])
|
@@ -10,13 +10,21 @@ module Metanorma
|
|
10
10
|
datauri_encode(docxml, dir)
|
11
11
|
end
|
12
12
|
|
13
|
-
def svgmap_resolve(docxml, docid)
|
13
|
+
def svgmap_resolve(docxml, docid, presxml)
|
14
|
+
#require "debug"; binding.b
|
14
15
|
ids = @files.get(docid, :ids)
|
15
16
|
docxml = svg_unnest(svg_datauri(docxml, docid))
|
16
17
|
isodoc = IsoDoc::PresentationXMLConvert.new({})
|
17
18
|
isodoc.bibitem_lookup(docxml)
|
18
|
-
|
19
|
-
|
19
|
+
tag = presxml ? "fmt-eref" : "eref"
|
20
|
+
docxml.xpath(ns("//svgmap//#{tag}")).each do |e|
|
21
|
+
#require "debug"; binding.b
|
22
|
+
svgmap_resolve_eref(e, isodoc, docxml, ids, presxml)
|
23
|
+
end
|
24
|
+
docxml.xpath(ns("//svgmap/target")).each do |t| # undo Presentation XML: Vectory takes eref not fmt-eref
|
25
|
+
n = t.at(ns(".//fmt-link | .//fmt-xref | .//fmt-eref")) or next
|
26
|
+
n.name = n.name.sub(/^fmt-/, "")
|
27
|
+
t.children = n
|
20
28
|
end
|
21
29
|
Vectory::SvgMapping.new(docxml, "").call
|
22
30
|
docxml.xpath(ns("//svgmap")).each { |s| isodoc.svgmap_extract(s) }
|
@@ -30,13 +38,13 @@ module Metanorma
|
|
30
38
|
docxml
|
31
39
|
end
|
32
40
|
|
33
|
-
def svgmap_resolve_eref(eref, isodoc, _docxml, ids)
|
41
|
+
def svgmap_resolve_eref(eref, isodoc, _docxml, ids, presxml)
|
34
42
|
href = isodoc.eref_target(eref) or return
|
35
43
|
href = href[:link]
|
36
44
|
href == "##{eref['bibitemid']}" ||
|
37
45
|
(href =~ /^#/ && !ids[href.sub(/^#/, "")]) and return
|
38
46
|
eref["target"] = href.strip
|
39
|
-
eref.name = "link"
|
47
|
+
eref.name = presxml ? "fmt-link" : "link"
|
40
48
|
eref.elements&.remove
|
41
49
|
end
|
42
50
|
end
|
@@ -58,8 +58,9 @@ module Metanorma
|
|
58
58
|
::Metanorma::Collection::Util::key(docid_prefix(docid))
|
59
59
|
end
|
60
60
|
|
61
|
-
def collect_erefs(docxml)
|
62
|
-
|
61
|
+
def collect_erefs(docxml, presxml)
|
62
|
+
tag = presxml ? "fmt-eref" : "eref"
|
63
|
+
docxml.xpath(ns("//#{tag}"))
|
63
64
|
.each_with_object({ citeas: {}, bibitemid: {} }) do |i, m|
|
64
65
|
m[:citeas][i["citeas"]] = true
|
65
66
|
m[:bibitemid][i["bibitemid"]] = true
|
@@ -195,7 +196,7 @@ module Metanorma
|
|
195
196
|
end.doc.root.to_html
|
196
197
|
end
|
197
198
|
|
198
|
-
def eref2link(docxml)
|
199
|
+
def eref2link(docxml, presxml)
|
199
200
|
isodoc = IsoDoc::PresentationXMLConvert.new({})
|
200
201
|
isodoc.bibitem_lookup(docxml)
|
201
202
|
isodoc.eref2link(docxml)
|
@@ -39,7 +39,8 @@ module Metanorma
|
|
39
39
|
empty = empty_doc(xml)
|
40
40
|
empty1 = empty_attachments(empty)
|
41
41
|
@mutex = Mutex.new
|
42
|
-
|
42
|
+
#@pool = Concurrent::FixedThreadPool.new(4)
|
43
|
+
@pool = Concurrent::FixedThreadPool.new(1)
|
43
44
|
sectionsplit1(xml, empty, empty1, 0)
|
44
45
|
end
|
45
46
|
|
@@ -85,6 +86,7 @@ module Metanorma
|
|
85
86
|
xml, type = sectionsplit_preprocess_semxml(file, filename)
|
86
87
|
flags = { format: :asciidoc, extension_keys: [:presentation],
|
87
88
|
type: type }.merge(@compile_opts)
|
89
|
+
#require "debug"; binding.b
|
88
90
|
Compile.new.compile(xml, flags)
|
89
91
|
f = File.open(xml.sub(/\.xml$/, ".presentation.xml"), encoding: "utf-8")
|
90
92
|
r = Nokogiri::XML(f, &:huge)
|
@@ -95,7 +97,8 @@ module Metanorma
|
|
95
97
|
|
96
98
|
def sectionsplit_preprocess_semxml(file, filename)
|
97
99
|
xml = Nokogiri::XML(file, &:huge)
|
98
|
-
type = xml.root
|
100
|
+
type = xml.root["flavor"]
|
101
|
+
type ||= xml.root.name.sub("-standard", "").to_sym
|
99
102
|
sectionsplit_update_xrefs(xml)
|
100
103
|
xml1 = sectionsplit_write_semxml(filename, xml)
|
101
104
|
@tmp_filename = xml1
|
@@ -106,6 +109,7 @@ module Metanorma
|
|
106
109
|
if c = @fileslookup&.parent
|
107
110
|
n = c.nested
|
108
111
|
c.nested = true # so unresolved erefs are not deleted
|
112
|
+
#require "debug"; binding.b
|
109
113
|
c.update_xrefs(xml, @ident, {})
|
110
114
|
c.nested = n
|
111
115
|
xml.xpath("//xmlns:svgmap").each { |x| x.name = "svgmap1" }
|
@@ -160,10 +164,11 @@ module Metanorma
|
|
160
164
|
|
161
165
|
def create_sectionfile(xml, out, file, chunks, parentnode)
|
162
166
|
ins = out.at(ns("//metanorma-extension")) || out.at(ns("//bibdata"))
|
167
|
+
#require "debug"; binding.b
|
163
168
|
sectionfile_insert(ins, chunks, parentnode)
|
164
169
|
Metanorma::Collection::XrefProcess::xref_process(out, xml, @key,
|
165
|
-
@ident, @isodoc)
|
166
|
-
truncate_semxml(out, chunks)
|
170
|
+
@ident, @isodoc, true)
|
171
|
+
#truncate_semxml(out, chunks)
|
167
172
|
outname = "#{file}.xml"
|
168
173
|
File.open(File.join(@splitdir, outname), "w:UTF-8") do |f|
|
169
174
|
f.write(out)
|
@@ -171,6 +176,7 @@ module Metanorma
|
|
171
176
|
outname
|
172
177
|
end
|
173
178
|
|
179
|
+
# KILL
|
174
180
|
def semantic_xml_ids_gather(out)
|
175
181
|
out.at(ns("//semantic__bibdata")) or return
|
176
182
|
SPLITSECTIONS.each_with_object({}) do |s, m|
|
@@ -181,12 +187,14 @@ module Metanorma
|
|
181
187
|
end
|
182
188
|
end
|
183
189
|
|
190
|
+
# KILL
|
184
191
|
def semxml_presxml_nodes_match(nodes, chunks)
|
185
192
|
chunks.each do |x|
|
186
193
|
nodes[x["id"]] and nodes.delete(x["id"])
|
187
194
|
end
|
188
195
|
end
|
189
196
|
|
197
|
+
# KILL
|
190
198
|
def truncate_semxml(out, chunks)
|
191
199
|
nodes = semantic_xml_ids_gather(out) or return
|
192
200
|
semxml_presxml_nodes_match(nodes, chunks)
|
@@ -14,17 +14,19 @@ module Metanorma
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def gather_bibitemids(xml)
|
17
|
+
def gather_bibitemids(xml, presxml)
|
18
18
|
xml.xpath("//*[@bibitemid]").each_with_object({}) do |e, m|
|
19
|
-
|
19
|
+
#/^semantic__/.match?(e.name) and next
|
20
|
+
presxml && %w(xref eref link).include?(e.name) and next
|
20
21
|
m[e["bibitemid"]] ||= []
|
21
22
|
m[e["bibitemid"]] << e
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
def gather_citeases(xml)
|
26
|
+
def gather_citeases(xml, presxml)
|
26
27
|
xml.xpath("//*[@citeas]").each_with_object({}) do |e, m|
|
27
|
-
|
28
|
+
#/^semantic__/.match?(e.name) and next
|
29
|
+
presxml && %w(xref eref link).include?(e.name) and next
|
28
30
|
k = key(e["citeas"])
|
29
31
|
m[k] ||= []
|
30
32
|
m[k] << e
|
@@ -5,12 +5,14 @@ module Metanorma
|
|
5
5
|
# xml.root["type"] = key # to force recognition of internal refs
|
6
6
|
# bookmarks etc as new id elements introduced in Presentation XML:
|
7
7
|
# add doc suffix
|
8
|
+
# Run on Semantic XML
|
8
9
|
def xref_preprocess(xml, isodoc)
|
9
10
|
@isodoc = isodoc
|
10
11
|
key = (0...8).map { rand(65..90).chr }.join # random string
|
11
12
|
xml.root["type"] = key
|
12
13
|
Metanorma::Utils::anchor_attributes
|
13
14
|
.each do |(tag_name, attr_name)|
|
15
|
+
#tag_name == "xref" and tag_name = "fmt-xref"
|
14
16
|
::Metanorma::Collection::Util::add_suffix_to_attrs(
|
15
17
|
xml, xml.root["document_suffix"], tag_name, attr_name, isodoc
|
16
18
|
)
|
@@ -22,21 +24,21 @@ module Metanorma
|
|
22
24
|
@isodoc.ns(xpath)
|
23
25
|
end
|
24
26
|
|
25
|
-
def xref_process(section, xml, key, ident, isodoc)
|
27
|
+
def xref_process(section, xml, key, ident, isodoc, presxml)
|
26
28
|
@isodoc ||= isodoc
|
27
|
-
svg_preprocess(section, Metanorma::Utils::to_ncname(ident))
|
28
|
-
refs = eref_to_internal_eref(section, xml, key)
|
29
|
-
refs += xref_to_internal_eref(section, xml, key)
|
29
|
+
svg_preprocess(section, Metanorma::Utils::to_ncname(ident), presxml)
|
30
|
+
refs = eref_to_internal_eref(section, xml, key, presxml)
|
31
|
+
refs += xref_to_internal_eref(section, xml, key, presxml)
|
30
32
|
ins = new_hidden_ref(section)
|
31
33
|
copied_refs = copy_repo_items_biblio(ins, section, xml)
|
32
34
|
insert_indirect_biblio(ins, refs - copied_refs, key, xml)
|
33
35
|
end
|
34
36
|
|
35
|
-
def svg_preprocess(xml, doc_suffix)
|
37
|
+
def svg_preprocess(xml, doc_suffix, presxml)
|
36
38
|
suffix = doc_suffix.nil? || doc_suffix.blank? ? "" : "_#{doc_suffix}"
|
37
39
|
xml.xpath("//m:svg", "m" => "http://www.w3.org/2000/svg").each do |s|
|
38
40
|
m = svgmap_wrap(s)
|
39
|
-
svg_xrefs(s, m, suffix)
|
41
|
+
svg_xrefs(s, m, suffix, presxml)
|
40
42
|
end
|
41
43
|
xml
|
42
44
|
end
|
@@ -48,12 +50,13 @@ module Metanorma
|
|
48
50
|
svg.at("./ancestor::xmlns:svgmap")
|
49
51
|
end
|
50
52
|
|
51
|
-
def svg_xrefs(svg, svgmap, suffix)
|
53
|
+
def svg_xrefs(svg, svgmap, suffix, presxml)
|
54
|
+
tag = presxml ? "fmt-xref" : "xref"
|
52
55
|
svg.xpath(".//m:a", "m" => "http://www.w3.org/2000/svg").each do |a|
|
53
56
|
/^#/.match? a["href"] or next
|
54
57
|
a["href"] = a["href"].sub(/^#/, "")
|
55
58
|
svgmap << "<target href='#{a['href']}'>" \
|
56
|
-
"
|
59
|
+
"<#{tag} target='#{a['href']}#{suffix}'/></target>"
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
@@ -65,15 +68,16 @@ module Metanorma
|
|
65
68
|
"#{anchor}</referenceFrom></locality></localityStack>"
|
66
69
|
end
|
67
70
|
|
68
|
-
def xref_to_internal_eref(section, xml, key)
|
71
|
+
def xref_to_internal_eref(section, xml, key, presxml)
|
69
72
|
key or return [] # no sectionsplit, no playing with xrefs
|
70
73
|
bibitems, indirect = xref_to_internal_eref_prep(section, xml)
|
71
|
-
|
74
|
+
tag = presxml ? "fmt-xref" : "xref"
|
75
|
+
section.xpath(ns("//#{tag}")).each_with_object({}) do |x, m|
|
72
76
|
xref_prefix_key(x, key, indirect)
|
73
77
|
x["bibitemid"] = x["target"]
|
74
78
|
m[x["bibitemid"]] = true
|
75
79
|
xref_to_internal_eref_anchor(x, key, bibitems,
|
76
|
-
xml.root["document_suffix"])
|
80
|
+
xml.root["document_suffix"], presxml)
|
77
81
|
end.keys
|
78
82
|
end
|
79
83
|
|
@@ -84,7 +88,7 @@ module Metanorma
|
|
84
88
|
[bibitems, indirect_bibitems]
|
85
89
|
end
|
86
90
|
|
87
|
-
def xref_to_internal_eref_anchor(xref, key, bibitems, document_suffix)
|
91
|
+
def xref_to_internal_eref_anchor(xref, key, bibitems, document_suffix, presxml)
|
88
92
|
t = xref["target"]
|
89
93
|
if d = bibitems[t]&.at(ns("./docidentifier[@type = 'repository']"))
|
90
94
|
m = %r{^([^/]+)}.match(d.text) and
|
@@ -93,7 +97,7 @@ module Metanorma
|
|
93
97
|
key and t.sub!(%r{^#{key}_}, "")
|
94
98
|
make_anchor(xref, t.sub(%r(_#{document_suffix}$), ""))
|
95
99
|
xref.delete("target")
|
96
|
-
xref.name = "eref"
|
100
|
+
xref.name = presxml ? "fmt-eref" : "eref"
|
97
101
|
end
|
98
102
|
|
99
103
|
def xref_prefix_key(xref, key, indirect)
|
@@ -114,32 +118,32 @@ module Metanorma
|
|
114
118
|
url&.text
|
115
119
|
end
|
116
120
|
|
117
|
-
def eref_to_internal_eref(section, xml, key)
|
121
|
+
def eref_to_internal_eref(section, xml, key, presxml)
|
118
122
|
bibitems, indirect, bibids, lang =
|
119
|
-
eref_to_internal_eref_prep(section, xml)
|
120
|
-
eref_to_internal_eref_select(section, xml, bibitems)
|
123
|
+
eref_to_internal_eref_prep(section, xml, presxml)
|
124
|
+
eref_to_internal_eref_select(section, xml, bibitems, presxml)
|
121
125
|
.each_with_object([]) do |x, m|
|
122
126
|
url = select_citation_uri(bibitems[x], lang)
|
123
127
|
bibids[x]&.each do |e|
|
124
128
|
e.at(ns("./localityStack | ./locality")) and next
|
125
|
-
id = eref_to_internal_eref1(e, key, url, indirect) and m << id
|
129
|
+
id = eref_to_internal_eref1(e, key, url, indirect, presxml) and m << id
|
126
130
|
end
|
127
131
|
end
|
128
132
|
end
|
129
133
|
|
130
|
-
def eref_to_internal_eref_prep(section, xml)
|
134
|
+
def eref_to_internal_eref_prep(section, xml, presxml)
|
131
135
|
bibitems = ::Metanorma::Collection::Util::gather_bibitems(xml)
|
132
136
|
.delete_if { |_, v| internal_bib?(v) }
|
133
137
|
indirect = ::Metanorma::Collection::Util::gather_bibitems(xml)
|
134
138
|
.select { |_, v| indirect_bib?(v) }
|
135
|
-
bibitemids = ::Metanorma::Collection::Util::gather_bibitemids(section)
|
139
|
+
bibitemids = ::Metanorma::Collection::Util::gather_bibitemids(section, presxml)
|
136
140
|
lang = xml.at(ns("//bibdata/language"))&.text || "en"
|
137
141
|
[bibitems, indirect, bibitemids, lang]
|
138
142
|
end
|
139
143
|
|
140
|
-
def eref_to_internal_eref1(elem, key, url, indirect)
|
144
|
+
def eref_to_internal_eref1(elem, key, url, indirect, presxml)
|
141
145
|
if url
|
142
|
-
elem.name = "link"
|
146
|
+
elem.name = presxml ? "fmt-link" : "link"
|
143
147
|
elem["target"] = url
|
144
148
|
nil
|
145
149
|
elsif !indirect[elem["bibitemid"]]
|
@@ -162,8 +166,8 @@ module Metanorma
|
|
162
166
|
elem["bibitemid"]
|
163
167
|
end
|
164
168
|
|
165
|
-
def eref_to_internal_eref_select(section, _xml, bibitems)
|
166
|
-
refs = ::Metanorma::Collection::Util::gather_bibitemids(section).keys
|
169
|
+
def eref_to_internal_eref_select(section, _xml, bibitems, presxml)
|
170
|
+
refs = ::Metanorma::Collection::Util::gather_bibitemids(section, presxml).keys
|
167
171
|
refs.uniq.reject do |x|
|
168
172
|
b = bibitems[x] and (indirect_bib?(b) || internal_bib?(b))
|
169
173
|
end
|
data/lib/metanorma/version.rb
CHANGED
data/metanorma.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency "concurrent-ruby"
|
28
28
|
spec.add_runtime_dependency "fontist", ">= 1.14.3"
|
29
29
|
spec.add_runtime_dependency "htmlentities"
|
30
|
-
spec.add_runtime_dependency "isodoc", ">=
|
30
|
+
spec.add_runtime_dependency "isodoc", ">= 3.0.0"
|
31
31
|
spec.add_runtime_dependency "mn2pdf", "~> 2"
|
32
32
|
spec.add_runtime_dependency "nokogiri"
|
33
33
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 3.0.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 3.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mn2pdf
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|