metanorma 1.6.3 → 1.6.4
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_fileparse.rb +2 -4
- data/lib/metanorma/files_lookup.rb +1 -58
- data/lib/metanorma/files_lookup_sectionsplit.rb +69 -0
- data/lib/metanorma/sectionsplit.rb +6 -5
- data/lib/metanorma/sectionsplit_links.rb +5 -5
- data/lib/metanorma/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abbc191b2e898bbeeea46f7867bb9d25d44cfd7f9a0dd2c690fcbdb8383136fd
|
4
|
+
data.tar.gz: a9e184662fcf25a575c278d604440b8215fd7b54b76f980a4cf4bfd5f8a1f543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfc28efd7f7f48f0bfd7dfa630bf88f1186006022dc6d5f82f188a3749304bc73837c9e96dd9246655de67f2b1ee29d9525f49c2ba568e2116d4329bf3689bda
|
7
|
+
data.tar.gz: 40bc185f4dbe9b4570349e22a15334a2e3fb089dfe3002ab43cb4a8ffa4afe4f2a3ae8357f80e61d585a57ab3b64e24dd5fb2700241dd6f1b958693214afdbc6
|
@@ -58,10 +58,10 @@ module Metanorma
|
|
58
58
|
update_indirect_refs_to_docs(docxml, internal_refs)
|
59
59
|
ids = @files.get(identifier, :ids)
|
60
60
|
@files.add_document_suffix(identifier, docxml)
|
61
|
-
svgmap_resolve(datauri_encode(docxml), ids)
|
62
61
|
update_direct_refs_to_docs(docxml, identifier)
|
63
62
|
hide_refs(docxml)
|
64
63
|
@files.get(identifier, :sectionsplit_output) and eref2link(docxml)
|
64
|
+
svgmap_resolve(datauri_encode(docxml), ids)
|
65
65
|
docxml.to_xml
|
66
66
|
end
|
67
67
|
|
@@ -98,12 +98,12 @@ module Metanorma
|
|
98
98
|
svgmap_resolve1(e, isodoc, docxml, ids)
|
99
99
|
end
|
100
100
|
Metanorma::Utils::svgmap_rewrite(docxml, "")
|
101
|
+
docxml.xpath(ns("//svgmap")).each { |s| isodoc.svgmap_extract(s) }
|
101
102
|
end
|
102
103
|
|
103
104
|
def svgmap_resolve1(eref, isodoc, _docxml, ids)
|
104
105
|
href = isodoc.eref_target(eref)
|
105
106
|
return if href == "##{eref['bibitemid']}" ||
|
106
|
-
# (href =~ /^#/ && !docxml.at("//*[@id = '#{href.sub(/^#/, '')}']"))
|
107
107
|
(href =~ /^#/ && !ids[href.sub(/^#/, "")])
|
108
108
|
|
109
109
|
eref["target"] = href.strip
|
@@ -157,7 +157,6 @@ module Metanorma
|
|
157
157
|
|
158
158
|
def update_indirect_refs_to_docs1(_docxml, key, file, bibitems, erefs)
|
159
159
|
erefs[key]&.each do |e|
|
160
|
-
# docxml.xpath(ns("//eref[@bibitemid = '#{key}']")).each do |e|
|
161
160
|
e["citeas"] = file
|
162
161
|
a = e.at(ns(".//locality[@type = 'anchor']/referenceFrom")) and
|
163
162
|
a.children = "#{a.text}_#{Metanorma::Utils::to_ncname(file)}"
|
@@ -172,7 +171,6 @@ module Metanorma
|
|
172
171
|
# update crossrefences to other documents, to include
|
173
172
|
# disambiguating document suffix on id
|
174
173
|
def update_anchors(bib, docid, erefs)
|
175
|
-
#docxml.xpath("//xmlns:eref[@citeas = '#{docid}']").each do |e|
|
176
174
|
erefs.each do |e|
|
177
175
|
if @files.get(docid) then update_anchor_loc(bib, e, docid)
|
178
176
|
else
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require "isodoc"
|
2
2
|
require "htmlentities"
|
3
3
|
require "metanorma-utils"
|
4
|
+
require_relative "files_lookup_sectionsplit"
|
4
5
|
|
5
6
|
module Metanorma
|
6
7
|
# XML collection renderer
|
@@ -58,64 +59,6 @@ module Metanorma
|
|
58
59
|
entry[:bibitem].at("./*[local-name() = 'ext']")&.remove
|
59
60
|
end
|
60
61
|
|
61
|
-
def add_section_split
|
62
|
-
ret = @files.keys.each_with_object({}) do |k, m|
|
63
|
-
if @files[k][:sectionsplit] == "true" && !@files[k]["attachment"]
|
64
|
-
s, manifest = sectionsplit(@files[k][:ref], k)
|
65
|
-
s.each_with_index { |f1, i| add_section_split_instance(f1, m, k, i) }
|
66
|
-
m["#{k}:index.html"] = add_section_split_cover(manifest, k)
|
67
|
-
@files_to_delete << m["#{k}:index.html"][:ref]
|
68
|
-
end
|
69
|
-
m[k] = @files[k]
|
70
|
-
end
|
71
|
-
@files = ret
|
72
|
-
end
|
73
|
-
|
74
|
-
def add_section_split_cover(manifest, ident)
|
75
|
-
cover = @sectionsplit.section_split_cover(manifest,
|
76
|
-
@parent.dir_name_cleanse(ident))
|
77
|
-
@files[ident][:out_path] = cover
|
78
|
-
{ attachment: true, index: false, out_path: cover,
|
79
|
-
ref: File.join(File.dirname(manifest.file), cover) }
|
80
|
-
end
|
81
|
-
|
82
|
-
def add_section_split_instance(file, manifest, key, idx)
|
83
|
-
presfile, newkey, xml =
|
84
|
-
add_section_split_instance_prep(file, key)
|
85
|
-
manifest[newkey] =
|
86
|
-
{ parentid: key, presentationxml: true, type: "fileref",
|
87
|
-
rel_path: file[:url], out_path: File.basename(file[:url]),
|
88
|
-
anchors: read_anchors(xml), ids: read_ids(xml),
|
89
|
-
sectionsplit_output: true,
|
90
|
-
bibdata: @files[key][:bibdata], ref: presfile }
|
91
|
-
@files_to_delete << file[:url]
|
92
|
-
manifest[newkey][:bare] = true unless idx.zero?
|
93
|
-
end
|
94
|
-
|
95
|
-
def add_section_split_instance_prep(file, key)
|
96
|
-
presfile = File.join(File.dirname(@files[key][:ref]),
|
97
|
-
File.basename(file[:url]))
|
98
|
-
newkey = key("#{key.strip} #{file[:title]}")
|
99
|
-
xml = Nokogiri::XML(File.read(presfile), &:huge)
|
100
|
-
[presfile, newkey, xml]
|
101
|
-
end
|
102
|
-
|
103
|
-
def sectionsplit(file, ident)
|
104
|
-
@sectionsplit =
|
105
|
-
Sectionsplit.new(input: file, base: File.basename(file), dir: File.dirname(file),
|
106
|
-
output: file, compile_options: @parent.compile_options,
|
107
|
-
fileslookup: self, ident: ident, isodoc: @isodoc)
|
108
|
-
coll = @sectionsplit.sectionsplit.sort_by { |f| f[:order] }
|
109
|
-
# s = @compile.sectionsplit(file, File.basename(file), File.dirname(file),
|
110
|
-
# @parent.compile_options, self, ident)
|
111
|
-
# .sort_by { |f| f[:order] }
|
112
|
-
# xml = Nokogiri::XML(File.read(file, encoding: "UTF-8")) { |x| x.huge }
|
113
|
-
xml = Nokogiri::XML(File.read(file, encoding: "UTF-8"), &:huge)
|
114
|
-
[coll, @sectionsplit
|
115
|
-
.collection_manifest(File.basename(file), coll, xml, nil,
|
116
|
-
File.dirname(file))]
|
117
|
-
end
|
118
|
-
|
119
62
|
# rel_path is the source file address, determined relative to the YAML.
|
120
63
|
# out_path is the destination file address, with any references outside
|
121
64
|
# the working directory (../../...) truncated
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Metanorma
|
2
|
+
# XML collection renderer
|
3
|
+
class FileLookup
|
4
|
+
def add_section_split
|
5
|
+
ret = @files.keys.each_with_object({}) do |k, m|
|
6
|
+
if @files[k][:sectionsplit] == "true" && !@files[k]["attachment"]
|
7
|
+
s, manifest = sectionsplit(@files[k][:ref], k)
|
8
|
+
s.each_with_index { |f1, i| add_section_split_instance(f1, m, k, i) }
|
9
|
+
m["#{k}:index.html"] = add_section_split_cover(manifest, k)
|
10
|
+
@files_to_delete << m["#{k}:index.html"][:ref]
|
11
|
+
end
|
12
|
+
m[k] = @files[k]
|
13
|
+
end
|
14
|
+
@files = ret
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_section_split_cover(manifest, ident)
|
18
|
+
cover = @sectionsplit
|
19
|
+
.section_split_cover(manifest, @parent.dir_name_cleanse(ident),
|
20
|
+
one_doc_collection?)
|
21
|
+
@files[ident][:out_path] = cover
|
22
|
+
{ attachment: true, index: false, out_path: cover,
|
23
|
+
ref: File.join(File.dirname(manifest.file), cover) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def one_doc_collection?
|
27
|
+
docs = 0
|
28
|
+
@files.each_value do |v|
|
29
|
+
v[:attachment] and next
|
30
|
+
v[:presentationxml] and next
|
31
|
+
docs += 1
|
32
|
+
end
|
33
|
+
docs > 1
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_section_split_instance(file, manifest, key, idx)
|
37
|
+
presfile, newkey, xml =
|
38
|
+
add_section_split_instance_prep(file, key)
|
39
|
+
manifest[newkey] =
|
40
|
+
{ parentid: key, presentationxml: true, type: "fileref",
|
41
|
+
rel_path: file[:url], out_path: File.basename(file[:url]),
|
42
|
+
anchors: read_anchors(xml), ids: read_ids(xml),
|
43
|
+
sectionsplit_output: true,
|
44
|
+
bibdata: @files[key][:bibdata], ref: presfile }
|
45
|
+
@files_to_delete << file[:url]
|
46
|
+
manifest[newkey][:bare] = true unless idx.zero?
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_section_split_instance_prep(file, key)
|
50
|
+
presfile = File.join(File.dirname(@files[key][:ref]),
|
51
|
+
File.basename(file[:url]))
|
52
|
+
newkey = key("#{key.strip} #{file[:title]}")
|
53
|
+
xml = Nokogiri::XML(File.read(presfile), &:huge)
|
54
|
+
[presfile, newkey, xml]
|
55
|
+
end
|
56
|
+
|
57
|
+
def sectionsplit(file, ident)
|
58
|
+
@sectionsplit = Sectionsplit
|
59
|
+
.new(input: file, base: File.basename(file), dir: File.dirname(file),
|
60
|
+
output: file, compile_options: @parent.compile_options,
|
61
|
+
fileslookup: self, ident: ident, isodoc: @isodoc)
|
62
|
+
coll = @sectionsplit.sectionsplit.sort_by { |f| f[:order] }
|
63
|
+
xml = Nokogiri::XML(File.read(file, encoding: "UTF-8"), &:huge)
|
64
|
+
[coll, @sectionsplit
|
65
|
+
.collection_manifest(File.basename(file), coll, xml, nil,
|
66
|
+
File.dirname(file))]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -109,7 +109,8 @@ module Metanorma
|
|
109
109
|
type = xml.root.name.sub("-standard", "").to_sym
|
110
110
|
@fileslookup&.parent&.update_xrefs(xml, @ident, {})
|
111
111
|
xml1 = Tempfile.open([filename, ".xml"], encoding: "utf-8") do |f|
|
112
|
-
f.write(@isodoc.to_xml(svg_preprocess(xml)))
|
112
|
+
#f.write(@isodoc.to_xml(svg_preprocess(xml)))
|
113
|
+
f.write(@isodoc.to_xml((xml)))
|
113
114
|
f
|
114
115
|
end
|
115
116
|
@filecache ||= []
|
@@ -184,17 +185,17 @@ module Metanorma
|
|
184
185
|
Util::recursive_string_keys(ret).to_yaml
|
185
186
|
end
|
186
187
|
|
187
|
-
def section_split_cover(col, ident)
|
188
|
+
def section_split_cover(col, ident, one_doc_coll)
|
188
189
|
dir = File.dirname(col.file)
|
189
190
|
collection_setup(nil, dir)
|
190
191
|
CollectionRenderer.new(col, dir,
|
191
192
|
output_folder: "#{ident}_collection",
|
192
193
|
format: %i(html),
|
193
194
|
coverpage: File.join(dir, "cover.html")).coverpage
|
194
|
-
|
195
|
-
|
195
|
+
filename = one_doc_coll ? "#{ident}_index.html" : "index.html"
|
196
|
+
FileUtils.mv "#{ident}_collection/index.html", File.join(dir, filename)
|
196
197
|
FileUtils.rm_rf "#{ident}_collection"
|
197
|
-
|
198
|
+
filename
|
198
199
|
end
|
199
200
|
end
|
200
201
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module Metanorma
|
2
2
|
class Sectionsplit
|
3
|
-
def xref_preprocess(xml,
|
3
|
+
def xref_preprocess(xml, _fileslookup, _identifier)
|
4
4
|
key = (0...8).map { rand(65..90).chr }.join # random string
|
5
5
|
xml.root["type"] = key # to force recognition of internal refs
|
6
6
|
key
|
7
7
|
end
|
8
8
|
|
9
9
|
def xref_process(section, xml, key)
|
10
|
+
svg_preprocess(section, Metanorma::Utils::to_ncname(@ident))
|
10
11
|
refs = eref_to_internal_eref(section, xml, key)
|
11
12
|
refs += xref_to_internal_eref(section, key)
|
12
13
|
ins = new_hidden_ref(section)
|
@@ -14,15 +15,14 @@ module Metanorma
|
|
14
15
|
insert_indirect_biblio(ins, refs - copied_refs, key)
|
15
16
|
end
|
16
17
|
|
17
|
-
def svg_preprocess(xml)
|
18
|
+
def svg_preprocess(xml, document_suffix)
|
18
19
|
xml.xpath("//m:svg", "m" => "http://www.w3.org/2000/svg").each do |s|
|
19
20
|
m = svgmap_wrap(s)
|
20
21
|
s.xpath(".//m:a", "m" => "http://www.w3.org/2000/svg").each do |a|
|
21
|
-
|
22
|
-
|
22
|
+
/^#/.match? a["href"] or next
|
23
23
|
a["href"] = a["href"].sub(/^#/, "")
|
24
24
|
m << "<target href='#{a['href']}'>" \
|
25
|
-
"<xref target='#{a['href']}'/></target>"
|
25
|
+
"<xref target='#{a['href']}_#{document_suffix}'/></target>"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
xml
|
data/lib/metanorma/version.rb
CHANGED
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: 1.6.
|
4
|
+
version: 1.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09
|
11
|
+
date: 2023-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -269,6 +269,7 @@ files:
|
|
269
269
|
- lib/metanorma/document.rb
|
270
270
|
- lib/metanorma/extract.rb
|
271
271
|
- lib/metanorma/files_lookup.rb
|
272
|
+
- lib/metanorma/files_lookup_sectionsplit.rb
|
272
273
|
- lib/metanorma/fontist_utils.rb
|
273
274
|
- lib/metanorma/input.rb
|
274
275
|
- lib/metanorma/input/asciidoc.rb
|