]> git.donarmstrong.com Git - reference.git/blob - blib/lib/Reference/Type/Article.pm
Initial packaging by dh-make-perl
[reference.git] / blib / lib / Reference / Type / Article.pm
1 # This module is part of , and is released
2 # under the terms of the GPL version 2, or any later version. See the
3 # file README and COPYING for more information.
4 # Copyright 2003 by Don Armstrong <don@donarmstrong.com>.
5 # $Id: Article.pm 30 2004-06-29 10:26:20Z don $
6
7 package Reference::Type::Article;
8
9 =head1 NAME
10
11 Reference::Type::Article -- Article reference type
12
13 =head1 SYNOPSIS
14
15
16 =head1 DESCRIPTION
17
18
19 =head1 BUGS
20
21 None known.
22
23 =cut
24
25
26 use strict;
27 use vars qw($VERSION $DEBUG);
28 use Carp;
29
30 use base qw(Reference Reference::Field::Author Reference::Field::Pages Reference::Field::Journal Reference::Field::Date);
31
32 use NEXT;
33 use Reference;
34 use Params::Validate qw(:types validate_with);
35
36 BEGIN{
37      ($VERSION) = q$LastChangedRevision: 30 $ =~ /\$LastChangedRevision:\s+([^\s+])/;
38      $DEBUG = 0 unless defined $DEBUG;
39 }
40
41
42 =head2 name
43
44 =head3 Usage
45
46      $article->name($article_name);
47      my $article_name = $article->name;
48
49 =head3 Function
50
51 Returns the article name if it has been set, or builds an article name
52 from the author, journal, volume, and page if none is set.
53
54 =cut
55
56 sub name{
57      my $self = shift;
58      my %params;
59      if (scalar(@_) == 1) {
60           $params{name} = shift;
61      }
62      else {
63           %params = validate_with(params => \@_,
64                                   spec   => {name => {type => SCALAR,
65                                                       optional => 1,
66                                                      },
67                                              output => {type    => SCALAR,
68                                                         default => 'scalar',
69                                                        },
70                                             },
71                                  );
72      }
73
74      if (defined $params{name}) {
75           $self->{reference}->{name} = $params{name};
76           return $params{name};
77      }
78      if (not defined $self->{reference}->{name}) {
79           my ($name) = $self->first_author =~ /(\w+)$/;
80           if (not defined $name) {
81                no warnings qw(uninitialized);
82                $name = $self->journal . $self->volume . $self->pages;
83           }
84           $name .= $self->year if defined $self->year;
85           $self->{reference}->{name} = $name;
86           return $name;
87      }
88      else {
89           return $self->{reference}->{name};
90      }
91 }
92
93 =head2 ref_fields
94
95 =head3 Usage
96
97      my @ref_fields = $self->ref_fields;
98
99 =head3 Returns
100
101 Returns the list of reference fields which this type of reference
102 supports.
103
104 =cut
105
106 sub ref_fields($){
107      my $self = shift;
108
109      return qw(author title year abstract journal pmid medline_id volume date number pages keywords doi html pdf month);
110 }
111
112
113 =head2 _init
114
115 =head3 Usage
116
117 Called by Reference's new function
118
119 =head3 Function
120
121 Call superclass's _init function [C<$self->NEXT::_init>], set up the
122 bibtex_mapping and bibtex_order.
123
124 =cut
125
126 sub _init($){
127      my $self = shift;
128
129      $self->NEXT::_init;
130      $self->{type} = 'article';
131 #     $self->{bibtex_mapping} = {Article  => 'name',
132 #                               author   => 'author',
133 #                               title    => 'title',
134 #                               journal  => 'journal',
135 #                               year     => 'year',
136 #                               key      => 'keywords',
137 #                               volume   => 'volume',
138 #                               number   => 'number',
139 #                               pages    => 'pages',
140 #                               month    => 'month',
141 #                               abstract => 'abstract',
142 #                               pmid     => 'pmid',
143 #                               mlid     => 'medline_id',
144 #                               # doi    => 'doi',
145 #                               # html   => 'html',
146 #                               # pdf    => 'pdf',
147 #                              };
148 #     $self->{bibtex_order} = [qw(Article author title journal
149 #                                year key volume number pages
150 #                                month abstract pmid mlid doi
151 #                                html pdf),];
152 }
153
154
155
156
157 1;
158
159
160 __END__
161
162
163
164
165
166