cff 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3516244b4f8ca79e358adb6a561ea0d1007590b1fc34686eff2566444e465381
4
- data.tar.gz: 6ad965bc59a6acf7cfa1a0737ed97bbd994e4fabdb64551eb7bdef6d32411534
3
+ metadata.gz: '0685f4e60680971f1d131ee18722cd4989631cc223a192197a226cf18b8deca4'
4
+ data.tar.gz: 2bc27bb586bd0056a631b992a1da78befae597d8cc3815f5e124a72aa0e50180
5
5
  SHA512:
6
- metadata.gz: 822d9b5f9e260d6bec6bbf9fa2891951b10319feca11f5c899431c86143fcdbde0b874ec9fcd598307ffd5b731578f8979d712375f65cfd7092617e5bd3dcf02
7
- data.tar.gz: 122e43d2a21f50b897204e15d4d497cd95cea23a0de1d25a6efc744ca4316e9c5c09fab681e572e8bf66900a4bd40bcbfdf34ecb19e42168c484ca3bbf852d66
6
+ metadata.gz: 2b36c030c352a815045c8ee5464f2c445802e99ab44a7caab1503029f785f740673b273949faf530593141497e9948652886d2a2761ea1f8f66cb6707be7bcb5
7
+ data.tar.gz: 0325a6308c04c27213a16d54fb657f2b94c3fbb554e838ab469d3c10ef737e57bc3150b58e68550605b51aa2b971d5d6560933686d124be74aa746f1fb8c6669
data/CHANGES.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changes log for the Ruby CFF Library
2
2
 
3
+ ## 1.2.0
4
+
5
+ * Always treat dates as Ruby Date objects.
6
+ * BibTeX: escape special characters ($%&_#{}).
7
+
3
8
  ## 1.1.0
4
9
 
5
10
  * BibTeX: output months as three letter abbreviations.
data/CITATION.cff CHANGED
@@ -1,4 +1,4 @@
1
- # This CITATION.cff file was created by ruby-cff (v 1.1.0).
1
+ # This CITATION.cff file was created by ruby-cff (v 1.2.0).
2
2
  # Gem: https://rubygems.org/gems/cff
3
3
  # CFF: https://citation-file-format.github.io/
4
4
 
@@ -21,9 +21,9 @@ keywords:
21
21
  - metadata
22
22
  - citation file format
23
23
  - CFF
24
- version: 1.1.0
24
+ version: 1.2.0
25
25
  doi: 10.5281/zenodo.1184077
26
- date-released: 2023-04-10
26
+ date-released: 2024-01-19
27
27
  license: Apache-2.0
28
28
  repository-artifact: https://rubygems.org/gems/cff
29
29
  repository-code: https://github.com/citation-file-format/ruby-cff
data/LICENCE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
189
+ Copyright (c) 2018-2024 The Ruby Citation File Format Developers.
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -203,7 +203,7 @@ cff.to_apalike(preferred_citation: false)
203
203
 
204
204
  #### A note on citation formats
205
205
 
206
- Due to the different expectations of different publication venues, the citation text may need minor tweaking to be used in specific situations. If you spot a major, or general, error in the output do [let us know](https://github.com/citation-file-format/ruby-cff/issues), but please check against the [BibTex](https://www.bibtex.com/format/) and [APA](https://apastyle.apa.org/style-grammar-guidelines/references) standards first.
206
+ Due to the different expectations of different publication venues, the citation text may need minor tweaking to be used in specific situations. If you spot a major, or general, error in the output do [let us know](https://github.com/citation-file-format/ruby-cff/issues), but please check against the [BibTeX](https://www.bibtex.com/format/) and [APA](https://apastyle.apa.org/style-grammar-guidelines/references) standards first.
207
207
 
208
208
  ### Library versions
209
209
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
3
+ # Copyright (c) 2018-2024 The Ruby Citation File Format Developers.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -45,13 +45,17 @@ module CFF
45
45
  month.downcase unless month.nil?
46
46
  end.freeze
47
47
 
48
+ # We need to escape these characters in titles and names, as per
49
+ # https://tex.stackexchange.com/questions/34580/escape-character-in-latex
50
+ ESCAPE_CHARS = Regexp.new(/([&%$#_{}])/)
51
+
48
52
  def self.format(model:, preferred_citation: true) # rubocop:disable Metrics
49
53
  model = select_and_check_model(model, preferred_citation)
50
54
  return if model.nil?
51
55
 
52
56
  values = {}
53
57
  values['author'] = actor_list(model.authors)
54
- values['title'] = "{#{model.title}}"
58
+ values['title'] = "{#{l(model.title)}}"
55
59
 
56
60
  publication_type = bibtex_type(model)
57
61
  publication_data_from_model(model, publication_type, values)
@@ -79,7 +83,7 @@ module CFF
79
83
  def self.publication_data_from_model(model, type, fields)
80
84
  ENTRY_TYPE_MAP[type].each do |field|
81
85
  if model.respond_to?(field)
82
- fields[field] = model.send(field).to_s
86
+ fields[field] = l(model.send(field).to_s)
83
87
  else
84
88
  field = field.chomp('!')
85
89
  fields[field] = send("#{field}_from_model", model)
@@ -108,9 +112,9 @@ module CFF
108
112
  # BibTeX 'institution' could be grabbed from an author's affiliation, or
109
113
  # provided explicitly.
110
114
  def self.institution_from_model(model)
111
- return model.institution.name unless model.institution.empty?
115
+ return l(model.institution.name) unless model.institution.empty?
112
116
 
113
- model.authors.first.affiliation
117
+ l(model.authors.first.affiliation)
114
118
  end
115
119
 
116
120
  # BibTeX 'school' is CFF 'institution'.
@@ -125,7 +129,7 @@ module CFF
125
129
 
126
130
  # BibTeX 'booktitle' is CFF 'collection-title'.
127
131
  def self.booktitle_from_model(model)
128
- model.collection_title
132
+ l(model.collection_title)
129
133
  end
130
134
 
131
135
  # BibTeX 'editor' is CFF 'editors' or 'editors-series'.
@@ -138,11 +142,11 @@ module CFF
138
142
  end
139
143
 
140
144
  def self.publisher_from_model(model)
141
- model.publisher.empty? ? '' : model.publisher.name
145
+ model.publisher.empty? ? '' : l(model.publisher.name)
142
146
  end
143
147
 
144
148
  def self.series_from_model(model)
145
- model.conference.empty? ? '' : model.conference.name
149
+ model.conference.empty? ? '' : l(model.conference.name)
146
150
  end
147
151
 
148
152
  # If we're citing a conference paper, try and use the date of the
@@ -182,9 +186,9 @@ module CFF
182
186
  end
183
187
  end
184
188
 
185
- def self.format_actor(author)
186
- return "{#{author.name}}" if author.is_a?(Entity)
187
- return author.alias if author.family_names.empty? && author.given_names.empty?
189
+ def self.format_actor(author) # rubocop:disable Metrics/AbcSize
190
+ return "{#{l(author.name)}}" if author.is_a?(Entity)
191
+ return l(author.alias) if author.family_names.empty? && author.given_names.empty?
188
192
 
189
193
  particle =
190
194
  author.name_particle.empty? ? '' : "#{author.name_particle} "
@@ -209,6 +213,12 @@ module CFF
209
213
 
210
214
  Util.parameterize(reference)
211
215
  end
216
+
217
+ # Escape a string to preserve special characters in LaTeX output.
218
+ # Used in many places, so short method name to preserve reading flow.
219
+ def self.l(string)
220
+ string.gsub(ESCAPE_CHARS, '\\\\\1')
221
+ end
212
222
  end
213
223
  end
214
224
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
3
+ # Copyright (c) 2018-2023 The Ruby Citation File Format Developers.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -67,16 +67,9 @@ module CFF
67
67
  end
68
68
 
69
69
  def self.month_and_year_from_date(value)
70
- if value.is_a?(Date)
71
- [value.month, value.year].map(&:to_s)
72
- else
73
- begin
74
- date = Date.parse(value.to_s)
75
- [date.month, date.year].map(&:to_s)
76
- rescue ArgumentError
77
- ['', '']
78
- end
79
- end
70
+ return ['', ''] unless value.is_a?(Date)
71
+
72
+ [value.month, value.year].map(&:to_s)
80
73
  end
81
74
 
82
75
  # CFF 'pages' is the number of pages, which has no equivalent in BibTeX
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
3
+ # Copyright (c) 2018-2023 The Ruby Citation File Format Developers.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -59,23 +59,57 @@ module CFF
59
59
  symbols.each do |symbol|
60
60
  field = symbol.to_s.tr('_', '-')
61
61
 
62
- class_eval(
63
- # def date_end=(date)
64
- # date = (date.is_a?(Date) ? date.dup : Date.parse(date))
65
- #
66
- # @fields['date-end'] = date
67
- # end
68
- <<-END_SETTER, __FILE__, __LINE__ + 1
69
- def #{symbol}=(date)
70
- date = (date.is_a?(Date) ? date.dup : Date.parse(date))
71
-
72
- @fields['#{field}'] = date
73
- end
74
- END_SETTER
75
- )
62
+ date_getter(symbol, field)
63
+ date_setter(symbol, field)
76
64
  end
77
65
  end
78
66
 
67
+ def self.date_getter(symbol, field)
68
+ class_eval(
69
+ # def date_end
70
+ # date = @fields['date-end']
71
+ # return date if date.is_a?(Date)
72
+ #
73
+ # begin
74
+ # Date.parse(date)
75
+ # rescue
76
+ # ''
77
+ # end
78
+ # end
79
+ <<-END_GETTER, __FILE__, __LINE__ + 1
80
+ def #{symbol}
81
+ date = @fields['#{field}']
82
+ return date if date.is_a?(Date)
83
+
84
+ begin
85
+ Date.parse(date)
86
+ rescue
87
+ ''
88
+ end
89
+ end
90
+ END_GETTER
91
+ )
92
+ end
93
+
94
+ def self.date_setter(symbol, field)
95
+ class_eval(
96
+ # def date_end=(date)
97
+ # date = (date.is_a?(Date) ? date.dup : Date.parse(date))
98
+ #
99
+ # @fields['date-end'] = date
100
+ # end
101
+ <<-END_SETTER, __FILE__, __LINE__ + 1
102
+ def #{symbol}=(date)
103
+ date = (date.is_a?(Date) ? date.dup : Date.parse(date))
104
+
105
+ @fields['#{field}'] = date
106
+ end
107
+ END_SETTER
108
+ )
109
+ end
110
+
111
+ private_class_method :date_getter, :date_setter
112
+
79
113
  private
80
114
 
81
115
  def method_to_field(name)
data/lib/cff/version.rb CHANGED
@@ -17,7 +17,7 @@
17
17
  ##
18
18
  module CFF
19
19
  # :nodoc:
20
- VERSION = '1.1.0'
20
+ VERSION = '1.2.0'
21
21
  DEFAULT_SPEC_VERSION = '1.2.0'
22
22
  MIN_VALIDATABLE_VERSION = '1.2.0'
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Haines
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-04-10 00:00:00.000000000 Z
12
+ date: 2024-01-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json_schema