relaton-render 1.0.2 → 1.0.4
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/relaton/render/general/citations.rb +2 -2
- data/lib/relaton/render/general/render.rb +18 -2
- data/lib/relaton/render/parse/parse_id.rb +2 -1
- data/lib/relaton/render/template/subclasses.rb +8 -2
- data/lib/relaton/render/template/template.rb +24 -11
- data/lib/relaton/render/version.rb +1 -1
- data/lib/relaton-render.rb +0 -1
- data/relaton-render.gemspec +5 -4
- metadata +42 -29
- data/lib/relaton/render/utils/utils.rb +0 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1473c5dc29146f1092fab77dda408f5bc0e15891991f6ecb54775625028d62d2
|
|
4
|
+
data.tar.gz: c2008fe936003b2304fd437f3f19983ea6c64041d4442cdfd855e439a1f73965
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '093e82b2f66e172221a6846a59f49d75f1a0e638c0cb7900f9d0e2395f49b196824c24dddb29aeab08280f48935db93fc8fffb3d927392e5903623562291713f'
|
|
7
|
+
data.tar.gz: 1761156e4dba5d2d5ae43081a6e83b117aeb4a5e5c9c06e0099bfe98e7889e2e28a4d29a618a0f7d62593662da49bc6d18de4c13d1f852d5fd54da580a94a83e
|
|
@@ -94,8 +94,8 @@ module Relaton
|
|
|
94
94
|
i = @i18n.select(b[:data])
|
|
95
95
|
b[:citation][:default] =
|
|
96
96
|
i.l10n(b[:data][:authoritative_identifier]&.first || "")
|
|
97
|
-
b[:
|
|
98
|
-
|
|
97
|
+
d = b[:data].merge(citestyle: "short")
|
|
98
|
+
b[:citation][:short] = i.l10n(renderer(b).citeshorttemplate.render(d, d))
|
|
99
99
|
citations_iterate_cite_styles(b, i)
|
|
100
100
|
end
|
|
101
101
|
ret
|
|
@@ -5,20 +5,23 @@ require "yaml"
|
|
|
5
5
|
require "liquid"
|
|
6
6
|
require "date"
|
|
7
7
|
require "relaton_bib"
|
|
8
|
+
require "metanorma-utils"
|
|
8
9
|
require_relative "../template/template"
|
|
9
10
|
require_relative "../../../isodoc/i18n"
|
|
10
11
|
|
|
11
12
|
module Relaton
|
|
12
13
|
module Render
|
|
13
14
|
class General
|
|
15
|
+
Hash.include ::Metanorma::Utils::Hash
|
|
16
|
+
Array.include ::Metanorma::Utils::Array
|
|
17
|
+
|
|
14
18
|
attr_reader :template, :journaltemplate, :seriestemplate, :nametemplate,
|
|
15
19
|
:authorcitetemplate, :extenttemplate, :sizetemplate,
|
|
16
20
|
:citetemplate, :citeshorttemplate, :lang, :script, :i18n,
|
|
17
21
|
:edition, :date, :fieldsklass, :dateklass, :config
|
|
18
22
|
|
|
19
23
|
def initialize(opt = {})
|
|
20
|
-
|
|
21
|
-
options = @config.merge(Utils::string_keys(opt))
|
|
24
|
+
options = init_options(opt)
|
|
22
25
|
@type = self.class.name.downcase.split("::").last
|
|
23
26
|
klass_initialize(options)
|
|
24
27
|
root_initalize(options)
|
|
@@ -27,6 +30,13 @@ module Relaton
|
|
|
27
30
|
init_misc
|
|
28
31
|
end
|
|
29
32
|
|
|
33
|
+
def init_options(opt)
|
|
34
|
+
opt = opt.stringify_all_keys
|
|
35
|
+
@override_file ||= opt["config"]
|
|
36
|
+
@config = config_override(read_config)
|
|
37
|
+
@config.merge(opt)
|
|
38
|
+
end
|
|
39
|
+
|
|
30
40
|
def init_misc
|
|
31
41
|
@semaphore = Mutex.new
|
|
32
42
|
@urlcache = {}
|
|
@@ -37,6 +47,12 @@ module Relaton
|
|
|
37
47
|
YAML.load_file(File.join(File.dirname(__FILE__), "config.yml"))
|
|
38
48
|
end
|
|
39
49
|
|
|
50
|
+
def config_override(ret)
|
|
51
|
+
new = {}
|
|
52
|
+
@override_file and new = YAML.load_file(@override_file)
|
|
53
|
+
ret.deep_merge(new)
|
|
54
|
+
end
|
|
55
|
+
|
|
40
56
|
def klass_initialize(options)
|
|
41
57
|
@nametemplateklass = Relaton::Render::Template::Name
|
|
42
58
|
@authorcitetemplateklass = Relaton::Render::Template::AuthorCite
|
|
@@ -65,7 +65,8 @@ module Relaton
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def authoritative_identifier_exclude
|
|
68
|
-
%w(METANORMA METANORMA-ORDINAL TITLE URN ISO-REFERENCE) +
|
|
68
|
+
%w(METANORMA METANORMA-ORDINAL AUTHOR-DATE TITLE URN ISO-REFERENCE) +
|
|
69
|
+
other_identifier_include
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def other_identifier(doc)
|
|
@@ -48,7 +48,6 @@ module Relaton
|
|
|
48
48
|
# ...[0], ...[1], ...[2]
|
|
49
49
|
def expand_nametemplate(template, size)
|
|
50
50
|
t = nametemplate_split(template)
|
|
51
|
-
|
|
52
51
|
mid = (1..size - 2).each_with_object([]) do |i, m|
|
|
53
52
|
m << t[1].gsub("[1]", "[#{i}]")
|
|
54
53
|
end
|
|
@@ -68,6 +67,7 @@ module Relaton
|
|
|
68
67
|
def nametemplate_split(template)
|
|
69
68
|
curr = 0
|
|
70
69
|
prec = ""
|
|
70
|
+
@in_name = 0
|
|
71
71
|
t = template.split(/(\{[{%][^{]+?[}%]\})/)
|
|
72
72
|
.each_with_object([""]) do |n, m|
|
|
73
73
|
m, curr, prec = nametemplate_split1(n, m, curr, prec)
|
|
@@ -79,6 +79,9 @@ module Relaton
|
|
|
79
79
|
|
|
80
80
|
def nametemplate_split1(elem, acc, curr, prec)
|
|
81
81
|
if match = /\{[{%].+?\[(\d)\]/.match(elem)
|
|
82
|
+
# we are in a name component
|
|
83
|
+
# if an if is started, track the if nesting...
|
|
84
|
+
@in_name += 1 if /\{%\s*if/.match?(elem)
|
|
82
85
|
if match[1].to_i > curr
|
|
83
86
|
curr += 1
|
|
84
87
|
acc[curr] ||= ""
|
|
@@ -86,7 +89,10 @@ module Relaton
|
|
|
86
89
|
acc[curr] += prec
|
|
87
90
|
prec = ""
|
|
88
91
|
acc[curr] += elem
|
|
89
|
-
elsif /\{%\s*endif/.match?(elem)
|
|
92
|
+
elsif /\{%\s*endif/.match?(elem) && @in_name.positive?
|
|
93
|
+
# stick the endif to the currently if-nested name component,
|
|
94
|
+
# if we are in one (@in_name.positive?)
|
|
95
|
+
@in_name -= 1
|
|
90
96
|
acc[curr] += prec
|
|
91
97
|
prec = ""
|
|
92
98
|
acc[curr] += elem
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
require_relative "../utils/utils"
|
|
1
|
+
# require_relative "../utils/utils"
|
|
2
2
|
require_relative "liquid"
|
|
3
3
|
require "singleton"
|
|
4
|
+
require "metanorma-utils"
|
|
4
5
|
|
|
5
6
|
module Relaton
|
|
6
7
|
module Render
|
|
@@ -10,6 +11,9 @@ module Relaton
|
|
|
10
11
|
|
|
11
12
|
attr_accessor :mutex
|
|
12
13
|
|
|
14
|
+
Hash.include ::Metanorma::Utils::Hash
|
|
15
|
+
Array.include ::Metanorma::Utils::Array
|
|
16
|
+
|
|
13
17
|
def initialize
|
|
14
18
|
@cache = {}
|
|
15
19
|
@mutex = Mutex.new
|
|
@@ -39,7 +43,8 @@ module Relaton
|
|
|
39
43
|
end
|
|
40
44
|
|
|
41
45
|
def parse_options(opt)
|
|
42
|
-
opt = Utils::sym_keys(opt)
|
|
46
|
+
# opt = Utils::sym_keys(opt)
|
|
47
|
+
opt = opt.symbolize_all_keys
|
|
43
48
|
@i18n = opt[:i18n]
|
|
44
49
|
@template_raw = opt[:template].dup
|
|
45
50
|
@template =
|
|
@@ -110,10 +115,12 @@ module Relaton
|
|
|
110
115
|
# potentially enhanced
|
|
111
116
|
def render(hash, context)
|
|
112
117
|
t = template_select(hash) or return nil # TODO select on context?
|
|
113
|
-
i = @i18n.select(context)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
i = @i18n.select(context)
|
|
119
|
+
i18nsettings = { "labels" => i.get, "lang" => i.lang,
|
|
120
|
+
"script" => i.script, "locale" => i.locale }
|
|
121
|
+
ret = template_clean(t.render(liquid_hash(hash.merge(i18nsettings))))
|
|
122
|
+
bib_delim = i.get.dig("punct", "biblio-field-delimiter") || ". "
|
|
123
|
+
template_components(ret, bib_delim, context)
|
|
117
124
|
end
|
|
118
125
|
|
|
119
126
|
def template_select(_hash)
|
|
@@ -167,17 +174,23 @@ module Relaton
|
|
|
167
174
|
# Do not strip any delimiters from final field in string
|
|
168
175
|
#
|
|
169
176
|
# if delim = ". " , then: ({{ series }}$$$|) => (series1.)
|
|
170
|
-
def template_components(str, delim)
|
|
177
|
+
def template_components(str, delim, context)
|
|
171
178
|
str or return str
|
|
172
179
|
delimrstrip, delimre, delimrstripre = template_components_prep(delim)
|
|
180
|
+
ret = template_components_split(str, delimre)
|
|
181
|
+
delim != delimrstrip and # "." in field followed by ". " in delim
|
|
182
|
+
ret = remove_double_period(ret, delimrstripre)
|
|
183
|
+
context[:citestyle] == "short" and
|
|
184
|
+
ret[0] += "<span class='fmt-first-biblio-delim'/>"
|
|
185
|
+
ret.join(delim).gsub(/#{delim}\|/, delimrstrip)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def template_components_split(str, delimre)
|
|
173
189
|
ret = str.gsub(NON_SPACING_DELIM, "|").split(/#{COMPONENT_DELIM}/o)
|
|
174
190
|
.map(&:strip).reject(&:empty?)
|
|
175
|
-
ret
|
|
191
|
+
ret[0...-1].map do |s|
|
|
176
192
|
s.sub(/#{delimre}$/, "").sub(%r[#{delimre}(</[^>]+>)$], "\\1")
|
|
177
193
|
end + [ret.last]
|
|
178
|
-
delim != delimrstrip and # "." in field followed by ". " in delim
|
|
179
|
-
ret = remove_double_period(ret, delimrstripre)
|
|
180
|
-
ret.join(delim).gsub(/#{delim}\|/, delimrstrip)
|
|
181
194
|
end
|
|
182
195
|
|
|
183
196
|
def remove_double_period(ret, delimrstripre)
|
data/lib/relaton-render.rb
CHANGED
|
@@ -2,7 +2,6 @@ require "relaton/render/version"
|
|
|
2
2
|
require "relaton/render/general/render"
|
|
3
3
|
require "relaton/render/fields/fields"
|
|
4
4
|
require "relaton/render/parse/parse"
|
|
5
|
-
require "relaton/render/utils/utils"
|
|
6
5
|
require "relaton/render/i18n/i18n"
|
|
7
6
|
require "isodoc/i18n"
|
|
8
7
|
require "base64" # Liquid
|
data/relaton-render.gemspec
CHANGED
|
@@ -25,18 +25,19 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
spec.add_development_dependency "debug"
|
|
26
26
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
|
27
27
|
spec.add_development_dependency "isodoc"
|
|
28
|
+
spec.add_development_dependency "openssl"
|
|
28
29
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
29
30
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
30
31
|
spec.add_development_dependency "simplecov"
|
|
31
|
-
spec.add_development_dependency "openssl"
|
|
32
32
|
|
|
33
|
+
spec.add_dependency "base64" # Liquid
|
|
34
|
+
spec.add_dependency "bigdecimal" # Liquid
|
|
33
35
|
spec.add_dependency "isodoc-i18n", "~> 1.4.0"
|
|
34
36
|
spec.add_dependency "liquid", "~> 5"
|
|
37
|
+
spec.add_dependency "metanorma-utils", "~> 2"
|
|
35
38
|
spec.add_dependency "nokogiri"
|
|
36
39
|
spec.add_dependency "relaton-bib", ">= 1.20.0"
|
|
37
40
|
spec.add_dependency "twitter_cldr"
|
|
38
41
|
spec.add_dependency "tzinfo-data" # we need this for windows only
|
|
39
|
-
spec.
|
|
40
|
-
spec.add_dependency "bigdecimal" # Liquid
|
|
41
|
-
#spec.metadata["rubygems_mfa_required"] = "true"
|
|
42
|
+
# spec.metadata["rubygems_mfa_required"] = "true"
|
|
42
43
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-render
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-02-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: openssl
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: rake
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,13 +123,13 @@ dependencies:
|
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
124
|
version: '0'
|
|
111
125
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
126
|
+
name: base64
|
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
|
114
128
|
requirements:
|
|
115
129
|
- - ">="
|
|
116
130
|
- !ruby/object:Gem::Version
|
|
117
131
|
version: '0'
|
|
118
|
-
type: :
|
|
132
|
+
type: :runtime
|
|
119
133
|
prerelease: false
|
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
135
|
requirements:
|
|
@@ -123,63 +137,63 @@ dependencies:
|
|
|
123
137
|
- !ruby/object:Gem::Version
|
|
124
138
|
version: '0'
|
|
125
139
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
140
|
+
name: bigdecimal
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
|
-
- - "
|
|
143
|
+
- - ">="
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
145
|
+
version: '0'
|
|
132
146
|
type: :runtime
|
|
133
147
|
prerelease: false
|
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
|
-
- - "
|
|
150
|
+
- - ">="
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
152
|
+
version: '0'
|
|
139
153
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
154
|
+
name: isodoc-i18n
|
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
|
142
156
|
requirements:
|
|
143
157
|
- - "~>"
|
|
144
158
|
- !ruby/object:Gem::Version
|
|
145
|
-
version:
|
|
159
|
+
version: 1.4.0
|
|
146
160
|
type: :runtime
|
|
147
161
|
prerelease: false
|
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
163
|
requirements:
|
|
150
164
|
- - "~>"
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
166
|
+
version: 1.4.0
|
|
153
167
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
168
|
+
name: liquid
|
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
|
156
170
|
requirements:
|
|
157
|
-
- - "
|
|
171
|
+
- - "~>"
|
|
158
172
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
173
|
+
version: '5'
|
|
160
174
|
type: :runtime
|
|
161
175
|
prerelease: false
|
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
177
|
requirements:
|
|
164
|
-
- - "
|
|
178
|
+
- - "~>"
|
|
165
179
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '
|
|
180
|
+
version: '5'
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
182
|
+
name: metanorma-utils
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
170
184
|
requirements:
|
|
171
|
-
- - "
|
|
185
|
+
- - "~>"
|
|
172
186
|
- !ruby/object:Gem::Version
|
|
173
|
-
version:
|
|
187
|
+
version: '2'
|
|
174
188
|
type: :runtime
|
|
175
189
|
prerelease: false
|
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
191
|
requirements:
|
|
178
|
-
- - "
|
|
192
|
+
- - "~>"
|
|
179
193
|
- !ruby/object:Gem::Version
|
|
180
|
-
version:
|
|
194
|
+
version: '2'
|
|
181
195
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
196
|
+
name: nokogiri
|
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
|
184
198
|
requirements:
|
|
185
199
|
- - ">="
|
|
@@ -193,21 +207,21 @@ dependencies:
|
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
208
|
version: '0'
|
|
195
209
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
210
|
+
name: relaton-bib
|
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
|
198
212
|
requirements:
|
|
199
213
|
- - ">="
|
|
200
214
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
215
|
+
version: 1.20.0
|
|
202
216
|
type: :runtime
|
|
203
217
|
prerelease: false
|
|
204
218
|
version_requirements: !ruby/object:Gem::Requirement
|
|
205
219
|
requirements:
|
|
206
220
|
- - ">="
|
|
207
221
|
- !ruby/object:Gem::Version
|
|
208
|
-
version:
|
|
222
|
+
version: 1.20.0
|
|
209
223
|
- !ruby/object:Gem::Dependency
|
|
210
|
-
name:
|
|
224
|
+
name: twitter_cldr
|
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
|
212
226
|
requirements:
|
|
213
227
|
- - ">="
|
|
@@ -221,7 +235,7 @@ dependencies:
|
|
|
221
235
|
- !ruby/object:Gem::Version
|
|
222
236
|
version: '0'
|
|
223
237
|
- !ruby/object:Gem::Dependency
|
|
224
|
-
name:
|
|
238
|
+
name: tzinfo-data
|
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
|
226
240
|
requirements:
|
|
227
241
|
- - ">="
|
|
@@ -279,7 +293,6 @@ files:
|
|
|
279
293
|
- lib/relaton/render/template/liquid.rb
|
|
280
294
|
- lib/relaton/render/template/subclasses.rb
|
|
281
295
|
- lib/relaton/render/template/template.rb
|
|
282
|
-
- lib/relaton/render/utils/utils.rb
|
|
283
296
|
- lib/relaton/render/version.rb
|
|
284
297
|
- relaton-render.gemspec
|
|
285
298
|
homepage: https://github.com/relaton/relaton-render
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
module Relaton
|
|
2
|
-
module Render
|
|
3
|
-
module Utils
|
|
4
|
-
def self.string_keys(hash)
|
|
5
|
-
case hash
|
|
6
|
-
when Hash
|
|
7
|
-
hash.each_with_object({}) do |(k, v), ret|
|
|
8
|
-
ret[k.to_s] = string_keys(v)
|
|
9
|
-
end
|
|
10
|
-
when Array then hash.map { |n| string_keys(n) }
|
|
11
|
-
else hash
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self.sym_keys(hash)
|
|
16
|
-
case hash
|
|
17
|
-
when Hash
|
|
18
|
-
hash.each_with_object({}) do |(k, v), ret|
|
|
19
|
-
ret[k.to_sym] = sym_keys(v)
|
|
20
|
-
end
|
|
21
|
-
when Array then hash.map { |n| sym_keys(n) }
|
|
22
|
-
else hash
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|