bibtex-ruby 2.3.4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.

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