metanorma 1.6.4 → 1.6.5
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/collection_fileparse.rb +12 -3
- data/lib/metanorma/collection_manifest.rb +1 -1
- data/lib/metanorma/collection_render_utils.rb +13 -13
- data/lib/metanorma/collection_renderer.rb +15 -7
- data/lib/metanorma/files_lookup.rb +11 -3
- data/lib/metanorma/files_lookup_sectionsplit.rb +4 -4
- data/lib/metanorma/processor.rb +7 -1
- data/lib/metanorma/util.rb +5 -1
- data/lib/metanorma/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4bbd3fdfd37664da0a7f9e91cbecfcb0f7cdd49c004cf75eaa122c366ea6fba
|
4
|
+
data.tar.gz: 6b61241e1010ed465995c23447b4828503495d8f4fb2366e64babe0ae6d0726e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc05aa1c9d8aec0e6d45b537e10a130f88e715116f0dd92820e73588ff5a6542a7f2f92099e504654d2ed21e4e95c4bd84c0b260e24f923720b38ae298455f33
|
7
|
+
data.tar.gz: 870e182c05914d484180fd19360bfe1010cb9b57ed926926d76ba6cde3d9f2adbf2cb98e5d7e44702f2024cd51b52347524b9fb0ac28c0463d01b3d1dfc9d7b6
|
@@ -102,7 +102,7 @@ module Metanorma
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def svgmap_resolve1(eref, isodoc, _docxml, ids)
|
105
|
-
href = isodoc.eref_target(eref)
|
105
|
+
href = isodoc.eref_target(eref) or return
|
106
106
|
return if href == "##{eref['bibitemid']}" ||
|
107
107
|
(href =~ /^#/ && !ids[href.sub(/^#/, "")])
|
108
108
|
|
@@ -119,15 +119,24 @@ module Metanorma
|
|
119
119
|
def update_direct_refs_to_docs(docxml, identifier)
|
120
120
|
@ncnames = {}
|
121
121
|
erefs = Util::gather_citeases(docxml)
|
122
|
+
erefs1 = Util::gather_bibitemids(docxml)
|
122
123
|
docxml.xpath(ns("//bibitem")).each do |b|
|
123
|
-
docid = b.at(ns("./docidentifier[@type = 'repository']"))
|
124
|
-
|
124
|
+
docid = b.at(ns("./docidentifier[@type = 'repository']")) or next
|
125
|
+
unless %r{^current-metanorma-collection/}.match(docid.text)
|
126
|
+
erefs1[b["id"]]&.each { |x| strip_eref(x) }
|
127
|
+
next
|
128
|
+
end
|
125
129
|
update_bibitem(b, identifier)
|
126
130
|
docid = docid_to_citeas(b) or next
|
127
131
|
erefs[docid] and update_anchors(b, docid, erefs[docid])
|
128
132
|
end
|
129
133
|
end
|
130
134
|
|
135
|
+
def strip_eref(eref)
|
136
|
+
eref.xpath(ns("./locality | ./localityStack")).each(&:remove)
|
137
|
+
eref.replace(eref.children)
|
138
|
+
end
|
139
|
+
|
131
140
|
def docid_to_citeas(bib)
|
132
141
|
docid = bib.at(ns("./docidentifier[@primary = 'true']")) ||
|
133
142
|
bib.at(ns("./docidentifier")) or return
|
@@ -118,7 +118,7 @@ module Metanorma
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def docref_to_xml_attrs(elem, docref)
|
121
|
-
elem[:fileref] = @disambig.
|
121
|
+
elem[:fileref] = @disambig.strip_root(docref["fileref"])
|
122
122
|
%i(attachment sectionsplit).each do |i|
|
123
123
|
elem[i] = docref[i.to_s] if docref[i.to_s]
|
124
124
|
end
|
@@ -81,25 +81,25 @@ module Metanorma
|
|
81
81
|
isodoc
|
82
82
|
end
|
83
83
|
|
84
|
+
# create the @meta class of isodoc, for populating Liquid,
|
85
|
+
# with "navigation" set to the index bar.
|
86
|
+
# extracted from the manifest
|
84
87
|
def isodoc_populate
|
85
|
-
# create the @meta class of isodoc, for populating Liquid,
|
86
|
-
# with "navigation" set to the index bar.
|
87
|
-
# extracted from the manifest
|
88
|
-
@isodoc.meta.set(:navigation, indexfile(@xml.at(ns("//manifest"))))
|
89
|
-
@isodoc.meta.set(:docrefs, liquid_docrefs)
|
90
|
-
@isodoc.meta.set(:"prefatory-content",
|
91
|
-
isodoc_builder(@isodoc,
|
92
|
-
@xml.at(ns("//prefatory-content"))))
|
93
|
-
@isodoc.meta.set(:"final-content",
|
94
|
-
isodoc_builder(isodoc,
|
95
|
-
@xml.at(ns("//final-content"))))
|
96
88
|
@isodoc.info(@xml, nil)
|
89
|
+
m = @xml.at(ns("//manifest"))
|
90
|
+
{ navigation: indexfile(m), nav_object: index_object(m),
|
91
|
+
docrefs: liquid_docrefs,
|
92
|
+
"prefatory-content": isodoc_builder(@xml.at(ns("//prefatory-content"))),
|
93
|
+
"final-content": isodoc_builder(@xml.at(ns("//final-content"))),
|
94
|
+
doctitle: m.at(ns("../bibdata/title"))&.text,
|
95
|
+
docnumber: m.at(ns("../bibdata/docidentifier"))&.text
|
96
|
+
}.each { |k, v| v and @isodoc.meta.set(k, v) }
|
97
97
|
end
|
98
98
|
|
99
|
-
def isodoc_builder(
|
99
|
+
def isodoc_builder(node)
|
100
100
|
Nokogiri::HTML::Builder.new(encoding: "UTF-8") do |b|
|
101
101
|
b.div do |div|
|
102
|
-
node&.children&.each { |n| isodoc.parse(n, div) }
|
102
|
+
node&.children&.each { |n| @isodoc.parse(n, div) }
|
103
103
|
end
|
104
104
|
end.doc.root.to_html
|
105
105
|
end
|
@@ -132,9 +132,7 @@ module Metanorma
|
|
132
132
|
# @param elm [Nokogiri::XML::Element]
|
133
133
|
# @return [String]
|
134
134
|
def indexfile_title(elm)
|
135
|
-
|
136
|
-
lbl = elm.at(ns("./title"))&.text
|
137
|
-
"#{lvl}#{lvl && lbl ? ': ' : ''}#{lbl}"
|
135
|
+
elm.at(ns("./title"))&.text
|
138
136
|
end
|
139
137
|
|
140
138
|
# uses the identifier to label documents; other attributes (title) can be
|
@@ -172,10 +170,6 @@ module Metanorma
|
|
172
170
|
end
|
173
171
|
|
174
172
|
# single level navigation list, with hierarchical nesting
|
175
|
-
# if multiple lists are needed as separate HTML fragments, multiple
|
176
|
-
# instances of this function will be needed,
|
177
|
-
# and associated to different variables in the call to @isodoc.metadata_init
|
178
|
-
# (including possibly an array of HTML fragments)
|
179
173
|
#
|
180
174
|
# @param elm [Nokogiri::XML::Element]
|
181
175
|
# @return [String] XML
|
@@ -191,6 +185,20 @@ module Metanorma
|
|
191
185
|
end.doc.root.to_html
|
192
186
|
end
|
193
187
|
|
188
|
+
# object to construct navigation out of in Liquid
|
189
|
+
def index_object(elm)
|
190
|
+
c = elm.xpath(ns("./manifest")).each_with_object([]) do |d, b|
|
191
|
+
b << index_object(d)
|
192
|
+
end
|
193
|
+
c.empty? and c = nil
|
194
|
+
r = Nokogiri::HTML::Builder.new do |b|
|
195
|
+
indexfile_docref(elm, b)
|
196
|
+
end
|
197
|
+
r &&= r.doc.root&.to_html&.gsub("\n", " ")
|
198
|
+
{ title: indexfile_title(elm),
|
199
|
+
docrefs: r, children: c }.compact
|
200
|
+
end
|
201
|
+
|
194
202
|
def liquid_docrefs
|
195
203
|
@xml.xpath(ns("//docref[@index = 'true']")).each_with_object([]) do |d, m|
|
196
204
|
ident = d.at(ns("./identifier")).children.to_xml
|
@@ -26,6 +26,7 @@ module Metanorma
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def read_files
|
29
|
+
@disambig = Util::DisambigFiles.new
|
29
30
|
@xml.xpath(ns("//docref")).each { |d| read_file(d) }
|
30
31
|
end
|
31
32
|
|
@@ -65,15 +66,22 @@ module Metanorma
|
|
65
66
|
# identifier is the id with only spaces, no nbsp
|
66
67
|
def file_entry(ref, identifier)
|
67
68
|
out = ref["attachment"] ? ref["fileref"] : File.basename(ref["fileref"])
|
69
|
+
out1 = @disambig.source2dest_filename(out)
|
68
70
|
ret = if ref["fileref"]
|
69
71
|
{ type: "fileref", ref: @documents[identifier].file,
|
70
|
-
rel_path: ref["fileref"],
|
71
|
-
|
72
|
+
rel_path: ref["fileref"],
|
73
|
+
out_path: out1 } # @disambig.source2dest_filename(out) }
|
74
|
+
else { type: "id", ref: ref["id"] }
|
75
|
+
end
|
76
|
+
file_entry_copy(ref, ret)
|
77
|
+
ret.compact
|
78
|
+
end
|
79
|
+
|
80
|
+
def file_entry_copy(ref, ret)
|
72
81
|
%w(attachment sectionsplit index presentation-xml
|
73
82
|
bare-after-first).each do |s|
|
74
83
|
ret[s.gsub("-", "").to_sym] = ref[s] if ref[s]
|
75
84
|
end
|
76
|
-
ret.compact
|
77
85
|
end
|
78
86
|
|
79
87
|
def add_suffix_to_attributes(doc, suffix, tag_name, attribute_name)
|
@@ -4,7 +4,7 @@ module Metanorma
|
|
4
4
|
def add_section_split
|
5
5
|
ret = @files.keys.each_with_object({}) do |k, m|
|
6
6
|
if @files[k][:sectionsplit] == "true" && !@files[k]["attachment"]
|
7
|
-
s, manifest = sectionsplit(@files[k][:ref], k)
|
7
|
+
s, manifest = sectionsplit(@files[k][:ref], @files[k][:out_path], k)
|
8
8
|
s.each_with_index { |f1, i| add_section_split_instance(f1, m, k, i) }
|
9
9
|
m["#{k}:index.html"] = add_section_split_cover(manifest, k)
|
10
10
|
@files_to_delete << m["#{k}:index.html"][:ref]
|
@@ -54,10 +54,10 @@ module Metanorma
|
|
54
54
|
[presfile, newkey, xml]
|
55
55
|
end
|
56
56
|
|
57
|
-
def sectionsplit(file, ident)
|
57
|
+
def sectionsplit(file, outfile, ident)
|
58
58
|
@sectionsplit = Sectionsplit
|
59
|
-
.new(input: file, base:
|
60
|
-
output:
|
59
|
+
.new(input: file, base: outfile, dir: File.dirname(file),
|
60
|
+
output: outfile, compile_options: @parent.compile_options,
|
61
61
|
fileslookup: self, ident: ident, isodoc: @isodoc)
|
62
62
|
coll = @sectionsplit.sectionsplit.sort_by { |f| f[:order] }
|
63
63
|
xml = Nokogiri::XML(File.read(file, encoding: "UTF-8"), &:huge)
|
data/lib/metanorma/processor.rb
CHANGED
@@ -18,7 +18,8 @@ module Metanorma
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_to_isodoc(file, filename, options = {})
|
21
|
-
Metanorma::Input::Asciidoc.new.process(file, filename,
|
21
|
+
Metanorma::Input::Asciidoc.new.process(file, filename,
|
22
|
+
@asciidoctor_backend, options)
|
22
23
|
end
|
23
24
|
|
24
25
|
# def input_to_isodoc(file, filename)
|
@@ -33,12 +34,17 @@ module Metanorma
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
37
|
+
def options_preprocess(options)
|
38
|
+
options[:output_formats] = output_formats
|
39
|
+
end
|
40
|
+
|
36
41
|
def output(isodoc_node, _inname, outname, _format, _options = {})
|
37
42
|
File.open(outname, "w:UTF-8") { |f| f.write(isodoc_node) }
|
38
43
|
end
|
39
44
|
|
40
45
|
def extract_options(file)
|
41
46
|
Metanorma::Input::Asciidoc.new.extract_options(file)
|
47
|
+
.merge(output_formats: output_formats)
|
42
48
|
end
|
43
49
|
|
44
50
|
def extract_metanorma_options(file)
|
data/lib/metanorma/util.rb
CHANGED
@@ -65,8 +65,12 @@ module Metanorma
|
|
65
65
|
@seen_filenames = []
|
66
66
|
end
|
67
67
|
|
68
|
+
def strip_root(name)
|
69
|
+
name.sub(%r{^(\./)?(\.\./)+}, "")
|
70
|
+
end
|
71
|
+
|
68
72
|
def source2dest_filename(name, disambig = true)
|
69
|
-
n = name
|
73
|
+
n = strip_root(name)
|
70
74
|
dir = File.dirname(n)
|
71
75
|
base = File.basename(n)
|
72
76
|
if disambig && @seen_filenames.include?(base)
|
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.5
|
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-10-
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|