Class: Metanorma::Collection
- Inherits:
-
Object
- Object
- Metanorma::Collection
show all
- Defined in:
- lib/metanorma/collection/collection.rb,
lib/metanorma/collection/util/util.rb,
lib/metanorma/collection/config/config.rb,
lib/metanorma/collection/config/bibdata.rb,
lib/metanorma/collection/renderer/utils.rb,
lib/metanorma/collection/config/manifest.rb,
lib/metanorma/collection/config/directive.rb,
lib/metanorma/collection/config/converters.rb,
lib/metanorma/collection/document/document.rb,
lib/metanorma/collection/manifest/manifest.rb,
lib/metanorma/collection/renderer/renderer.rb,
lib/metanorma/collection/renderer/fileparse.rb,
lib/metanorma/collection/renderer/navigation.rb,
lib/metanorma/collection/util/disambig_files.rb,
lib/metanorma/collection/renderer/fileprocess.rb,
lib/metanorma/collection/renderer/render_word.rb,
lib/metanorma/collection/filelookup/filelookup.rb,
lib/metanorma/collection/config/compile_options.rb,
lib/metanorma/collection/xrefprocess/xrefprocess.rb,
lib/metanorma/collection/sectionsplit/sectionsplit.rb,
lib/metanorma/collection/filelookup/filelookup_sectionsplit.rb
Overview
Metanorma collection of documents
Defined Under Namespace
Modules: Config, Util, XrefProcess
Classes: Document, FileLookup, Manifest, Renderer, Sectionsplit
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(**args) ⇒ Collection
Returns a new instance of Collection.
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/metanorma/collection/collection.rb', line 28
def initialize(**args)
@file = args[:file]
@dirname = File.expand_path(File.dirname(@file)) @documents = args[:documents] || {} @bibdatas = args[:documents] || {}
initialize_vars
initialize_config(args[:config])
initialize_directives
@documents.merge! @manifest.documents
@bibdatas.merge! @manifest.documents
@documents.transform_keys { |k| Util::key(k) }
@bibdatas.transform_keys { |k| Util::key(k) }
end
|
Instance Attribute Details
#bibdata ⇒ Object
Returns the value of attribute bibdata.
23
24
25
|
# File 'lib/metanorma/collection/collection.rb', line 23
def bibdata
@bibdata
end
|
#bibdatas ⇒ Array<String>
Returns documents-inline to inject the XML into the collection manifest; documents-external to keeps them outside.
22
23
24
|
# File 'lib/metanorma/collection/collection.rb', line 22
def bibdatas
@bibdatas
end
|
#compile ⇒ Object
Returns the value of attribute compile.
23
24
25
|
# File 'lib/metanorma/collection/collection.rb', line 23
def compile
@compile
end
|
#config ⇒ Object
Returns the value of attribute config.
23
24
25
|
# File 'lib/metanorma/collection/collection.rb', line 23
def config
@config
end
|
#coverpage ⇒ Array<String>
Returns documents-inline to inject the XML into the collection manifest; documents-external to keeps them outside.
22
23
24
|
# File 'lib/metanorma/collection/collection.rb', line 22
def coverpage
@coverpage
end
|
#directives ⇒ Array<String>
Returns documents-inline to inject the XML into the collection manifest; documents-external to keeps them outside.
22
23
24
|
# File 'lib/metanorma/collection/collection.rb', line 22
def directives
@directives
end
|
#dirname ⇒ Array<String>
Returns documents-inline to inject the XML into the collection manifest; documents-external to keeps them outside.
22
23
24
|
# File 'lib/metanorma/collection/collection.rb', line 22
def dirname
@dirname
end
|
#disambig ⇒ Object
Returns the value of attribute disambig.
23
24
25
|
# File 'lib/metanorma/collection/collection.rb', line 23
def disambig
@disambig
end
|
#documents ⇒ Array<String>
Returns documents-inline to inject the XML into the collection manifest; documents-external to keeps them outside.
22
23
24
|
# File 'lib/metanorma/collection/collection.rb', line 22
def documents
@documents
end
|
#file ⇒ Object
Returns the value of attribute file.
18
19
20
|
# File 'lib/metanorma/collection/collection.rb', line 18
def file
@file
end
|
#final ⇒ String?
91
92
93
|
# File 'lib/metanorma/collection/collection.rb', line 91
def final
@final
end
|
#manifest ⇒ Object
Returns the value of attribute manifest.
23
24
25
|
# File 'lib/metanorma/collection/collection.rb', line 23
def manifest
@manifest
end
|
#prefatory ⇒ String?
91
92
93
|
# File 'lib/metanorma/collection/collection.rb', line 91
def prefatory
@prefatory
end
|
Class Method Details
.check_file_existence(filepath) ⇒ Object
203
204
205
206
207
208
209
|
# File 'lib/metanorma/collection/collection.rb', line 203
def check_file_existence(filepath)
unless File.exist?(filepath)
error_message = "#{filepath} not found!"
::Metanorma::Util.log("[metanorma] Error: #{error_message}", :error)
raise FileNotFoundException.new error_message.to_s
end
end
|
.parse(file) ⇒ Object
211
212
213
214
215
216
217
218
219
220
221
222
223
|
# File 'lib/metanorma/collection/collection.rb', line 211
def parse(file)
@dirname = File.expand_path(File.dirname(file))
config = case file
when /\.xml$/
::Metanorma::Collection::Config::Config.from_xml(File.read(file))
when /.ya?ml$/
y = YAML.safe_load(File.read(file))
pre_parse_model(y)
::Metanorma::Collection::Config::Config.from_yaml(y.to_yaml)
end
new(file: file, config: config)
end
|
.pre_parse_model(collection_model) ⇒ Object
177
178
179
180
|
# File 'lib/metanorma/collection/collection.rb', line 177
def pre_parse_model(collection_model)
@pre_parse_model_proc or return
@pre_parse_model_proc.call(collection_model)
end
|
.resolve_fileref(ref_folder, fileref) ⇒ String
191
192
193
194
195
196
197
198
199
|
# File 'lib/metanorma/collection/collection.rb', line 191
def resolve_fileref(ref_folder, fileref)
unless @fileref_resolver
(Pathname.new fileref).absolute? or
fileref = File.join(ref_folder, fileref)
return fileref
end
@fileref_resolver.call(ref_folder, fileref)
end
|
.resolve_identifier(identifier) ⇒ String
184
185
186
187
|
# File 'lib/metanorma/collection/collection.rb', line 184
def resolve_identifier(identifier)
@identifier_resolver or return identifier
@identifier_resolver.call(identifier)
end
|
.set_fileref_resolver(&block) ⇒ Object
Note:
allow user-specific function to resolve fileref
NOTE: MUST ALWAYS RETURN PATH relative to working directory (initial YAML file location). @fileref_resolver.call(ref_folder, fileref) fileref is not what is in the YAML, but the resolved path relative to the working directory
168
169
170
|
# File 'lib/metanorma/collection/collection.rb', line 168
def set_fileref_resolver(&block)
@fileref_resolver = block
end
|
.set_identifier_resolver(&block) ⇒ Object
Note:
allow user-specific function to resolve identifier
158
159
160
|
# File 'lib/metanorma/collection/collection.rb', line 158
def set_identifier_resolver(&block)
@identifier_resolver = block
end
|
.set_pre_parse_model(&block) ⇒ Object
Note:
allow user-specific function to run in pre-parse model stage
152
153
154
|
# File 'lib/metanorma/collection/collection.rb', line 152
def set_pre_parse_model(&block)
@pre_parse_model_proc = block
end
|
.unset_fileref_resolver ⇒ Object
172
173
174
|
# File 'lib/metanorma/collection/collection.rb', line 172
def unset_fileref_resolver
@fileref_resolver = nil
end
|
Instance Method Details
#clean_exit ⇒ Object
69
70
71
72
|
# File 'lib/metanorma/collection/collection.rb', line 69
def clean_exit
@log.write(File.join(@dirname,
"#{File.basename(@file, '.*')}.err.html"))
end
|
#content_to_xml(elm, builder) ⇒ Object
104
105
106
107
108
109
|
# File 'lib/metanorma/collection/collection.rb', line 104
def content_to_xml(elm, builder)
(cnt = send(elm)) or return
@compile.load_flavor(doctype)
out = sections( + cnt.strip)
builder.send("#{elm}-content") { |b| b << out }
end
|
#doccontainer(builder) ⇒ Object
119
120
121
122
123
124
125
|
# File 'lib/metanorma/collection/collection.rb', line 119
def doccontainer(builder)
@directives.detect { |d| d.key == "documents-inline" } or return
documents.each_with_index do |(_, d), i|
doccontainer1(builder, d, i)
end
end
|
#doccontainer1(builder, doc, idx) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/metanorma/collection/collection.rb', line 127
def doccontainer1(builder, doc, idx)
id = format("doc%<index>09d", index: idx)
builder.send(:"doc-container", id: id) do |b|
if doc.attachment
doc.bibitem and b << doc.bibitem.root.to_xml
b.attachment Vectory::Utils::datauri(doc.file)
else
doc.to_xml b
end
end
end
|
#doctype ⇒ Object
139
140
141
|
# File 'lib/metanorma/collection/collection.rb', line 139
def doctype
@doctype ||= fetch_doctype || "standoc"
end
|
94
95
96
97
98
99
100
|
# File 'lib/metanorma/collection/collection.rb', line 94
def
<<~DUMMY
= X
A
DUMMY
end
|
#fetch_doctype ⇒ Object
143
144
145
146
147
|
# File 'lib/metanorma/collection/collection.rb', line 143
def fetch_doctype
docid = @bibdata.docidentifier.first
docid or return
docid.type&.downcase || docid.id&.sub(/\s.*$/, "")&.downcase
end
|
#initialize_config(config) ⇒ Object
48
49
50
51
52
53
54
55
56
|
# File 'lib/metanorma/collection/collection.rb', line 48
def initialize_config(config)
@config = config
@directives = config.directive || [] @bibdata = config.bibdata
@prefatory = config.prefatory_content
@final = config.final_content
@manifest = ::Metanorma::Collection::Manifest
.new(config.manifest, self, @dirname) end
|
#initialize_directives ⇒ Object
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/metanorma/collection/collection.rb', line 58
def initialize_directives
d = @directives.each_with_object({}) { |x, m| m[x.key] = x.value }
@coverpage = d["coverpage"]
@coverpage_style = d["coverpage-style"]
if (@documents.any? || @manifest) && !d.key?("documents-inline") &&
!d.key?("documents-external")
@directives << ::Metanorma::Collection::Config::Directive
.new(key: "documents-inline")
end
end
|
#initialize_vars ⇒ Object
#render(opts) ⇒ Object
84
85
86
87
88
|
# File 'lib/metanorma/collection/collection.rb', line 84
def render(opts)
opts[:format].nil? || opts[:format].empty? and opts[:format] = [:html]
::Metanorma::Collection::Renderer.render self, opts.merge(log: @log)
clean_exit
end
|
#sections(cnt) ⇒ String
113
114
115
116
|
# File 'lib/metanorma/collection/collection.rb', line 113
def sections(cnt)
c = Asciidoctor.convert(cnt, backend: doctype.to_sym, header_footer: true)
Nokogiri::XML(c, &:huge).at("//xmlns:sections").children.to_xml
end
|
#to_xml ⇒ String
75
76
77
78
79
80
81
82
|
# File 'lib/metanorma/collection/collection.rb', line 75
def to_xml
c = ::Metanorma::Collection::Config::Config
.new(directive: @directives, bibdata: @bibdata,
manifest: @manifest.config, documents: @documents,
prefatory_content: @prefatory, final_content: @final)
c.collection = self
c.to_xml end
|