bibtex-ruby 1.2.1 → 1.3.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.

Files changed (67) hide show
  1. data/Gemfile +6 -1
  2. data/Gemfile.lock +48 -5
  3. data/History.txt +16 -1
  4. data/Manifest +43 -19
  5. data/README.md +178 -167
  6. data/Rakefile +26 -5
  7. data/auto.watchr +6 -0
  8. data/bibtex-ruby.gemspec +8 -5
  9. data/examples/bib2html.rb +28 -18
  10. data/features/bibtex.feature +96 -0
  11. data/features/entries.feature +67 -0
  12. data/features/issues/slash_keys.feature +21 -0
  13. data/features/names.feature +72 -0
  14. data/features/preambles.feature +27 -0
  15. data/features/query.feature +56 -0
  16. data/features/replacement.feature +68 -0
  17. data/features/step_definitions/bibtex_steps.rb +74 -0
  18. data/features/step_definitions/name_steps.rb +13 -0
  19. data/features/strings.feature +52 -0
  20. data/features/support/env.rb +7 -0
  21. data/lib/bibtex.rb +5 -1
  22. data/lib/bibtex/bibliography.rb +218 -95
  23. data/lib/bibtex/bibtex.y +18 -15
  24. data/lib/bibtex/elements.rb +130 -136
  25. data/lib/bibtex/entry.rb +133 -69
  26. data/lib/bibtex/extensions.rb +0 -35
  27. data/lib/bibtex/lexer.rb +9 -9
  28. data/lib/bibtex/name_parser.output +464 -0
  29. data/lib/bibtex/name_parser.rb +490 -0
  30. data/lib/bibtex/names.rb +162 -0
  31. data/lib/bibtex/names.y +196 -0
  32. data/lib/bibtex/parser.output +5 -5
  33. data/lib/bibtex/parser.rb +19 -16
  34. data/lib/bibtex/replaceable.rb +52 -0
  35. data/lib/bibtex/utilities.rb +23 -5
  36. data/lib/bibtex/value.rb +201 -0
  37. data/lib/bibtex/version.rb +1 -1
  38. data/test/benchmark.rb +52 -0
  39. data/test/bibtex/test_bibliography.rb +141 -0
  40. data/test/bibtex/test_elements.rb +40 -0
  41. data/test/bibtex/test_entry.rb +99 -0
  42. data/test/bibtex/test_names.rb +23 -0
  43. data/test/bibtex/test_parser.rb +79 -0
  44. data/test/bibtex/test_string.rb +83 -0
  45. data/test/bibtex/test_utilities.rb +34 -0
  46. data/test/bibtex/test_value.rb +70 -0
  47. data/test/{bib/10_bibdesk.bib → fixtures/bibdesk.bib} +1 -1
  48. data/test/{bib/05_comment.bib → fixtures/comment.bib} +0 -0
  49. data/test/{bib/08_decoret.bib → fixtures/decoret.bib} +0 -0
  50. data/test/{bib/00_empty.bib → fixtures/empty.bib} +0 -0
  51. data/test/{bib/07_entry.bib → fixtures/entry.bib} +0 -0
  52. data/test/{bib/09_errors.bib → fixtures/errors.bib} +0 -0
  53. data/test/{bib/01_no_bibtex.bib → fixtures/no_bibtex.bib} +0 -0
  54. data/test/{bib/06_preamble.bib → fixtures/preamble.bib} +1 -1
  55. data/test/{bib/11_roundtrip.bib → fixtures/roundtrip.bib} +1 -1
  56. data/test/helper.rb +17 -2
  57. data/test/test_bibtex.rb +87 -93
  58. data/test/test_export.rb +18 -22
  59. metadata +85 -30
  60. data/test/bib/02_string.bib +0 -1
  61. data/test/bib/03_string.bib +0 -25
  62. data/test/bib/04_string_replacement.bib +0 -16
  63. data/test/test_comment.rb +0 -21
  64. data/test/test_entry.rb +0 -98
  65. data/test/test_preamble.rb +0 -39
  66. data/test/test_string.rb +0 -97
  67. data/test/test_utilities.rb +0 -36
@@ -1 +0,0 @@
1
- @string{ foo = "bar" }
@@ -1,25 +0,0 @@
1
- %%
2
- %% This is a valid BibTeX file
3
- %% String assignments Test
4
- %%
5
-
6
- @string{foo="bar"}
7
- @ string{foo="bar"}
8
- @string {foo="bar"}
9
- @string{ foo="bar"}
10
- @string{foo ="bar"}
11
- @string{foo= "bar"}
12
- @string{foo="bar" }
13
- @ string { foo = "bar" }
14
- @string { foo= "bar"}
15
- @string{ foo = "bar" }
16
-
17
- @string{foo="bar"}
18
- @string{foo="'bar'"}
19
- @string{foo="{"}bar{"}"}
20
-
21
- Using some interesting symbols
22
- @string{foo="@bar@"}
23
- @string{foo="'bar'"}
24
- @string{foo="{"}bar{"}"}
25
- @string{foo="{bar}"}
@@ -1,16 +0,0 @@
1
- %%
2
- %% A valid BibTeX file
3
- %% String assignment and replacement
4
- %%
5
-
6
- @string{ foo = "foo" }
7
- @string{ bar = "bar" }
8
- @string{ foobar = foo # "bar" }
9
- @string{ foobarfoo = foobar # foo }
10
- @string{ barfoobar = bar # "foo" # bar }
11
-
12
- @preamble { "foo" # foo # foobarfoo # "bar" }
13
-
14
- @manual {manual:1,
15
- title = "foo" # barfoobar
16
- }
@@ -1,21 +0,0 @@
1
- require 'helper.rb'
2
-
3
- class TestComment < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def teardown
9
- end
10
-
11
- def test_explicit
12
- bib = BibTeX::Bibliography.open('test/bib/05_comment.bib', :debug => true)
13
- refute_nil(bib)
14
- assert_equal(BibTeX::Bibliography, bib.class)
15
- assert_equal(2, bib.data.length)
16
- assert_equal([BibTeX::Comment], bib.data.map(&:class).uniq)
17
- assert_equal(' A comment can contain pretty much anything ', bib.data[0].content)
18
- assert_equal("\n@string{ foo = \"bar\" }\n\n@string{ bar = \"foo\" }\n", bib.data[1].content)
19
- end
20
-
21
- end
@@ -1,98 +0,0 @@
1
- require 'helper.rb'
2
-
3
- class TestEntry < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def teardown
9
- end
10
-
11
- def test_simple
12
- bib = BibTeX::Bibliography.open('test/bib/07_entry.bib', :debug => true)
13
- refute_nil(bib)
14
- assert_equal(BibTeX::Bibliography, bib.class)
15
- assert_equal(3, bib.data.length)
16
- assert_equal([BibTeX::Entry], bib.data.map(&:class).uniq)
17
- assert_equal('key:0', bib.data[0].key)
18
- assert_equal('key:1', bib.data[1].key)
19
- assert_equal('foo', bib.data[2].key)
20
- assert_equal(:book, bib.data[0].type)
21
- assert_equal(:article, bib.data[1].type)
22
- assert_equal(:article, bib.data[2].type)
23
- assert_equal('Poe, Edgar A.', bib.data[0][:author])
24
- assert_equal('Hawthorne, Nathaniel', bib.data[1][:author])
25
- assert_equal('2003', bib.data[0][:year])
26
- assert_equal('2001', bib.data[1][:year])
27
- assert_equal('American Library', bib.data[0][:publisher])
28
- assert_equal('American Library', bib.data[1][:publisher])
29
- assert_equal('Selected \\emph{Poetry} and `Tales\'', bib.data[0].title)
30
- assert_equal('Tales and Sketches', bib.data[1].title)
31
- end
32
-
33
- def test_ghost_methods
34
- bib = BibTeX::Bibliography.open('test/bib/07_entry.bib', :debug => true)
35
- refute_nil(bib)
36
- assert_equal(BibTeX::Bibliography, bib.class)
37
- assert_equal('Poe, Edgar A.', bib.data[0].author)
38
-
39
- expected = 'Poe, Edgar Allen'
40
- bib.data[0].author = expected
41
-
42
- assert_equal(expected, bib.data[0].author)
43
- end
44
-
45
- def test_creation_simple
46
- expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
47
-
48
- entry = BibTeX::Entry.new
49
- entry.type = :book
50
- entry.key = 'raven'
51
- entry.author = 'Poe, Edgar A.'
52
- entry.title = 'The Raven'
53
-
54
- assert_equal(expected, entry.to_s)
55
- end
56
-
57
- def test_creation_from_hash
58
- expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
59
-
60
- entry = BibTeX::Entry.new({
61
- :type => 'book',
62
- :key => 'raven',
63
- :author => 'Poe, Edgar A.',
64
- :title => 'The Raven'
65
- })
66
-
67
- assert_equal(expected, entry.to_s)
68
- end
69
-
70
- def test_creation_from_block
71
- expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
72
-
73
- entry = BibTeX::Entry.new do |e|
74
- e.type = :book
75
- e.key = 'raven'
76
- e.author = 'Poe, Edgar A.'
77
- e.title = 'The Raven'
78
- end
79
-
80
- assert_equal(expected, entry.to_s)
81
- end
82
-
83
- def test_sorting
84
- entries = []
85
- entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven3', :author => 'Poe, Edgar A.', :title => 'The Raven'})
86
- entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven2', :author => 'Poe, Edgar A.', :title => 'The Raven'})
87
- entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven1', :author => 'Poe, Edgar A.', :title => 'The Raven'})
88
- entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven1', :author => 'Poe, Edgar A.', :title => 'The Aven'})
89
-
90
- entries.sort!
91
-
92
- assert_equal(%w{ raven1 raven1 raven2 raven3 }, entries.map(&:key))
93
- assert_equal([ 'The Aven', 'The Raven' ], entries.map(&:title)[0,2])
94
-
95
- end
96
-
97
-
98
- end
@@ -1,39 +0,0 @@
1
- require 'helper.rb'
2
-
3
- class TestPreamble < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- @bib = BibTeX::Bibliography.open('test/bib/06_preamble.bib', :debug => true, :strict => false)
7
- end
8
-
9
- def teardown
10
- end
11
-
12
- def test_simple
13
- refute_nil(@bib)
14
- assert_equal(BibTeX::Bibliography, @bib.class)
15
- assert_equal(4, @bib.data.length)
16
- assert_equal([BibTeX::Preamble,BibTeX::String], @bib.data.map(&:class).uniq)
17
- assert_equal('"This bibliography was created \\today"', @bib.data[0].content)
18
- assert_equal('"Bib\\TeX"', @bib.data[1].content)
19
- assert_equal('"Maintained by " # maintainer', @bib.data[3].content)
20
- end
21
-
22
- def test_roundtrip
23
- assert_equal(%q[@preamble{ "This bibliography was created \today" }], @bib.data[0].to_s)
24
- assert_equal(%q[@preamble{ "Bib\TeX" }], @bib.data[1].to_s)
25
- assert_equal(%q[@string{ maintainer = "Myself" }], @bib.data[2].to_s)
26
- assert_equal(%q[@preamble{ "Maintained by " # maintainer }], @bib.data[3].to_s)
27
- end
28
-
29
- def test_replacement
30
- bib = BibTeX::Bibliography.open('test/bib/06_preamble.bib', :debug => true, :strict => false)
31
- refute_nil(bib)
32
- assert_equal(%q[@preamble{ "Maintained by " # maintainer }], bib.data[3].to_s)
33
- bib.replace_strings
34
- assert_equal('"Maintained by " # "Myself"', bib.data[3].content)
35
- assert_equal(%q[@preamble{ "Maintained by " # "Myself" }], bib.data[3].to_s)
36
- bib.join_strings
37
- assert_equal(%q[@preamble{ "Maintained by Myself" }], bib.data[3].to_s)
38
- end
39
- end
@@ -1,97 +0,0 @@
1
- require 'helper.rb'
2
-
3
- class TestString < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def teardown
9
- end
10
-
11
- def test_simple
12
- bib = BibTeX::Bibliography.open('test/bib/02_string.bib', :debug => true)
13
- refute_nil(bib)
14
- assert(bib.kind_of? BibTeX::Bibliography)
15
- refute(bib.empty?)
16
- assert_equal(bib.data.length,1)
17
- assert(bib.data.first.is_a?(BibTeX::String))
18
- assert_equal(:foo, bib.data.first.key)
19
- assert_equal('"bar"', bib.data.first.value)
20
- assert_equal(["bar"], bib.strings[:foo])
21
- end
22
-
23
- def test_assignment
24
- bib = BibTeX::Bibliography.open('test/bib/03_string.bib', :debug => true)
25
- refute_nil(bib)
26
- assert(bib.kind_of? BibTeX::Bibliography)
27
- refute(bib.empty?)
28
- assert_equal(bib.data.length,17)
29
- assert_equal(bib.data.map(&:class).uniq, [BibTeX::String])
30
- assert_equal(bib.data.map(&:key).uniq, [:foo])
31
- (0..10).each { |i| assert_equal( '"bar"', bib.data[i].value) }
32
- assert_equal(bib.data[11].value, '"\'bar\'"')
33
- assert_equal(bib.data[12].value, '"{"}bar{"}"')
34
- assert_equal(bib.data[13].value, '"@bar@"')
35
- assert_equal(bib.data[14].value, '"\'bar\'"')
36
- assert_equal(bib.data[15].value, '"{"}bar{"}"')
37
- assert_equal(bib.data[16].value, '"{bar}"')
38
- end
39
-
40
- def test_replacement
41
- bib = BibTeX::Bibliography.open('test/bib/04_string_replacement.bib', :debug => true)
42
- refute_nil(bib)
43
- assert(bib.kind_of?(BibTeX::Bibliography))
44
- refute(bib.empty?)
45
- assert_equal(7,bib.length)
46
- assert_equal([BibTeX::String,BibTeX::Preamble,BibTeX::Entry], bib.data.map(&:class).uniq)
47
- assert_equal(["foo"], bib.strings[:foo])
48
- assert_equal(["bar"], bib.strings[:bar])
49
- assert_equal([:foo, "bar"], bib.strings[:foobar])
50
- assert_equal([:foobar, :foo], bib.strings[:foobarfoo])
51
- assert_equal([:bar, "foo", :bar], bib.strings[:barfoobar])
52
- assert_equal('"foo" # foo # foobarfoo # "bar"', bib.preamble[0].content)
53
- assert_equal('"foo" # barfoobar', bib['manual:1'].title)
54
-
55
- bib.replace_strings({ :include => [BibTeX::Preamble]})
56
- assert_equal(["foo"], bib.strings[:foo])
57
- assert_equal(["bar"], bib.strings[:bar])
58
- assert_equal([:foo, "bar"], bib.strings[:foobar])
59
- assert_equal([:foobar, :foo], bib.strings[:foobarfoo])
60
- assert_equal([:bar, "foo", :bar], bib.strings[:barfoobar])
61
- assert_equal('"foo" # "foo" # foobar # foo # "bar"', bib.preamble[0].content)
62
- assert_equal('"foo" # barfoobar', bib['manual:1'].title)
63
-
64
- bib.replace_strings({ :include => [BibTeX::String]})
65
- assert_equal(['foo','bar'], bib.strings[:foobar])
66
- assert_equal(['foo', 'bar','foo'], bib.strings[:foobarfoo])
67
- assert_equal(['bar','foo','bar'], bib.strings[:barfoobar])
68
- assert_equal('"foo" # "foo" # foobar # foo # "bar"', bib.preamble[0].content)
69
- assert_equal('"foo" # barfoobar', bib['manual:1'].title)
70
-
71
- bib.replace_strings({ :include => [BibTeX::Preamble,BibTeX::Entry]})
72
- assert_equal('"foo" # "foo" # "foo" # "bar" # "foo" # "bar"', bib.preamble[0].content)
73
- assert_equal('"foo" # "bar" # "foo" # "bar"', bib['manual:1'].title)
74
- end
75
-
76
- def test_roundtrip
77
- bib = BibTeX::Bibliography.open('test/bib/04_string_replacement.bib', :debug => true)
78
- refute_nil(bib)
79
- assert_equal('@string{ foo = "foo" }', bib.data[0].to_s)
80
- assert_equal('@string{ bar = "bar" }', bib.data[1].to_s)
81
- assert_equal('@string{ foobar = foo # "bar" }', bib.data[2].to_s)
82
- assert_equal('@string{ foobarfoo = foobar # foo }', bib.data[3].to_s)
83
- assert_equal('@string{ barfoobar = bar # "foo" # bar }', bib.data[4].to_s)
84
- bib.replace_strings
85
- assert_equal('@string{ foo = "foo" }', bib.data[0].to_s)
86
- assert_equal('@string{ bar = "bar" }', bib.data[1].to_s)
87
- assert_equal('@string{ foobar = "foo" # "bar" }', bib.data[2].to_s)
88
- assert_equal('@string{ foobarfoo = "foo" # "bar" # "foo" }', bib.data[3].to_s)
89
- assert_equal('@string{ barfoobar = "bar" # "foo" # "bar" }', bib.data[4].to_s)
90
- bib.join_strings
91
- assert_equal('@string{ foo = "foo" }', bib.data[0].to_s)
92
- assert_equal('@string{ bar = "bar" }', bib.data[1].to_s)
93
- assert_equal('@string{ foobar = "foobar" }', bib.data[2].to_s)
94
- assert_equal('@string{ foobarfoo = "foobarfoo" }', bib.data[3].to_s)
95
- assert_equal('@string{ barfoobar = "barfoobar" }', bib.data[4].to_s)
96
- end
97
- end
@@ -1,36 +0,0 @@
1
- require 'helper.rb'
2
-
3
- class TestBibtex < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def teardown
9
- end
10
-
11
- def test_empty
12
- bib = BibTeX.open('test/bib/00_empty.bib', :debug => true)
13
- refute_nil(bib)
14
- assert_equal(BibTeX::Bibliography, bib.class)
15
- assert(bib.empty?)
16
- end
17
-
18
- def test_parse
19
- bib = BibTeX.parse %q[ @book{ id, author = {Poe, Edgar Allen}, title = "Ligeia" } ]
20
- refute_nil(bib)
21
- assert_equal(BibTeX::Bibliography, bib.class)
22
- [
23
- [1, bib.length],
24
- ['Ligeia', bib[:id].title],
25
- ['Poe, Edgar Allen', bib[:id].author]
26
- ].each { |a| assert_equal(a[0], a[1]) }
27
- end
28
-
29
- def test_validate
30
- refute BibTeX.parse(%q[ @book{ id, author = {Poe, Edgar Allen}, title = "Ligeia" } ]).valid?
31
- assert BibTeX.parse(%q[ @book{ id, author = {Poe, Edgar Allen}, title = "Ligeia", publisher = "Penguin", year = 1996 } ]).valid?
32
- refute BibTeX.parse(%q[ @book{ id, author = {Poe, Edgar Allen}, title = "Lig"eia", publisher = "Penguin", year = 1996 } ]).valid?
33
- assert BibTeX.valid?('test/bib/10_bibdesk.bib')
34
- end
35
-
36
- end