Bundle-PBib

 view release on metacpan or  search on metacpan

lib/PBib/Document.pm  view on Meta::CPAN

		'verbose' => 1,
		);
	print $doc->filename();
	my @paragraphs = $doc->paragraphs();
	$doc->close();

=head1 DESCRIPTION

Factory class to create documents that are processed by PBib.

=cut

package PBib::Document;
use 5.006;
use strict;
use warnings;
#use English;

# for debug:
#use Data::Dumper;

BEGIN {
    use vars qw($Revision $VERSION);
	my $major = 1; q$Revision: 25 $ =~ /: (\d+)/; my ($minor) = ($1); $VERSION = "$major." . ($minor<10 ? '0' : '') . $minor;
}

# superclass
#use YYYY;
#use vars qw(@ISA);
#@ISA = qw(YYYY);

# used modules
use FileHandle;
use File::Spec;
use Encode;
use Carp;

# module variables
#use vars qw(mmmm);

#
#
# constructor
#
#

=head1 CONSTRUCTOR

=over

=item $doc = new PBib::Document('filename' => $filename);

Arguments are passed as hash:

=over

=item B<filename> => string for filename

=item B<class> => document class to use, e.g. 'RTF' or 'MSWord'

If class is not defined, it is tried to be guessed by looking at the file. (Currently, the filename's extension only.)

=item B<formatOptions> => hash with options passed to ReferenceFormator

OBSOLETE??

=item B<bibitemOptions> => hash with options passed to BibItemFormator

OBSOLETE??

=item B<converter> => string for ReferenceConverter class

OBSOLETE??

=item B<formator> => string for ReferenceFormator class

OBSOLETE??

=item B<mode> => "r" | "w"

Mode for this document, used to open the file.
"r" = Read, "w" = Write

=item B<verbose> => If true, produce more verbose output.

=back

=cut

sub new {
  my $self = shift;
  my %args = @_;
  my $class = ref($self) || $self;
  if( $class eq 'PBib::Document' ) {
    $class = findDocumentClass(%args);
  }
  my $doc = bless \%args, $class;
#print Dumper $doc;
  $doc->initialize();
  return $doc;
}

sub initialize {
  my $self = shift;
}

sub findDocumentClass {
  my %args = @_;
  my $class = $args{'class'};
  my $filename = $args{'filename'};
  unless( defined $class ) {
    if( defined $filename ) {
	  FILETYPE: {
		foreach my $pattern (keys(%{$args{'file-types'} || {}})) {
			if( $filename =~ /$pattern/i ) { 
				$class = $args{'file-types'}->{$pattern}; last FILETYPE;
			}
		}
	    if( $filename =~ /\.doc$/i ) { $class = 'MSWord'; last FILETYPE; }
	    if( $filename =~ /\.rtf$/i ) { $class = 'RTF'; last FILETYPE; }
	    if( $filename =~ /\.s[tx]w$/i ) { $class = 'OpenOfficeSXW'; last FILETYPE; }



( run in 0.564 second using v1.01-cache-2.11-cpan-39bf76dae61 )