metanorma 1.5.5 → 1.5.6
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.rb +9 -5
- data/lib/metanorma/collection_fileparse.rb +8 -8
- data/lib/metanorma/collection_manifest.rb +3 -0
- data/lib/metanorma/collection_renderer.rb +42 -24
- data/lib/metanorma/compile.rb +2 -1
- data/lib/metanorma/document.rb +2 -1
- data/lib/metanorma/input/asciidoc.rb +11 -11
- 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: 8def7cdd4a8b5e3605736563382599b2d820b2c18e7305d6567c89b667c89d90
|
4
|
+
data.tar.gz: 75b2d6a77b20a782ace64f18f112cae4bb5b5643172c4df31e05e3a4eb817f20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a95ed1b168dc0a1ce689a2d169f8664fdb087b35332f645836072ee3e13b8be63513ba585210c2f8f5e69d70161b3b1036dc34cc77a0659f14340caaf22d2e4
|
7
|
+
data.tar.gz: 2cab73d708c92443edb99dcb7d761169de3fda2dca2fb40e364f374d085e34c1c7cc317ba3f192bbb98309c699719f97fc10552143c235642a610941189580a5
|
data/lib/metanorma/collection.rb
CHANGED
@@ -17,9 +17,9 @@ module Metanorma
|
|
17
17
|
attr_accessor :directives
|
18
18
|
|
19
19
|
# @return [Hash<String, Metanorma::Document>]
|
20
|
-
attr_accessor :documents
|
20
|
+
attr_accessor :documents, :bibdatas
|
21
21
|
|
22
|
-
attr_accessor :disambig
|
22
|
+
attr_accessor :disambig, :manifest
|
23
23
|
|
24
24
|
# @param file [String] path to source file
|
25
25
|
# @param directives [Array<String>] documents-inline to inject the XML into
|
@@ -37,10 +37,12 @@ module Metanorma
|
|
37
37
|
@manifest = args[:manifest]
|
38
38
|
@manifest.collection = self
|
39
39
|
@documents = args[:documents] || {}
|
40
|
+
@bibdatas = args[:documents] || {}
|
40
41
|
if @documents.any? && !@directives.include?("documents-inline")
|
41
42
|
@directives << "documents-inline"
|
42
43
|
end
|
43
44
|
@documents.merge! @manifest.documents(File.dirname(@file))
|
45
|
+
@bibdatas.merge! @manifest.documents(File.dirname(@file))
|
44
46
|
@prefatory = args[:prefatory]
|
45
47
|
@final = args[:final]
|
46
48
|
@log = Metanorma::Utils::Log.new
|
@@ -99,7 +101,9 @@ module Metanorma
|
|
99
101
|
pref = pref_final_content xml.at("//xmlns:prefatory-content")
|
100
102
|
fnl = pref_final_content xml.at("//xmlns:final-content")
|
101
103
|
new(file: file, bibdata: bd, manifest: mnf,
|
102
|
-
documents: docs_from_xml(xml, mnf),
|
104
|
+
documents: docs_from_xml(xml, mnf),
|
105
|
+
bibdatas: docs_from_xml(xml, mnf),
|
106
|
+
prefatory: pref, final: fnl)
|
103
107
|
end
|
104
108
|
|
105
109
|
def parse_yaml(file)
|
@@ -135,8 +139,8 @@ module Metanorma
|
|
135
139
|
|
136
140
|
<<~CONT
|
137
141
|
|
138
|
-
|
139
|
-
|
142
|
+
== #{xml.at('title')&.text}
|
143
|
+
#{xml.at('p')&.text}
|
140
144
|
CONT
|
141
145
|
end
|
142
146
|
end
|
@@ -64,9 +64,9 @@ module Metanorma
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def fail_update_bibitem(docid, identifier)
|
67
|
-
error = "[metanorma] Cannot find crossreference to document #{docid} "\
|
67
|
+
error = "[metanorma] Cannot find crossreference to document #{docid} " \
|
68
68
|
"in document #{identifier}."
|
69
|
-
@log
|
69
|
+
@log&.add("Cross-References", nil, error)
|
70
70
|
Util.log(error, :warning)
|
71
71
|
end
|
72
72
|
|
@@ -101,7 +101,7 @@ module Metanorma
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def hide_refs(docxml)
|
104
|
-
docxml.xpath(ns("//references[bibitem][not(./bibitem[not(@hidden) or "\
|
104
|
+
docxml.xpath(ns("//references[bibitem][not(./bibitem[not(@hidden) or " \
|
105
105
|
"@hidden = 'false'])]")).each do |f|
|
106
106
|
f["hidden"] = "true"
|
107
107
|
end
|
@@ -114,7 +114,7 @@ module Metanorma
|
|
114
114
|
b.xpath(ns("./docidentifier")).each do |d|
|
115
115
|
next unless @files[d.text]
|
116
116
|
|
117
|
-
d.next = "<docidentifier type='repository'>"\
|
117
|
+
d.next = "<docidentifier type='repository'>" \
|
118
118
|
"current-metanorma-collection/#{d.text}"
|
119
119
|
end
|
120
120
|
end
|
@@ -189,7 +189,7 @@ module Metanorma
|
|
189
189
|
a.children = "#{a.text}_#{Metanorma::Utils::to_ncname(file)}"
|
190
190
|
end
|
191
191
|
end
|
192
|
-
docid = docxml.at(ns("//bibitem[@id = '#{schema}_#{id}']/"\
|
192
|
+
docid = docxml.at(ns("//bibitem[@id = '#{schema}_#{id}']/" \
|
193
193
|
"docidentifier[@type = 'repository']")) or return
|
194
194
|
docid.children = "current-metanorma-collection/#{file}"
|
195
195
|
docid.previous = "<docidentifier type='X'>#{file}</docidentifier>"
|
@@ -201,7 +201,7 @@ module Metanorma
|
|
201
201
|
docxml.xpath("//xmlns:eref[@citeas = '#{docid}']").each do |e|
|
202
202
|
if @files[docid] then update_anchor_loc(bib, e, docid)
|
203
203
|
else
|
204
|
-
e << "<strong>** Unresolved reference to document #{docid} "\
|
204
|
+
e << "<strong>** Unresolved reference to document #{docid} " \
|
205
205
|
"from eref</strong>"
|
206
206
|
end
|
207
207
|
end
|
@@ -228,7 +228,7 @@ module Metanorma
|
|
228
228
|
type = "clause" if type == "annex"
|
229
229
|
ref = ins.at(ns("./locality/referenceFrom"))&.text
|
230
230
|
anchor = @files[docid][:anchors].dig(type, ref) or return
|
231
|
-
ins << "<locality type='anchor'><referenceFrom>#{anchor.sub(/^_/, '')}"\
|
231
|
+
ins << "<locality type='anchor'><referenceFrom>#{anchor.sub(/^_/, '')}" \
|
232
232
|
"</referenceFrom></locality>"
|
233
233
|
end
|
234
234
|
|
@@ -239,7 +239,7 @@ module Metanorma
|
|
239
239
|
|
240
240
|
file, = targetfile(x, read: true)
|
241
241
|
Nokogiri::XML(file)
|
242
|
-
.xpath(ns("//bibitem[@type = 'internal']/"\
|
242
|
+
.xpath(ns("//bibitem[@type = 'internal']/" \
|
243
243
|
"docidentifier[@type = 'repository']")).each do |d|
|
244
244
|
a = d.text.split(%r{/}, 2)
|
245
245
|
a.size > 1 or next
|
@@ -111,6 +111,9 @@ module Metanorma
|
|
111
111
|
b.identifier do |i|
|
112
112
|
i << dr["identifier"]
|
113
113
|
end
|
114
|
+
!dr["attachment"] && !dr["sectionsplit"] &&
|
115
|
+
d = @collection.bibdatas[dr["identifier"]] and
|
116
|
+
b.parent.add_child(d.bibitem.to_xml(bibdata: true))
|
114
117
|
end
|
115
118
|
docref_to_xml_attrs(drf, dr)
|
116
119
|
end
|
@@ -10,6 +10,8 @@ module Metanorma
|
|
10
10
|
class CollectionRenderer
|
11
11
|
FORMATS = %i[html xml doc pdf].freeze
|
12
12
|
|
13
|
+
attr_accessor :isodoc
|
14
|
+
|
13
15
|
# This is only going to render the HTML collection
|
14
16
|
# @param xml [Metanorma::Collection] input XML collection
|
15
17
|
# @param folder [String] input folder
|
@@ -31,9 +33,7 @@ module Metanorma
|
|
31
33
|
@doctype = doctype
|
32
34
|
require "metanorma-#{@doctype}"
|
33
35
|
|
34
|
-
# output processor for flavour
|
35
|
-
@isodoc = isodoc
|
36
|
-
|
36
|
+
@isodoc = isodoc_create # output processor for flavour
|
37
37
|
@outdir = dir_name_cleanse(options[:output_folder])
|
38
38
|
@coverpage = options[:coverpage]
|
39
39
|
@format = Util.sort_extensions_execution(options[:format])
|
@@ -41,13 +41,14 @@ module Metanorma
|
|
41
41
|
@compile_options[:no_install_fonts] = true if options[:no_install_fonts]
|
42
42
|
@log = options[:log]
|
43
43
|
@documents = collection.documents
|
44
|
+
@bibdata = collection.documents
|
44
45
|
@directives = collection.directives
|
45
46
|
@disambig = Util::DisambigFiles.new
|
46
47
|
@compile = Compile.new
|
47
48
|
|
48
49
|
# list of files in the collection
|
49
50
|
@files = read_files folder
|
50
|
-
|
51
|
+
@isodoc = isodoc_populate # output processor for flavour
|
51
52
|
create_non_existing_directory(@outdir)
|
52
53
|
end
|
53
54
|
|
@@ -77,6 +78,7 @@ module Metanorma
|
|
77
78
|
warn "\n\n\n\n\nCoverpage: #{DateTime.now.strftime('%H:%M:%S')}"
|
78
79
|
cr.coverpage if options[:format]&.include?(:html)
|
79
80
|
warn "\n\n\n\n\nDone: #{DateTime.now.strftime('%H:%M:%S')}"
|
81
|
+
cr
|
80
82
|
end
|
81
83
|
|
82
84
|
def concatenate(col, options)
|
@@ -95,7 +97,7 @@ module Metanorma
|
|
95
97
|
|
96
98
|
def concatenate1(out, ext)
|
97
99
|
out.directives << "documents-inline"
|
98
|
-
out.
|
100
|
+
out.bibdatas.each_key do |id|
|
99
101
|
@files[id][:attachment] || @files[id][:outputs].nil? and next
|
100
102
|
|
101
103
|
out.documents[id] =
|
@@ -125,34 +127,42 @@ module Metanorma
|
|
125
127
|
end
|
126
128
|
end
|
127
129
|
|
128
|
-
# Dummy class
|
129
130
|
class Dummy
|
130
131
|
def attr(_key); end
|
131
132
|
end
|
132
133
|
|
133
|
-
|
134
|
-
def isodoc
|
134
|
+
def isodoc_create
|
135
135
|
x = Asciidoctor.load nil, backend: @doctype.to_sym
|
136
|
-
isodoc = x.converter.html_converter(Dummy.new)
|
136
|
+
isodoc = x.converter.html_converter(Dummy.new) # to obtain Isodoc class
|
137
137
|
isodoc.i18n_init(@lang, @script, @locale) # read in internationalisation
|
138
138
|
isodoc.metadata_init(@lang, @script, @locale, isodoc.i18n)
|
139
139
|
isodoc.info(@xml, nil)
|
140
140
|
isodoc
|
141
141
|
end
|
142
142
|
|
143
|
-
def isodoc_populate
|
144
|
-
# create the @meta class of isodoc,
|
143
|
+
def isodoc_populate
|
144
|
+
# create the @meta class of isodoc, for populating Liquid,
|
145
|
+
# with "navigation" set to the index bar.
|
145
146
|
# extracted from the manifest
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
isodoc.
|
150
|
-
|
151
|
-
|
147
|
+
isodoc = isodoc_create
|
148
|
+
isodoc.meta.set(:navigation, indexfile(@xml.at(ns("//manifest"))))
|
149
|
+
isodoc.meta.set(:docrefs, liquid_docrefs)
|
150
|
+
isodoc.meta.set(:"prefatory-content",
|
151
|
+
isodoc_builder(isodoc, @xml.at(ns("//prefatory-content"))))
|
152
|
+
isodoc.meta.set(:"final-content",
|
153
|
+
isodoc_builder(isodoc, @xml.at(ns("//final-content"))))
|
152
154
|
isodoc.info(@xml, nil)
|
153
155
|
isodoc
|
154
156
|
end
|
155
157
|
|
158
|
+
def isodoc_builder(isodoc, node)
|
159
|
+
Nokogiri::HTML::Builder.new do |b|
|
160
|
+
b.div do |div|
|
161
|
+
node&.children&.each { |n| isodoc.parse(n, div) }
|
162
|
+
end
|
163
|
+
end.doc.root.to_html
|
164
|
+
end
|
165
|
+
|
156
166
|
# infer the flavour from the first document identifier; relaton does that
|
157
167
|
def doctype
|
158
168
|
if (docid = @xml.at(ns("//bibdata/docidentifier/@type"))&.text)
|
@@ -172,8 +182,7 @@ module Metanorma
|
|
172
182
|
# populate liquid template of ARGV[1] with metadata extracted from
|
173
183
|
# collection manifest
|
174
184
|
def coverpage
|
175
|
-
|
176
|
-
|
185
|
+
@coverpage or return
|
177
186
|
File.open(File.join(@outdir, "index.html"), "w:UTF-8") do |f|
|
178
187
|
f.write @isodoc.populate_template(File.read(@coverpage))
|
179
188
|
end
|
@@ -204,7 +213,7 @@ module Metanorma
|
|
204
213
|
elm.xpath(ns("./docref[@index = 'true']")).each do |d|
|
205
214
|
ident = d.at(ns("./identifier")).children.to_xml
|
206
215
|
builder.li do |li|
|
207
|
-
li.a
|
216
|
+
li.a href: index_link(d, ident) do |a|
|
208
217
|
a << ident
|
209
218
|
end
|
210
219
|
end
|
@@ -238,12 +247,22 @@ module Metanorma
|
|
238
247
|
end.doc.root.to_html
|
239
248
|
end
|
240
249
|
|
250
|
+
def liquid_docrefs
|
251
|
+
@xml.xpath(ns("//docref[@index = 'true']")).each_with_object([]) do |d, m|
|
252
|
+
ident = d.at(ns("./identifier")).children.to_xml
|
253
|
+
title = d.at(ns("./bibdata/title[@type = 'main']")) ||
|
254
|
+
d.at(ns("./bibdata/title")) || d.at(ns("./title"))
|
255
|
+
m << { "identifier" => ident, "file" => index_link(d, ident),
|
256
|
+
"title" => title&.children&.to_xml,
|
257
|
+
"level" => d.at(ns("./level"))&.text }
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
241
261
|
private
|
242
262
|
|
243
263
|
def create_non_existing_directory(output_directory)
|
244
|
-
|
264
|
+
!File.exist?(output_directory) and
|
245
265
|
FileUtils.mkdir_p(output_directory)
|
246
|
-
end
|
247
266
|
end
|
248
267
|
|
249
268
|
def format_sort(formats)
|
@@ -257,9 +276,8 @@ module Metanorma
|
|
257
276
|
# @param options [Hash]
|
258
277
|
# @raise [ArgumentError]
|
259
278
|
def check_options(options)
|
260
|
-
|
279
|
+
(options[:format].is_a?(Array) && (FORMATS & options[:format]).any?) or
|
261
280
|
raise ArgumentError, "Need to specify formats (xml,html,pdf,doc)"
|
262
|
-
end
|
263
281
|
end
|
264
282
|
end
|
265
283
|
end
|
data/lib/metanorma/compile.rb
CHANGED
@@ -55,7 +55,8 @@ module Metanorma
|
|
55
55
|
file.sub!(/^(=[^\n]+\n)/, "\\1:mn-keep-asciimath:\n")
|
56
56
|
dir = File.dirname(filename)
|
57
57
|
dir != "." and
|
58
|
-
file.gsub
|
58
|
+
file = file.gsub(/^include::/, "include::#{dir}/")
|
59
|
+
.gsub(/^embed::/, "embed::#{dir}/")
|
59
60
|
[file, @processor.input_to_isodoc(file, filename, options)]
|
60
61
|
end
|
61
62
|
|
data/lib/metanorma/document.rb
CHANGED
@@ -104,7 +104,8 @@ module Metanorma
|
|
104
104
|
|
105
105
|
def render_xml(builder)
|
106
106
|
if @raw
|
107
|
-
builder << @bibitem.root.to_xml
|
107
|
+
#builder << @bibitem.root.to_xml
|
108
|
+
builder.parent.add_child(@bibitem.root)
|
108
109
|
else
|
109
110
|
builder.send("#{type}-standard") do |b|
|
110
111
|
b << @bibitem.to_xml(bibdata: true)
|
@@ -36,18 +36,18 @@ module Metanorma
|
|
36
36
|
|
37
37
|
def extract_metanorma_options(file)
|
38
38
|
headerextract = file.sub(/\n\n.*$/m, "\n")
|
39
|
-
/\n:mn-document-class
|
40
|
-
/\n:mn-output-extensions
|
41
|
-
/\n:mn-relaton-output-file
|
39
|
+
/\n:mn-document-class:\s+(?<type>[^\n]+)\n/ =~ headerextract
|
40
|
+
/\n:mn-output-extensions:\s+(?<extensions>[^\n]+)\n/ =~ headerextract
|
41
|
+
/\n:mn-relaton-output-file:\s+(?<relaton>[^\n]+)\n/ =~ headerextract
|
42
42
|
/\n(?<asciimath>:mn-keep-asciimath:[^\n]*)\n/ =~ headerextract
|
43
43
|
asciimath = if defined?(asciimath)
|
44
44
|
(!asciimath.nil? && asciimath != ":mn-keep-asciimath: false")
|
45
45
|
end
|
46
46
|
asciimath = nil if asciimath == false
|
47
47
|
{
|
48
|
-
type: defined?(type) ? type : nil,
|
49
|
-
extensions: defined?(extensions) ? extensions : nil,
|
50
|
-
relaton: defined?(relaton) ? relaton : nil,
|
48
|
+
type: defined?(type) ? type&.strip : nil,
|
49
|
+
extensions: defined?(extensions) ? extensions&.strip : nil,
|
50
|
+
relaton: defined?(relaton) ? relaton&.strip : nil,
|
51
51
|
asciimath: asciimath,
|
52
52
|
}.compact
|
53
53
|
end
|
@@ -70,11 +70,11 @@ module Metanorma
|
|
70
70
|
pdf-allow-print pdf-allow-print-hq pdf-allow-fill-in-forms
|
71
71
|
fonts font-license-agreement pdf-allow-access-content
|
72
72
|
pdf-encrypt-metadata iso-word-template document-scheme
|
73
|
-
localize-number iso-word-bg-strip-color modspec-identifier-base
|
74
|
-
).freeze
|
73
|
+
localize-number iso-word-bg-strip-color modspec-identifier-base).freeze
|
75
74
|
|
76
75
|
EMPTY_ADOC_OPTIONS_DEFAULT_TRUE =
|
77
|
-
%w(data-uri-image suppress-asciimath-dup use-xinclude
|
76
|
+
%w(data-uri-image suppress-asciimath-dup use-xinclude
|
77
|
+
source-highlighter).freeze
|
78
78
|
|
79
79
|
EMPTY_ADOC_OPTIONS_DEFAULT_FALSE =
|
80
80
|
%w(hierarchical-assets break-up-urls-in-tables toc-figures
|
@@ -88,8 +88,8 @@ module Metanorma
|
|
88
88
|
def extract_options(file)
|
89
89
|
header = file.sub(/\n\n.*$/m, "\n")
|
90
90
|
ret = ADOC_OPTIONS.each_with_object({}) do |w, acc|
|
91
|
-
m = /\n:#{w}
|
92
|
-
acc[attr_name_normalise(w)] = m[1]
|
91
|
+
m = /\n:#{w}:\s+([^\n]+)\n/.match(header) or next
|
92
|
+
acc[attr_name_normalise(w)] = m[1]&.strip
|
93
93
|
end
|
94
94
|
ret2 = EMPTY_ADOC_OPTIONS_DEFAULT_TRUE.each_with_object({}) do |w, acc|
|
95
95
|
m = /\n:#{w}:([^\n]*)\n/.match(header) || [nil, "true"]
|
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.5.
|
4
|
+
version: 1.5.6
|
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-
|
11
|
+
date: 2023-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|