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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9def0950732e2af79808e712e972c454f49c18b8e71f31dcae1917a61d67b65
4
- data.tar.gz: 996804a7e5e66aaad59f0679039b6a56b88d408f90a1b0414e6f32741ef0cf26
3
+ metadata.gz: f7f13898b2b1d72d754e5d7a5049b7a65d91f36df7fe68c6db8b369fa2dd21f7
4
+ data.tar.gz: ee44d0add3174bff091b2575c1c55dd5fcf25a72e63af5823209dc3504beee85
5
5
  SHA512:
6
- metadata.gz: f2e5824f038b51ce12dc80cb4bab54d59f2adea043ecf7614fb000742e518f67c082cc09e1f44f0b76ffc52ad24c2f5410c7c866e944ea491b1dd66c599da657
7
- data.tar.gz: e51bdbd453bbe73c78fce162643a41c4c61697bb3f443dcdf08f7bea8a8fbea28e89cf5d3bfa07876dab1e188dfe5c010d9cff407dcedc8157c1e8af64f12ed9
6
+ metadata.gz: c611c353c05cc66d5cc390d2c09054be36a130648afc9a551ae7dd0e5dc5e497ae598d57a0d97de1ee7c9e8f8f78a6cb4412c2840c9213d2f1bc577d07682148
7
+ data.tar.gz: ea13a2582afd20235caced2ffeb20f3a5ab11d7e6309a3d134a000c78578f4f2c73b0082ac7552690d8da337fbfb903fd7ec44e035180d2c415a4387d99d8287
@@ -14,13 +14,20 @@ jobs:
14
14
  strategy:
15
15
  matrix:
16
16
  ruby-version:
17
- - 3.0
18
- - 2.7
19
- - 2.6
17
+ - 3.4
18
+ - 3.3
19
+ - 3.2
20
+ - 3.1
20
21
  steps:
21
- - uses: actions/checkout@v2
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-2020 Sylvester Keil. All rights reserved.
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 'byebug', require: false, platforms: :mri
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-2020 Sylvester Keil. All rights reserved.
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 = ['AGPL-3.0','BSD-2-Clause']
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.add_runtime_dependency('namae', ['~>1.0'])
34
- s.add_runtime_dependency('rexml')
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}(-[A-Z]{2})?|-[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 a language's default region or a
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
- raise ArgumentError, "not a valid IETF tag: #{tag.inspect}" unless
60
- tag =~ @tag_pattern
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, region = tag.split(/-/)
71
+ if language.nil? || language.empty?
72
+ language = languages[region.to_sym]
73
+ else
74
+ language.downcase!
75
+ end
63
76
 
64
- return [language, regions[language.to_sym]].compact.join('-') if region.nil?
65
- return [languages[region.to_sym], region].join('-') if language.empty?
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
- tag
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, @region = Locale.normalize(locale).split(/-/).map(&:to_sym)
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; sort order is
418
- # alphabetical with the following exceptions: the default locale is
419
- # prioritised; in case of a language match the default region of that
420
- # language will be prioritised (e.g., de-DE will come before de-AT even
421
- # though the alphabetical order would be different).
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
- 0
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
@@ -318,7 +318,7 @@ module CSL
318
318
  case
319
319
  when node =~ /^\s*</
320
320
  @validator[@schema, node]
321
- when File.exists?(node)
321
+ when File.exist?(node)
322
322
  @validator[@schema, File.open(node, 'r:UTF-8')]
323
323
  else
324
324
  glob = Dir.glob(node)
data/lib/csl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CSL
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
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.0.0
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: 2022-01-01 00:00:00.000000000 Z
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.0'
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.0'
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.15
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: []