metanorma 1.6.4 → 1.6.5
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 +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
|