File Coverage

blib/lib/PBib/BibItemStyle/ElsevierJSS.pm
Criterion Covered Total %
statement 74 88 84.0
branch 19 28 67.8
condition 3 7 42.8
subroutine 24 31 77.4
pod 0 26 0.0
total 120 180 66.6


line stmt bran cond sub pod time code
1             # --*-Perl-*--
2             # $Id: ElsevierJSS.pm 10 2004-11-02 22:14:09Z tandler $
3             #
4              
5             package PBib::BibItemStyle::ElsevierJSS;
6 1     1   6 use strict;
  1         2  
  1         32  
7 1     1   6 use warnings;
  1         2  
  1         36  
8             #use English;
9              
10             =head1 package PBib::BibItemStyle::ElsevierJSS;
11              
12             Based on the vague description at http://www.elsevier.com/....
13              
14             =cut
15              
16             # for debug:
17             #use Data::Dumper;
18              
19             BEGIN {
20 1     1   6 use vars qw($Revision $VERSION);
  1         2  
  1         101  
21 1 50   1   3 my $major = 1; q$Revision: 10 $ =~ /: (\d+)/; my ($minor) = ($1); $VERSION = "$major." . ($minor<10 ? '0' : '') . $minor;
  1         10  
  1         3  
  1         24  
22             }
23              
24             # superclass
25 1     1   6 use base qw(PBib::BibItemStyle);
  1         2  
  1         1803  
26             # use vars qw(@ISA);
27             # @ISA = qw(PBib::BibItemStyle);
28              
29             # used modules
30             #use ZZZZ;
31              
32             # module variables
33             #use vars qw(mmmm);
34              
35             #
36             #
37             # constructor
38             #
39             #
40              
41             sub new {
42 0     0 0 0 my $self = PBib::Style::new(@_);
43 0         0 $self->{'keywords'} = $self->ElsevierJSS_keywords();
44 0         0 return $self;
45             }
46              
47              
48             #
49             #
50             # access methods
51             #
52             #
53              
54             sub ElsevierJSS_keywords {
55             return {
56 0     0 0 0 'editor' => 'Ed.',
57             'editors' => 'Eds.',
58             "page" => "p.",
59             "pages" => "pp.",
60             "volume" => "Vol.", # ???
61             "number" => "No.",
62             "chapter" => "ch.", # ???
63             "PhD thesis" => "Ph.D. thesis",
64             "Technical Report" => "Tech. Rep.", # ???
65             };
66             }
67              
68 224     224 0 274 sub includeLabel { my ($self) = @_;
69             # should the Cite label be included in the bibliography?
70             #
71             # overwrite to set default to 0
72             #
73 224   50     487 return $self->option("include-label") || 0;
74             }
75              
76             #
77             #
78             # format methods for entries
79             #
80             #
81              
82 120     120 0 157 sub format_names { my ($self, $names) = @_;
83 120 100       248 return () unless( defined($names) );
84 118         281 return $self->format_names_last_initials($names);
85             }
86              
87 8     8 0 18 sub format_editors { my ($self, $check) = @_;
88 8         31 my $eds = $self->entry('Editors', $check);
89 8 50       24 return undef unless defined $eds;
90 8         34 my $num = $self->num_names($eds);
91 8 100       35 return $num == 0 ? () :
    50          
92             ($self->format_names($eds) .
93             " (" .
94             $self->format_keyword($num == 1 ? "editor" : "editors") .
95             ")"
96             );
97             }
98              
99 110     110 0 137 sub format_title { my ($self, $check) = @_;
100 110         283 my $Title = $self->entry('Title', $check);
101 110         422 return $Title;
102             }
103 20     20 0 27 sub format_journal { my ($self) = @_;
104 20         47 return $self->entry('Journal', 1);
105             }
106              
107 112     112 0 160 sub format_date { my ($self, $check) = @_;
108 112         292 my $Year = $self->entry('Year', $check);
109 112 50       232 return '' unless defined($Year);
110 112         260 my $postfix = $self->labelStyle()->postfix($self->refID());
111 112         482 return "$Year$postfix";
112             }
113              
114 74     74 0 95 sub format_in_ed_booktitle { my ($self, $check) = @_;
115 74         173 my $Booktitle = $self->entry('SuperTitle', $check);
116 74 50       132 return () unless $Booktitle;
117 74 100       174 return $self->entryNotEmpty('Editors') ?
118             "In: " . $self->format_editors() . ", $Booktitle" :
119             "In: $Booktitle";
120             }
121              
122 20     20 0 26 sub format_vol_num_pages { my ($self) = @_;
123             # return "volume(number):pages" or "pp. pages"
124 20         48 my $Volume = $self->entry('Volume');
125 20         53 my $Number = $self->entry('Number');
126 20 50 33     52 return $self->format_pages()
127             unless ($Volume || $Number);
128 20         60 my $Pages = $self->outDoc->formatRange($self->entry('Pages'));
129 20 50       102 return $self->tieOrSpaceConnect(
    50          
130             $Volume,
131             ($Number ? "($Number)" : ())
132             ) .
133             ($Pages ? ", $Pages" : '');
134             }
135              
136 78     78 0 101 sub format_addr_pub { my ($self, $check) = @_;
137 78         172 my $Publisher = $self->entry('Publisher', $check);
138 78         198 my $Address = $self->entry('Address');
139 78 100       169 return () unless ($Publisher);
140 68 50       238 return $Address ?
141             "$Publisher, $Address" :
142             $Publisher;
143             }
144              
145             #
146             #
147             # sorting ...
148             #
149             #
150              
151              
152 112     112 0 134 sub sortkey_names { my ($self, $names) = @_;
153 112         253 my @all_names = $self->split_names($names);
154 112 100       210 return () unless( @all_names );
155 110         310 @all_names = map( $self->last_name($_), @all_names );
156 110         500 return join(" ", @all_names);
157             }
158              
159             #
160             #
161             # formating methods for different bib types
162             #
163             #
164              
165              
166 20     20 0 29 sub format_article { my ($self) = @_;
167             return [
168             [
169             [
170 20         61 $self->format_authors(1),
171             $self->format_date(1),
172             ], [
173             $self->format_title(1),
174             $self->spaceConnect(
175             $self->format_journal(1),
176             $self->format_vol_num_pages()
177             ),
178             $self->format_language(),
179             ]
180             ],
181             $self->format_trailer(),
182             ];
183             }
184 4     4 0 7 sub format_book { my ($self) = @_;
185             return [
186             [
187             [
188 4         22 $self->format_authors_or_editors(),
189             $self->format_date(1),
190             ], [
191             $self->format_title(1),
192             $self->format_volume_number_series(),
193             $self->format_addr_pub(1),
194             $self->format_edition(),
195             $self->format_language(),
196             ],
197             ],
198             $self->format_trailer(),
199             ];
200             }
201              
202 0     0 0 0 sub format_booklet { my ($self) = @_;
203             ### this is simplyfied: always generate a new block
204             ### between title and howpublished/address ...
205             return [
206 0         0 [ $self->format_authors() ],
207             [ [
208             $self->format_title(1),
209             $self->format_howpublished(),
210             $self->format_address(),
211             $self->format_date(),
212             $self->format_language(),
213             ] ],
214             $self->format_trailer(),
215             ];
216             }
217              
218              
219 0     0 0 0 sub format_inbook { my ($self) = @_;
220             return [
221             [
222             [
223 0         0 $self->format_authors_or_editors(),
224             $self->format_date(1),
225             ], [
226             $self->format_title(1),
227             $self->format_volume_number_series(),
228             $self->format_addr_pub(1),
229             $self->format_edition(),
230             $self->format_chapter_pages(),
231             $self->format_language(),
232             ]
233             ],
234             $self->format_trailer(),
235             ];
236             }
237              
238 68     68 0 66 sub format_incollection { my ($self) = @_;
239             return [
240             [
241             [
242 68         197 $self->format_authors(1),
243             $self->format_date(1),
244             ], [
245             $self->format_title(1),
246             ], [
247             $self->format_in_ed_booktitle(1),
248             $self->format_volume_number_series(),
249             $self->format_addr_pub(1),
250             $self->format_edition(),
251             $self->format_chapter_pages(),
252             $self->format_language(),
253             ]
254             ],
255             $self->format_trailer(),
256             ];
257             }
258              
259 60     60 0 73 sub format_inproceedings { my ($self) = @_;
260 60         115 return $self->format_incollection();
261             }
262              
263 2     2 0 5 sub sortkey_manual { my ($self) = @_; return $self->sortkey_authors(); }
  2         8  
264 2     2 0 6 sub format_manual { my ($self) = @_;
265             ## well, free-style ...
266             return [
267             [ [
268 2         8 $self->format_authors(),
269             $self->format_title_for_book(1),
270             $self->format_volume_number_series(),
271             ] ],
272             [ [
273             $self->format_organization(),
274             $self->format_address(),
275             $self->format_edition(),
276             $self->format_date(),
277             $self->format_language(),
278             ] ],
279             $self->format_trailer(),
280             ];
281             }
282              
283 6     6 0 13 sub format_thesis { my ($self, $default_type) = @_;
284             return [
285             [
286             [
287 6   50     24 $self->format_authors(1),
288             $self->format_date(1),
289             ], [
290             $self->format_title(1),
291             $self->format_type($default_type || "thesis"),
292             $self->format_school(1),
293             $self->format_address(),
294             $self->format_language(),
295             ]
296             ],
297             $self->format_trailer(),
298             ];
299             }
300              
301             #sub format_masterthesis { my ($self) = @_;
302             # return $self->format_thesis("Master's thesis");
303             #}
304              
305 0     0 0 0 sub format_misc { my ($self) = @_;
306             return [
307             [
308             [
309 0         0 $self->format_authors(),
310             $self->format_date(1),
311             ], [
312             $self->format_title(),
313             $self->format_howpublished(),
314             $self->format_language(),
315             ]
316             ],
317             $self->format_trailer(),
318             ];
319             }
320              
321             #sub format_phdthesis { my ($self) = @_;
322             # return $self->format_thesis("PhD thesis");
323             #}
324              
325 0     0 0 0 sub format_proceedings { my ($self) = @_;
326 0         0 return $self->format_book();
327             }
328              
329 6     6 0 11 sub format_report { my ($self) = @_;
330             return [
331             [
332             [
333 6         19 $self->format_authors(1),
334             $self->format_date(1),
335             ], [
336             $self->format_title(1),
337             $self->format_techrep_number(),
338             $self->format_institution(1),
339             $self->format_address(),
340             $self->format_language(),
341             ]
342             ],
343             $self->format_trailer(),
344             ];
345             }
346              
347 0     0 0 0 sub format_unpublished { my ($self) = @_;
348 0         0 return $self->format_misc();
349             }
350              
351 6     6 0 12 sub format_talk { my ($self) = @_;
352             # a talk here is just like a conference paper, but with
353             # an optional publisher.
354             # I'd recommend to use this for workshop position paper etc.
355             return [
356             [
357             [
358 6         20 $self->format_authors(1),
359             $self->format_date(1),
360             ], [
361             $self->format_title(1),
362             ], [
363             $self->format_in_ed_booktitle(1),
364             $self->format_volume_number_series(),
365             $self->format_addr_pub(),
366             $self->format_edition(),
367             $self->format_chapter_pages(),
368             $self->format_language(),
369             ]
370             ],
371             $self->format_trailer(),
372             ];
373             }
374              
375              
376             1;
377              
378             #
379             # $Log: ElsevierJSS.pm,v $
380             # Revision 1.3 2003/05/22 11:56:06 tandler
381             # the "talk" is now formatted just like a inproceedings (paper), but with optional publisher.
382             #
383             # Revision 1.2 2002/11/05 18:30:44 peter
384             # format vol/nr (space/tie connect)
385             # minor fixes
386             #
387             # Revision 1.1 2002/11/03 22:16:07 peter
388             # new JSS style (Elsevier)
389             #