bibtex-ruby 2.3.4 → 3.0.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.

Potentially problematic release.


This version of bibtex-ruby might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b09dca8a81cca150971cdfabcc448c4ffdd2ee7
4
- data.tar.gz: 68f2f2564edf0a61eb80944f25f684a7d9fab0e8
3
+ metadata.gz: 032d4eb545f4e0360cb12438d83c1177dd17af9a
4
+ data.tar.gz: 2e855f8b6f4b23b67e0330cb4ffae8eea2476c08
5
5
  SHA512:
6
- metadata.gz: 589c95707591059f965b4bfe7167211a707da6b5f125d349b9b2457657f4f3ac16d70b6039b7022a8d32161d2cc33f6a0409cd2c7ea3c7013041b5c7a890caef
7
- data.tar.gz: 1406695031be8949fd6495328d99586e5b4e8d781f2d9fe6a93d3b8cf186d9f36ee0a64bfd00eaf789f7acb668070b82a07d32c12d24827e34ddd23d2cd44e05
6
+ metadata.gz: 42bcd110dda57b116de19d63ad9e5ca336c0035bde9bad0818f7b0e06c3199e470b86288eb7b4d8bfaf2d1a01d0a7ce8c24d0a8c3728dcf510df2b776f86f2f0
7
+ data.tar.gz: 7e4f01e424befdd4acec3685cbd3c87c3a1a6697574c93becadcece0433712be4a7dea645d5dc7593cbfa5cceef919161d50ee97d351f9a5392b3d79b4993294
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gemspec
4
4
  # RDF Export
5
5
  gem 'rdf', '~>0.3'
6
6
 
7
+
7
8
  group :debug do
8
9
  gem 'debugger', :require => false, :platforms => [:mri_19, :mri_20]
9
10
  gem 'ruby-debug', :require => false, :platforms => [:mri_18]
@@ -18,8 +19,8 @@ end
18
19
 
19
20
  group :extra do
20
21
  gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
21
- gem 'guard-minitest'
22
- gem 'guard-cucumber'
22
+ gem 'guard-minitest', :platforms => [:ruby_20]
23
+ gem 'guard-cucumber', :platforms => [:ruby_20]
23
24
  gem 'redcarpet', :platforms => [:rbx, :mri_20, :mri_19]
24
25
  end
25
26
 
@@ -33,4 +34,5 @@ group :development do
33
34
  gem 'rake'
34
35
  gem 'racc'
35
36
  gem 'yard'
37
+ gem 'iconv', :platforms => [:ruby_20]
36
38
  end
@@ -1,3 +1,9 @@
1
+ 3.0.0 / 2013-11-11
2
+ ==================
3
+
4
+ * Added transliteration support to default key generator (@cruessler)
5
+ * Improve parsing of non-ascii keys (@cruessler)
6
+
1
7
  2.3.4 / 2013-08-22
2
8
  ==================
3
9
 
data/Manifest CHANGED
@@ -19,6 +19,8 @@ features/issues/crossref.feature
19
19
  features/issues/latex_filter.feature
20
20
  features/issues/multiline_strings.feature
21
21
  features/issues/name_parsing.feature
22
+ features/issues/non_ascii_default_keys.feature
23
+ features/issues/non_ascii_keys.feature
22
24
  features/issues/number_keys.feature
23
25
  features/issues/parse_months.feature
24
26
  features/issues/slash_keys.feature
data/README.md CHANGED
@@ -97,7 +97,9 @@ Save a bibliography to a file:
97
97
 
98
98
  Compatibility
99
99
  -------------
100
- The BibTeX-Ruby gem has been developed and tested on Ruby 1.8 and 1.9; it has
100
+ The BibTeX-Ruby gem has been developed and tested on Ruby 2.0 and 1.9; up to
101
+ version 2.x BibTeX-Ruby also supports Ruby 1.8, but starting with version 3.0.0
102
+ support 1.8 is not a priority anymore. It has
101
103
  been confirmed to work with JRuby, Rubinius, and REE, however, there have
102
104
  been repeated [issues](https://github.com/inukshuk/bibtex-ruby/issues)
103
105
  (performance mostly) with MacRuby caused by MacRuby's current StringScanner
@@ -0,0 +1,20 @@
1
+ Feature: Parse BibTeX files and convert LaTeX to Unicode
2
+ As a hacker who works with bibliographies
3
+ I want to be able to have autogenerated keys respect non-ASCII characters
4
+ by transliterating them
5
+
6
+ @default_keys
7
+ Scenario: A single entry with an author whose name contains non-ASCII characters
8
+ When I create an entry with these elements:
9
+ | type | author | title | location | year |
10
+ | book | Christian Müller | Title | Berlin | 2013 |
11
+ Then my bibliography should contain an entry with a key like "mu.?ller2013a"
12
+
13
+ @default_keys
14
+ Scenario: Multiple entries with an author whose name contains non-ASCII characters
15
+ When I create entries with these elements:
16
+ | type | author | title | location | year |
17
+ | book | Christian Müller | First Title | Berlin | 2013 |
18
+ | book | Christian Müller | Second Title | Berlin | 2013 |
19
+ Then my bibliography should contain an entry with a key like "mu.?ller2013a"
20
+ And my bibliography should contain an entry with a key like "mu.?ller2013b"
@@ -0,0 +1,17 @@
1
+ Feature: Keys containing non-ASCII characters
2
+ As a hacker who works with bibliographies
3
+ I want to parse BibTeX entries with keys containing non-ASCII characters
4
+ Because they can occur in many languages other than English
5
+
6
+ Scenario: An entry whose key contains a German umlaut
7
+ When I parse the following file:
8
+ """
9
+ @article{müller.2011,
10
+ author = {Christian Müller},
11
+ title = {Important article},
12
+ journal = {Not so important journal},
13
+ volume = {5},
14
+ year = {2011}
15
+ }
16
+ """
17
+ Then my bibliography should contain an article with id "müller.2011"
@@ -30,6 +30,26 @@ When /^I convert all entries using the filter "([^"]*)"$/ do |filter|
30
30
  @bibliography.convert(filter)
31
31
  end
32
32
 
33
+ When /^I create an entry with these elements:$/ do |table|
34
+ @bibliography = BibTeX::Bibliography.new
35
+ entry = BibTeX::Entry.new
36
+ table.hashes.first.each_pair do |field, value|
37
+ entry[field.to_sym] = value
38
+ end
39
+ @bibliography << entry.parse_names
40
+ end
41
+
42
+ When /^I create entries with these elements:$/ do |table|
43
+ @bibliography = BibTeX::Bibliography.new
44
+ table.hashes.each do |entries|
45
+ entry = BibTeX::Entry.new
46
+ entries.each_pair do |field, value|
47
+ entry[field.to_sym] = value
48
+ end
49
+ @bibliography << entry.parse_names
50
+ end
51
+ end
52
+
33
53
 
34
54
  Then /^my bibliography should contain the following objects:$/ do |table|
35
55
  @bibliography.each_with_index do |object, index|
@@ -59,6 +79,10 @@ Then /^my bibliography should contain an entry with (?:key|id) "([^"]*)"$/ do |k
59
79
  refute_nil @bibliography[key.to_s]
60
80
  end
61
81
 
82
+ Then /^my bibliography should contain an entry with an? (?:key|id) like "([^"]*)"$/ do |key|
83
+ pattern = Regexp.compile key
84
+ refute_nil @bibliography.detect { |e| e.key.to_s =~ pattern }
85
+ end
62
86
  Then /^my bibliography should contain an entry with (?:key|id) "([^"]*)" and a?n? (\w+) value of "([^"]*)"$/ do |key,field,value|
63
87
  refute_nil @bibliography[key.to_s]
64
88
  assert_equal value, @bibliography[key.to_s][field.downcase.to_sym].to_s
@@ -92,4 +116,4 @@ end
92
116
 
93
117
  Then /^the entry with key "([^"]*)" should have a field "([^"]*)" with the value "([^"]*)"$/ do |key, field, value|
94
118
  assert_equal value, @bibliography[key][field.downcase.to_sym].to_s
95
- end
119
+ end
@@ -16,3 +16,23 @@ if RUBY_VERSION < '1.9'
16
16
 
17
17
  BibTeX::NameParser.patterns[:upper] = /[[:upper:]ÄÖÜ][^\t\r\n\s\{\}\d\\,]*/o
18
18
  end
19
+
20
+ module BibTeX
21
+ begin
22
+ require 'iconv'
23
+
24
+ @iconv = Iconv.new('ascii//translit//ignore', 'utf-8')
25
+
26
+ def self.transliterate(str)
27
+ @iconv.iconv(str)
28
+ end
29
+ rescue LoadError
30
+
31
+ @iconv_replacements = Hash[*%w(ä ae ö oe ü ue Ä Ae Ö Oe Ü Ue ß ss)]
32
+
33
+ # Returns +str+ transliterated containing only ASCII characters.
34
+ def self.transliterate(str)
35
+ str.gsub(/[äöüÄÖÜß]/, @iconv_replacements)
36
+ end
37
+ end
38
+ end
@@ -720,10 +720,18 @@ module BibTeX
720
720
  end
721
721
 
722
722
  def issued
723
- m = MONTHS.find_index(fields[:month].to_s.intern) unless !has_field?(:month)
724
- m = m + 1 unless m.nil?
723
+ return unless has_field?(:year)
724
+
725
+ parts = [fields[:year].to_s]
725
726
 
726
- Hash['date-parts', [[fields[:year],m].compact.map(&:to_i)]]
727
+ return { 'literal' => parts[0] } unless parts[0] =~ /^\d+$/
728
+
729
+ if has_field?(:month)
730
+ parts.push MONTHS.find_index(fields[:month].to_s.intern)
731
+ parts[1] = parts[1] + 1 unless parts[1].nil?
732
+ end
733
+
734
+ { 'date-parts' => [parts.compact.map(&:to_i)] }
727
735
  end
728
736
 
729
737
  alias citeproc_date issued
@@ -859,13 +867,12 @@ module BibTeX
859
867
  def default_key
860
868
  k = names[0]
861
869
  k = k.respond_to?(:family) ? k.family : k.to_s
862
- k = k[/[A-Za-z]+/] || 'unknown'
870
+ k = BibTeX.transliterate(k)
871
+ k = k[/[A-Za-z-]+/] || 'unknown'
863
872
  k << (has_field?(:year) ? year : '-')
864
873
  k << 'a'
865
874
  k.downcase!
866
875
  k
867
876
  end
868
-
869
-
870
877
  end
871
878
  end
@@ -46,8 +46,8 @@ module BibTeX
46
46
  :braces => /\{|\}/o,
47
47
  :eq => /\s*=\s*/o,
48
48
  :comma => /\s*,\s*/o,
49
- :number => /\d+/o,
50
- :name => /[[:alpha:]\d\/:_!$\?\.%&\*-]+/io,
49
+ :number => /[[:digit:]]+/o,
50
+ :name => /[[:alpha:][:digit:]\/:_!$\?\.%&\*-]+/io,
51
51
  :quote => /\s*"/o,
52
52
  :unquote => /[\{\}"]/o,
53
53
  :sharp => /\s*#\s*/o,
@@ -59,8 +59,8 @@ module BibTeX
59
59
  :string => /string/io,
60
60
  :comment => /comment\b/io,
61
61
  :preamble => /preamble\b/io,
62
- :key => /\s*[[:alpha:]\d \/:_!$\?\.%+&\*-]+,/io,
63
- :optional_key => /\s*[[:alpha:]\d \/:_!$\?\.%+&\*-]*,/io
62
+ :key => /\s*[[:alpha:][:digit:] \/:_!$\?\.%+&\*-]+,/io,
63
+ :optional_key => /\s*[[:alpha:][:digit:] \/:_!$\?\.%+&\*-]*,/io
64
64
  }.freeze
65
65
 
66
66
  MODE = Hash.new(:meta).merge({
@@ -18,9 +18,9 @@
18
18
 
19
19
  module BibTeX
20
20
  module Version
21
- MAJOR = 2
22
- MINOR = 3
23
- PATCH = 4
21
+ MAJOR = 3
22
+ MINOR = 0
23
+ PATCH = 0
24
24
  BUILD = nil
25
25
 
26
26
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.').freeze
@@ -269,6 +269,11 @@ module BibTeX
269
269
  assert_equal 'Melville', e['author'][0]['family']
270
270
  end
271
271
 
272
+ it 'support literal dates in citeproc export' do
273
+ @entry.year = 'Test'
274
+ assert_equal({ 'literal' => 'Test' }, @entry.issued)
275
+ end
276
+
272
277
  describe 'given a filter object or a filter name' do
273
278
  before do
274
279
  @filter = Object.new
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'helper.rb'
2
4
 
3
5
  module BibTeX
@@ -21,6 +23,10 @@ module BibTeX
21
23
  Lexer.new.analyse("@misc{foo, }").symbols.must_be :==, [:AT, :NAME, :LBRACE, :KEY, :RBRACE, false]
22
24
  end
23
25
 
26
+ it 'matches KEY tokens with non-ascii characters' do
27
+ Lexer.new.analyse("@misc{löwe, }").symbols.must_be :==, [:AT, :NAME, :LBRACE, :KEY, :RBRACE, false]
28
+ end
29
+
24
30
  it 'matches KEY tokens after whitespace' do
25
31
  Lexer.new.analyse("@misc{ foo, }").symbols.must_be :==, [:AT, :NAME, :LBRACE, :KEY, :RBRACE, false]
26
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibtex-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.4
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvester Keil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-22 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: latex-decode
@@ -71,6 +71,8 @@ files:
71
71
  - features/issues/latex_filter.feature
72
72
  - features/issues/multiline_strings.feature
73
73
  - features/issues/name_parsing.feature
74
+ - features/issues/non_ascii_default_keys.feature
75
+ - features/issues/non_ascii_keys.feature
74
76
  - features/issues/number_keys.feature
75
77
  - features/issues/parse_months.feature
76
78
  - features/issues/slash_keys.feature