#! /usr/bin/perl # $Id: pbib.pl 23 2005-07-17 19:28:02Z tandler $ # # convert references in rtf, doc or text files # =head1 NAME pbib.pl - process source file to generate list of references =head1 SYNOPSIS pbib.pl [options] [source-file ...] Options: -help brief help message -man full documentation -ref=option see PBib documentation -item=option see PBib documentation -bib=option see PBib documentation -label=option see PBib documentation -final check for remaining "ToDo" markers and comments =head1 OPTIONS =over =item B<-help> Print a brief help message and exits. =item B<-man> Prints the manual page and exits. =back =head1 DESCRIPTION B can convert references in several input file formats (such as RTF, DOC, Text, LaTeX) and generate a list of references. =head1 SEE ALSO module L =cut use strict; use warnings; use FindBin; use lib "$FindBin::Bin/../lib", '$FindBin::Bin/../lib/Biblio/bp/lib'; # for debug use Data::Dumper; # used modules use Getopt::Long; use Text::ParseWords; use File::Basename; # use File::Spec; use Pod::Usage; # used own modules use Biblio::Biblio; use PBib::PBib; my $refStyle = "BookmarkLink"; my $bibStyle = undef; my $itemStyle = undef; #"IEEE"; my $labelStyle = "Name"; # # # get options # # my $in_file; my $out_file; my $final_check = 0; my %refOptions = ( 'class' => 'BookmarkLink', # 'style' => 'plain', 'flags' => 'rh', 'prefix' => 'r', 'final' => $final_check, # 'postfix' => 'Reference', ); my %itemOptions = ( 'class' => 'ElsevierJSS', 'debug-undef-entries' => 1, 'debug-blocks' => 0, 'includeURL' => 1, 'includeAnnote' => 0, 'include-label' => 0, 'keywordStyle' => 'Abbrev', # 'label-separator' => '{tab}', # keyword replacements # 'page' => 'Seite', 'pages' => 'Seiten', ); my %bibOptions = ( # 'class' => 'BookmarkLink', ); my %labelOptions = ( 'class' => 'Name', # 'forcekey' => 1, # 'unique' => 1, # 'etal' => 3, ); my %pbibOptions = ( 'showresult' => 1, ); my @bibtex_infiles; my ($help, $man, $version, $verbose, $quiet); my %getopt_config = ( "ref=s" => \%refOptions, "item=s" => \%itemOptions, "bib=s" => \%bibOptions, "label=s" => \%labelOptions, "pbib=s" => \%pbibOptions, "final" => \$final_check, "bibfile=s" => \@bibtex_infiles, 'help|?' => \$help, 'man' => \$man, 'version' => \$version, 'verbose+' => \$verbose, 'quiet' => \$quiet, ); GetOptions(%getopt_config) or pod2usage(2); pod2usage(1) if $help; pod2usage(-exitstatus => 0, -verbose => 2) if $man; print STDERR "PBib version $PBib::PBib::VERSION.\n"; exit(0) if $version; # in case multiple files were given in one arg @bibtex_infiles = split(/,/,join(',',@bibtex_infiles)); ### TODO: actually use @bibtex_infiles .... # read config my $config = new PBib::Config( 'verbose' => $verbose, 'quiet' => $quiet, ); # get all known references my $bib = new Biblio::Biblio(%{$config->option('biblio')}, 'verbose' => $verbose, 'quiet' => $quiet, ) or die "Can't open bibliographic database!\n"; my $refs = $bib->queryPapers(); print "\n"; # process files my $pbib = new PBib::PBib('refs' => $refs, 'config' => $config, ); pod2usage("$0: No source files given.") if (@ARGV == 0); foreach my $file (@ARGV) { next unless $file; # print "process $file\n"; $pbib->convertFile($file); # print "\n"; }