bibout 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +18 -0
- data/bin/bibout +63 -0
- data/lib/bibout/bibtex.rb +109 -0
- data/lib/bibout/erb_binding.rb +63 -0
- data/lib/bibout.rb +40 -0
- data/test/test_bib.rb +77 -0
- data/test/test_bibout.rb +109 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b5ace274726271cc7dad80e58d5f017244081497
|
4
|
+
data.tar.gz: 473d2b2666ad65b7ac322e94890cb77cb19661e9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a286408043f4143eea87aafc3cddb435ea6a84679e571fc141e88517a126d8e756aa91c88c5474bad6cb42ba30ad71b33a855191a498dd25364a4229d45a9586
|
7
|
+
data.tar.gz: 7cea2697ceefa319cb502941893e75117d2a53454e35445037b212bd50e71ad7a0f4fedc8dd890fd3a423625ddf3284d6af3008df20024f345ba6e31025ffa4b
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
Rake::TestTask.new do |t|
|
4
|
+
t.libs << 'test'
|
5
|
+
end
|
6
|
+
|
7
|
+
desc "Run tests"
|
8
|
+
task :default => :test
|
9
|
+
|
10
|
+
require 'rdoc/task'
|
11
|
+
|
12
|
+
RDoc::Task.new do |rdoc|
|
13
|
+
rdoc.main = "README.rdoc"
|
14
|
+
rdoc.rdoc_files.include("README.rdoc", "lib/bibout.rb", "lib/bibout/bibtex.rb", "lib/bibout/erb_binding.rb")
|
15
|
+
rdoc.generator = 'bootstrap'
|
16
|
+
rdoc.rdoc_dir = 'gh-pages/rdoc'
|
17
|
+
end
|
18
|
+
|
data/bin/bibout
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Author: Charles Sutton <csutton@inf.ed.ac.uk>
|
4
|
+
# Created: 2008-03-03.
|
5
|
+
# Copyright (c) 2008. All rights reserved.
|
6
|
+
|
7
|
+
$CURRENT_DIR = "FOOBAR"
|
8
|
+
|
9
|
+
require 'bibout'
|
10
|
+
require 'optparse'
|
11
|
+
|
12
|
+
options = { :template => nil, :output_file => nil }
|
13
|
+
|
14
|
+
opts = OptionParser.new
|
15
|
+
|
16
|
+
opts.banner = "Usage: bibout [options] <bibfile>"
|
17
|
+
opts.on("-tMANDATORY", "--template MANDATORY", "Name of template file") do |tmpl|
|
18
|
+
options[:template] = tmpl
|
19
|
+
end
|
20
|
+
opts.on("-oFILENAME", "--output FILE_NAME", "Name of output file (if unspecified, uses stdout)") do |ofile|
|
21
|
+
options[:output_file] = ofile
|
22
|
+
end
|
23
|
+
opts.on("-dDIRECTORY", "--directory DIR", "Base directory for embed() calls in template (default: directory of template)") do |dir|
|
24
|
+
options[:dir] = dir
|
25
|
+
end
|
26
|
+
opts.on("-r", "--require module1,...,moduleN", Array, "Ruby modules to require before running templates") do |r|
|
27
|
+
options[:require_list] = r
|
28
|
+
end
|
29
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
30
|
+
puts opts
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
opts.parse!
|
34
|
+
|
35
|
+
bibfile = ARGV[0]
|
36
|
+
|
37
|
+
if options[:template].nil?
|
38
|
+
puts "Error: Missing template file"
|
39
|
+
puts opts
|
40
|
+
abort
|
41
|
+
end
|
42
|
+
if bibfile.nil?
|
43
|
+
puts "Error: Missing BibTeX file"
|
44
|
+
puts opts
|
45
|
+
abort
|
46
|
+
end
|
47
|
+
if not options[:require_list].nil?
|
48
|
+
options[:require_list].each { |x| require x }
|
49
|
+
end
|
50
|
+
|
51
|
+
#########################################################################
|
52
|
+
|
53
|
+
bib = BibTeX.open(bibfile, :filter => :latex)
|
54
|
+
bib.replace # substitute all @string mentions
|
55
|
+
|
56
|
+
result = BibOut.new(options[:dir]).process_file(bib, options[:template])
|
57
|
+
|
58
|
+
if options[:output_file].nil?
|
59
|
+
print (result)
|
60
|
+
else
|
61
|
+
File.open(options[:output_file], "w") { |outf| outf << result }
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# -*- coding: iso-8859-1 -*-
|
2
|
+
# -*- ruby-mode -*-
|
3
|
+
# Extensions to 'bibtex-ruby' library that adds some convenience methods.
|
4
|
+
|
5
|
+
# Author:: Charles Sutton (mailto:csutton@inf.ed.ac.uk)
|
6
|
+
# Copyright:: Copyright (c) 2013 Charles Sutton
|
7
|
+
# License:: MIT
|
8
|
+
|
9
|
+
|
10
|
+
require 'bibtex'
|
11
|
+
|
12
|
+
module BibTeX
|
13
|
+
|
14
|
+
# A list of Symbols naming fields that are commonly used in BibTeX entries.
|
15
|
+
$STANDARD_FIELDS = [
|
16
|
+
:address,
|
17
|
+
:annote,
|
18
|
+
:author,
|
19
|
+
:booktitle,
|
20
|
+
:chapter,
|
21
|
+
:crossref,
|
22
|
+
:edition,
|
23
|
+
:editor,
|
24
|
+
:howpublished,
|
25
|
+
:institution,
|
26
|
+
:journal,
|
27
|
+
:month,
|
28
|
+
:number,
|
29
|
+
:organization,
|
30
|
+
:pages,
|
31
|
+
:publisher,
|
32
|
+
:school,
|
33
|
+
:series,
|
34
|
+
:title,
|
35
|
+
:type,
|
36
|
+
:volume,
|
37
|
+
:year
|
38
|
+
].freeze
|
39
|
+
|
40
|
+
|
41
|
+
# This class represents a bibliography, usually a single BibTeX file.
|
42
|
+
#
|
43
|
+
# This is the same class as {BibTeX::Bibliography}[http://rubydoc.info/gems/bibtex-ruby/BibTeX/Bibliography] from bibtex-ruby.
|
44
|
+
# See those class docs for more information.
|
45
|
+
class Bibliography
|
46
|
+
|
47
|
+
# Returns a list of all values of the specified field type, across all entries in the bibliography
|
48
|
+
#
|
49
|
+
# This generalizes the names method to arbitrary field types
|
50
|
+
#
|
51
|
+
# Ex: all_values(:year)
|
52
|
+
# --> list of all years that appear in the bibliography
|
53
|
+
def all_values(field)
|
54
|
+
return map { |e| e[field] }.flatten.compact.map { |v| v.to_s }.sort.uniq
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns a list of all of the Entries in this bibliography,
|
58
|
+
# sorted by calling the given block. Fixes a problem with the
|
59
|
+
# sort_by method in the bibtex-ruby version
|
60
|
+
# of this class.
|
61
|
+
def sort_by(*arguments, &block)
|
62
|
+
data.sort_by(*arguments, &block)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns a list of all of the Entries in this bibliography,
|
66
|
+
# sorted by in the specified order. Fixes a problem with bibtex-ruby.
|
67
|
+
def sort(*arguments, &block)
|
68
|
+
data.sort(*arguments, &block)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
# This class represents a single entry in a bibliography.
|
74
|
+
# This is the same class as {BibTeX::Entry}[http://rubydoc.info/gems/bibtex-ruby/BibTeX/Entry] from bibtex-ruby.
|
75
|
+
# See those class docs for more information.
|
76
|
+
class Entry
|
77
|
+
|
78
|
+
# Returns a copy of this entry that has all non-standard BibTeX fields removed.
|
79
|
+
def minimize
|
80
|
+
result = clone
|
81
|
+
fields.each do |k,v|
|
82
|
+
if not $STANDARD_FIELDS.include? k
|
83
|
+
result.delete k
|
84
|
+
end
|
85
|
+
end
|
86
|
+
result
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# This class represents a list of names.
|
93
|
+
# This is the same class as {BibTeX::Names}[http://rubydoc.info/gems/bibtex-ruby/BibTeX/Names] from bibtex-ruby.
|
94
|
+
# See those class docs for more information.
|
95
|
+
class Names
|
96
|
+
|
97
|
+
# Returns a string containing the list of names in first-last order,
|
98
|
+
# correctly delimited by commas and and
|
99
|
+
def pretty(options={})
|
100
|
+
names = map { |n| n.display_order(options) }
|
101
|
+
return to_s if names.nil? or names.length < 1
|
102
|
+
return names[0].to_s if names.length == 1
|
103
|
+
names[0..-2].join(", ") + " and " + names[-1]
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Contains variables and methods that are useful for bibout templates.
|
2
|
+
#
|
3
|
+
# When a template is formatted using #BibOut.result or ErbBinding#embed,
|
4
|
+
# it is evaluated within the context of an ErbBinding object,
|
5
|
+
# so all instance varaibles and methods are available within
|
6
|
+
# code blocks of the template.
|
7
|
+
class ErbBinding < OpenStruct
|
8
|
+
|
9
|
+
# Name of the base directory for finding any sub-templates using #embed
|
10
|
+
attr_accessor :root_dir
|
11
|
+
|
12
|
+
# The current bibliography being processed. Of type #BibTeX::Bibliography
|
13
|
+
attr_accessor :bib
|
14
|
+
|
15
|
+
# Creates an Erb binding that can be used to process a template.
|
16
|
+
# Params:
|
17
|
+
# +bib+:: Bibliography object to run the template on
|
18
|
+
# +root_dir+:: Name of the directory to run the template in. This is used
|
19
|
+
# as the "current directory" if sub-templates are called using #embed
|
20
|
+
# +hash+:: Contains any keyword arguments that should be passed to the template
|
21
|
+
def initialize(bib, root_dir, hash=nil)
|
22
|
+
super(hash)
|
23
|
+
@bib = bib
|
24
|
+
@root_dir = root_dir
|
25
|
+
end
|
26
|
+
|
27
|
+
# Processes a given string as a bibout template
|
28
|
+
# Params:
|
29
|
+
# +tmpl+:: String containing text of template to process
|
30
|
+
# +fname+:: Name that should be used to identify template in error messages
|
31
|
+
# +hash+:: Contains any keyword arguments that should be passed to the template
|
32
|
+
def process_string(tmpl, fname='(bibout)', hash=nil)
|
33
|
+
bind = ErbBinding.new(@bib, @root_dir, hash).get_binding()
|
34
|
+
erb = ERB.new(tmpl)
|
35
|
+
erb.filename = fname
|
36
|
+
erb.result(bind)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Processes a file as a bibout template, and returns the result.
|
40
|
+
#
|
41
|
+
# The file is assumed to reside in the directory #@root_dir
|
42
|
+
# Keyword options can be passed to the template.
|
43
|
+
# The sub-template will be passed in the same bibliography as this template.
|
44
|
+
#
|
45
|
+
# Params:
|
46
|
+
# +fname+:: Name of file containing template to process
|
47
|
+
# +hash+:: Contains any keyword arguments that should be passed to the template
|
48
|
+
def embed(fname, hash=nil)
|
49
|
+
if not @root_dir.nil?
|
50
|
+
fname = File.join(@root_dir, fname)
|
51
|
+
end
|
52
|
+
File.open(fname) do |f|
|
53
|
+
tmpl = f.read()
|
54
|
+
process_string(tmpl, fname, hash)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Should not be called by external users
|
59
|
+
def get_binding
|
60
|
+
return binding()
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/lib/bibout.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Author: Charles Sutton <csutton@inf.ed.ac.uk>
|
2
|
+
# Created: 2008-03-03.
|
3
|
+
# Copyright (c) 2008. All rights reserved.
|
4
|
+
|
5
|
+
require 'erb'
|
6
|
+
require 'ostruct'
|
7
|
+
require 'bibout/bibtex'
|
8
|
+
require 'bibout/erb_binding'
|
9
|
+
|
10
|
+
# Toplevel class for processing templates.
|
11
|
+
# Delegates everything to ErbBinding
|
12
|
+
class BibOut
|
13
|
+
|
14
|
+
# Name of a directory containing template files.
|
15
|
+
# This is used as the base directory when one template is embedded within another.
|
16
|
+
attr_accessor :root_dir
|
17
|
+
|
18
|
+
def initialize(root_dir=nil)
|
19
|
+
@root_dir = root_dir
|
20
|
+
end
|
21
|
+
|
22
|
+
# Processes a file containing a bibout template.
|
23
|
+
# Params:
|
24
|
+
# +bib+:: Name of BibTeX file
|
25
|
+
# +filename+:: Name of BibOut template file
|
26
|
+
def process_file(bib, filename)
|
27
|
+
ErbBinding.new(bib, @root_dir).embed(filename)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Processes a string containing a bibout template.
|
31
|
+
# Params:
|
32
|
+
# +bib+:: Name of BibTeX file
|
33
|
+
# +filename+:: String containing text of BibOut template
|
34
|
+
def process_string(bib, string)
|
35
|
+
ErbBinding.new(bib, @root_dir).process_string(string)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
data/test/test_bib.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'bibout'
|
3
|
+
|
4
|
+
# Tests the extensions that this project makes to
|
5
|
+
# BibTeX::Bibliography and friends.
|
6
|
+
class BibliographyTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
current_dir = File.expand_path File.dirname(__FILE__)
|
10
|
+
@data_dir = File.join(current_dir, "data")
|
11
|
+
@bib = BibTeX.open(File.join(@data_dir, "test.bib"))
|
12
|
+
@bib_sutton = BibTeX.open(File.join(@data_dir, "sutton.bib"), :format => :latex)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_years
|
16
|
+
years = @bib.all_values(:year).sort
|
17
|
+
assert_equal ["1951", "1953", "1979"], years
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_all_values2
|
21
|
+
vols = @bib.all_values(:volume).sort
|
22
|
+
assert_equal ["21", "22"], vols
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_names_pretty
|
26
|
+
e = @bib["robbins-monro"]
|
27
|
+
name_str = e.author.pretty
|
28
|
+
assert_equal "H. Robbins and S. Monro", name_str
|
29
|
+
|
30
|
+
e = @bib["metropolis"]
|
31
|
+
name_str = e.author.pretty
|
32
|
+
assert_equal "N. Metropolis, A. Rosenbluth, M. Rosenbluth, A. Teller and E. Teller", name_str
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_names_single_pretty
|
36
|
+
e = @bib_sutton["sutton:thesis"]
|
37
|
+
assert_equal "Charles Sutton", e.author.pretty
|
38
|
+
end
|
39
|
+
|
40
|
+
$FUNNY_BIB = <<END
|
41
|
+
@book{garey:johnson,
|
42
|
+
Address = {New York, NY, USA},
|
43
|
+
Author = {Garey, Michael R. and Johnson, David S.},
|
44
|
+
Publisher = {W. H. Freeman \& Co.},
|
45
|
+
Title = {Computers and Intractability: A Guide to the Theory of NP-Completeness},
|
46
|
+
Tags = {Classic},
|
47
|
+
InternalCruft = xyzzy,
|
48
|
+
Year = {1979}}
|
49
|
+
END
|
50
|
+
|
51
|
+
$CLEAN_BIB = <<END
|
52
|
+
@book{garey:johnson,
|
53
|
+
address = {New York, NY, USA},
|
54
|
+
author = {Garey, Michael R. and Johnson, David S.},
|
55
|
+
publisher = {W. H. Freeman & Co.},
|
56
|
+
title = {Computers and Intractability: A Guide to the Theory of NP-Completeness},
|
57
|
+
year = {1979}
|
58
|
+
}
|
59
|
+
END
|
60
|
+
|
61
|
+
def test_minimize
|
62
|
+
entry = BibTeX.parse($FUNNY_BIB)[0]
|
63
|
+
entry2 = entry.minimize
|
64
|
+
assert_equal $CLEAN_BIB, entry2.to_s
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_bib_sort_by
|
68
|
+
entries = @bib.sort_by { |e| e.year }
|
69
|
+
assert_equal ["robbins-monro", "metropolis", "garey:johnson"], entries.map { |e| e.key }
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_bib_sort
|
73
|
+
entries = @bib.sort { |e1,e2| e1.year <=> e2.year }
|
74
|
+
assert_equal ["robbins-monro", "metropolis", "garey:johnson"], entries.map { |e| e.key }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/test/test_bibout.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'bibout'
|
3
|
+
|
4
|
+
class BiboutTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
current_dir = File.expand_path File.dirname(__FILE__)
|
8
|
+
@data_dir = File.join(current_dir, "data")
|
9
|
+
@bib = BibTeX.open(File.join(@data_dir, "test.bib"))
|
10
|
+
@tmpl1 = <<ENDTMPL
|
11
|
+
<% bib.each do |entry| %>
|
12
|
+
<%= entry.key %>
|
13
|
+
<%end%>
|
14
|
+
ENDTMPL
|
15
|
+
end
|
16
|
+
|
17
|
+
$RESULT1 = <<END
|
18
|
+
|
19
|
+
garey:johnson
|
20
|
+
|
21
|
+
robbins-monro
|
22
|
+
|
23
|
+
metropolis
|
24
|
+
|
25
|
+
END
|
26
|
+
|
27
|
+
def test_tmpl1
|
28
|
+
result = BibOut.new.process_string(@bib, @tmpl1)
|
29
|
+
assert_equal $RESULT1, result
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_embed
|
33
|
+
result = BibOut.new(@data_dir).process_file(@bib, "root.tmpl")
|
34
|
+
assert_equal $RESULT1, result
|
35
|
+
end
|
36
|
+
|
37
|
+
$BY_YEAR_RESULT = <<END
|
38
|
+
|
39
|
+
|
40
|
+
1951
|
41
|
+
|
42
|
+
Robbins, H. and Monro, S.. A stochastic approximation method. 1951.
|
43
|
+
|
44
|
+
|
45
|
+
1953
|
46
|
+
|
47
|
+
Metropolis, N. and Rosenbluth, A. and Rosenbluth, M. and Teller, A. and Teller, E.. Equations of state calculations by fast computing machines. 1953.
|
48
|
+
|
49
|
+
|
50
|
+
1979
|
51
|
+
|
52
|
+
Garey, Michael R. and Johnson, David S.. Computers and Intractability: A Guide to the Theory of NP-Completeness. 1979.
|
53
|
+
|
54
|
+
|
55
|
+
END
|
56
|
+
|
57
|
+
def test_by_year
|
58
|
+
result = BibOut.new(@data_dir).process_file(@bib, "by_year.tmpl")
|
59
|
+
assert_equal $BY_YEAR_RESULT, result
|
60
|
+
end
|
61
|
+
|
62
|
+
$RESULT2 = <<END
|
63
|
+
|
64
|
+
garey:johnson
|
65
|
+
|
66
|
+
robbins-monro
|
67
|
+
|
68
|
+
metropolis
|
69
|
+
|
70
|
+
|
71
|
+
garey:johnson
|
72
|
+
|
73
|
+
robbins-monro
|
74
|
+
|
75
|
+
metropolis
|
76
|
+
|
77
|
+
END
|
78
|
+
|
79
|
+
def test_double_embed
|
80
|
+
result = BibOut.new(@data_dir).process_file(@bib, "double_embed.tmpl")
|
81
|
+
assert_equal $RESULT2, result
|
82
|
+
end
|
83
|
+
|
84
|
+
$EMBED2_RESULT = <<END
|
85
|
+
<html>
|
86
|
+
<body>
|
87
|
+
<div id="text">
|
88
|
+
|
89
|
+
|
90
|
+
<h2>Dissertation</h2>
|
91
|
+
<ol>
|
92
|
+
|
93
|
+
<li>Computers and Intractability: A Guide to the Theory of NP-Completeness
|
94
|
+
</li>
|
95
|
+
|
96
|
+
</ol>
|
97
|
+
|
98
|
+
|
99
|
+
</div>
|
100
|
+
</body>
|
101
|
+
</html>
|
102
|
+
END
|
103
|
+
|
104
|
+
def test_embed2
|
105
|
+
result = BibOut.new(@data_dir).process_file(@bib, "embed2_root.tmpl")
|
106
|
+
assert_equal $EMBED2_RESULT, result
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bibout
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Charles Sutton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bibtex-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
description: Converts BibTeX files into pretty output using arbitrary user-specified
|
28
|
+
templates, which can contain arbitrary Ruby code using ERB.
|
29
|
+
email: csutton@inf.ed.ac.uk
|
30
|
+
executables:
|
31
|
+
- bibout
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- Rakefile
|
36
|
+
- lib/bibout.rb
|
37
|
+
- lib/bibout/bibtex.rb
|
38
|
+
- lib/bibout/erb_binding.rb
|
39
|
+
- test/test_bibout.rb
|
40
|
+
- test/test_bib.rb
|
41
|
+
- bin/bibout
|
42
|
+
homepage: http://rubygems.org/gems/bibout
|
43
|
+
licenses:
|
44
|
+
- MIT
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.1.11
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: BibTeX formatter
|
66
|
+
test_files:
|
67
|
+
- test/test_bibout.rb
|
68
|
+
- test/test_bib.rb
|