csl 2.2.1 → 2.4.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.
@@ -229,7 +229,7 @@ module CSL
229
229
  # be inserted between before et-al depending on the
230
230
  # number of names rendered
231
231
  def delimiter_contextually_precedes_et_al?
232
- return true unless attribute?[:'delimiter-precedes-et-al']
232
+ return true unless attribute?(:'delimiter-precedes-et-al')
233
233
  !!(attributes[:'delimiter-precedes-et-al'].to_s =~ /^contextual/i)
234
234
  end
235
235
 
@@ -327,7 +327,7 @@ module CSL
327
327
  end
328
328
 
329
329
  def ellipsis?
330
- attributes[:'et-al-use-last'].to_s =~ /^true$/
330
+ boolean_attribute(:'et-al-use-last')
331
331
  end
332
332
 
333
333
  def ellipsis
data/lib/csl/style.rb CHANGED
@@ -74,26 +74,35 @@ module CSL
74
74
  @errors = Schema.validate self
75
75
  end
76
76
 
77
+ # Merges the style's overrides into the given locale.
78
+ #
79
+ # @param locale [Locale]
80
+ # @return [Locale]
81
+ def localize(locale)
82
+ overrides = locales.sort.reverse.select { |other| locale.like?(other) }
83
+ overrides.empty? ? locale : locale.merge(*overrides)
84
+ end
85
+
77
86
  def valid?
78
87
  validate.empty?
79
88
  end
80
89
 
81
90
  remove_method :info # generated by struct_children
82
91
  def info
83
- children[:info] ||= Info.new
92
+ children[:info] || add_child(Info.new)
84
93
  end
85
94
 
86
95
  alias_child :metadata, :info
87
96
 
88
97
  # @return [String] the style's id
89
98
  def id
90
- return unless info.has_id?
99
+ return unless has_info? && info.has_id?
91
100
  info.id.to_s
92
101
  end
93
102
 
94
103
  # @return [String] the style's title
95
104
  def title
96
- return unless info.has_title?
105
+ return unless has_info? && info.has_title?
97
106
  info.title.to_s
98
107
  end
99
108
 
@@ -127,7 +136,7 @@ module CSL
127
136
  alias demote_particle? demote_non_dropping_particle?
128
137
 
129
138
  def initialize_without_hyphen?
130
- attribute?(:'initialize-with-hyphen') && !attributes[:'initialize-with-hyphen']
139
+ !boolean_attribute(:'initialize-with-hyphen', true)
131
140
  end
132
141
 
133
142
  def has_page_range_format?
@@ -141,7 +150,7 @@ module CSL
141
150
  private
142
151
 
143
152
  def preamble
144
- Schema.preamble.dup
153
+ Schema.preamble
145
154
  end
146
155
 
147
156
  def load_related_style_from(uri)
data/lib/csl/treelike.rb CHANGED
@@ -33,12 +33,17 @@ module CSL
33
33
  end
34
34
  alias delete delete_children
35
35
 
36
- # Deletes child nodes that are equal to the passed-in node. Returns all
37
- # deleted children. If no children were deleted, returns nil. If the
38
- # optional block is given, returns the result block if no children were
39
- # deleted.
36
+ # Deletes the passed-in child node.
37
+ # Returns the deleted child.
38
+ # If the node is not a child, returns nil or,
39
+ # if the optional block is given, the result of the block.
40
40
  def delete_child(child)
41
- deleted = children.delete child
41
+ deleted = if children.is_a?(Array)
42
+ index = children.index { |node| node.equal?(child) }
43
+ children.delete_at(index) unless index.nil?
44
+ else
45
+ children.delete child
46
+ end
42
47
 
43
48
  case
44
49
  when deleted.nil? && block_given?
@@ -349,8 +354,7 @@ module CSL
349
354
 
350
355
  const_set(:Children, Struct.new(*names) {
351
356
 
352
- # 1.8 Compatibility
353
- @keys = members.map(&:to_sym).freeze
357
+ @keys = members.freeze
354
358
 
355
359
  class << self
356
360
  attr_reader :keys
@@ -424,18 +428,19 @@ module CSL
424
428
 
425
429
  alias << push
426
430
 
427
- # Delete items from self that are equal to node. If any items are
428
- # found, returns the deleted items. If the items is not found,
429
- # returns nil. If the optional code block is given, returns the
430
- # result og block if the item is not found.
431
+ # Deletes the passed-in node; other, equal nodes are not deleted.
432
+ # Returns the deleted node or nil if the node is not found.
433
+ # If the optional code block is given,
434
+ # returns the result of the block if the node is not found.
431
435
  def delete(node)
432
436
  return nil unless node.respond_to?(:nodename)
433
437
 
434
438
  deleted = resolve(node.nodename)
435
439
  if deleted.kind_of?(Array)
436
- deleted = deleted.delete(node)
440
+ index = deleted.index { |other| other.equal?(node) }
441
+ deleted = index.nil? ? nil : deleted.delete_at(index)
437
442
  else
438
- if deleted == node
443
+ if deleted.equal?(node)
439
444
  self[node.nodename] = nil
440
445
  else
441
446
  deleted = nil
@@ -443,7 +448,7 @@ module CSL
443
448
  end
444
449
 
445
450
  # Delete node from ordered list as well
446
- @order.delete(node)
451
+ @order.delete_if { |other| other.equal?(node) }
447
452
 
448
453
  if deleted.nil? && block_given?
449
454
  yield
data/lib/csl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CSL
2
- VERSION = '2.2.1'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
data/lib/csl.rb CHANGED
@@ -1,5 +1,4 @@
1
1
 
2
- require 'enumerator'
3
2
  require 'forwardable'
4
3
  require 'open-uri'
5
4
  require 'singleton'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csl
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvester Keil
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-10-16 00:00:00.000000000 Z
10
+ date: 2026-10-07 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: namae
@@ -117,17 +117,8 @@ executables: []
117
117
  extensions: []
118
118
  extra_rdoc_files: []
119
119
  files:
120
- - ".document"
121
- - ".github/workflows/ci.yml"
122
- - ".gitignore"
123
- - ".yardopts"
124
- - AGPL
125
120
  - BSDL
126
- - Gemfile
127
121
  - README.md
128
- - Rakefile
129
- - csl.gemspec
130
- - cucumber.yml
131
122
  - lib/csl.rb
132
123
  - lib/csl/compatibility.rb
133
124
  - lib/csl/date_part.rb
@@ -176,14 +167,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
167
  requirements:
177
168
  - - ">="
178
169
  - !ruby/object:Gem::Version
179
- version: '2.2'
170
+ version: '3.1'
180
171
  required_rubygems_version: !ruby/object:Gem::Requirement
181
172
  requirements:
182
173
  - - ">="
183
174
  - !ruby/object:Gem::Version
184
175
  version: '0'
185
176
  requirements: []
186
- rubygems_version: 3.7.2
177
+ rubygems_version: 4.0.22
187
178
  specification_version: 4
188
179
  summary: A Ruby CSL parser and library
189
180
  test_files: []
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- AGPL
5
- README.md
@@ -1,33 +0,0 @@
1
- name: CI
2
- on:
3
- push:
4
- branches:
5
- - master
6
- pull_request:
7
- branches:
8
- - master
9
- jobs:
10
- build:
11
- runs-on: ubuntu-latest
12
- env:
13
- BUNDLE_WITHOUT: debug:extra
14
- strategy:
15
- matrix:
16
- ruby-version:
17
- - 3.4
18
- - 3.3
19
- - 3.2
20
- - 3.1
21
- steps:
22
- - uses: actions/checkout@v4
23
- - uses: ruby/setup-ruby@v1
24
- with:
25
- ruby-version: ${{ matrix.ruby-version }}
26
- bundler-cache: true
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/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- .DS_Store
2
- Gemfile.lock
3
- /coverage
4
- /pkg
5
- /doc
6
- /.yardoc
7
- /.rbx
8
- *.rbc
9
- *.swp
10
- *.gem
11
- .ruby-version
12
- .rvm
13
- .bundle
data/.yardopts DELETED
@@ -1,2 +0,0 @@
1
- --no-private
2
- --document