bivy 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/History +16 -0
- data/LICENSE +29 -0
- data/README.rdoc +37 -0
- data/Rakefile +43 -0
- data/TODO +12 -0
- data/VERSION +1 -0
- data/bin/bivy.rb +56 -0
- data/bin/pubmed_to_bivy.rb +78 -0
- data/doc/config.yaml +13 -0
- data/doc/src/default.css +126 -0
- data/doc/src/default.template +38 -0
- data/doc/src/tutorial/basic_flow.page +71 -0
- data/doc/src/tutorial/index.page +8 -0
- data/doc/src/tutorial/new_formats_and_media.page +83 -0
- data/jrn_abbrev/abbr_html.tgz +0 -0
- data/jrn_abbrev/abbr_to_journal.yaml +676 -0
- data/jrn_abbrev/download_abbrevs.rb +20 -0
- data/jrn_abbrev/for_ruby_class.rb +686 -0
- data/jrn_abbrev/html_to_yaml.rb +50 -0
- data/lib/bibliography.rb +144 -0
- data/lib/bivy.rb +4 -0
- data/lib/citation.rb +194 -0
- data/lib/format.rb +120 -0
- data/lib/format/acs.rb +88 -0
- data/lib/format/bioinformatics.rb +33 -0
- data/lib/format/bmc.rb +38 -0
- data/lib/format/jtp.rb +30 -0
- data/lib/format/mla.rb +50 -0
- data/lib/formatter.rb +276 -0
- data/lib/journal.rb +6 -0
- data/lib/journal/iso_to_full.yaml +1320 -0
- data/lib/journal/medline_to_full.yaml +7 -0
- data/lib/journal/medline_to_iso.yaml +45 -0
- data/lib/media.rb +88 -0
- data/lib/media/html.rb +65 -0
- data/lib/ooffice.rb +39 -0
- data/lib/pubmed.rb +209 -0
- data/lib/rtf.rb +217 -0
- data/old_stuff/old_list2refs.rb +103 -0
- data/old_stuff/pubmed2html.rb +119 -0
- data/old_stuff/pubmed_bib_write.rb +92 -0
- data/old_stuff/xml.tmp.xml +115 -0
- data/scripts/merge_bibs.rb +70 -0
- data/spec/bibliography_spec.rb +127 -0
- data/spec/citation_positions.odt +0 -0
- data/spec/formatter_spec.rb +14 -0
- data/spec/formatter_spec/cits_after.xml +2 -0
- data/spec/formatter_spec/cits_before.xml +2 -0
- data/spec/formatter_spec/content.xml +2 -0
- data/spec/ooffice_spec.rb +27 -0
- data/spec/pubmed_spec.rb +26 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/testfiles/doc1.odt +0 -0
- metadata +136 -0
data/.gitignore
ADDED
data/History
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
==0.0.5 / 2010-11-01
|
2
|
+
|
3
|
+
* all tests to specs
|
4
|
+
* works with 1.9.2
|
5
|
+
|
6
|
+
== 0.0.4 / 2010-03-15
|
7
|
+
|
8
|
+
* switched repo to jeweler
|
9
|
+
|
10
|
+
== 0.0.3
|
11
|
+
|
12
|
+
* basic functionality in place (wrote 122 reference/132 citation document with article, article_to_be_submitted, and webpage using it)
|
13
|
+
* easier introduction of new formats
|
14
|
+
* deal with missing journals in a better manner
|
15
|
+
|
16
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright (c) 2006, The University of Texas at Austin("U.T. Austin"). All
|
2
|
+
rights reserved.
|
3
|
+
|
4
|
+
Software by John T. Prince under the direction of Edward M. Marcotte.
|
5
|
+
|
6
|
+
By using this software the USER indicates that he or she has read, understood
|
7
|
+
and will comply with the following:
|
8
|
+
|
9
|
+
U. T. Austin hereby grants USER permission to use, copy, modify, merge,
|
10
|
+
publish, distribute, sublicense, and/or sell copies of this software and its
|
11
|
+
documentation for any purpose and without fee, provided that a full copy of
|
12
|
+
this notice is included with the software and its documentation.
|
13
|
+
|
14
|
+
Title to copyright this software and its associated documentation shall at all
|
15
|
+
times remain with U. T. Austin. No right is granted to use in advertising,
|
16
|
+
publicity or otherwise any trademark, service mark, or the name of U. T.
|
17
|
+
Austin.
|
18
|
+
|
19
|
+
This software and any associated documentation are provided "as is," and U. T.
|
20
|
+
AUSTIN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING
|
21
|
+
THOSE OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR THAT USE OF
|
22
|
+
THE SOFTWARE, MODIFICATIONS, OR ASSOCIATED DOCUMENTATION WILL NOT INFRINGE ANY
|
23
|
+
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER INTELLECTUAL PROPERTY RIGHTS OF A
|
24
|
+
THIRD PARTY. U. T. Austin, The University of Texas System, its Regents,
|
25
|
+
officers, and employees shall not be liable under any circumstances for any
|
26
|
+
direct, indirect, special, incidental, or consequential damages with respect
|
27
|
+
to any claim by USER or any third party on account of or arising from the use,
|
28
|
+
or inability to use, this software or its associated documentation, even if U.
|
29
|
+
T. Austin has been advised of the possibility of those damages.
|
data/README.rdoc
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
= bivy
|
2
|
+
|
3
|
+
bivy - (*b*ibliography *i*n *v*im and *y*aml) is a lightweight alternative to
|
4
|
+
bibliographic management systems. bivy aims to provides simple tools to
|
5
|
+
create a bibliography in whatever format you need, all from bibliographies
|
6
|
+
stored in a yaml file (the bivy file).
|
7
|
+
|
8
|
+
== History
|
9
|
+
|
10
|
+
I wanted a simple bibliography generator for use on any platform that worked
|
11
|
+
well with OpenOffice. Having tried my hand a few times at it, I think I
|
12
|
+
finally have a light footprint system that is easy to setup and gets the job
|
13
|
+
done.
|
14
|
+
|
15
|
+
Bivy sacks are a lightweight alternative to a tent. (I'm sure you see the
|
16
|
+
parallel) Also, you don't really *have to* use vim, it just worked for the
|
17
|
+
acronymn and it *is* really handy for editing your yaml file.
|
18
|
+
|
19
|
+
== Features
|
20
|
+
|
21
|
+
* yaml based bibliography files
|
22
|
+
* lookup of bibliographic information from a pubmed ID
|
23
|
+
* formatting of citations in a document based on identifiers
|
24
|
+
* modular creation of bibliographies in any format or output
|
25
|
+
* easy addition of new formats or outputs
|
26
|
+
* simple modification of OpenOffice documents
|
27
|
+
|
28
|
+
== Current Focus
|
29
|
+
|
30
|
+
* Simple OpenOffice support: 1) replaces citations with correct citation
|
31
|
+
number 2) outputs bibliography in html that can be directly imported into
|
32
|
+
document.
|
33
|
+
* PubMed support (downloads xml from web and adds to bivy file)
|
34
|
+
|
35
|
+
== Copyright
|
36
|
+
|
37
|
+
See LICENSE for details. (MIT-ish license)
|
data/Rakefile
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'jeweler'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
|
7
|
+
Jeweler::Tasks.new do |gem|
|
8
|
+
gem.name = "bivy"
|
9
|
+
gem.summary = %Q{roll your own citation manager (if you like that sort of thing)}
|
10
|
+
gem.description = %Q{uses a simple YAML format to store bibliographies. Then modifies citations in openoffice and outputs a bibliography (in different forms) for inclusion in the document}
|
11
|
+
gem.email = "jtprince@gmail.com"
|
12
|
+
gem.homepage = "http://github.com/jtprince/bivy"
|
13
|
+
gem.authors = ["John Prince"]
|
14
|
+
gem.add_development_dependency "spec-more", ">= 0"
|
15
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
+
end
|
17
|
+
|
18
|
+
# test
|
19
|
+
Rake::TestTask.new(:spec) do |spec|
|
20
|
+
spec.libs << 'lib' << 'spec'
|
21
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
22
|
+
spec.verbose = true
|
23
|
+
end
|
24
|
+
|
25
|
+
#require 'rcov/rcovtask'
|
26
|
+
#Rcov::RcovTask.new do |spec|
|
27
|
+
# spec.libs << 'spec'
|
28
|
+
# spec.pattern = 'spec/**/*_spec.rb'
|
29
|
+
# spec.verbose = true
|
30
|
+
#end
|
31
|
+
|
32
|
+
task :spec => :check_dependencies
|
33
|
+
|
34
|
+
task :default => :spec
|
35
|
+
|
36
|
+
Rake::RDocTask.new do |rdoc|
|
37
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
38
|
+
|
39
|
+
rdoc.rdoc_dir = 'rdoc'
|
40
|
+
rdoc.title = "bivy #{version}"
|
41
|
+
rdoc.rdoc_files.include('README*')
|
42
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
43
|
+
end
|
data/TODO
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
high-priority:
|
4
|
+
redo citation to reference (in lib and docs)
|
5
|
+
need even better system for missing journals
|
6
|
+
more complete tests, convert to rspec
|
7
|
+
add some major styles
|
8
|
+
add 'book'
|
9
|
+
document 'author' and how it operates
|
10
|
+
|
11
|
+
low-priority:
|
12
|
+
citations in different formats than just numbering
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.5
|
data/bin/bivy.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
require 'formatter'
|
6
|
+
require 'bibliography'
|
7
|
+
require 'format'
|
8
|
+
require 'media'
|
9
|
+
|
10
|
+
$format_type = :jtp
|
11
|
+
$citation = nil
|
12
|
+
$yaml = nil
|
13
|
+
$cit_order = nil
|
14
|
+
opts = OptionParser.new do |op|
|
15
|
+
op.banner = "usage: #{File.basename(__FILE__)} <bibliography>.yaml <file>.odt"
|
16
|
+
op.separator "outputs: <file>.cit.odt <file>.bib.html"
|
17
|
+
op.on("-f", "--format <type>", "type = jtp|acs|mla|bioinformatics|bmc") {|v| $format_type = v.to_sym }
|
18
|
+
op.on("--cit-pos <position>", "position = before|after the punctuation") {|v| $citation = v }
|
19
|
+
op.on("--yaml <file>", "outputs bib used to file") {|v| $yaml = v }
|
20
|
+
op.on("--cit-order <file>", "outputs initial appearance of citations IDs") {|v| $cit_order = v }
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.parse!
|
24
|
+
|
25
|
+
if ARGV.size != 2
|
26
|
+
puts opts
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
format_obj = Format.new(Media.new(:html), $format_type)
|
31
|
+
|
32
|
+
bib = ARGV.shift
|
33
|
+
odt = ARGV.shift
|
34
|
+
|
35
|
+
options = {}
|
36
|
+
if $format_type == :mla or $format_type == :bioinformatics
|
37
|
+
options[:bib] = :mla
|
38
|
+
elsif $format_type == :bmc
|
39
|
+
options[:bracket] = true
|
40
|
+
end
|
41
|
+
if $citation
|
42
|
+
options[:cit_pos] = $citation.to_sym
|
43
|
+
end
|
44
|
+
|
45
|
+
outfile = odt.sub(/\.odt$/, '.bib.html')
|
46
|
+
bib_object = Formatter.new.create_bibliography(odt, bib, options)
|
47
|
+
if $cit_order
|
48
|
+
File.open($cit_order, 'w') {|out| out.print( bib_object.citations.map {|c| c.ident }.join("\n") ) }
|
49
|
+
end
|
50
|
+
|
51
|
+
string = bib_object.write(format_obj)
|
52
|
+
File.open(outfile, 'w') {|fh| fh.print string }
|
53
|
+
if $yaml
|
54
|
+
bib_object.to_yaml($yaml)
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
require 'pubmed'
|
7
|
+
require 'citation'
|
8
|
+
require 'bibliography'
|
9
|
+
|
10
|
+
bib_re = /bib\.ya?ml$/i
|
11
|
+
attemped_bib = Dir["*"].select {|v| v =~ bib_re }.first
|
12
|
+
|
13
|
+
opt = OpenStruct.new
|
14
|
+
opt.bib =
|
15
|
+
if attemped_bib.nil?
|
16
|
+
"bib.yml"
|
17
|
+
else
|
18
|
+
attemped_bib
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
opts = OptionParser.new do |op|
|
23
|
+
op.banner = "usage: #{File.basename(__FILE__)} [OPTIONS] pubmed_id ..."
|
24
|
+
op.separator ""
|
25
|
+
op.separator " appends citations to #{opt.bib} and outputs lines of identifiers"
|
26
|
+
op.on("-b", "--bib", "filename of the bibliography (using: #{opt.bib})",
|
27
|
+
"if == STDOUT, then prints to STDOUT") {|v| opt.bib = v }
|
28
|
+
op.on("-i", "--id Array", Array, "give a unique identifier") {|v| opt.identifier = v}
|
29
|
+
op.on("-q", "--quotes Array", Array, "direct or parenthetical") {|v| opt.quotes = v}
|
30
|
+
op.separator " * Arrays are parallel to id's"
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.parse!
|
34
|
+
|
35
|
+
if ARGV.size < 1
|
36
|
+
puts opts
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
pmids = ARGV.to_a
|
41
|
+
|
42
|
+
opt.stdout = true if opt.bib == 'STDOUT'
|
43
|
+
|
44
|
+
cits = pmids.to_a.map do |pmid|
|
45
|
+
pm = PubMed.new(pmid)
|
46
|
+
if opt.identifier
|
47
|
+
uniq_id = opt.identifier.shift
|
48
|
+
pm.ident = uniq_id
|
49
|
+
end
|
50
|
+
pm
|
51
|
+
end
|
52
|
+
|
53
|
+
if opt.stdout
|
54
|
+
puts Bibliography.new(cits).to_yaml
|
55
|
+
else
|
56
|
+
bib = Bibliography.from_yaml(opt.bib)
|
57
|
+
clashing = bib.add( *cits )
|
58
|
+
if clashing == nil
|
59
|
+
sub_clashing = []
|
60
|
+
else
|
61
|
+
sub_clashing = clashing
|
62
|
+
end
|
63
|
+
added = cits - sub_clashing
|
64
|
+
added.each do |ad|
|
65
|
+
puts "#[#{ad.ident}]"
|
66
|
+
end
|
67
|
+
if clashing
|
68
|
+
puts "ID#{((clashing.size > 1) ? 's' : '')} already taken! (see '-i' flag):\n"
|
69
|
+
clashing.each do |clash|
|
70
|
+
if bib.citations.any? {|cit| ((cit.respond_to?(:pmid)) and (clash.pmid == cit.pmid)) }
|
71
|
+
puts "#{clash.pmid}: '#{clash.ident}' (pmid already present!)"
|
72
|
+
else
|
73
|
+
puts "#{clash.pmid}: '#{clash.ident}'"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
bib.to_yaml(opt.bib)
|
78
|
+
end
|
data/doc/config.yaml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Configuration file for webgen
|
2
|
+
# Used to set the parameters of the plugins
|
3
|
+
FileCopyHandler:
|
4
|
+
paths:
|
5
|
+
- "**/*.css"
|
6
|
+
- "**/*.jpg"
|
7
|
+
- "**/*.png"
|
8
|
+
- "**/*.gif"
|
9
|
+
- "**/*.js"
|
10
|
+
- "**/*.html"
|
11
|
+
PageFileHandler:
|
12
|
+
defaultPageMetaData:
|
13
|
+
blocks: [{name: content, format: markdown}]
|
data/doc/src/default.css
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
h1 {
|
3
|
+
font-size: 20px;
|
4
|
+
font-family: sans-serif;
|
5
|
+
font-style: italic;
|
6
|
+
background-color: #555;
|
7
|
+
color: white;
|
8
|
+
padding: 4px;
|
9
|
+
margin-right: 0%;
|
10
|
+
}
|
11
|
+
h2 {
|
12
|
+
font-family: sans-serif;
|
13
|
+
border-bottom: 1px solid #CCC;
|
14
|
+
color: #B00707;
|
15
|
+
font-size: 16px;
|
16
|
+
}
|
17
|
+
pre {
|
18
|
+
font-family: monospace;
|
19
|
+
color: #222;
|
20
|
+
background-color: #DDD;
|
21
|
+
/*border: 1px solid #BBB; */
|
22
|
+
padding: 4px;
|
23
|
+
padding-left: 8px;
|
24
|
+
margin-right: 10px;
|
25
|
+
margin-left: 25px;
|
26
|
+
font-size: 9pt;
|
27
|
+
|
28
|
+
}
|
29
|
+
|
30
|
+
#all { background-color: #CCCCCC; }
|
31
|
+
|
32
|
+
#header {
|
33
|
+
border-bottom: 1px solid black;
|
34
|
+
padding: 1ex;
|
35
|
+
background-color: white; /* #888888 */
|
36
|
+
}
|
37
|
+
#header h1 {
|
38
|
+
background-color: white;
|
39
|
+
color: #B00707;
|
40
|
+
text-decoration: none;
|
41
|
+
margin: 0ex;
|
42
|
+
font-size: 200%;
|
43
|
+
font-style: normal;
|
44
|
+
font-weight: bold;
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
, #headerbar { border-bottom: 1px solid black; }
|
49
|
+
#footer { border-top: 1px solid black; }
|
50
|
+
|
51
|
+
#body {
|
52
|
+
font-size: 90%;
|
53
|
+
margin-left: 220px;
|
54
|
+
margin-right: 20px;
|
55
|
+
padding: 10px;
|
56
|
+
}
|
57
|
+
|
58
|
+
a {text-decoration:none; }
|
59
|
+
a:link {color:#6E3ABC; }
|
60
|
+
a:visited {color: #3E1A9C;}
|
61
|
+
a:hover {color: #00AA00; background-color: #EEEEEE;}
|
62
|
+
a:focus {color: #333333;}
|
63
|
+
a:active {color: #009900;}
|
64
|
+
|
65
|
+
|
66
|
+
#menu {
|
67
|
+
float: left;
|
68
|
+
width: 200px;
|
69
|
+
padding: 20px 0px 0px 2px;
|
70
|
+
}
|
71
|
+
|
72
|
+
.bar {
|
73
|
+
clear: both;
|
74
|
+
padding: 3px;
|
75
|
+
text-align: center;
|
76
|
+
font-size: 90%;
|
77
|
+
background-color: #AAAAAA;
|
78
|
+
}
|
79
|
+
|
80
|
+
.left, .right {
|
81
|
+
padding: 0px 1em;
|
82
|
+
}
|
83
|
+
|
84
|
+
.left {
|
85
|
+
float: left;
|
86
|
+
text-align: left;
|
87
|
+
}
|
88
|
+
|
89
|
+
.right {
|
90
|
+
float: right;
|
91
|
+
text-align: right;
|
92
|
+
}
|
93
|
+
|
94
|
+
/* styling the menu */
|
95
|
+
|
96
|
+
#menu a {
|
97
|
+
text-decoration: none;
|
98
|
+
font-weight: bold;
|
99
|
+
font-size: 130%;
|
100
|
+
font-family: sans-serif;
|
101
|
+
}
|
102
|
+
|
103
|
+
#menu a:hover {
|
104
|
+
/* text-decoration: underline; */
|
105
|
+
}
|
106
|
+
|
107
|
+
#menu .webgen-menuitem-selected {
|
108
|
+
border-left: 3px solid black;
|
109
|
+
}
|
110
|
+
|
111
|
+
#menu ul {
|
112
|
+
list-style-type: none;
|
113
|
+
padding: 0px;
|
114
|
+
margin-left: 10px;
|
115
|
+
}
|
116
|
+
|
117
|
+
#menu li > ul {
|
118
|
+
font-size: 95%;
|
119
|
+
}
|
120
|
+
|
121
|
+
#menu li {
|
122
|
+
margin: 0.0em 0px;
|
123
|
+
padding: 2px 0px;
|
124
|
+
padding-left: 5px;
|
125
|
+
/* border-left: 3px solid #CCCCCC; */
|
126
|
+
}
|