relaton-render 0.5.8 → 0.5.10
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/README.adoc +4 -3
- data/lib/relaton/render/fields/fields.rb +28 -44
- data/lib/relaton/render/parse/parse.rb +3 -2
- data/lib/relaton/render/parse/parse_contributors.rb +14 -2
- data/lib/relaton/render/parse/parse_extract.rb +11 -16
- data/lib/relaton/render/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: be542bce28bee8b30b8a719d8e6e822fb998c7d042c2c7b546309733c3ca1d66
|
4
|
+
data.tar.gz: 5be41eba5e9771af4d39bcf7e2df8d4344db4ad9275d2fbf97fcb9c3f7eef362
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54acff0f3354e44e6af2fe54fc20dd1f1f814b4d632604e820b6ab72a04275dc0b46dcd7981dd7a12f17ddea05506ed73b7c6401b31fe35097b90d5352ea3b5b
|
7
|
+
data.tar.gz: 4a584b500e0e6438fdc69340386c641e6f79780ca8cbe0d01811fddcb0d5baafa99e5679a447efad08e5e6e15d4de2ba5dd56fc7e4832ee914ec6412009d1dd9
|
data/README.adoc
CHANGED
@@ -155,16 +155,17 @@ drawn from the bibliographic item:
|
|
155
155
|
| place | ./place | | Y |
|
156
156
|
| publisher | ./contributor[role/@type = 'publisher']/organization/name | | Y |
|
157
157
|
| distributor | ./contributor[role/@type = 'distributor']/organization/name | | Y |
|
158
|
+
| authorizer | ./contributor[role/@type = 'authorizer']/organization/name \| ./contributor[role/@type = 'publisher']/organization/name | | Y |
|
158
159
|
| authoritative_identifier | ./docidentifier[not(@type = 'metanorma' or @type = 'ordinal' or @type = 'ISBN' or @type = 'ISSN' or @type = 'DOI')] | Y | |
|
159
160
|
| other_identifier | ./docidentifier[@type = 'ISBN' or @type = 'ISSN' or @type = 'DOI'] | Y | | By default, each such identifier is prefixed with its type and colon
|
160
161
|
| status | ./status | | | Rendering varies by flavour
|
161
162
|
| uri | ./uri[@type = 'citation' or @type = 'uri' or @type = 'src' or true] | | | If multiples, prioritise language match. Always exclude DOI: that is not where the resource is available from
|
162
163
|
| access_location | ./accessLocation | | Y |
|
163
164
|
| extent | ./extent | Y | | Render with standard abbreviations for pp, vols, with n-dash, with delimiting of multiple locations
|
164
|
-
| creatornames | ./contributor[role/@type = 'author'] \| ./contributor[role/@type = 'performer'] \| ./contributor[role/@type = 'adapter'] \| ./contributor[role/@type = 'translator'] \| ./contributor[role/@type = 'editor'] \| ./contributor[role/@type = 'distributor'] \| ./contributor | Y | | <<nametemplate,`nametemplate`>> applied to each name; joining template from internationalisation applied to multiple names
|
165
|
-
| authorcite | ./contributor[role/@type = 'author'] \| ./contributor[role/@type = 'performer'] \| ./contributor[role/@type = 'adapter'] \| ./contributor[role/@type = 'translator'] \| ./contributor[role/@type = 'editor'] \| ./contributor[role/@type = 'distributor'] \| ./contributor | Y | | <<authorcitetemplate,`authorcitetemplate`>> applied to each name; joining template from internationalisation applied to multiple names
|
165
|
+
| creatornames | ./contributor[role/@type = 'author'] \| ./contributor[role/@type = 'performer'] \| ./contributor[role/@type = 'adapter'] \| ./contributor[role/@type = 'translator'] \| ./contributor[role/@type = 'editor'] \| ./contributor[role/@type = 'distributor'] \| ./contributor[role/@type = 'authorizer'] \| ./contributor | Y | | <<nametemplate,`nametemplate`>> applied to each name; joining template from internationalisation applied to multiple names
|
166
|
+
| authorcite | ./contributor[role/@type = 'author'] \| ./contributor[role/@type = 'performer'] \| ./contributor[role/@type = 'adapter'] \| ./contributor[role/@type = 'translator'] \| ./contributor[role/@type = 'editor'] \| ./contributor[role/@type = 'distributor'] \| ./contributor[role/@type = 'authorizer'] \| ./contributor | Y | | <<authorcitetemplate,`authorcitetemplate`>> applied to each name; joining template from internationalisation applied to multiple names
|
166
167
|
| role | ./contributor[role/description] \| ./contributor[role/@type] | | |
|
167
|
-
| date | ./date[@type = 'issued'] \| ./date[@type = 'circulated'] \| ./date | | Y |
|
168
|
+
| date | ./date[@type = 'issued'] \| ./date[@type = 'circulated'] \| ./date | | Y | Always truncated to just year
|
168
169
|
| date_updated | ./date[@type = 'updated'] | | Y |
|
169
170
|
| date_accessed | ./date[@type = 'accessed'] | | Y |
|
170
171
|
| series | ./series[@type = 'main' or not(@type) or true] | | Y | <<seriestemplate,`seriestemplate`>> applies to series
|
@@ -17,7 +17,8 @@ module Relaton
|
|
17
17
|
|
18
18
|
def name_fields_format(hash)
|
19
19
|
[%i(creatornames creators), %i(host_creatornames host_creators),
|
20
|
-
%i(publisher publisher_raw), %i(distributor distributor_raw)
|
20
|
+
%i(publisher publisher_raw), %i(distributor distributor_raw),
|
21
|
+
%i(authorizer authorizer_raw)]
|
21
22
|
.each do |k|
|
22
23
|
hash[k[0]] = nameformat(hash[k[1]])
|
23
24
|
end
|
@@ -62,8 +63,7 @@ module Relaton
|
|
62
63
|
|
63
64
|
# TODO is not being i18n-alised
|
64
65
|
def mediumformat(hash)
|
65
|
-
|
66
|
-
|
66
|
+
hash.nil? and return nil
|
67
67
|
%w(content genre form carrier size scale).each_with_object([]) do |i, m|
|
68
68
|
m << hash[i] if hash[i]
|
69
69
|
m
|
@@ -81,8 +81,7 @@ module Relaton
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def nameformat(names)
|
84
|
-
|
85
|
-
|
84
|
+
names.nil? and return names
|
86
85
|
parts = %i(surname initials given middle nonpersonal)
|
87
86
|
names_out = names.each_with_object({}) do |n, m|
|
88
87
|
parts.each do |i|
|
@@ -94,8 +93,7 @@ module Relaton
|
|
94
93
|
end
|
95
94
|
|
96
95
|
def authorciteformat(names)
|
97
|
-
|
98
|
-
|
96
|
+
names.nil? || @r.authorcitetemplate.nil? and return names
|
99
97
|
parts = %i(surname initials given middle nonpersonal)
|
100
98
|
names_out = names.each_with_object({}) do |n, m|
|
101
99
|
parts.each do |i|
|
@@ -107,9 +105,9 @@ module Relaton
|
|
107
105
|
end
|
108
106
|
|
109
107
|
def role_inflect(contribs, role)
|
110
|
-
|
111
|
-
%w(author publisher
|
112
|
-
|
108
|
+
role.nil? || contribs.size.zero? ||
|
109
|
+
%w(author publisher distributor
|
110
|
+
authorizer).include?(role) and return nil
|
113
111
|
number = contribs.size > 1 ? "pl" : "sg"
|
114
112
|
@r.i18n.get[role][number] || role
|
115
113
|
end
|
@@ -134,9 +132,9 @@ module Relaton
|
|
134
132
|
end
|
135
133
|
|
136
134
|
def draftformat(num, _hash)
|
137
|
-
|
138
|
-
|
139
|
-
|
135
|
+
num.nil? ||
|
136
|
+
(num.is_a?(Hash) && num[:status].nil? &&
|
137
|
+
num[:iteration].nil?) and return nil
|
140
138
|
@r.i18n.draft.sub(/%/, num)
|
141
139
|
end
|
142
140
|
|
@@ -159,12 +157,12 @@ module Relaton
|
|
159
157
|
end
|
160
158
|
|
161
159
|
def range(hash)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
160
|
+
hash[:on] and return hash[:on]
|
161
|
+
hash.has_key?(:from) && hash[:from].nil? and return nil
|
162
|
+
!hash[:from] and return hash
|
163
|
+
hash[:to] && hash[:to] != hash[:from] and
|
164
|
+
return "#{hash[:from]}–#{hash[:to]}"
|
165
|
+
hash[:from]
|
168
166
|
end
|
169
167
|
|
170
168
|
def sizeformat(size, hash)
|
@@ -180,23 +178,16 @@ module Relaton
|
|
180
178
|
|
181
179
|
def sizeformat1(key, val, hash)
|
182
180
|
case key
|
183
|
-
when "volume"
|
184
|
-
hash[
|
185
|
-
hash[
|
186
|
-
when "issue"
|
187
|
-
hash[:issue_raw] = val
|
188
|
-
hash[:issue] = pagevolformat(val, nil, "issue", true)
|
189
|
-
when "page"
|
190
|
-
hash[:page_raw] = val
|
191
|
-
hash[:page] = pagevolformat(val, nil, "page", true)
|
181
|
+
when "volume", "issue", "page"
|
182
|
+
hash["#{key}_raw".to_sym] = val
|
183
|
+
hash[key.to_sym] = pagevolformat(val, nil, key, true)
|
192
184
|
when "data" then hash[:data] = val
|
193
185
|
when "duration" then hash[:duration] = val
|
194
186
|
end
|
195
187
|
end
|
196
188
|
|
197
189
|
def pagevolformat(value, value_raw, type, is_size)
|
198
|
-
|
199
|
-
|
190
|
+
value.nil? and return nil
|
200
191
|
num = "pl"
|
201
192
|
if is_size
|
202
193
|
value == "1" and num = "sg"
|
@@ -208,15 +199,12 @@ module Relaton
|
|
208
199
|
end
|
209
200
|
|
210
201
|
def date_range(hash)
|
211
|
-
|
212
|
-
|
213
|
-
else range(hash)
|
214
|
-
end
|
202
|
+
hash[:from] && !hash[:to] and return "#{hash[:from]}–"
|
203
|
+
range(hash)
|
215
204
|
end
|
216
205
|
|
217
206
|
def dateformat(date, _hash)
|
218
|
-
|
219
|
-
|
207
|
+
date.nil? and return nil
|
220
208
|
%i(from to on).each do |k|
|
221
209
|
date[k] = ::Relaton::Render::Date.new(date[k], renderer: @r).render
|
222
210
|
end
|
@@ -224,20 +212,16 @@ module Relaton
|
|
224
212
|
end
|
225
213
|
|
226
214
|
def uriformat(uri)
|
227
|
-
|
228
|
-
|
215
|
+
uri.nil? || uri.empty? and return nil
|
229
216
|
"<link target='#{uri}'>#{uri}</link>"
|
230
217
|
end
|
231
218
|
|
232
219
|
private
|
233
220
|
|
234
221
|
def tw_cldr_lang
|
235
|
-
if @r.lang != "zh"
|
236
|
-
|
237
|
-
|
238
|
-
:"zh-tw"
|
239
|
-
else
|
240
|
-
:"zh-cn"
|
222
|
+
if @r.lang != "zh" then @r.lang.to_sym
|
223
|
+
elsif @r.script == "Hant" then :"zh-tw"
|
224
|
+
else :"zh-cn"
|
241
225
|
end
|
242
226
|
end
|
243
227
|
end
|
@@ -30,10 +30,11 @@ module Relaton
|
|
30
30
|
|
31
31
|
def simple_or_host_xml2hash(doc, host)
|
32
32
|
{ edition_raw: edition(doc, host), edition_num: edition_num(doc, host),
|
33
|
-
medium_raw: medium(doc, host),
|
33
|
+
medium_raw: medium(doc, host), draft_raw: draft(doc, host),
|
34
34
|
place_raw: place(doc, host), publisher_raw: publisher(doc, host),
|
35
35
|
publisher_abbrev_raw: publisher_abbrev(doc, host),
|
36
|
-
|
36
|
+
authorizer_raw: authorizer(doc, host),
|
37
|
+
distributor_raw: distributor(doc, host),
|
37
38
|
access_location: access_location(doc, host),
|
38
39
|
date: date(doc, host), date_updated: date_updated(doc, host),
|
39
40
|
date_accessed: date_accessed(doc, host) }
|
@@ -75,7 +75,7 @@ module Relaton
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def creatornames_roles_allowed
|
78
|
-
%w(author performer adapter translator editor distributor)
|
78
|
+
%w(author performer adapter translator editor distributor authorizer)
|
79
79
|
end
|
80
80
|
|
81
81
|
def creatornames1(doc)
|
@@ -112,10 +112,13 @@ module Relaton
|
|
112
112
|
date.first
|
113
113
|
end
|
114
114
|
|
115
|
+
# year-only
|
115
116
|
def date(doc, host)
|
116
117
|
ret = date1(doc.date)
|
117
118
|
host and ret ||= date1(host.date)
|
118
|
-
datepick(ret)
|
119
|
+
datepick(ret)&.transform_values do |v|
|
120
|
+
v&.sub(/-.*$/, "")
|
121
|
+
end
|
119
122
|
end
|
120
123
|
|
121
124
|
def date_updated(doc, host)
|
@@ -153,6 +156,15 @@ module Relaton
|
|
153
156
|
x.nil? and return nil
|
154
157
|
x.map { |c| extractname(c) }
|
155
158
|
end
|
159
|
+
|
160
|
+
def authorizer(doc, host)
|
161
|
+
x = pick_contributor(doc, "authorizer") ||
|
162
|
+
pick_contributor(doc, "publisher")
|
163
|
+
host and x ||= pick_contributor(host, "authorizer") ||
|
164
|
+
pick_contributor(host, "publisher")
|
165
|
+
x.nil? and return nil
|
166
|
+
x.map { |c| extractname(c) }
|
167
|
+
end
|
156
168
|
end
|
157
169
|
end
|
158
170
|
end
|
@@ -7,8 +7,7 @@ module Relaton
|
|
7
7
|
|
8
8
|
# TODO : first is naive choice
|
9
9
|
def title(doc)
|
10
|
-
|
11
|
-
|
10
|
+
doc.nil? || doc.title.empty? and return nil
|
12
11
|
t = doc.title.select { |x| x.title.language&.include? @lang }
|
13
12
|
t.empty? and t = doc.title
|
14
13
|
t1 = t.select { |x| x.type == "main" }
|
@@ -62,8 +61,7 @@ module Relaton
|
|
62
61
|
end
|
63
62
|
|
64
63
|
def series_title(series, _doc)
|
65
|
-
|
66
|
-
|
64
|
+
series.nil? and return nil
|
67
65
|
series.title.respond_to?(:titles) && !series.title.titles.empty? and
|
68
66
|
return content(series.title.titles.first.title)
|
69
67
|
series.title.respond_to?(:title) and
|
@@ -104,8 +102,9 @@ module Relaton
|
|
104
102
|
|
105
103
|
def other_identifier(doc)
|
106
104
|
doc.docidentifier.each_with_object([]) do |id, ret|
|
107
|
-
|
108
|
-
|
105
|
+
type = id.type&.sub(/^(ISBN|ISSN)\..*$/, "\\1")
|
106
|
+
other_identifier_include.include? type or next
|
107
|
+
ret << @i18n.l10n("#{type}: #{id.id}")
|
109
108
|
end
|
110
109
|
end
|
111
110
|
|
@@ -122,8 +121,7 @@ module Relaton
|
|
122
121
|
u.language == @lang && !u.type&.casecmp("doi")&.zero?
|
123
122
|
end
|
124
123
|
uri ||= doc.link.detect { |u| !u.type&.casecmp("doi")&.zero? }
|
125
|
-
return nil
|
126
|
-
|
124
|
+
uri or return nil
|
127
125
|
uri.content.to_s.strip
|
128
126
|
end
|
129
127
|
|
@@ -172,9 +170,8 @@ module Relaton
|
|
172
170
|
end
|
173
171
|
|
174
172
|
def draft(doc, host)
|
175
|
-
|
176
|
-
|
177
|
-
{ iteration: iter_ordinal(doc) || iter_ordinal(host), status: dr }
|
173
|
+
{ iteration: iter_ordinal(doc) || iter_ordinal(host),
|
174
|
+
status: status(doc) || status(host) }
|
178
175
|
end
|
179
176
|
|
180
177
|
def iter_ordinal(doc)
|
@@ -184,7 +181,7 @@ module Relaton
|
|
184
181
|
end
|
185
182
|
|
186
183
|
def status(doc)
|
187
|
-
doc
|
184
|
+
doc&.status&.stage&.value
|
188
185
|
end
|
189
186
|
|
190
187
|
private
|
@@ -202,10 +199,8 @@ module Relaton
|
|
202
199
|
|
203
200
|
def localized_string_or_text(str)
|
204
201
|
case str
|
205
|
-
when RelatonBib::LocalizedString
|
206
|
-
|
207
|
-
when String
|
208
|
-
str
|
202
|
+
when RelatonBib::LocalizedString then content(str)
|
203
|
+
when String then str
|
209
204
|
end
|
210
205
|
end
|
211
206
|
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: 0.5.
|
4
|
+
version: 0.5.10
|
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: 2023-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|