metanorma 2.0.6 → 2.0.9
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/collection.rb +19 -6
- data/lib/metanorma/collection/config/bibdata.rb +2 -2
- data/lib/metanorma/collection/config/compile_options.rb +4 -5
- data/lib/metanorma/collection/config/config.rb +42 -73
- data/lib/metanorma/collection/config/converters.rb +27 -1
- data/lib/metanorma/collection/config/directive.rb +9 -3
- data/lib/metanorma/collection/config/manifest.rb +33 -26
- data/lib/metanorma/collection/filelookup/filelookup.rb +20 -8
- data/lib/metanorma/collection/filelookup/filelookup_sectionsplit.rb +40 -16
- data/lib/metanorma/collection/manifest/manifest.rb +1 -1
- data/lib/metanorma/collection/renderer/fileparse.rb +94 -121
- data/lib/metanorma/collection/renderer/navigation.rb +1 -1
- data/lib/metanorma/collection/renderer/renderer.rb +4 -1
- data/lib/metanorma/collection/renderer/svg.rb +44 -0
- data/lib/metanorma/collection/renderer/utils.rb +18 -10
- data/lib/metanorma/collection/sectionsplit/collection.rb +6 -6
- data/lib/metanorma/collection/sectionsplit/sectionsplit.rb +52 -13
- data/lib/metanorma/collection/util/util.rb +17 -3
- data/lib/metanorma/compile/compile.rb +8 -0
- data/lib/metanorma/compile/extract.rb +2 -4
- data/lib/metanorma/input/asciidoc.rb +11 -10
- data/lib/metanorma/version.rb +1 -1
- data/metanorma.gemspec +3 -3
- metadata +21 -21
- data/lib/metanorma/shale_monkeypatch.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8023ee9f3e35c8192af2ef0cd4231b635b5efc6e5529fe85acb42a641032b3b0
|
4
|
+
data.tar.gz: 2875b07c0f94091745d83cea071d96bcffe1a77b5f493eda45970bc7ff3c580b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fae6f061d8fb94d44671e372d802190d205058073a389534241f7958aafe0a0c49e87e75e46cd205d4c9ea227e5c4610f9f4ca430849c084a2493eacdca8419f
|
7
|
+
data.tar.gz: a7fa6dcb6a2b379bbc3e6b8de6b4d3f300c0b5e01f40dc79fa784a535f6041d29913b4c904adc3a98e7c8d90ba88ff008e4700549b6c5d397242b33a85040092
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require "relaton"
|
4
2
|
require "relaton/cli"
|
5
3
|
require "metanorma-utils"
|
@@ -28,16 +26,20 @@ module Metanorma
|
|
28
26
|
def initialize(**args)
|
29
27
|
@file = args[:file]
|
30
28
|
@dirname = File.expand_path(File.dirname(@file)) # feeds @manifest
|
31
|
-
@documents = args[:documents] || {} # feeds initialize_directives
|
29
|
+
@documents = args[:documents] || {} # feeds initialize_directives, initialize_docs
|
32
30
|
@bibdatas = args[:documents] || {}
|
33
31
|
initialize_vars
|
34
32
|
initialize_config(args[:config])
|
35
33
|
initialize_directives
|
34
|
+
initialize_docs
|
35
|
+
validate_flavor(flavor)
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize_docs
|
36
39
|
@documents.merge! @manifest.documents
|
37
40
|
@bibdatas.merge! @manifest.documents
|
38
41
|
@documents.transform_keys { |k| Util::key(k) }
|
39
42
|
@bibdatas.transform_keys { |k| Util::key(k) }
|
40
|
-
validate_flavor(flavor)
|
41
43
|
end
|
42
44
|
|
43
45
|
def initialize_vars
|
@@ -54,6 +56,8 @@ module Metanorma
|
|
54
56
|
@final = config.final_content
|
55
57
|
@manifest = ::Metanorma::Collection::Manifest
|
56
58
|
.new(config.manifest, self, @dirname) # feeds initialize_directives
|
59
|
+
@format = config.format.map(&:to_sym)
|
60
|
+
@format&.empty? and @format = nil
|
57
61
|
end
|
58
62
|
|
59
63
|
def initialize_directives
|
@@ -88,7 +92,9 @@ module Metanorma
|
|
88
92
|
end
|
89
93
|
|
90
94
|
def render(opts)
|
91
|
-
opts[:format].nil? || opts[:format].empty?
|
95
|
+
if opts[:format].nil? || opts[:format].empty?
|
96
|
+
opts[:format] = @format || [:html]
|
97
|
+
end
|
92
98
|
opts[:log] = @log
|
93
99
|
opts[:flavor] = @flavor
|
94
100
|
::Metanorma::Collection::Renderer.render self, opts
|
@@ -120,7 +126,14 @@ module Metanorma
|
|
120
126
|
# @return [String] XML
|
121
127
|
def sections(cnt)
|
122
128
|
c = Asciidoctor.convert(cnt, backend: flavor.to_sym, header_footer: true)
|
123
|
-
Nokogiri::XML(c
|
129
|
+
x = Nokogiri::XML(c)
|
130
|
+
x.xpath("//xmlns:clause").each { |n| n["unnumbered"] = true }
|
131
|
+
file = Tempfile.new(%w(foo presentation.xml))
|
132
|
+
file.write(x.to_xml(indent: 0))
|
133
|
+
file.close
|
134
|
+
c1 = Util::isodoc_create(@flavor, @manifest.lang, @manifest.script, x, presxml: true)
|
135
|
+
.convert(file.path, nil, true)
|
136
|
+
Nokogiri::XML(c1).at("//xmlns:sections").children.to_xml
|
124
137
|
end
|
125
138
|
|
126
139
|
# @param builder [Nokogiri::XML::Builder]
|
@@ -1,12 +1,11 @@
|
|
1
|
-
require "
|
1
|
+
require "lutaml/model"
|
2
2
|
|
3
3
|
module Metanorma
|
4
4
|
class Collection
|
5
5
|
module Config
|
6
|
-
class CompileOptions < ::
|
7
|
-
attribute :install_fonts,
|
8
|
-
|
9
|
-
attribute :agree_to_terms, ::Shale::Type::Boolean, default: -> { true }
|
6
|
+
class CompileOptions < ::Lutaml::Model::Serializable
|
7
|
+
attribute :install_fonts, :boolean, default: -> { false }
|
8
|
+
attribute :agree_to_terms, :boolean, default: -> { true }
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require "
|
2
|
-
require_relative "../../shale_monkeypatch"
|
1
|
+
require "lutaml/model"
|
3
2
|
require_relative "../../array_monkeypatch"
|
4
3
|
require_relative "compile_options"
|
5
4
|
require_relative "converters"
|
@@ -11,36 +10,35 @@ module Metanorma
|
|
11
10
|
class Collection
|
12
11
|
module Config
|
13
12
|
require "shale/adapter/nokogiri"
|
14
|
-
::
|
13
|
+
Lutaml::Model::Config.configure do |config|
|
14
|
+
config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
|
15
|
+
end
|
15
16
|
|
16
|
-
class Config < ::
|
17
|
+
class Config < ::Lutaml::Model::Serializable
|
17
18
|
attr_accessor :path, :collection, :from_xml
|
18
19
|
|
19
20
|
attribute :bibdata, Bibdata
|
20
21
|
attribute :directive, Directive, collection: true
|
21
22
|
attribute :manifest, Manifest
|
22
|
-
attribute :
|
23
|
-
|
24
|
-
attribute :output_folder,
|
25
|
-
attribute :coverpage, ::Shale::Type::String, default: -> {
|
26
|
-
"cover.html"
|
27
|
-
}
|
23
|
+
attribute :coverpage, :string, default: -> { "cover.html" }
|
24
|
+
attribute :format, :string, collection: true, default: -> { [:html] }
|
25
|
+
attribute :output_folder, :string
|
28
26
|
attribute :compile, CompileOptions
|
29
|
-
attribute :prefatory_content,
|
30
|
-
attribute :final_content,
|
27
|
+
attribute :prefatory_content, :string, raw: true
|
28
|
+
attribute :final_content, :string, raw: true
|
31
29
|
attribute :documents, Bibdata, collection: true
|
32
|
-
attribute :xmlns,
|
30
|
+
attribute :xmlns, :string, default: -> { "http://metanorma.org" }
|
33
31
|
|
34
32
|
yaml do
|
35
|
-
map "directives",
|
36
|
-
|
37
|
-
map "bibdata",
|
38
|
-
|
33
|
+
map "directives", to: :directive, with: { from: :directives_from_yaml,
|
34
|
+
to: :directives_to_yaml }
|
35
|
+
map "bibdata", to: :bibdata, with: { from: :bibdata_from_yaml,
|
36
|
+
to: :bibdata_to_yaml }
|
39
37
|
map "manifest", to: :manifest
|
40
|
-
map "format", to: :format
|
38
|
+
map "format", to: :format, render_default: true
|
41
39
|
map "output_folder", to: :output_folder
|
42
|
-
map "coverpage", to: :coverpage
|
43
|
-
map "compile", to: :compile
|
40
|
+
map "coverpage", to: :coverpage, render_default: true
|
41
|
+
map "compile", to: :compile, render_default: true
|
44
42
|
map "prefatory-content", to: :prefatory_content
|
45
43
|
map "final-content", to: :final_content
|
46
44
|
end
|
@@ -49,27 +47,31 @@ module Metanorma
|
|
49
47
|
root "metanorma-collection"
|
50
48
|
# namespace "http://metanorma.org", "m"
|
51
49
|
# map_attribute "xmlns", to: :xmlns
|
52
|
-
map_element "bibdata",
|
53
|
-
|
54
|
-
map_element "directive",
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
map_element "format", to: :format
|
50
|
+
map_element "bibdata", to: :bibdata, with: { from: :bibdata_from_xml,
|
51
|
+
to: :bibdata_to_xml }
|
52
|
+
map_element "directive", to: :directive
|
53
|
+
map_element "entry", to: :manifest, with: { from: :manifest_from_xml,
|
54
|
+
to: :manifest_to_xml }
|
55
|
+
map_element "format", to: :format, render_default: true
|
59
56
|
map_element "output_folder", to: :output_folder
|
60
|
-
map_element "coverpage", to: :coverpage
|
61
|
-
map_element "compile", to: :compile
|
62
|
-
map_element "prefatory-content",
|
63
|
-
|
57
|
+
map_element "coverpage", to: :coverpage, render_default: true
|
58
|
+
map_element "compile", to: :compile, render_default: true
|
59
|
+
map_element "prefatory-content",
|
60
|
+
to: :prefatory_content,
|
61
|
+
with: { from: :prefatory_from_xml,
|
62
|
+
to: :prefatory_to_xml }
|
64
63
|
map_element "doc-container",
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
to: :documents,
|
65
|
+
with: { from: :documents_from_xml,
|
66
|
+
to: :documents_to_xml }
|
67
|
+
map_element "final-content",
|
68
|
+
to: :final_content,
|
69
|
+
with: { from: :final_from_xml,
|
70
|
+
to: :final_to_xml }
|
69
71
|
end
|
70
72
|
|
71
73
|
def manifest_from_xml(model, node)
|
72
|
-
model.manifest = Manifest.from_xml(node.to_xml)
|
74
|
+
model.manifest = Manifest.from_xml(node.node.to_xml)
|
73
75
|
end
|
74
76
|
|
75
77
|
def manifest_to_xml(model, parent, doc)
|
@@ -78,7 +80,7 @@ module Metanorma
|
|
78
80
|
end
|
79
81
|
|
80
82
|
def prefatory_from_xml(model, node)
|
81
|
-
model.prefatory_content = node
|
83
|
+
model.prefatory_content = node
|
82
84
|
end
|
83
85
|
|
84
86
|
def prefatory_to_xml(model, parent, doc)
|
@@ -92,7 +94,8 @@ module Metanorma
|
|
92
94
|
def content_to_xml(model, parent, doc, type)
|
93
95
|
x = model.send("#{type}_content") or return
|
94
96
|
n = Nokogiri::XML(x)
|
95
|
-
elem = if n.elements.size == 1
|
97
|
+
elem = if n.elements.size == 1
|
98
|
+
"<#{type}-content>#{x}</#{type}-content>" # n.root
|
96
99
|
else
|
97
100
|
b = Nokogiri::XML::Builder.new
|
98
101
|
model.collection.content_to_xml(type, b)
|
@@ -102,19 +105,7 @@ module Metanorma
|
|
102
105
|
end
|
103
106
|
|
104
107
|
def final_from_xml(model, node)
|
105
|
-
model.final_content = node
|
106
|
-
end
|
107
|
-
|
108
|
-
def directive_from_xml(model, node)
|
109
|
-
model.directive ||= []
|
110
|
-
model.directive << Directive.from_xml(node.to_xml)
|
111
|
-
end
|
112
|
-
|
113
|
-
def directive_to_xml(model, parent, doc)
|
114
|
-
Array(model.directive).each do |e|
|
115
|
-
elem = e.to_xml
|
116
|
-
doc.add_element(parent, elem)
|
117
|
-
end
|
108
|
+
model.final_content = node
|
118
109
|
end
|
119
110
|
|
120
111
|
def directives_from_yaml(model, value)
|
@@ -134,28 +125,6 @@ module Metanorma
|
|
134
125
|
end
|
135
126
|
end
|
136
127
|
|
137
|
-
def documents_from_xml(model, value)
|
138
|
-
x = if value.is_a?(Shale::Adapter::Nokogiri::Node)
|
139
|
-
value.content
|
140
|
-
else Nokogiri::XML(value)
|
141
|
-
end
|
142
|
-
model.documents = x.xpath(".//bibdata")
|
143
|
-
.each_with_object([]) do |b, m|
|
144
|
-
m << Bibdata.from_xml(b.to_xml)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def documents_to_xml(model, parent, doc)
|
149
|
-
b = Nokogiri::XML::Builder.new do |xml|
|
150
|
-
xml.document do |m|
|
151
|
-
model.collection.doccontainer(m) or return
|
152
|
-
end
|
153
|
-
end
|
154
|
-
b.parent.elements.first.elements.each do |x|
|
155
|
-
doc.add_element(parent, x)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
128
|
include Converters
|
160
129
|
end
|
161
130
|
end
|
@@ -14,7 +14,8 @@ module Metanorma
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def bibdata_from_xml(model, node)
|
17
|
-
|
17
|
+
node and
|
18
|
+
model.bibdata = Relaton::Cli.parse_xml(node.node.adapter_node)
|
18
19
|
end
|
19
20
|
|
20
21
|
def bibdata_to_xml(model, parent, doc)
|
@@ -24,6 +25,31 @@ module Metanorma
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def nop_to_yaml(model, doc); end
|
28
|
+
|
29
|
+
def documents_from_xml(model, value)
|
30
|
+
model.documents = value
|
31
|
+
.each_with_object([]) do |b, m|
|
32
|
+
m << b
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def documents_to_xml(model, parent, doc)
|
37
|
+
documents_to_xml?(doc) or return
|
38
|
+
b = Nokogiri::XML::Builder.new do |xml|
|
39
|
+
xml.document do |m|
|
40
|
+
model.collection.doccontainer(m) or return
|
41
|
+
end
|
42
|
+
end
|
43
|
+
b.parent.elements.first.elements
|
44
|
+
.each { |x| doc.add_element(parent, x) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def documents_to_xml?(doc)
|
48
|
+
ret = doc.parent.elements.detect do |x|
|
49
|
+
x.name == "doc-container"
|
50
|
+
end
|
51
|
+
!ret
|
52
|
+
end
|
27
53
|
end
|
28
54
|
end
|
29
55
|
end
|
@@ -1,9 +1,15 @@
|
|
1
1
|
module Metanorma
|
2
2
|
class Collection
|
3
3
|
module Config
|
4
|
-
class Directive < ::
|
5
|
-
attribute :key,
|
6
|
-
attribute :value,
|
4
|
+
class Directive < ::Lutaml::Model::Serializable
|
5
|
+
attribute :key, :string
|
6
|
+
attribute :value, :string
|
7
|
+
|
8
|
+
xml do
|
9
|
+
root "directive"
|
10
|
+
map_element "key", to: :key
|
11
|
+
map_element "value", to: :value
|
12
|
+
end
|
7
13
|
end
|
8
14
|
end
|
9
15
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require "
|
2
|
-
|
1
|
+
require "lutaml/model"
|
2
|
+
require "lutaml/model/xml_adapter/nokogiri_adapter"
|
3
3
|
require_relative "../../array_monkeypatch"
|
4
4
|
require_relative "converters"
|
5
5
|
require_relative "bibdata"
|
@@ -8,58 +8,65 @@ module Metanorma
|
|
8
8
|
class Collection
|
9
9
|
module Config
|
10
10
|
require "shale/adapter/nokogiri"
|
11
|
-
::
|
11
|
+
Lutaml::Model::Config.configure do |config|
|
12
|
+
config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
|
13
|
+
end
|
12
14
|
|
13
|
-
class Manifest < ::
|
14
|
-
attribute :identifier,
|
15
|
-
|
16
|
-
attribute :id,
|
15
|
+
class Manifest < ::Lutaml::Model::Serializable
|
16
|
+
attribute :identifier, :string,
|
17
|
+
default: -> { UUIDTools::UUID.random_create.to_s }
|
18
|
+
attribute :id, :string
|
17
19
|
attribute :bibdata, Bibdata
|
18
|
-
attribute :type,
|
19
|
-
attribute :title,
|
20
|
-
attribute :url,
|
21
|
-
attribute :
|
22
|
-
attribute :
|
23
|
-
attribute :
|
20
|
+
attribute :type, :string
|
21
|
+
attribute :title, :string
|
22
|
+
attribute :url, :string
|
23
|
+
attribute :level, :string
|
24
|
+
attribute :attachment, :boolean
|
25
|
+
attribute :sectionsplit, :boolean
|
26
|
+
attribute :index, :boolean, default: -> { true }
|
24
27
|
attribute :entry, Manifest, collection: true
|
25
|
-
attribute :file,
|
28
|
+
attribute :file, :string
|
26
29
|
|
27
30
|
yaml do
|
28
31
|
map "identifier", to: :identifier
|
29
32
|
map "type", to: :type
|
30
|
-
map "level",
|
33
|
+
map "level", to: :level,
|
34
|
+
with: { from: :level_from_yaml, to: :nop_to_yaml }
|
31
35
|
map "title", to: :title
|
32
36
|
map "url", to: :url
|
33
37
|
map "attachment", to: :attachment
|
34
38
|
map "sectionsplit", to: :sectionsplit
|
35
39
|
map "index", to: :index
|
36
40
|
map "file", to: :file
|
37
|
-
map "fileref",
|
41
|
+
map "fileref", to: :file,
|
42
|
+
with: { from: :fileref_from_yaml, to: :nop_to_yaml }
|
38
43
|
map "entry", to: :entry
|
39
|
-
map "docref",
|
40
|
-
|
41
|
-
map "
|
42
|
-
|
44
|
+
map "docref", to: :entry,
|
45
|
+
with: { from: :docref_from_yaml, to: :nop_to_yaml }
|
46
|
+
map "manifest", to: :entry,
|
47
|
+
with: { from: :docref_from_yaml, to: :nop_to_yaml }
|
48
|
+
map "bibdata", to: :bibdata, with: { from: :bibdata_from_yaml,
|
49
|
+
to: :bibdata_to_yaml }
|
43
50
|
end
|
44
51
|
|
45
52
|
xml do
|
46
53
|
root "entry"
|
47
|
-
map_attribute "
|
54
|
+
map_attribute "target", to: :id
|
48
55
|
map_attribute "attachment", to: :attachment
|
49
56
|
map_attribute "sectionsplit", to: :sectionsplit
|
50
57
|
map_attribute "index", to: :index
|
51
58
|
map_attribute "url", to: :url
|
52
59
|
map_attribute "fileref", to: :file
|
53
|
-
map_element "identifier", to: :identifier
|
60
|
+
map_element "identifier", to: :identifier, render_default: true
|
54
61
|
map_element "type", to: :type
|
55
62
|
map_element "title", to: :title
|
56
|
-
map_element "bibdata",
|
57
|
-
|
58
|
-
map_element "entry", to: :entry
|
63
|
+
map_element "bibdata", to: :bibdata, with: { from: :bibdata_from_xml,
|
64
|
+
to: :bibdata_to_xml }
|
65
|
+
map_element "entry", to: :entry
|
59
66
|
end
|
60
67
|
|
61
68
|
def entry_from_xml(model, node)
|
62
|
-
model.entry = Manifest.from_xml(node.
|
69
|
+
model.entry = Manifest.from_xml(node.node.to_xml)
|
63
70
|
end
|
64
71
|
|
65
72
|
def entry_to_xml(model, parent, doc)
|
@@ -62,12 +62,24 @@ module Metanorma
|
|
62
62
|
file, _filename = targetfile(entry, read: true)
|
63
63
|
xml = Nokogiri::XML(file, &:huge)
|
64
64
|
add_document_suffix(ident, xml)
|
65
|
-
entry.merge!(
|
66
|
-
bibdata: xml.at(ns("//bibdata")),
|
67
|
-
document_suffix: xml.root["document_suffix"])
|
65
|
+
entry.merge!(bibdata_extract(xml))
|
68
66
|
end
|
69
67
|
end
|
70
68
|
|
69
|
+
def anchors_lookup(anchors)
|
70
|
+
anchors.values.each_with_object({}) do |v, m|
|
71
|
+
v.each_value { |v1| m[v1] = true }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def bibdata_extract(xml)
|
76
|
+
anchors = read_anchors(xml)
|
77
|
+
{ anchors: anchors, anchors_lookup: anchors_lookup(anchors),
|
78
|
+
ids: read_ids(xml),
|
79
|
+
bibdata: xml.at(ns("//bibdata")),
|
80
|
+
document_suffix: xml.root["document_suffix"] }
|
81
|
+
end
|
82
|
+
|
71
83
|
def bibitem_process(entry)
|
72
84
|
entry[:bibitem] = entry[:bibdata].dup
|
73
85
|
entry[:bibitem].name = "bibitem"
|
@@ -76,7 +88,7 @@ module Metanorma
|
|
76
88
|
end
|
77
89
|
|
78
90
|
# ref is the absolute source file address
|
79
|
-
# rel_path is the relative source file address, relative to the YAML
|
91
|
+
# rel_path is the relative source file address, relative to the YAML location
|
80
92
|
# out_path is the destination file address, with any references outside
|
81
93
|
# the working directory (../../...) truncated, and based on relative path
|
82
94
|
# identifier is the id with only spaces, no nbsp
|
@@ -198,10 +210,10 @@ module Metanorma
|
|
198
210
|
ret[val[:type]] ||= {}
|
199
211
|
index = if val[:container] || val[:label].nil? || val[:label].empty?
|
200
212
|
UUIDTools::UUID.random_create.to_s
|
201
|
-
else val[:label]
|
213
|
+
else val[:label].gsub(%r{<[^>]+>}, "")
|
202
214
|
end
|
203
215
|
ret[val[:type]][index] = key
|
204
|
-
ret[val[:type]][
|
216
|
+
v = val[:value] and ret[val[:type]][v.gsub(%r{<[^>]+>}, "")] = key
|
205
217
|
end
|
206
218
|
|
207
219
|
# Also parse all ids in doc (including ones which won't be xref targets)
|
@@ -216,8 +228,8 @@ module Metanorma
|
|
216
228
|
end
|
217
229
|
|
218
230
|
def key(ident)
|
219
|
-
@c.decode(ident).gsub(/(\p{Zs})+/, " ")
|
220
|
-
|
231
|
+
@c.decode(ident).gsub(/(\p{Zs})+/, " ")
|
232
|
+
.sub(/^metanorma-collection /, "")
|
221
233
|
end
|
222
234
|
|
223
235
|
def keys
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "../sectionsplit/sectionsplit"
|
2
|
+
# require "concurrent-ruby"
|
2
3
|
|
3
4
|
module Metanorma
|
4
5
|
class Collection
|
@@ -16,13 +17,25 @@ module Metanorma
|
|
16
17
|
|
17
18
|
def process_section_split_instance(key, manifest)
|
18
19
|
s, sectionsplit_manifest = sectionsplit(key)
|
20
|
+
# section_split_instance_threads(s, manifest, key)
|
19
21
|
s.each_with_index do |f1, i|
|
20
22
|
add_section_split_instance(f1, manifest, key, i)
|
21
23
|
end
|
22
24
|
a = add_section_split_attachments(sectionsplit_manifest, key) and
|
23
25
|
manifest["#{key}:attachments"] = a
|
24
|
-
manifest
|
25
|
-
|
26
|
+
add_section_split_cover(manifest, sectionsplit_manifest, key)
|
27
|
+
end
|
28
|
+
|
29
|
+
def section_split_instance_threads(s, manifest, key)
|
30
|
+
@mutex = Mutex.new
|
31
|
+
pool = Concurrent::FixedThreadPool.new(4)
|
32
|
+
s.each_with_index do |f1, i|
|
33
|
+
pool.post do
|
34
|
+
add_section_split_instance(f1, manifest, key, i)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
pool.shutdown
|
38
|
+
pool.wait_for_termination
|
26
39
|
end
|
27
40
|
|
28
41
|
def cleanup_section_split_instance(key, manifest)
|
@@ -31,24 +44,34 @@ module Metanorma
|
|
31
44
|
@files[key][:indirect_key] = @sectionsplit.key
|
32
45
|
end
|
33
46
|
|
34
|
-
def add_section_split_cover(manifest, ident)
|
47
|
+
def add_section_split_cover(manifest, sectionsplit_manifest, ident)
|
35
48
|
cover = @sectionsplit
|
36
|
-
.section_split_cover(
|
49
|
+
.section_split_cover(sectionsplit_manifest,
|
50
|
+
@parent.dir_name_cleanse(ident),
|
37
51
|
one_doc_collection?)
|
38
52
|
@files[ident][:out_path] = cover
|
39
|
-
|
40
|
-
|
53
|
+
src = File.join(File.dirname(sectionsplit_manifest.file), cover)
|
54
|
+
m = { attachment: true, index: false, out_path: cover, ref: src }
|
55
|
+
manifest["#{ident}:index.html"] = m
|
56
|
+
one_doc_collection? and
|
57
|
+
add_cover_one_doc_coll(manifest, sectionsplit_manifest, ident, m)
|
58
|
+
end
|
59
|
+
|
60
|
+
def add_cover_one_doc_coll(manifest, sectionsplit_manifest, key, entry)
|
61
|
+
idx = File.join(File.dirname(sectionsplit_manifest.file), "index.html")
|
62
|
+
FileUtils.cp entry[:ref], idx
|
63
|
+
manifest["#{key}:index1.html"] =
|
64
|
+
entry.merge(out_path: "index.html", ref: idx)
|
41
65
|
end
|
42
66
|
|
43
67
|
def one_doc_collection?
|
44
|
-
return false
|
45
68
|
docs = 0
|
46
69
|
@files.each_value do |v|
|
47
70
|
v[:attachment] and next
|
48
71
|
v[:presentationxml] and next
|
49
72
|
docs += 1
|
50
73
|
end
|
51
|
-
docs
|
74
|
+
docs <= 1
|
52
75
|
end
|
53
76
|
|
54
77
|
def add_section_split_attachments(manifest, ident)
|
@@ -62,15 +85,16 @@ module Metanorma
|
|
62
85
|
|
63
86
|
def add_section_split_instance(file, manifest, key, idx)
|
64
87
|
presfile, newkey, xml = add_section_split_instance_prep(file, key)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
88
|
+
anchors = read_anchors(xml)
|
89
|
+
m = { parentid: key, presentationxml: true, type: "fileref",
|
90
|
+
rel_path: file[:url], out_path: File.basename(file[:url]),
|
91
|
+
anchors: anchors, anchors_lookup: anchors_lookup(anchors),
|
92
|
+
ids: read_ids(xml),
|
93
|
+
sectionsplit_output: true, indirect_key: @sectionsplit.key,
|
94
|
+
bibdata: @files[key][:bibdata], ref: presfile }
|
95
|
+
m[:bare] = true unless idx.zero?
|
96
|
+
manifest[newkey] = m
|
71
97
|
@files_to_delete << file[:url]
|
72
|
-
manifest[newkey][:indirect_key] = @sectionsplit.key
|
73
|
-
manifest[newkey][:bare] = true unless idx.zero?
|
74
98
|
end
|
75
99
|
|
76
100
|
def add_section_split_instance_prep(file, key)
|