metanorma-plugin-lutaml 0.6.5 → 0.6.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/plugin/lutaml/express_remarks_decorator.rb +1 -1
- data/lib/metanorma/plugin/lutaml/liquid/custom_filters.rb +4 -3
- data/lib/metanorma/plugin/lutaml/liquid/multiply_local_file_system.rb +9 -4
- data/lib/metanorma/plugin/lutaml/lutaml_preprocessor.rb +23 -21
- data/lib/metanorma/plugin/lutaml/lutaml_uml_attributes_table_preprocessor.rb +1 -1
- data/lib/metanorma/plugin/lutaml/lutaml_uml_class_preprocessor.rb +3 -3
- data/lib/metanorma/plugin/lutaml/lutaml_uml_datamodel_description_preprocessor.rb +1 -1
- data/lib/metanorma/plugin/lutaml/utils.rb +9 -16
- data/lib/metanorma/plugin/lutaml/version.rb +1 -1
- data/metanorma-plugin-lutaml.gemspec +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0847dcf75a0aa3da0e2179e5575757a140c29caa3d22d3b50cfe5ad04b1327d9'
|
4
|
+
data.tar.gz: 11c1e30bf0cbd74d10e6bd2cabb791f11508822baeb56c47622582580b855c35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f294b6e637b837af3a23939e0c152534bc7a86d7633399855c7e7b9a2373189ab60e9c3076e5fa7e1f1a975374e87413ada116aaed2a18c7be7027550d0b42fe
|
7
|
+
data.tar.gz: f418ee4fa767ddfac9e6d9f670cac031a6b86f781ee64717bbf5566b65784392450c038f220b321b22144c6b93cbc8deee57d73bcb3ca2b9ec9bd00b027a127f
|
@@ -48,7 +48,7 @@ module Metanorma
|
|
48
48
|
# When we are dealing with a relative path of a template:
|
49
49
|
# ../path/to/file we need to transform it into
|
50
50
|
# the absolute one because `image::` macro wont understand it other way
|
51
|
-
prefixed_path = File.absolute_path(prefixed_path) if prefixed_path.start_with?(
|
51
|
+
prefixed_path = File.absolute_path(prefixed_path) if prefixed_path.start_with?("../")
|
52
52
|
full_path = File.expand_path(prefixed_path)
|
53
53
|
"#{$1}#{$2}#{full_path}#{$4}"
|
54
54
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require "
|
1
|
+
require "coradoc"
|
2
|
+
require "coradoc/reverse_adoc"
|
2
3
|
|
3
4
|
module Metanorma
|
4
5
|
module Plugin
|
@@ -6,7 +7,7 @@ module Metanorma
|
|
6
7
|
module Liquid
|
7
8
|
module CustomFilters
|
8
9
|
def html2adoc(input)
|
9
|
-
ReverseAdoc.convert(input)
|
10
|
+
Coradoc::ReverseAdoc.convert(input)
|
10
11
|
end
|
11
12
|
|
12
13
|
def interpolate(input)
|
@@ -15,7 +16,7 @@ module Metanorma
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def identify(input)
|
18
|
-
input.split(/(?=[A-Z])/).map(&:downcase).join(
|
19
|
+
input.split(/(?=[A-Z])/).map(&:downcase).join("-")
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -22,7 +22,8 @@ module Metanorma
|
|
22
22
|
|
23
23
|
def full_path(template_path)
|
24
24
|
unless %r{\A[^./][a-zA-Z0-9_/]+\z}.match?(template_path)
|
25
|
-
raise ::Liquid::FileSystemError,
|
25
|
+
raise ::Liquid::FileSystemError,
|
26
|
+
"Illegal template name '#{template_path}'"
|
26
27
|
end
|
27
28
|
|
28
29
|
result_path = if template_path.include?('/')
|
@@ -46,11 +47,15 @@ module Metanorma
|
|
46
47
|
end
|
47
48
|
|
48
49
|
if result_path.nil?
|
49
|
-
raise ::Liquid::FileSystemError,
|
50
|
+
raise ::Liquid::FileSystemError,
|
51
|
+
"No documents in template path '#{File.expand_path(template_path)}'"
|
50
52
|
end
|
51
53
|
|
52
|
-
unless roots.any?
|
53
|
-
|
54
|
+
unless roots.any? do |root|
|
55
|
+
File.expand_path(result_path).start_with?(File.expand_path(root))
|
56
|
+
end
|
57
|
+
raise ::Liquid::FileSystemError,
|
58
|
+
"Illegal template path '#{File.expand_path(result_path)}'"
|
54
59
|
end
|
55
60
|
|
56
61
|
result_path
|
@@ -16,14 +16,15 @@ module Metanorma
|
|
16
16
|
REMARKS_ATTRIBUTE = "remarks"
|
17
17
|
|
18
18
|
def process(document, reader)
|
19
|
-
r = Asciidoctor::PreprocessorNoIfdefsReader.new(document,
|
19
|
+
r = Asciidoctor::PreprocessorNoIfdefsReader.new(document,
|
20
|
+
reader.lines)
|
20
21
|
input_lines = r.readlines.to_enum
|
21
22
|
|
22
23
|
has_lutaml = input_lines.any? { |line| lutaml?(line) }
|
23
24
|
|
24
25
|
express_indexes = Utils.parse_document_express_indexes(
|
25
26
|
document,
|
26
|
-
input_lines
|
27
|
+
input_lines,
|
27
28
|
)
|
28
29
|
|
29
30
|
result_content = process_input_lines(
|
@@ -53,18 +54,18 @@ module Metanorma
|
|
53
54
|
::Lutaml::Parser.parse(
|
54
55
|
File.new(
|
55
56
|
Utils.relative_file_path(document, file_path),
|
56
|
-
encoding: "UTF-8"
|
57
|
-
)
|
57
|
+
encoding: "UTF-8",
|
58
|
+
),
|
58
59
|
)
|
59
60
|
end
|
60
61
|
|
61
62
|
private
|
62
63
|
|
63
64
|
def process_input_lines(
|
64
|
-
|
65
|
+
document:,
|
65
66
|
input_lines:,
|
66
67
|
express_indexes:
|
67
|
-
|
68
|
+
)
|
68
69
|
|
69
70
|
result = []
|
70
71
|
loop do
|
@@ -73,7 +74,7 @@ module Metanorma
|
|
73
74
|
document,
|
74
75
|
input_lines,
|
75
76
|
express_indexes,
|
76
|
-
)
|
77
|
+
),
|
77
78
|
)
|
78
79
|
end
|
79
80
|
result
|
@@ -99,7 +100,7 @@ module Metanorma
|
|
99
100
|
index_names: index_names,
|
100
101
|
context_name: context_name,
|
101
102
|
options: options,
|
102
|
-
indexes: express_indexes
|
103
|
+
indexes: express_indexes,
|
103
104
|
)
|
104
105
|
end
|
105
106
|
|
@@ -120,23 +121,23 @@ module Metanorma
|
|
120
121
|
|
121
122
|
# Does this condition ever happen? That is only if the
|
122
123
|
# `lutaml-express-index` condition is not set
|
123
|
-
|
124
|
+
if indexes[path]
|
125
|
+
indexes[path][:serialized_hash] ||= indexes[path][:wrapper].to_liquid
|
126
|
+
else
|
124
127
|
|
125
128
|
full_path = Utils.relative_file_path(document, path)
|
126
129
|
unless File.file?(full_path)
|
127
130
|
raise StandardError.new(
|
128
131
|
"Unable to load EXPRESS index for `#{path}`, " \
|
129
132
|
"please define it at `:lutaml-express-index:` or specify " \
|
130
|
-
"the full path."
|
133
|
+
"the full path.",
|
131
134
|
)
|
132
135
|
end
|
133
136
|
wrapper = load_lutaml_file(document, path)
|
134
137
|
indexes[path] = {
|
135
138
|
wrapper: wrapper,
|
136
|
-
serialized_hash: wrapper.to_liquid
|
139
|
+
serialized_hash: wrapper.to_liquid,
|
137
140
|
}
|
138
|
-
else
|
139
|
-
indexes[path][:serialized_hash] ||= indexes[path][:wrapper].to_liquid
|
140
141
|
end
|
141
142
|
|
142
143
|
indexes[path]
|
@@ -148,7 +149,7 @@ module Metanorma
|
|
148
149
|
|
149
150
|
relative_file_path = Utils.relative_file_path(document, file_path)
|
150
151
|
config_yaml = YAML.safe_load(
|
151
|
-
File.read(relative_file_path, encoding: "UTF-8")
|
152
|
+
File.read(relative_file_path, encoding: "UTF-8"),
|
152
153
|
)
|
153
154
|
|
154
155
|
options = {}
|
@@ -156,7 +157,7 @@ module Metanorma
|
|
156
157
|
unless config_yaml["schemas"].is_a?(Hash)
|
157
158
|
raise StandardError.new(
|
158
159
|
"[lutaml_express] attribute `config_yaml` must point to a YAML " \
|
159
|
-
"file that has the `schema` key containing a hash."
|
160
|
+
"file that has the `schema` key containing a hash.",
|
160
161
|
)
|
161
162
|
end
|
162
163
|
|
@@ -186,8 +187,9 @@ module Metanorma
|
|
186
187
|
schema,
|
187
188
|
options.merge(
|
188
189
|
"relative_path_prefix" =>
|
189
|
-
Utils.relative_file_path(document,
|
190
|
-
|
190
|
+
Utils.relative_file_path(document,
|
191
|
+
File.dirname(schema["file"])),
|
192
|
+
),
|
191
193
|
) || {}
|
192
194
|
end
|
193
195
|
|
@@ -200,7 +202,7 @@ module Metanorma
|
|
200
202
|
gather_context_items(
|
201
203
|
index_names: index_names,
|
202
204
|
document: document,
|
203
|
-
indexes: indexes
|
205
|
+
indexes: indexes,
|
204
206
|
).map do |items|
|
205
207
|
|
206
208
|
serialized_hash = items[:serialized_hash]
|
@@ -223,7 +225,7 @@ module Metanorma
|
|
223
225
|
document: document,
|
224
226
|
block_lines: lines,
|
225
227
|
context_items: serialized_hash,
|
226
|
-
context_name: context_name
|
228
|
+
context_name: context_name,
|
227
229
|
)
|
228
230
|
end.flatten
|
229
231
|
rescue StandardError => e
|
@@ -246,8 +248,8 @@ module Metanorma
|
|
246
248
|
key,
|
247
249
|
val&.map do |remark|
|
248
250
|
Metanorma::Plugin::Lutaml::ExpressRemarksDecorator
|
249
|
-
|
250
|
-
end
|
251
|
+
.call(remark, options)
|
252
|
+
end,
|
251
253
|
]
|
252
254
|
end
|
253
255
|
|
@@ -9,7 +9,7 @@ module Metanorma
|
|
9
9
|
# @example [lutaml_uml_attributes_table,path/to/lutaml,EntityName]
|
10
10
|
class LutamlUmlAttributesTablePreprocessor < LutamlUmlClassPreprocessor
|
11
11
|
MACRO_REGEXP =
|
12
|
-
/\[lutaml_uml_attributes_table,([^,]+),?([^,]+),?(.+?)?\]
|
12
|
+
/\[lutaml_uml_attributes_table,([^,]+),?([^,]+),?(.+?)?\]/.freeze
|
13
13
|
|
14
14
|
# rubocop:disable Layout/IndentHeredoc
|
15
15
|
def template(options)
|
@@ -15,7 +15,7 @@ module Metanorma
|
|
15
15
|
# @example [lutaml_uml_class,path/to/lutaml,EntityName]
|
16
16
|
class LutamlUmlClassPreprocessor < ::Asciidoctor::Extensions::Preprocessor
|
17
17
|
MACRO_REGEXP =
|
18
|
-
/\[lutaml_uml_class,([^,]+),?([^,]+),?(.+?)?\]
|
18
|
+
/\[lutaml_uml_class,([^,]+),?([^,]+),?(.+?)?\]/.freeze
|
19
19
|
|
20
20
|
def get_macro_regexp
|
21
21
|
self.class.const_get(:MACRO_REGEXP)
|
@@ -109,9 +109,9 @@ module Metanorma
|
|
109
109
|
|
110
110
|
<<~TEMPLATE
|
111
111
|
{% if definition.keyword == 'enumeration' %}
|
112
|
-
#{equalsigns(depth)
|
112
|
+
#{"#{equalsigns(depth)} Enumeration: {{ definition.name }}" unless skip_headers}
|
113
113
|
{% else %}
|
114
|
-
#{equalsigns(depth)
|
114
|
+
#{"#{equalsigns(depth)} Class: {{ definition.name }}" unless skip_headers}
|
115
115
|
{% endif %}
|
116
116
|
|
117
117
|
#{equalsigns(depth + 1)} Description
|
@@ -16,7 +16,7 @@ module Metanorma
|
|
16
16
|
class LutamlUmlDatamodelDescriptionPreprocessor <
|
17
17
|
::Asciidoctor::Extensions::Preprocessor
|
18
18
|
MACRO_REGEXP =
|
19
|
-
/\[lutaml_uml_datamodel_description,([^,]+),?(.+)?\]
|
19
|
+
/\[lutaml_uml_datamodel_description,([^,]+),?(.+)?\]/.freeze
|
20
20
|
LIQUID_INCLUDE_PATH = File.join(
|
21
21
|
Gem.loaded_specs["metanorma-plugin-lutaml"].full_gem_path,
|
22
22
|
"lib", "metanorma", "plugin", "lutaml", "liquid_templates"
|
@@ -31,7 +31,7 @@ module Metanorma
|
|
31
31
|
# Allow includes for the template
|
32
32
|
include_paths = [
|
33
33
|
Utils.relative_file_path(document, ""),
|
34
|
-
include_path
|
34
|
+
include_path,
|
35
35
|
].compact
|
36
36
|
|
37
37
|
liquid_template.registers[:file_system] =
|
@@ -72,12 +72,11 @@ module Metanorma
|
|
72
72
|
save_express_repo_to_cache(
|
73
73
|
cache_full_path,
|
74
74
|
lutaml_wrapper.original_document,
|
75
|
-
document
|
75
|
+
document,
|
76
76
|
)
|
77
77
|
end
|
78
78
|
|
79
79
|
lutaml_wrapper
|
80
|
-
|
81
80
|
rescue Expressir::Error
|
82
81
|
FileUtils.rm_rf(cache_full_path)
|
83
82
|
|
@@ -85,9 +84,8 @@ module Metanorma
|
|
85
84
|
path: path,
|
86
85
|
cache_path: cache_path,
|
87
86
|
document: document,
|
88
|
-
force_read: true
|
87
|
+
force_read: true,
|
89
88
|
)
|
90
|
-
|
91
89
|
rescue StandardError => e
|
92
90
|
document.logger.warn("Failed to load #{full_path}: #{e.message}")
|
93
91
|
raise e
|
@@ -121,26 +119,21 @@ module Metanorma
|
|
121
119
|
end
|
122
120
|
|
123
121
|
# TODO: Refactor this using Suma::SchemaConfig
|
124
|
-
def load_express_from_index(
|
122
|
+
def load_express_from_index(_document, path)
|
125
123
|
yaml_content = YAML.safe_load(File.read(path))
|
126
124
|
schema_yaml_base_path = Pathname.new(File.dirname(path))
|
127
125
|
|
128
126
|
# If there is a global root path set, all subsequent paths are
|
129
127
|
# relative to it.
|
130
|
-
if yaml_content[
|
131
|
-
root_schema_path = Pathname.new(yaml_content[
|
128
|
+
if yaml_content["path"]
|
129
|
+
root_schema_path = Pathname.new(yaml_content["path"])
|
132
130
|
schema_yaml_base_path = schema_yaml_base_path + root_schema_path
|
133
131
|
end
|
134
132
|
|
135
133
|
files_to_load = yaml_content["schemas"].map do |key, value|
|
136
|
-
|
137
134
|
# If there is no path: set for a schema, we assume it uses the
|
138
135
|
# schema name as the #{filename}.exp.
|
139
|
-
schema_path =
|
140
|
-
Pathname.new(value['path'])
|
141
|
-
else
|
142
|
-
Pathname.new("#{key}.exp")
|
143
|
-
end
|
136
|
+
schema_path = Pathname.new(value["path"] || "#{key}.exp")
|
144
137
|
|
145
138
|
real_schema_path = schema_yaml_base_path + schema_path
|
146
139
|
File.new(real_schema_path.cleanpath.to_s, encoding: "UTF-8")
|
@@ -171,13 +164,13 @@ module Metanorma
|
|
171
164
|
lutaml_expressir_wrapper = load_express_repositories(
|
172
165
|
path: path,
|
173
166
|
cache_path: cache,
|
174
|
-
document: document
|
167
|
+
document: document,
|
175
168
|
)
|
176
169
|
|
177
170
|
if lutaml_expressir_wrapper
|
178
171
|
express_indexes[name] = {
|
179
172
|
wrapper: lutaml_expressir_wrapper,
|
180
|
-
serialized_hash: nil
|
173
|
+
serialized_hash: nil,
|
181
174
|
}
|
182
175
|
end
|
183
176
|
end
|
@@ -26,11 +26,11 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.require_paths = ["lib"]
|
27
27
|
|
28
28
|
spec.add_dependency "asciidoctor"
|
29
|
+
spec.add_dependency "coradoc"
|
29
30
|
spec.add_dependency "expressir", "~> 1.4.0"
|
30
31
|
spec.add_dependency "liquid"
|
31
32
|
spec.add_dependency "lutaml"
|
32
33
|
spec.add_dependency "relaton-cli"
|
33
|
-
spec.add_dependency "reverse_adoc", "~> 0.3.7"
|
34
34
|
|
35
35
|
spec.add_development_dependency "debug"
|
36
36
|
spec.add_development_dependency "equivalent-xml"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-plugin-lutaml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: coradoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: expressir
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +94,6 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: reverse_adoc
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.3.7
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.3.7
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: debug
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|