bibtex-ruby 1.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.

@@ -0,0 +1,43 @@
1
+ #--
2
+ # BibTeX-Ruby
3
+ # Copyright (C) 2010 Sylvester Keil <http://sylvester.keil.or.at>
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ #++
18
+
19
+ module BibTeX
20
+ # This module contains functions to manipulate BibTeX
21
+ # string literals.
22
+ module StringReplacement
23
+
24
+ # Returns a string representation of the literal.
25
+ def self.to_s(value,options={})
26
+ return if value.nil?
27
+ options[:delimiter] ||= ['"','"']
28
+ #options[:delimiter] ||= ['{','}']
29
+
30
+ if value.empty? || (value.length == 1 && !value[0].kind_of?(Symbol))
31
+ [options[:delimiter][0],value,options[:delimiter][1]].join
32
+ else
33
+ value.map { |s| s.kind_of?(Symbol) ? s.to_s : s.inspect}.join(' # ')
34
+ end
35
+ end
36
+
37
+ # Replaces all string constants in +value+ which are defined in +hsh+.
38
+ def self.replace(value,hsh)
39
+ return if value.nil?
40
+ value.map { |s| s.kind_of?(Symbol) && hsh.has_key?(s) ? hsh[s] : s }.flatten
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ # BibTeX-Ruby
2
+ # Copyright (C) 2010-2011 Sylvester Keil <http://sylvester.keil.or.at>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ #++
17
+
18
+ #
19
+ # This file contains extensions to the Ruby core
20
+ #
21
+
22
+ class StringScanner
23
+
24
+ alias orig_scan_until scan_until
25
+
26
+ def pre_match_offset(offset)
27
+ self.pre_match[offset..-1]
28
+ end
29
+
30
+ # Like the original +scan_until+ but sets the start of `pre_match' to the
31
+ # current position not to zero
32
+ def scan_until(pattern)
33
+
34
+ end
35
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ %%
2
+ %% A valid BibTeX file that contains no BibTeX objects
3
+ %%
4
+
5
+ Therefore, all content is treated as a comment
6
+
7
+
8
+ string{ foo = "bar" }
9
+
@@ -0,0 +1 @@
1
+ @string{ foo = "bar" }
@@ -0,0 +1,26 @@
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}"}
26
+
@@ -0,0 +1,16 @@
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
+ }
@@ -0,0 +1,15 @@
1
+ %
2
+ % A valid BibTeX file
3
+ %
4
+
5
+ % Simple comments
6
+
7
+ @comment{ A comment can contain pretty much anything }
8
+
9
+ Here a comment is used to comment out otherwise valid
10
+ entries:
11
+ @comment{
12
+ @string{ foo = "bar" }
13
+
14
+ @string{ bar = "foo" }
15
+ }
@@ -0,0 +1,12 @@
1
+ %%
2
+ %% This is a valid BibTeX File
3
+ %%
4
+
5
+ % Testing @preamble statements
6
+
7
+ @preamble{"This bibliography was created \today"}
8
+ @preamble { "Bib\TeX" }
9
+
10
+ @string{ maintainer = "Myself"}
11
+
12
+ @preamble { "Maintained by " # maintainer }
@@ -0,0 +1,20 @@
1
+ %%
2
+ %% A valid BibTeX file
3
+ %%
4
+
5
+ %% This file contains a few entries
6
+
7
+ @book{key:0,
8
+ author = "Poe, Edgar A.",
9
+ title = {Selected \emph{Poetry} and `Tales'},
10
+ publisher = "American Library",
11
+ year = 2003
12
+ }
13
+
14
+ @article { key:1 ,
15
+ author={Hawthorne, Nathaniel},
16
+ title={Tales and Sketches},
17
+ publisher={American Library},
18
+ year={2001},}
19
+
20
+ @article{foo,}
@@ -0,0 +1,83 @@
1
+ %%
2
+ %% This BibTeX file contains all the examples of valid BibTeX objects
3
+ %% in Xavier Decoret's `A summary of BibTeX' at
4
+ %% http://artis.imag.fr/~Xavier.Decoret/resources/xdkbibtex/bibtex_summary.html
5
+ %%
6
+
7
+ @Article{py03,
8
+ author = {Xavier D\'ecoret},
9
+ title = "PyBiTex",
10
+ year = 2003
11
+ }
12
+
13
+ @Article{key03,
14
+ title = "A {bunch {of} braces {in}} title"
15
+ }
16
+
17
+ @Article{key01,
18
+ author = "Simon {"}the {saint"} Templar",
19
+ }
20
+
21
+ @Article{key01,
22
+ title = "The history of @ sign"
23
+ }
24
+
25
+ Some {{comments} with unbalanced braces
26
+ ....and a "commented" entry...
27
+
28
+ Book{landru21,
29
+ author = {Landru, Henri D\'esir\'e},
30
+ title = {A hundred recipes for you wife},
31
+ publisher = {Culinary Expert Series},
32
+ year = 1921
33
+ }
34
+
35
+ ..some other comments..before a valid entry...
36
+
37
+ @Book{steward03,
38
+ author = { Martha Steward },
39
+ title = {Cooking behind bars},
40
+ publisher = {Culinary Expert Series},
41
+ year = 2003
42
+ }
43
+
44
+ ...and finally an entry commented by the use of the special Comment entry type.
45
+
46
+ @Comment{steward03,
47
+ author = {Martha Steward},
48
+ title = {Cooking behind bars},
49
+ publisher = {Culinary Expert Series},
50
+ year = 2003
51
+ }
52
+ [Note: here BibTeX-Ruby differs from bibtex in that it does not parse
53
+ the nested book as an object, but treats it as a comment!]
54
+ @Comment{
55
+ @Book{steward03,
56
+ author = {Martha Steward},
57
+ title = {Cooking behind bars},
58
+ publisher = {Culinary Expert Series},
59
+ year = 2003
60
+ }
61
+ }
62
+
63
+ @String{mar = "march"}
64
+
65
+ @Book{sweig42,
66
+ Author = { Stefan Sweig },
67
+ title = { The impossible book },
68
+ publisher = { Dead Poet Society},
69
+ year = 1942,
70
+ month = "1~" # mar
71
+ }
72
+
73
+
74
+ @String {firstname = "Xavier"}
75
+ @String {lastname = "Decoret"}
76
+ @String {email = firstname # "." # lastname # "@imag.fr"}
77
+
78
+ @preamble {"This bibliography was generated on \today"}
79
+
80
+ @String {maintainer = "Xavier D\'ecoret"}
81
+
82
+ @preamble { "Maintained by " # maintainer }
83
+
@@ -0,0 +1,67 @@
1
+ %%
2
+ %% A BibTeX file with various errors.
3
+ %%
4
+
5
+ In strict mode we cannot have the AT symbol anywhere except inside literals
6
+ or comment objects.
7
+
8
+ Unbalanced braces in string literal:
9
+ @string{ foo = "foo }
10
+
11
+ Another unbalanced braces in string literal:
12
+ @string{ foo = "foo{"} }
13
+
14
+ Another unterminated string literal:
15
+ @string{ foo = "foo{" }
16
+
17
+ A valid objects after two invalid ones:
18
+ @string { foo="foo"}
19
+
20
+ Unterminated literal:
21
+ @preamble { "{" # foo # "bar" }
22
+
23
+ Valid object:
24
+ @preamble {
25
+ "preamble"
26
+
27
+ }
28
+
29
+ Bad Syntax:
30
+ @book{
31
+ author = "An Author"
32
+ }
33
+
34
+ @book{key
35
+ author = "An Author"
36
+ }
37
+
38
+ @book{key,
39
+ author = "An Author"
40
+ title = "The Title"
41
+ }
42
+
43
+ Unterminated string:
44
+ @book{key,
45
+ author = "An Author,
46
+ title = "The Title"
47
+ }
48
+
49
+ Better syntax:
50
+ @book{ key, author ="An Author", title = "The Title"}
51
+
52
+ Unterminated object:
53
+ @preamble{ "hello"
54
+
55
+ @string
56
+ { bar =
57
+ "bar"
58
+
59
+ Better:
60
+ @string
61
+
62
+ {
63
+ bar
64
+ =
65
+ "bar"
66
+
67
+ }
@@ -0,0 +1,47 @@
1
+ %% This BibTeX bibliography file was created using BibDesk.
2
+ %% http://bibdesk.sourceforge.net/
3
+
4
+
5
+ %% Created for Sylvester Keil at 2010-08-05 10:07:07 +0200
6
+
7
+
8
+ %% Saved with string encoding Unicode (UTF-8)
9
+
10
+
11
+
12
+ @book{rails,
13
+ Address = {Raleigh, North Carolina},
14
+ Author = {Ruby, Sam, and Thomas, Dave, and Hansson, David Heinemeier},
15
+ Booktitle = {Agile Web Development with Rails},
16
+ Date-Added = {2010-08-05 10:01:36 +0200},
17
+ Date-Modified = {2010-08-05 10:06:46 +0200},
18
+ Edition = {third},
19
+ Isbn = {978-1-9343561-6-6},
20
+ Keywords = {ruby, rails},
21
+ Publisher = {The Pragmatic Bookshelf},
22
+ Series = {The Facets of Ruby},
23
+ Title = {Agile Web Development with Rails},
24
+ Year = {2009}}
25
+
26
+ @book{dragon,
27
+ Address = {Boston},
28
+ Author = {Aho, Alfred V., and Lam, Monica S., and Ullman, Jeffrey D.},
29
+ Booktitle = {Compilers: Principles, Techniques, and Tools},
30
+ Date-Added = {2010-08-05 09:57:15 +0200},
31
+ Date-Modified = {2010-08-05 10:06:32 +0200},
32
+ Edition = {second},
33
+ Keywords = {compiler, lex, yacc},
34
+ Publisher = {Addison Wesley},
35
+ Title = {Compilers: Principles, Techniques, and Tools},
36
+ Year = {2007}}
37
+
38
+ @book{pickaxe,
39
+ Address = {Raleigh, North Carolina},
40
+ Author = {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
41
+ Date-Added = {2010-08-05 09:54:07 +0200},
42
+ Date-Modified = {2010-08-05 10:07:01 +0200},
43
+ Keywords = {ruby},
44
+ Publisher = {The Pragmatic Bookshelf},
45
+ Series = {The Facets of Ruby},
46
+ Title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
47
+ Year = {2009}}
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'bibtex'
3
+ require 'minitest/unit'
4
+ require 'minitest/autorun'
5
+
6
+ class TestBibtex < MiniTest::Unit::TestCase
7
+
8
+ def setup
9
+ end
10
+
11
+ def teardown
12
+ end
13
+
14
+ def test_empty
15
+ bib = BibTeX::Bibliography.open('test/bib/00_empty.bib', :debug => true)
16
+ refute_nil(bib)
17
+ assert_equal(BibTeX::Bibliography, bib.class)
18
+ assert(bib.empty?)
19
+ end
20
+
21
+ def test_no_bibtex
22
+ bib = BibTeX::Bibliography.open('test/bib/01_no_bibtex.bib', :debug => true)
23
+ refute_nil(bib)
24
+ assert_equal(BibTeX::Bibliography, bib.class)
25
+ assert(bib.empty?)
26
+ end
27
+
28
+ def test_decoret
29
+ bib = BibTeX::Bibliography.open('test/bib/08_decoret.bib', :debug => true)
30
+ refute_nil(bib)
31
+ assert_equal(BibTeX::Bibliography, bib.class)
32
+ assert_equal(15, bib.length)
33
+ assert_equal([BibTeX::Entry,BibTeX::Comment,BibTeX::String,BibTeX::Preamble], bib.data.map(&:class).uniq)
34
+ assert_equal('py03', bib.data[0].key)
35
+ assert_equal(:article, bib['py03'].type)
36
+ assert_equal(['Xavier D\\\'ecoret'], bib['py03'][:author])
37
+ assert_equal(['PyBiTex'], bib['py03'][:title])
38
+ assert_equal(['2003'], bib['py03'][:year])
39
+ assert_equal(:article, bib['key03'].type)
40
+ assert_equal(['A {bunch {of} braces {in}} title'], bib['key03'][:title])
41
+ #TODO missing assertions
42
+ end
43
+
44
+ def test_errors
45
+ bib = BibTeX::Bibliography.open('test/bib/09_errors.bib', :debug => true)
46
+ #refute_nil(bib)
47
+ end
48
+
49
+ def test_bibdesk
50
+ bib = BibTeX::Bibliography.open('test/bib/10_bibdesk.bib', :debug => true)
51
+ refute_nil(bib)
52
+ assert_equal(BibTeX::Bibliography, bib.class)
53
+ assert_equal(3, bib.length)
54
+ assert_equal('rails', bib.data[0].key)
55
+ assert_equal(['2010-08-05 10:06:32 +0200'], bib[:dragon]['date-modified'])
56
+ end
57
+ end
58
+