# This module is part of da_reference, and is released # under the terms of the GPL version 2, or any later version. See the # file README and COPYING for more information. # Copyright 2003 by Don Armstrong . # $Id$ package Reference::Field::Journal; =head1 NAME -- =head1 SYNOPSIS =head1 DESCRIPTION =head1 BUGS None known. =cut use strict; use vars qw($REVISION $DEBUG @JOURNAL_FIELDS); use NEXT; use Params::Validate qw(:types validate_with); BEGIN{ ($REVISION) = q$LastChangedRevision$ =~ /\$LastChangedRevision:\s+([^\s+])/; $DEBUG = 0 unless defined $DEBUG; @JOURNAL_FIELDS = qw(title medlineabbr isoabbr nlmid issn eissn publisher pmid); } sub _init{ my $self = shift; $self->{reference}->{journal} = {}; @{$self->{reference}->{journal}}{@JOURNAL_FIELDS} = (undef) x scalar @JOURNAL_FIELDS; $self->NEXT::_init; } sub journal{ my $self = shift; my %params; if (scalar(@_) == 1) { $params{journal} = shift; $params{output} = 'scalar'; } else { my %spec; @spec{@JOURNAL_FIELDS} = ({type => SCALAR|UNDEF,optional=>1}) x scalar @JOURNAL_FIELDS; %params = validate_with(params => \@_, spec => {journal => {type => SCALAR, optional => 1, }, output => {type => SCALAR, default => 'scalar', }, %spec, }, ); } # Were we called using $reference->journal(foo=>bar) {ignoring journal=>bar} ? my $using_param_call = 0; foreach my $key (@JOURNAL_FIELDS) { $using_param_call = 1 and last if exists $params{$key} and defined $params{$key}; } if ($using_param_call) { foreach my $key (@JOURNAL_FIELDS) { $self->{reference}->{journal}->{$key} = $params{$key} if exists $params{$key} and defined $params{$key}; } } elsif (defined $params{journal}) { $self->{reference}->{journal}->{title} = $params{journal}; } local $_ = $params{output}; if (/bibtex/) { return $self->{reference}->{journal}->{medlineabbr} || $self->{reference}->{journal}->{title}; } else { return $self->{reference}->{journal}->{title}; } } 1; __END__