relaton-render 0.3.2 → 0.3.5
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 +2 -2
- data/lib/isodoc-yaml/i18n-ar.yaml +7 -2
- data/lib/isodoc-yaml/i18n-de.yaml +7 -1
- data/lib/isodoc-yaml/i18n-en.yaml +4 -2
- data/lib/isodoc-yaml/i18n-es.yaml +10 -2
- data/lib/isodoc-yaml/i18n-fr.yaml +12 -2
- data/lib/isodoc-yaml/i18n-ru.yaml +13 -2
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +4 -2
- data/lib/relaton/render/fields/fields.rb +15 -4
- data/lib/relaton/render/general/render.rb +2 -2
- data/lib/relaton/render/parse/parse.rb +1 -0
- data/lib/relaton/render/parse/parse_contributors.rb +30 -6
- data/lib/relaton/render/parse/parse_extract.rb +1 -15
- data/lib/relaton/render/template/template.rb +5 -3
- 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: ba6bd04a097e0a57a1b55548d1775f54297d707271da779330c679e1a1e3fc8f
|
|
4
|
+
data.tar.gz: 39115748cd3ffea7793a2d662c22c26a4219baa4969e42b048aec0bc7c8a157f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ce06415c2964c88e26eea1db635bca0928c381e40f18f395a8a227ea848d65d0c025decba2df2141ff411e542d244724146834744024bd24b2b8e9e7a4eb0a51
|
|
7
|
+
data.tar.gz: b0e94d253c820e8afb429ee8512de473c7a1a1f536ec6643efc7a7411bb46fba29ec104bcff7e764f4cd9cf2661023374521cf1fc5907b97ca9e564cf1e5bd52
|
data/README.adoc
CHANGED
|
@@ -35,8 +35,7 @@ The parameters are:
|
|
|
35
35
|
`journaltemplate`:: template for rendering journals in article citations
|
|
36
36
|
`extenttemplate`:: templates for rendering extents
|
|
37
37
|
`sizetemplate`:: templates for rendering sizes
|
|
38
|
-
`
|
|
39
|
-
`edition`:: override formatting of edition
|
|
38
|
+
`edition_ordinal`:: override formatting of edition with ordinal
|
|
40
39
|
`date`:: default date format (from Twitter CLDR)
|
|
41
40
|
|
|
42
41
|
== Configuration
|
|
@@ -133,6 +132,7 @@ The Liquid template surrounds each field by preceding and following punctuation.
|
|
|
133
132
|
* If fields are not space-delimited, this is indicated by inserting `|`. So `{{ title }}|{{ medium}}` is two fields, rendered with no space separation.
|
|
134
133
|
* If the field is empty, its surrounding markup is also removed. So if there is no medium, then `[{{medium}}]` is not rendered, and the brackets will be stripped.
|
|
135
134
|
* Underscore is treated as space, attaching to the preceding or following field. So `,_{{ edition }}_{{ labels['edition'] }}` is treated as the one field.
|
|
135
|
+
* Underscore is escaped by \. So `<span_class="std\_note">` maps to `<span class="std_note">`.
|
|
136
136
|
* If punctuation is space delimited, it is inserted regardless of preceding content. So `{{ creatornames }} ({{date}}) .` will insert the full stop whether or not the date is present.
|
|
137
137
|
* Space between punctuation and before punctuation is automatically removed.
|
|
138
138
|
|
|
@@ -8,8 +8,10 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: []
|
|
12
|
+
OrdinalRules: digits-ordinal
|
|
13
|
+
edition_ordinal: "الطبعة %Ordinal"
|
|
14
|
+
edition: الطبعة
|
|
13
15
|
draft: "مشروع %"
|
|
14
16
|
editor:
|
|
15
17
|
sg: محرر
|
|
@@ -28,4 +30,7 @@ size:
|
|
|
28
30
|
volume:
|
|
29
31
|
sg: "المجلد %"
|
|
30
32
|
pl: "المجلدين %"
|
|
33
|
+
inflection:
|
|
34
|
+
الطبعة:
|
|
35
|
+
gender: f
|
|
31
36
|
|
|
@@ -9,7 +9,9 @@ date:
|
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
11
|
draft: "Entwurf %"
|
|
12
|
-
|
|
12
|
+
edition_ordinal: "% Aufl."
|
|
13
|
+
ordinal_keys: []
|
|
14
|
+
edition: Auflage
|
|
13
15
|
editor:
|
|
14
16
|
sg: Hrsg.
|
|
15
17
|
pl: Hrsg.
|
|
@@ -27,3 +29,7 @@ size:
|
|
|
27
29
|
volume:
|
|
28
30
|
sg: "% Bd."
|
|
29
31
|
pl: "% Bde."
|
|
32
|
+
inflection:
|
|
33
|
+
Auflage:
|
|
34
|
+
gender: f
|
|
35
|
+
|
|
@@ -8,8 +8,10 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: []
|
|
12
|
+
OrdinalRules: digits-ordinal
|
|
13
|
+
edition: edition
|
|
14
|
+
edition_ordinal: "%Ordinal edition"
|
|
13
15
|
draft: "draft %"
|
|
14
16
|
editor:
|
|
15
17
|
sg: ed.
|
|
@@ -8,8 +8,12 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: [gender]
|
|
12
|
+
OrdinalRules:
|
|
13
|
+
m: digits-ordinal-masculine
|
|
14
|
+
f: digits-ordinal-feminine
|
|
15
|
+
edition_ordinal: "%Ordinal ed."
|
|
16
|
+
edition: edición
|
|
13
17
|
draft: "borrador %"
|
|
14
18
|
editor:
|
|
15
19
|
sg: ed.
|
|
@@ -28,3 +32,7 @@ size:
|
|
|
28
32
|
volume:
|
|
29
33
|
sg: "% vol."
|
|
30
34
|
pl: "% vols."
|
|
35
|
+
inflection:
|
|
36
|
+
edición:
|
|
37
|
+
gender: f
|
|
38
|
+
|
|
@@ -8,8 +8,14 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: [gender,number]
|
|
12
|
+
OrdinalRules:
|
|
13
|
+
m.sg: digits-ordinal-masculine
|
|
14
|
+
f.sg: digits-ordinal-feminine
|
|
15
|
+
m.pl: digits-ordinal-masculine-plural
|
|
16
|
+
f.pl: digits-ordinal-feminine-plural
|
|
17
|
+
edition_ordinal: "%Ordinal édition"
|
|
18
|
+
edition: édition
|
|
13
19
|
draft: "brouillon %"
|
|
14
20
|
editor:
|
|
15
21
|
sg: éd.
|
|
@@ -28,3 +34,7 @@ size:
|
|
|
28
34
|
volume:
|
|
29
35
|
sg: "% vol."
|
|
30
36
|
pl: "% vol."
|
|
37
|
+
inflection:
|
|
38
|
+
édition:
|
|
39
|
+
gender: f
|
|
40
|
+
|
|
@@ -8,8 +8,16 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: [gender,number]
|
|
12
|
+
SpelloutRules:
|
|
13
|
+
m.sg: spellout-ordinal-masculine
|
|
14
|
+
f.sg: spellout-ordinal-feminine
|
|
15
|
+
n.sg: spellout-ordinal-neuter
|
|
16
|
+
m.pl: spellout-ordinal-plural
|
|
17
|
+
f.pl: spellout-ordinal-plural
|
|
18
|
+
n.pl: spellout-ordinal-plural
|
|
19
|
+
edition_ordinal: "%Spellout издание"
|
|
20
|
+
edition: издание
|
|
13
21
|
draft: "проект %"
|
|
14
22
|
editor:
|
|
15
23
|
sg: изд.
|
|
@@ -28,4 +36,7 @@ size:
|
|
|
28
36
|
volume:
|
|
29
37
|
sg: "% т."
|
|
30
38
|
pl: "% тт."
|
|
39
|
+
inflection:
|
|
40
|
+
издание:
|
|
41
|
+
gender: n
|
|
31
42
|
|
|
@@ -8,8 +8,10 @@ date:
|
|
|
8
8
|
month_year: yMMMM
|
|
9
9
|
day_month_year: to_long_s
|
|
10
10
|
date_time: to_long_s
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ordinal_keys: []
|
|
12
|
+
OrdinalRules: digits-ordinal
|
|
13
|
+
edition_ordinal: "第%Ordinal版"
|
|
14
|
+
edition: 版
|
|
13
15
|
draft: "草案%"
|
|
14
16
|
editor:
|
|
15
17
|
sg: 编辑
|
|
@@ -24,6 +24,7 @@ module Relaton
|
|
|
24
24
|
.each do |k|
|
|
25
25
|
hash[k[0]] = nameformat(hash[k[1]])
|
|
26
26
|
end
|
|
27
|
+
hash[:publisher_abbrev] = hash[:publisher_abbrev_raw]&.join(", ")
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def role_fields_format(hash)
|
|
@@ -97,10 +98,20 @@ module Relaton
|
|
|
97
98
|
def editionformat(edn)
|
|
98
99
|
return edn unless /^\d+$/.match?(edn)
|
|
99
100
|
|
|
100
|
-
num = edn
|
|
101
|
-
@r.
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
num = edition_translate1(edn.to_i)
|
|
102
|
+
@r.edition_ordinal.sub(/%(Spellout|Ordinal)?/, num)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def edition_translate1(num)
|
|
106
|
+
ruleset = case @r.i18n.edition_ordinal
|
|
107
|
+
when /%Spellout/ then "SpelloutRules"
|
|
108
|
+
when /%Ordinal/ then "OrdinalRules"
|
|
109
|
+
else "Digit"
|
|
110
|
+
end
|
|
111
|
+
ruleset == "Digit" and return num.to_s
|
|
112
|
+
ed = HTMLEntities.new.decode(@r.i18n.edition)
|
|
113
|
+
@r.i18n.inflect_ordinal(num, @r.i18n.inflection&.dig(ed) || {},
|
|
114
|
+
ruleset)
|
|
104
115
|
end
|
|
105
116
|
|
|
106
117
|
def draftformat(num, _hash)
|
|
@@ -10,7 +10,7 @@ module Relaton
|
|
|
10
10
|
class General
|
|
11
11
|
attr_reader :template, :journaltemplate, :seriestemplate, :nametemplate,
|
|
12
12
|
:extenttemplate, :sizetemplate, :lang, :script, :i18n,
|
|
13
|
-
:edition, :
|
|
13
|
+
:edition, :edition_ordinal, :date
|
|
14
14
|
|
|
15
15
|
def initialize(opt = {})
|
|
16
16
|
options = read_config.merge(Utils::string_keys(opt))
|
|
@@ -53,7 +53,7 @@ module Relaton
|
|
|
53
53
|
@lang = opt["language"]
|
|
54
54
|
@script = opt["script"]
|
|
55
55
|
@i18n = i18n_klass(opt["language"], opt["script"])
|
|
56
|
-
@
|
|
56
|
+
@edition_ordinal = opt["edition_ordinal"] || @i18n.edition_ordinal
|
|
57
57
|
@edition = opt["edition"] || @i18n.edition
|
|
58
58
|
@date = opt["date"] || @i18n.date
|
|
59
59
|
end
|
|
@@ -29,6 +29,7 @@ module Relaton
|
|
|
29
29
|
def simple_or_host_xml2hash(doc, host)
|
|
30
30
|
{ edition_raw: edition(doc, host), medium_raw: medium(doc, host),
|
|
31
31
|
place_raw: place(doc, host), publisher_raw: publisher(doc, host),
|
|
32
|
+
publisher_abbrev_raw: publisher_abbrev(doc, host),
|
|
32
33
|
distributor_raw: distributor(doc, host), draft_raw: draft(doc, host),
|
|
33
34
|
access_location: access_location(doc, host),
|
|
34
35
|
date: date(doc, host), date_updated: date_updated(doc, host),
|
|
@@ -48,17 +48,20 @@ module Relaton
|
|
|
48
48
|
[cr.map { |x| extractname(x) }, contributor_role(cr)]
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def creatornames_roles_allowed
|
|
52
|
+
%w(author performer adapter translator editor publisher distributor)
|
|
53
|
+
end
|
|
54
|
+
|
|
51
55
|
def creatornames1(doc)
|
|
52
56
|
cr = []
|
|
53
57
|
return [] if doc.nil?
|
|
54
58
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
next if add.nil?
|
|
59
|
+
creatornames_roles_allowed.each do |r|
|
|
60
|
+
add = pick_contributor(doc, r)
|
|
61
|
+
next if add.nil?
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
cr = add and break
|
|
64
|
+
end
|
|
62
65
|
cr.nil? and cr = doc.contributor
|
|
63
66
|
cr
|
|
64
67
|
end
|
|
@@ -100,6 +103,27 @@ module Relaton
|
|
|
100
103
|
host and ret ||= host.date.detect { |x| x.type == "accessed" }
|
|
101
104
|
datepick(ret)
|
|
102
105
|
end
|
|
106
|
+
|
|
107
|
+
def publisher(doc, host)
|
|
108
|
+
x = pick_contributor(doc, "publisher")
|
|
109
|
+
host and x ||= pick_contributor(host, "publisher")
|
|
110
|
+
x.nil? and return nil
|
|
111
|
+
x.map { |c| extractname(c) }
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def publisher_abbrev(doc, host)
|
|
115
|
+
x = pick_contributor(doc, "publisher")
|
|
116
|
+
host and x ||= pick_contributor(host, "publisher")
|
|
117
|
+
x.nil? and return nil
|
|
118
|
+
x.map { |c| c.entity.abbreviation&.content }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def distributor(doc, host)
|
|
122
|
+
x = pick_contributor(doc, "distributor")
|
|
123
|
+
host and x ||= pick_contributor(host, "distributor")
|
|
124
|
+
x.nil? and return nil
|
|
125
|
+
x.map { |c| extractname(c) }
|
|
126
|
+
end
|
|
103
127
|
end
|
|
104
128
|
end
|
|
105
129
|
end
|
|
@@ -43,20 +43,6 @@ module Relaton
|
|
|
43
43
|
x.map(&:name)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
def publisher(doc, host)
|
|
47
|
-
x = pick_contributor(doc, "publisher")
|
|
48
|
-
host and x ||= pick_contributor(host, "publisher")
|
|
49
|
-
x.nil? and return nil
|
|
50
|
-
x.map { |c| extractname(c) }
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def distributor(doc, host)
|
|
54
|
-
x = pick_contributor(doc, "distributor")
|
|
55
|
-
host and x ||= pick_contributor(host, "distributor")
|
|
56
|
-
x.nil? and return nil
|
|
57
|
-
x.map { |c| extractname(c) }
|
|
58
|
-
end
|
|
59
|
-
|
|
60
46
|
def series(doc)
|
|
61
47
|
doc.series.detect { |s| s.type == "main" } ||
|
|
62
48
|
doc.series.detect { |s| s.type.nil? } ||
|
|
@@ -103,7 +89,7 @@ module Relaton
|
|
|
103
89
|
|
|
104
90
|
def uri(doc)
|
|
105
91
|
uri = nil
|
|
106
|
-
%
|
|
92
|
+
%w(doi uri src).each do |t|
|
|
107
93
|
uri = doc.link.detect { |u| u.type == t } and break
|
|
108
94
|
end
|
|
109
95
|
uri ||= doc.link.first
|
|
@@ -79,7 +79,9 @@ module Relaton
|
|
|
79
79
|
.gsub(/(:\s+)(&\s)/, "\\2")
|
|
80
80
|
.gsub(/\s+([,.:;)])/, "\\1")
|
|
81
81
|
.sub(/^\s*[,.:;]\s*/, "")
|
|
82
|
-
.
|
|
82
|
+
.sub(/[,:;]\s*$/, "")
|
|
83
|
+
.gsub(/(?<!\\)_/, " ")
|
|
84
|
+
.gsub(/\\_/, "_")
|
|
83
85
|
.gsub(/#{NON_SPACING_DELIM}/o, "").gsub(/\s+/, " ")
|
|
84
86
|
end
|
|
85
87
|
|
|
@@ -133,9 +135,9 @@ module Relaton
|
|
|
133
135
|
end
|
|
134
136
|
|
|
135
137
|
def template_select_etal(names)
|
|
136
|
-
if @etal_count && names.size >= @etal_count
|
|
138
|
+
if @etal_count && names[:surname].size >= @etal_count
|
|
137
139
|
@template[:etal]
|
|
138
|
-
else expand_nametemplate(@template_raw[:more], names.size)
|
|
140
|
+
else expand_nametemplate(@template_raw[:more], names[:surname].size)
|
|
139
141
|
end
|
|
140
142
|
end
|
|
141
143
|
|
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.3.
|
|
4
|
+
version: 0.3.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-05-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|