]> git.donarmstrong.com Git - reference.git/blob - .svn/pristine/e4/e47029d26c6aa59bbb1c4eb5f8b70850ff10c603.svn-base
Import original source of Reference 0-Reference
[reference.git] / .svn / pristine / e4 / e47029d26c6aa59bbb1c4eb5f8b70850ff10c603.svn-base
1 # This module is part of da_reference, 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$
6
7 package Reference::Field::Pages;
8
9 =head1 NAME
10
11  --
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($REVISION $DEBUG);
28
29 use NEXT;
30 use Params::Validate qw(:types validate_with);
31
32 BEGIN{
33      ($REVISION) = q$LastChangedRevision$ =~ /\$LastChangedRevision:\s+([^\s+])/;
34      $DEBUG = 0 unless defined $DEBUG;
35 }
36
37
38 sub _init{
39      my $self = shift;
40
41      $self->{reference}->{pages} = {start => undef,
42                                     stop  => undef,
43                                    };
44
45      $self->NEXT::_init;
46
47 }
48
49 sub pages{
50      my $self = shift;
51      my %params;
52      if (scalar(@_) == 1) {
53           $params{pages} = shift;
54           $params{output} = 'scalar';
55      }
56      else {
57           %params = validate_with(params => \@_,
58                                   spec   => {pages => {type     => ARRAYREF|SCALAR|HASHREF,
59                                                        optional => 1,
60                                                       },
61                                              start => {type => SCALAR,
62                                                        optional => 1,
63                                                       },
64                                              stop  => {type => SCALAR,
65                                                        optional => 1,
66                                                       },
67                                              output => {default => 'scalar',
68                                                         type    => SCALAR,
69                                                        },
70                                             },
71                                  );
72      }
73      # Update author according to the passed information
74      if (defined $params{start} or defined $params{stop}) {
75           $self->{reference}->{pages}->{start} = $params{start} if defined $params{start};
76           $self->{reference}->{pages}->{stop}  = $params{stop} if defined $params{stop};
77      }
78      elsif (defined $params{pages}) {
79           $self->{reference}->{pages} = {start => undef,
80                                          stop  => undef,
81                                         };
82           ($self->{reference}->{pages}->{start},$self->{reference}->{pages}->{stop}) = split(/\-+/,$params{pages});
83      }
84
85      if (wantarray) {
86           return grep {defined} ($self->{reference}->{pages}->{start},$self->{reference}->{pages}->{stop});
87      }
88      local $_ = $params{output};
89      if (/bibtex/) {
90           return join('--',map {$_ = '' if not defined $_; $_;} ($self->{reference}->{pages}->{start},$self->{reference}->{pages}->{stop}));
91      }
92      else {
93           return join('-',map {$_ = '' if not defined $_; $_;} ($self->{reference}->{pages}->{start},$self->{reference}->{pages}->{stop}));
94      }
95
96 }
97
98
99
100 1;
101
102
103 __END__
104
105
106
107
108
109