csl 2.0.0 → 2.2.0
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/.github/workflows/ci.yml +11 -4
- data/BSDL +1 -1
- data/Gemfile +3 -1
- data/README.md +1 -1
- data/csl.gemspec +8 -3
- data/lib/csl/locale.rb +45 -21
- data/lib/csl/schema.rb +1 -1
- data/lib/csl/version.rb +1 -1
- metadata +79 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f7f13898b2b1d72d754e5d7a5049b7a65d91f36df7fe68c6db8b369fa2dd21f7
|
|
4
|
+
data.tar.gz: ee44d0add3174bff091b2575c1c55dd5fcf25a72e63af5823209dc3504beee85
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c611c353c05cc66d5cc390d2c09054be36a130648afc9a551ae7dd0e5dc5e497ae598d57a0d97de1ee7c9e8f8f78a6cb4412c2840c9213d2f1bc577d07682148
|
|
7
|
+
data.tar.gz: ea13a2582afd20235caced2ffeb20f3a5ab11d7e6309a3d134a000c78578f4f2c73b0082ac7552690d8da337fbfb903fd7ec44e035180d2c415a4387d99d8287
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -14,13 +14,20 @@ jobs:
|
|
|
14
14
|
strategy:
|
|
15
15
|
matrix:
|
|
16
16
|
ruby-version:
|
|
17
|
-
- 3.
|
|
18
|
-
-
|
|
19
|
-
- 2
|
|
17
|
+
- 3.4
|
|
18
|
+
- 3.3
|
|
19
|
+
- 3.2
|
|
20
|
+
- 3.1
|
|
20
21
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v4
|
|
22
23
|
- uses: ruby/setup-ruby@v1
|
|
23
24
|
with:
|
|
24
25
|
ruby-version: ${{ matrix.ruby-version }}
|
|
25
26
|
bundler-cache: true
|
|
26
27
|
- run: bundle exec rake
|
|
28
|
+
- name: Upload coverage results
|
|
29
|
+
if: matrix.ruby-version == '3.3'
|
|
30
|
+
continue-on-error: true
|
|
31
|
+
uses: coverallsapp/github-action@v2
|
|
32
|
+
with:
|
|
33
|
+
github-token: ${{ github.token }}
|
data/BSDL
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
CSL-Ruby. A Ruby CSL parser and library.
|
|
2
2
|
|
|
3
3
|
Copyright 2012 President and Fellows of Harvard College.
|
|
4
|
-
Copyright 2009-
|
|
4
|
+
Copyright 2009-2025 Sylvester Keil. All rights reserved.
|
|
5
5
|
|
|
6
6
|
Redistribution and use in source and binary forms, with or without
|
|
7
7
|
modification, are permitted provided that the following conditions are met:
|
data/Gemfile
CHANGED
|
@@ -4,11 +4,12 @@ gemspec
|
|
|
4
4
|
group :development, :test do
|
|
5
5
|
gem 'rake'
|
|
6
6
|
gem 'rspec'
|
|
7
|
+
gem 'stringio'
|
|
7
8
|
gem 'cucumber'
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
group :debug do
|
|
11
|
-
gem '
|
|
12
|
+
gem 'debug', '>= 1.0.0', require: false, platforms: :mri
|
|
12
13
|
gem 'ruby-debug', require: false, platforms: :jruby
|
|
13
14
|
end
|
|
14
15
|
|
|
@@ -25,6 +26,7 @@ end
|
|
|
25
26
|
|
|
26
27
|
group :coverage do
|
|
27
28
|
gem 'simplecov', require: false
|
|
29
|
+
gem 'simplecov-lcov', require: false
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
# vim: syntax=ruby
|
data/README.md
CHANGED
|
@@ -135,7 +135,7 @@ this project as part of [Google Summer of Code](https://developers.google.com/op
|
|
|
135
135
|
|
|
136
136
|
Copyright
|
|
137
137
|
---------
|
|
138
|
-
Copyright 2009-
|
|
138
|
+
Copyright 2009-2025 Sylvester Keil. All rights reserved.
|
|
139
139
|
|
|
140
140
|
Copyright 2012 President and Fellows of Harvard College.
|
|
141
141
|
|
data/csl.gemspec
CHANGED
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
s.authors = ['Sylvester Keil']
|
|
20
20
|
s.email = ['http://sylvester.keil.or.at']
|
|
21
21
|
s.homepage = 'https://github.com/inukshuk/csl-ruby'
|
|
22
|
-
s.licenses = ['
|
|
22
|
+
s.licenses = ['BSD-2-Clause']
|
|
23
23
|
s.date = Time.now.strftime('%Y-%m-%d')
|
|
24
24
|
s.summary = 'A Ruby CSL parser and library'
|
|
25
25
|
s.description = <<~EOS
|
|
@@ -30,8 +30,13 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
s.required_ruby_version = '>= 2.2'
|
|
33
|
-
s.
|
|
34
|
-
s.
|
|
33
|
+
s.add_dependency('namae', ['~> 1.2'])
|
|
34
|
+
s.add_dependency('rexml', '~> 3.0')
|
|
35
|
+
s.add_dependency('forwardable', '~> 1.3')
|
|
36
|
+
s.add_dependency('open-uri', '< 1.0')
|
|
37
|
+
s.add_dependency('singleton', '< 1.0')
|
|
38
|
+
s.add_dependency('set', '~> 1.1')
|
|
39
|
+
s.add_dependency('time', '< 1.0')
|
|
35
40
|
|
|
36
41
|
s.files = `git ls-files`.split("\n") - EXCLUDES
|
|
37
42
|
s.require_path = 'lib'
|
data/lib/csl/locale.rb
CHANGED
|
@@ -15,7 +15,7 @@ module CSL
|
|
|
15
15
|
@extension = '.xml'.freeze
|
|
16
16
|
@prefix = 'locales-'.freeze
|
|
17
17
|
|
|
18
|
-
@tag_pattern = /^[a-z]{2}(-[
|
|
18
|
+
@tag_pattern = /^[a-z]{2}(-[a-z]{4})?(-[a-z]{2})?|-[a-z]{2}$/i
|
|
19
19
|
|
|
20
20
|
# Default languages/regions.
|
|
21
21
|
# Auto-detection is based on these lists.
|
|
@@ -29,12 +29,16 @@ module CSL
|
|
|
29
29
|
AT de BR pt CA en CH de GB en TW zh
|
|
30
30
|
}.map(&:to_sym)]).freeze
|
|
31
31
|
|
|
32
|
+
@scripts = Hash[*%w{
|
|
33
|
+
sr Latn
|
|
34
|
+
}.map(&:to_sym)].freeze
|
|
35
|
+
|
|
32
36
|
|
|
33
37
|
class << self
|
|
34
38
|
include Loader
|
|
35
39
|
|
|
36
40
|
attr_accessor :default
|
|
37
|
-
attr_reader :languages, :regions
|
|
41
|
+
attr_reader :languages, :regions, :scripts
|
|
38
42
|
|
|
39
43
|
def load(input = nil)
|
|
40
44
|
input ||= Locale.default
|
|
@@ -42,12 +46,13 @@ module CSL
|
|
|
42
46
|
super(input)
|
|
43
47
|
end
|
|
44
48
|
|
|
45
|
-
# Normalizes an IETF tag; adds
|
|
46
|
-
# region's default language.
|
|
49
|
+
# Normalizes an IETF tag; adds default language, region, script.
|
|
47
50
|
#
|
|
48
51
|
# @example
|
|
49
52
|
# Locale.normalize("en") #-> "en-US"
|
|
50
53
|
# Locale.normalize("-BR") #-> "pt-BR"
|
|
54
|
+
# Locale.normalize("de-at") #-> "de-AT"
|
|
55
|
+
# Locale.normalize("sr") #-> "sr-Latn-RS"
|
|
51
56
|
#
|
|
52
57
|
# @raise [ArgumentError] if the passed-in string is no IETF tag
|
|
53
58
|
#
|
|
@@ -56,15 +61,32 @@ module CSL
|
|
|
56
61
|
def normalize(tag)
|
|
57
62
|
tag = tag.to_s.strip
|
|
58
63
|
|
|
59
|
-
|
|
60
|
-
tag
|
|
64
|
+
unless tag =~ @tag_pattern
|
|
65
|
+
raise ArgumentError, "unsupported IETF tag: #{tag.inspect}"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
language, *rs = tag.split(/-/)
|
|
69
|
+
region, script = rs.reverse
|
|
61
70
|
|
|
62
|
-
language
|
|
71
|
+
if language.nil? || language.empty?
|
|
72
|
+
language = languages[region.to_sym]
|
|
73
|
+
else
|
|
74
|
+
language.downcase!
|
|
75
|
+
end
|
|
63
76
|
|
|
64
|
-
|
|
65
|
-
|
|
77
|
+
if region.nil?
|
|
78
|
+
region = regions[language.to_sym]
|
|
79
|
+
else
|
|
80
|
+
region.upcase!
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if script.nil?
|
|
84
|
+
script = scripts[language.to_sym]
|
|
85
|
+
else
|
|
86
|
+
script.capitalize!
|
|
87
|
+
end
|
|
66
88
|
|
|
67
|
-
|
|
89
|
+
[language, script, region].compact.join('-')
|
|
68
90
|
end
|
|
69
91
|
end
|
|
70
92
|
|
|
@@ -78,7 +100,7 @@ module CSL
|
|
|
78
100
|
|
|
79
101
|
has_language
|
|
80
102
|
|
|
81
|
-
attr_accessor :region
|
|
103
|
+
attr_accessor :region, :script
|
|
82
104
|
|
|
83
105
|
alias_child :metadata, :info
|
|
84
106
|
alias_child :dates, :date
|
|
@@ -181,14 +203,15 @@ module CSL
|
|
|
181
203
|
#
|
|
182
204
|
# @return [self]
|
|
183
205
|
def set(locale)
|
|
184
|
-
@language,
|
|
206
|
+
@language, *rs = Locale.normalize(locale).split(/-/).map(&:to_sym)
|
|
207
|
+
@region, @script = rs.reverse
|
|
185
208
|
self
|
|
186
209
|
end
|
|
187
210
|
|
|
188
|
-
# Sets the locale's language and region to nil.
|
|
211
|
+
# Sets the locale's language, script and region to nil.
|
|
189
212
|
# @return [self]
|
|
190
213
|
def clear
|
|
191
|
-
@language, @region = nil
|
|
214
|
+
@language, @script, @region = nil
|
|
192
215
|
self
|
|
193
216
|
end
|
|
194
217
|
|
|
@@ -414,11 +437,12 @@ module CSL
|
|
|
414
437
|
end
|
|
415
438
|
|
|
416
439
|
|
|
417
|
-
# Locales are sorted first by language, then by region
|
|
418
|
-
# alphabetical with the following exceptions:
|
|
419
|
-
# prioritised; in case of a language match
|
|
420
|
-
# language will be prioritised (e.g.,
|
|
421
|
-
# though the alphabetical order
|
|
440
|
+
# Locales are sorted first by language, then by region and script;
|
|
441
|
+
# sort order is alphabetical with the following exceptions:
|
|
442
|
+
# the default locale is prioritised; in case of a language match
|
|
443
|
+
# the default region of that language will be prioritised (e.g.,
|
|
444
|
+
# de-DE will come before de-AT even though the alphabetical order
|
|
445
|
+
# would be different).
|
|
422
446
|
#
|
|
423
447
|
# @param other [Locale] the locale used for comparison
|
|
424
448
|
# @return [1,0,-1,nil] the result of the comparison
|
|
@@ -427,7 +451,7 @@ module CSL
|
|
|
427
451
|
when !other.is_a?(Locale)
|
|
428
452
|
nil
|
|
429
453
|
when [language, region] == [other.language, other.region]
|
|
430
|
-
|
|
454
|
+
script <=> other.script
|
|
431
455
|
when default?
|
|
432
456
|
-1
|
|
433
457
|
when other.default?
|
|
@@ -448,7 +472,7 @@ module CSL
|
|
|
448
472
|
|
|
449
473
|
# @return [String] the Locale's IETF tag
|
|
450
474
|
def to_s
|
|
451
|
-
[language, region].compact.join('-')
|
|
475
|
+
[language, script, region].compact.join('-')
|
|
452
476
|
end
|
|
453
477
|
|
|
454
478
|
# @return [String] a string representation of the Locale
|
data/lib/csl/schema.rb
CHANGED
data/lib/csl/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: csl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sylvester Keil
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2025-10-16 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: namae
|
|
@@ -16,28 +15,98 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.
|
|
18
|
+
version: '1.2'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.
|
|
25
|
+
version: '1.2'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: rexml
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
|
-
- - "
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: forwardable
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.3'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1.3'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: open-uri
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "<"
|
|
32
59
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
60
|
+
version: '1.0'
|
|
34
61
|
type: :runtime
|
|
35
62
|
prerelease: false
|
|
36
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
64
|
requirements:
|
|
38
|
-
- - "
|
|
65
|
+
- - "<"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '1.0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: singleton
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "<"
|
|
39
73
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
74
|
+
version: '1.0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "<"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '1.0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: set
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '1.1'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '1.1'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: time
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "<"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '1.0'
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "<"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '1.0'
|
|
41
110
|
description: |
|
|
42
111
|
A Ruby parser and full API for the Citation Style Language (CSL),
|
|
43
112
|
an open XML-based language to describe the formatting of citations
|
|
@@ -98,10 +167,8 @@ files:
|
|
|
98
167
|
- vendor/schema/csl.rng
|
|
99
168
|
homepage: https://github.com/inukshuk/csl-ruby
|
|
100
169
|
licenses:
|
|
101
|
-
- AGPL-3.0
|
|
102
170
|
- BSD-2-Clause
|
|
103
171
|
metadata: {}
|
|
104
|
-
post_install_message:
|
|
105
172
|
rdoc_options: []
|
|
106
173
|
require_paths:
|
|
107
174
|
- lib
|
|
@@ -116,8 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
116
183
|
- !ruby/object:Gem::Version
|
|
117
184
|
version: '0'
|
|
118
185
|
requirements: []
|
|
119
|
-
rubygems_version: 3.2
|
|
120
|
-
signing_key:
|
|
186
|
+
rubygems_version: 3.7.2
|
|
121
187
|
specification_version: 4
|
|
122
188
|
summary: A Ruby CSL parser and library
|
|
123
189
|
test_files: []
|