File Coverage

blib/lib/PBib/BibItemStyle.pm
Criterion Covered Total %
statement 242 430 56.2
branch 62 178 34.8
condition 15 54 27.7
subroutine 67 127 52.7
pod 0 118 0.0
total 386 907 42.5


line stmt bran cond sub pod time code
1             # --*-Perl-*--
2             # $Id: BibItemStyle.pm 10 2004-11-02 22:14:09Z tandler $
3             #
4            
5             package PBib::BibItemStyle;
6            
7             =head1 package PBib::BibItemStyle;
8            
9             This is more or less the converted plain.bst bibtex style.
10            
11             =head2 What has changed?
12            
13             =over
14            
15             =item It is still incomplete ...
16            
17             =item All field names start with a captial letter.
18            
19             This is mainly because the default StarOffice bibliography database
20             uses Capital letters ...
21            
22             =item The "Type" field is the bibtex entry type like article etc.
23            
24             It (i.e. StarOffice) uses a numerical encoding with article=0 and
25             so on.
26            
27             =item Field "type" is called "ReportType"
28            
29             (e.g. used to give a different name to "chapter", "Technical Report")
30            
31             =back
32            
33             =head2 Options
34            
35             =over
36            
37             =item debug-undef-entries -- write missing entries to out-file
38            
39             =back
40            
41             =cut
42            
43 1     1   7 use strict;
  1         3  
  1         52  
44 1     1   5 use warnings;
  1         4  
  1         34  
45             #use English;
46            
47             # for debug:
48 1     1   5 use Data::Dumper;
  1         2  
  1         197  
49            
50             BEGIN {
51 1     1   7 use vars qw($Revision $VERSION);
  1         2  
  1         144  
52 1 50   1   3 my $major = 1; q$Revision: 10 $ =~ /: (\d+)/; my ($minor) = ($1); $VERSION = "$major." . ($minor<10 ? '0' : '') . $minor;
  1         6  
  1         5  
  1         31  
53             }
54            
55             # superclass
56 1     1   7 use PBib::Style;
  1         2  
  1         32  
57 1     1   6 use vars qw(@ISA);
  1         2  
  1         61  
58             @ISA = qw(PBib::Style);
59            
60             # used modules
61             #use ZZZZ;
62            
63             # used own modules
64 1     1   6 use Biblio::Util;
  1         3  
  1         1255  
65            
66             #
67             #
68             # access methods
69             #
70             #
71            
72            
73 1220     1220 0 1306 sub options { my $self = shift; return $self->converter()->itemOptions(); }
  1220         2503  
74            
75 118     118 0 125 sub etalNumber { my ($self, $options) = @_;
76             # how many authors until I use the "et al." style?
77 118   50     272 return $self->fieldOption("etal", $options) || -1;
78             }
79 112     112 0 129 sub itemBookmark { my ($self, $options) = @_;
80             # should bookmarks be generated for each item?
81 112         273 return ! $self->fieldOption("nobookmarks", $options);
82             }
83 0     0 0 0 sub forceKey { my ($self) = @_;
84             # should the 'Key' field take precedence over the default label?
85 0         0 return $self->labelStyle()->forceKey();
86             }
87            
88 0     0 0 0 sub includeLabel { my ($self) = @_;
89             # should the Cite label be included in the bibliography?
90 0         0 my $opt = $self->option("include-label");
91 0 0       0 return defined($opt) ? $opt : 1;
92             }
93             sub labelSeparator {
94             # which text should I use to separate the label from the rest of the item
95             # special values: {tab}, {return} (case-independent)
96 0   0 0 0 0 return shift->option("label-separator") || " ";
97             }
98            
99            
100 106     106 0 133 sub defaultLanguage { my ($self) = @_;
101 106   50     215 return $self->option('language') || 'English';
102             }
103             my $keywordStyles = {
104             'English' => {},
105             'EnglishAbbrev' => {
106             'editor' => 'ed.',
107             'editors' => 'eds.',
108             "page" => "p.",
109             "pages" => "pp.",
110             "volume" => "vol.",
111             "number" => "no.",
112             "chapter" => "ch.",
113             "Technical Report" => "Tech. Rep.", # only IEEE CS-style, not IEEE TR-style ...
114             },
115             'German' => {qw/
116             English Englisch
117             German Deutsch
118             page Seite
119             pages Seiten
120             chapter Kapitel
121             /
122             ### ToDo ...
123             },
124             'GermanAbk' => {qw/
125             English Englisch
126             German Deutsch
127             page S.
128             pages S.
129             chapter Kap.
130             /
131             ### ToDo ...
132             },
133             };
134            
135             #
136             # add extremely abbrev. style
137             #
138             ### ah, well, this doesn't work yet, as journal and proceedings names are not yet replaced!
139             #
140            
141             my %_xabbrev = (%{$keywordStyles->{'EnglishAbbrev'}}, qw/
142             Proceedings Proc.
143             International int'l
144             Conference Conf.
145             Transactions Trans.
146             /);
147             addKeywordStyle(undef, 'English', 'XAbbrev', \%_xabbrev);
148            
149 106     106 0 107 sub keywordStyle { my ($self) = @_;
150 106   50     206 return $self->defaultLanguage() . ($self->option('keywordStyle') || '');
151             }
152 1     1 0 3 sub addKeywordStyle { my ($self, $language, $style, $keywords) = @_;
153             # register a new style
154 1         6 $keywordStyles->{"$language$style"} = $keywords;
155             }
156 106   50 106 0 116 sub keywords { my $self = shift; return $self->{'keywords'} || {}; }
  106         735  
157 106     106 0 147 sub keyword { my ($self, $opt) = @_;
158 106         191 my $style = $keywordStyles->{$self->keywordStyle()};
159 106   33     251 return $self->keywords()->{$opt} ||
160             ($style ? $style->{$opt} : undef);
161             }
162            
163            
164             #
165             #
166             # formating shorthand methods
167             #
168             #
169            
170 0     0 0 0 sub italic { my $self = shift; return $self->outDoc()->italic(@_); }
  0         0  
171 0     0 0 0 sub bold { my $self = shift; return $self->outDoc()->bold(@_); }
  0         0  
172 0     0 0 0 sub underlined { my $self = shift; return $self->outDoc()->underlined(@_); }
  0         0  
173            
174 22     22 0 30 sub spaceConnect { my $self = shift; return $self->outDoc()->spaceConnect(@_); }
  22         51  
175 0     0 0 0 sub tieConnect { my $self = shift; return $self->outDoc()->tieConnect(@_); }
  0         0  
176 108     108 0 113 sub tieOrSpaceConnect { my $self = shift; return $self->outDoc()->tieOrSpaceConnect(@_); }
  108         247  
177            
178            
179             #
180             #
181             # methods
182             #
183             #
184            
185 1         7924 use vars qw/%SupportedCiteTypes $DefaultCiteType %CiteTypeAliases
186 1     1   9 %ReportTypeDefaults/;
  1         3  
187            
188             %SupportedCiteTypes = qw/
189             article 1
190             book 1
191             inbook 1
192             incollection 1
193             inproceedings 1
194             journal 1
195             manual 1
196             misc 1
197             patent 1
198             proceedings 1
199             report 1
200             talk 1
201             thesis 1
202             unpublished 1
203             web 1
204             /;
205            
206             $DefaultCiteType = 'inproceedings';
207            
208             # incollection inbook -- is formated slightly differnt ...
209             %CiteTypeAliases = qw/
210             journal article
211             techreport report
212             conference inproceedings
213             booklet book
214             speech talk
215             slides talk
216             masterthesis thesis
217             phdthesis thesis
218             cdrom avmaterial
219             video avmaterial
220             poster avmaterial
221             email unpublished
222             /;
223            
224             #### ToDo: use the default report types!
225             %ReportTypeDefaults = (
226             'techreport' => "Technical Report",
227             'masterthesis' => "Master's thesis",
228             'phdthesis' => "Ph.D. thesis",
229             'cdrom' => 'CD-ROM',
230             'video' => 'Video',
231             'poster' => 'Poster',
232             'email' => 'E-Mail',
233             );
234            
235            
236 242     242 0 269 sub OrigCiteType { my $self = shift;
237 242         561 my $Type = $self->entry('CiteType');
238 242 50       535 if( not defined($Type) ) { return $PBib::BibItemStyle::DefaultCiteType }
  0         0  
239 242         337 return $Type;
240             }
241            
242 236     236 0 240 sub CiteType { my $self = shift;
243 236         372 my $Type = $self->OrigCiteType();
244 236 100       512 if( exists $PBib::BibItemStyle::CiteTypeAliases{$Type} ) {
245 18         30 $Type = $PBib::BibItemStyle::CiteTypeAliases{$Type};
246             }
247 236 50       502 if( exists $PBib::BibItemStyle::SupportedCiteTypes{$Type} ) {
248 236         379 return $Type;
249             }
250 0         0 $self->warn("Unsupported cite type '$Type' found in ", $self->refID(),
251             " -- change to $PBib::BibItemStyle::DefaultCiteType\n");
252 0         0 return $PBib::BibItemStyle::DefaultCiteType;
253             }
254            
255            
256             sub formatWith {
257 112     112 0 140 my ($self, $refID) = @_;
258 112         155 $self->{'refID'} = $refID;
259            
260 112         198 my $Type = $self->CiteType();
261 112         174 my $f = "format_$Type";
262             #print "$refID -- $Type -- $f\n";
263 112         344 my $blocks = $self->$f();
264 112 50       486 return "" unless defined($blocks);
265 112 50       341 print Dumper $blocks if( $self->option('debug-blocks') );
266 112         417 my @block = map( (ref($_) eq 'ARRAY' ) ?
267 112 50       140 $self->format_block($_) : $_, @{$blocks} );
268             #print "block\n"; print Dumper @block;
269            
270             # should we include the cite label for each item?
271 112         162 my $label = '';
272 112 50       279 if( $self->includeLabel() ) {
273             #print "include-label\n";
274 0         0 $label = $self->labelStyle()->text($refID);
275 0         0 my $sep = $self->labelSeparator();
276             ##### ToDo: use outDoc to get \t or \n
277 0         0 $sep =~ s/{space}/ /ig;
278 0         0 $sep =~ s/{tab}/\t/ig;
279 0         0 $sep =~ s/{return}/\n/ig;
280 0         0 $label = "[$label]$sep";
281             }
282            
283            
284 112         287 my $outDoc = $self->converter()->outDoc();
285 112         263 my $text = $outDoc->block_start() . $label .
286             join($outDoc->block_separator(), @block) .
287             $outDoc->block_end();
288            
289             # fix double dots after et al.
290             # $text =~ s/et\.? al\.\./et al./g;
291             # fix all double dots
292 112         215 $text =~ s/\.\././g;
293            
294             ##***
295 112 50       234 if( $self->itemBookmark() ) {
296 112         250 my $id = $self->converter()->refStyle()->bookmarkID($refID);
297 112         334 return $outDoc->bookmark($text, $id);
298             }
299 0         0 return $text;
300             }
301             sub format_block {
302 338     338 0 412 my ($self, $sentences) = @_;
303 338         779 my @sentence = map( (ref($_) eq 'ARRAY' ) ?
304 338 100       313 $self->format_sentence($_) : $_, @{$sentences} );
305 338 100       907 return () unless @sentence;
306             #print "sentence\n"; print Dumper @sentence;
307 176         385 my $outDoc = $self->converter()->outDoc();
308 176         401 return $outDoc->sentence_start() .
309             join($outDoc->sentence_separator(), @sentence) .
310             $outDoc->sentence_end();
311             }
312             sub format_sentence {
313 298     298 0 359 my ($self, $phrases) = @_;
314 298 50       513 return () unless $phrases;
315 298 50       276 return () unless @{$phrases};
  298         581  
316             #print "phrases\n"; print Dumper @{$phrases};
317 298         664 my $outDoc = $self->converter()->outDoc();
318 298         888 return $outDoc->phrase_start() .
319 298         713 join($outDoc->phrase_separator(), @{$phrases}) .
320             $outDoc->phrase_end();
321             }
322            
323             #
324             # sorting
325             #
326            
327             sub sortkeyFor {
328             # return an array of sort keys, most important first, additional key following
329 112     112 0 136 my ($self, $refID) = @_;
330 112         157 $self->{'refID'} = $refID;
331            
332 112         204 my $Type = $self->CiteType();
333 112         154 my $f = "sortkey_$Type";
334             #print "$refID -- $Type -- $f\n";
335 112         321 my @sortkeys = $self->$f();
336 112         244 @sortkeys = $self->sortkey_general(@sortkeys);
337 112         343 my $sortkey = lc("@sortkeys");
338             # replace umlaute etc.
339 112         185 $sortkey =~ tr/äáàâëéèêïíìîöóòôüúùûß/aaaaeeeeiiiioooouuuus/;
340             # strip all remaining non-alpha characters
341 112         415 $sortkey =~ s/[^a-z]//;
342 112 50       277 print STDERR "$refID -> sortkey: '$sortkey'\n" if( $self->option('debug-sortkey') );
343 112         376 return $sortkey;
344             }
345            
346            
347             #
348             # formating helper methods
349             #
350            
351             # FUNCTION {format.names}
352 0     0 0 0 sub format_names { my ($self, $names) = @_;
353 0 0       0 return () unless( defined($names) );
354 0         0 return $self->format_names_first_last($names);
355             }
356 0     0 0 0 sub format_names_first_last { my ($self, $names) = @_;
357             # currently just return as is ...
358 0         0 return $names;
359             }
360             sub format_names_etal {
361 118     118 0 154 my ($self, $names, $initials_space, $etal_no, $format_name) = @_;
362 118 50       207 $initials_space = 1 unless defined $initials_space;
363 118 50       270 $etal_no = $self->etalNumber() unless defined $etal_no; ###
364 118         318 my @n = $self->split_names($names);
365 118   33     269 my $etal = $etal_no > 0 && scalar(@n) > $etal_no;
366 118 50       292 if( $n[-1] eq "et al." ) {
367 0         0 $etal = 1;
368 0         0 pop @n;
369             }
370            
371 118         355 @n = map( $self->$format_name($_, $initials_space), @n);
372            
373 118 50       242 if( $etal ) {
374 0         0 my $first = shift @n;
375 0         0 return "$first et al.";
376             }
377 118         264 return Biblio::Util::join_and_list(@n);
378             }
379             sub format_names_initials_last {
380 0     0 0 0 my ($self, $name_array, $initials_space, $etal_no) = @_;
381 0         0 return $self->format_names_etal($name_array, $initials_space, $etal_no, 'format_name_initials_last');
382             }
383             sub format_name_initials_last {
384 0     0 0 0 my ($self, $name_array, $initials_space) = @_;
385             #print Dumper $name_array;
386 0         0 my $initials = $self->first_initials($name_array, $initials_space);
387 0         0 my $last = $self->last_name($name_array);
388 0 0       0 return $last unless $initials; # company name or undef for et al.
389 0         0 return "$initials $last";
390             }
391             sub format_names_last_initials {
392 118     118 0 153 my ($self, $name_array, $initials_space, $etal_no) = @_;
393 118         221 return $self->format_names_etal($name_array, $initials_space, $etal_no, 'format_name_last_initials');
394             }
395             sub format_name_last_initials {
396 304     304 0 380 my ($self, $name_array, $initials_space) = @_;
397             #print Dumper $name_array;
398 304         472 my $initials = $self->first_initials($name_array, $initials_space);
399 304         588 my $last = $self->last_name($name_array);
400 304 100       536 return $last unless $initials; # company name or undef for et al.
401 302         1070 return "$last, $initials";
402             }
403            
404 340     340 0 327 sub split_names { shift; return Biblio::Util::split_names(@_); }
  340         817  
405 8     8 0 11 sub num_names { shift; return Biblio::Util::num_names(@_); }
  8         30  
406 0     0 0 0 sub first_names { shift; return Biblio::Util::first_names(@_); }
  0         0  
407 304     304 0 280 sub first_initials { shift; return Biblio::Util::first_initials(@_); }
  304         656  
408 726     726 0 675 sub last_name { shift; return Biblio::Util::last_name(@_); }
  726         1540  
409 64     64 0 87 sub multi_page_check { shift; return Biblio::Util::multi_page_check(@_); }
  64         170  
410            
411 106     106 0 142 sub format_keyword { my ($self, $default) = @_;
412             ## NEW: allow to overwrite non-terminal texts
413             ## with the bibitems options!
414 106         239 my $opt = $self->option($default);
415 106         267 my $style = $self->keyword($default);
416 106   66     711 return $opt || $style || $default;
417             }
418 12     12 0 20 sub format_type { my ($self, $default_type) = @_;
419             # this is a combined version of
420             # format.chapter.pages
421             # format.thesis.type
422             ## NEW: the default names can be overwrittern using
423             ## the bibitems options!
424 12         32 my $ReportType = $self->entry('ReportType');
425 12 100       33 if( $default_type eq $self->CiteType() ) {
426 6         16 my $OrigType = $self->OrigCiteType();
427 6         15 my $default = $ReportTypeDefaults{$OrigType};
428 6 50       13 $default_type = $default if defined($default);
429             }
430 12   66     54 return $ReportType ||
431             $self->format_keyword($default_type);
432             }
433            
434            
435             #
436             #
437             # sortkey helper functions
438             #
439             #
440            
441 0     0 0 0 sub sortkey_names { my ($self, $names) = @_;
442 0         0 my @all_names = $self->split_names($names);
443 0 0       0 return () unless( @all_names );
444 0         0 my $first_author = shift(@all_names);
445 0         0 return $self->last_name($first_author);
446             }
447 108     108 0 117 sub sortkey_authors { my ($self) = @_;
448 108         236 my $names = $self->entry('Authors');
449 108         297 return $self->sortkey_names($names);
450             }
451 4     4 0 7 sub sortkey_authors_or_editors { my ($self) = @_;
452 4         12 my $names = $self->entry('Authors');
453 4 50       10 $names = $self->entry('Editors') unless( $names );
454 4         11 return $self->sortkey_names($names);
455             }
456 0     0 0 0 sub sortkey_authors_or_organization { my ($self) = @_;
457 0         0 my $names = $self->entry('Authors');
458 0         0 my $org = $self->entry('Organization');
459 0 0       0 return $self->sortkey_names($names) if( $names );
460 0 0       0 return $org ? $org : ();
461             }
462 0     0 0 0 sub sortkey_editors_or_organization { my ($self) = @_;
463 0         0 my $names = $self->entry('Editors');
464 0         0 my $org = $self->entry('Organization');
465 0 0       0 return $self->sortkey_names($names) if( $names );
466 0 0       0 return $org ? $org : ();
467             }
468            
469 112     112 0 122 sub sortkey_year { my ($self) = @_;
470 112         280 my $Year = $self->entry('Year');
471 112 50       309 return $Year ? $Year : ();
472             }
473 112     112 0 111 sub sortkey_title { my ($self) = @_;
474 112         241 my $Title = $self->entry('Title');
475 112         281 $Title =~ s/^(A |An |The )//i;
476 112 50       259 return $Title ? $Title : ();
477             }
478            
479            
480 112     112 0 150 sub sortkey_general { my ($self, @sortkeys) = @_;
481 112         134 my $notempty = scalar(@sortkeys);
482 112 50       256 if( $self->entryNotEmpty('Key') ) {
483 0 0       0 unshift @sortkeys, $self->entry('Key') if $self->forceKey();
484 0 0       0 push @sortkeys, $self->entry('Key') unless $self->forceKey();
485             }
486 112 100       229 push @sortkeys, $self->sortkey_title() unless( $notempty );
487 112         282 push @sortkeys, $self->sortkey_year();
488 112 100       288 push @sortkeys, $self->sortkey_title() if( $notempty );
489 112 50       275 if( $self->includeLabel() ) {
490 0         0 unshift @sortkeys, $self->labelStyle()->text($self->refID());
491             }
492            
493 112         383 return @sortkeys;
494             }
495            
496             #
497             #
498             # format methods for entries
499             #
500             #
501            
502 112     112 0 119 sub format_authors { my ($self, $check) = @_;
503 112         275 return $self->format_names($self->entry('Authors', $check));
504             }
505 0     0 0 0 sub format_editors { my ($self, $check) = @_;
506 0         0 my $eds = $self->entry('Editors', $check);
507 0 0       0 return undef unless defined $eds;
508 0         0 my $num = $self->num_names($eds);
509             #print "$eds = $num names\n";
510 0 0       0 return $num == 0 ? () :
    0          
511             ($self->format_names($eds) . ", " .
512             $self->format_keyword($num == 1 ? "editor" : "editors"));
513             }
514 4     4 0 8 sub format_authors_or_editors { my ($self) = @_;
515             # NEW: print authors || editors
516             ### ToDo: give warning if both are defined!!!!
517 4 50       19 return $self->entryNotEmpty('Authors') ?
518             $self->format_authors(1) :
519             $self->format_editors(1);
520             }
521 0     0 0 0 sub format_title { my ($self, $check) = @_;
522 0         0 my $Title = $self->entry('Title', $check);
523             # my $id = $self->converter()->refStyle()->bookmarkID($self->refID());
524 0 0       0 return $self->spaceConnect(
525             $Title ? $Title : '',
526             # ? $self->outDoc->bookmark($Title, $id)
527             # : $self->outDoc->bookmark('', $id),
528             $self->format_language());
529             }
530 2     2 0 3 sub format_title_for_book { my ($self, $check) = @_;
531             # CAUTION: bibtex takes the booktitle from the 'Title' field!
532             # I renamed format.btitle to format_title_for_book
533 2         7 my $Title = $self->entry('Title', $check);
534             # my $id = $self->converter()->refStyle()->bookmarkID($self->refID());
535 2 50       11 return $self->spaceConnect(
536             $Title ? $self->outDoc()->italic($Title) : '',
537             # ? $self->outDoc()->bookmark($self->outDoc()->italic($Title), $id)
538             # : $self->outDoc()->bookmark('', $id),
539             $self->format_language());
540             }
541 76     76 0 84 sub format_volume { my ($self) = @_;
542 76         169 my $Volume = $self->entry('Volume');
543 76 100       255 return $Volume ?
544             $self->tieOrSpaceConnect(
545             $self->format_keyword("volume"), $Volume) : ();
546             }
547 4     4 0 7 sub format_volume_series { my ($self) = @_;
548 4         14 my $Volume = $self->entry('Volume');
549 4         18 my $Series = $self->entry('Series');
550             ### volume xor number check missing
551 4 50       24 return $Volume ?
    50          
552             $self->tieOrSpaceConnect(
553             $self->format_keyword("volume"),
554             $Volume
555             ) .
556             ($Series ? " " . $self->format_keyword("of") . " " .
557             $self->outDoc->italic($Series) : ''
558             )
559             : ();
560             }
561 0     0 0 0 sub format_number { my ($self) = @_;
562 0         0 my $Number = $self->entry('Number');
563 0 0       0 return $Number ?
564             $self->tieOrSpaceConnect(
565             $self->format_keyword("number"),
566             $Number
567             ) : ();
568             }
569 76     76 0 102 sub format_number_series { my ($self) = @_;
570             # my $Volume = $self->entry('Volume');
571 76         177 my $Number = $self->entry('Number');
572 76         190 my $Series = $self->entry('Series');
573             ### use "Number" when at start of sentence ....
574 76 100       169 if( ! defined $Number ) { return (); }
  68         132  
575             return
576 8 50       18 $self->tieOrSpaceConnect(
577             $self->format_keyword("number"),
578             $Number
579             ) .
580             ($Series ? " in $Series" : "");
581             }
582 80     80 0 109 sub format_volume_number_series { my ($self) = @_;
583             # NEW: allow both vol. and no. and series in proceedings
584             # (needed for CHI Letters)
585 80         179 my $number = $self->entryNotEmpty('Number');
586 80         206 my $series = $self->entryNotEmpty('Series');
587 80 100 100     252 if( $series && not $number ) {
588 4         23 return $self->format_volume_series();
589             }
590 76         149 my @form = ($self->format_volume(), $self->format_number_series());
591 76         295 return @form;
592             }
593 80     80 0 91 sub format_edition { my ($self) = @_;
594 80         178 my $Edition = $self->entry('Edition');
595 80 100       342 return () unless defined($Edition);
596 2         10 my $num = Biblio::Util::ordnumber($Edition);
597             #print "edition: $Edition ", ($num ? "is number $num" : "is no number");
598             # if it's no number, just return the entry
599 2 50       10 return $Edition unless defined($num);
600 0         0 return $self->tieOrSpaceConnect($Edition, $self->format_keyword("edition"));
601             }
602 0     0 0 0 sub format_date { my ($self, $check) = @_;
603 0         0 my $Month = $self->outDoc->formatRange($self->entry('Month'));
604 0         0 my $Year = $self->entry('Year', $check);
605 0 0 0     0 return ($Year && $Month) ? "$Month $Year" :
    0          
606             ($Year ? $Year : ());
607             }
608 72     72 0 82 sub format_pages { my ($self) = @_;
609 72         164 my $Pages = $self->entry('Pages');
610 72 50       233 return $Pages ?
    100          
611             $self->tieOrSpaceConnect(
612             $self->format_keyword(
613             $self->multi_page_check($Pages) ? "pages" : "page"),
614             $self->outDoc->formatRange($Pages))
615             : ();
616             }
617 0     0 0 0 sub format_vol_num_pages { my ($self) = @_;
618             # return "volume(number):pages" or "pp. pages"
619 0         0 my $Volume = $self->entry('Volume');
620 0         0 my $Number = $self->entry('Number');
621 0 0 0     0 return $self->format_pages()
622             unless ($Volume || $Number);
623 0         0 my $Pages = $self->outDoc->formatRange($self->entry('Pages'));
624 0 0       0 return ($Volume ? $Volume : '') .
    0          
    0          
625             ($Number ? "($Number)" : '') .
626             ($Pages ? ":$Pages" : '');
627             }
628 74     74 0 96 sub format_chapter_pages { my ($self) = @_;
629 74         172 my $Chapter = $self->entry('Chapter');
630 74         211 my $Pages = $self->entry('Pages');
631 74 100       236 return $self->format_pages()
632             unless $Chapter;
633 2 50       5 return ($self->tieOrSpaceConnect(
634             $self->format_keyword("chapter"),
635             $Chapter),
636             ($Pages ? $self->format_pages() : ()));
637             }
638 0     0 0 0 sub format_booktitle { my ($self, $check) = @_;
639 0         0 my $SuperTitle = $self->entry('SuperTitle', $check);
640 0 0       0 return $SuperTitle ?
641             $self->outDoc->italic($SuperTitle) :
642             ();
643             }
644 0     0 0 0 sub format_in_ed_booktitle { my ($self, $check) = @_;
645 0         0 my $SuperTitle = $self->entry('SuperTitle', $check);
646 0 0       0 $SuperTitle = $SuperTitle ? $self->outDoc->italic($SuperTitle) : ();
647 0 0       0 return () unless $SuperTitle;
648 0 0       0 return $self->entryNotEmpty('Editors') ?
649             "In " . $self->format_editors() . ", $SuperTitle" :
650             "In $SuperTitle";
651             }
652 6     6 0 10 sub format_techrep_number { my ($self) = @_;
653             # FUNCTION {format.tr.number}
654 6         18 my $type = $self->format_type("Technical Report");
655 6         18 my $Number = $self->entry('Number');
656 6 50       37 return $Number ?
657             $self->tieOrSpaceConnect($type, $Number) :
658             $type;
659             }
660            
661             # new methods
662            
663 14     14 0 21 sub format_address { my ($self) = @_;
664             #### CAUTION: This currently looks both for address and location ..... well ....
665 14 50       44 return $self->entryNotEmpty('Address') ?
666             $self->entry('Address') :
667             $self->entry('Location');
668             }
669 0     0 0 0 sub format_publisher { my ($self) = @_;
670 0         0 return $self->entry('Publisher');
671             }
672 6     6 0 8 sub format_institution { my ($self) = @_;
673             # an institution could also be an organization or school.
674             # no idea, why this is separated in bibtex ...
675 6   33     18 return $self->entry('Institution')
676             || $self->entry('Organization')
677             || $self->entry('School');
678             }
679 0     0 0 0 sub format_journal { my ($self) = @_;
680 0         0 return $self->outDoc->italic($self->entry('Journal', 1));
681             }
682 2     2 0 4 sub format_organization { my ($self) = @_;
683 2   33     7 return $self->entry('Organization')
684             || $self->entry('Institution')
685             || $self->entry('School');
686             }
687 6     6 0 8 sub format_school { my ($self) = @_;
688 6         17 return $self->entry('School');
689             }
690 0     0 0 0 sub format_howpublished { my ($self, $check) = @_;
691 0 0       0 if( $self->entryNotEmpty('HowPublished') ) {
692 0         0 return $self->entry('HowPublished');
693             }
694 0 0       0 if( $self->entryNotEmpty('SuperTitle') ) {
695 0         0 $self->warn("Using SuperTitle instead of HowPublished in ". $self->refID());
696 0         0 return $self->entry('SuperTitle');
697             }
698 0         0 return $self->entry('HowPublished', $check);
699             }
700            
701 114     114 0 143 sub format_language { my ($self) = @_;
702             # for IEEE(TR) -- support for non-english sources
703 114         289 my $lang = $self->entry('Language');
704 114 50       577 return () unless( defined($lang) );
705 0         0 my $default_lang = $self->defaultLanguage();
706 0 0       0 return $lang eq $default_lang
707             ? ()
708             : '(in ' . $self->format_keyword($lang) . ')';
709             }
710            
711 0     0 0 0 sub format_urldate { my ($self, $check) = @_;
712             # date of URL access
713 0         0 my $date = $self->format_date();
714 0 0       0 return $date ? "($date)" : ();
715             }
716 112     112 0 144 sub format_url { my ($self, $check) = @_;
717 112         281 my $url = $self->entry('Source', $check);
718 112 100       389 return () unless( $url );
719             # try to look for hyperlinks
720 62         201 my @urls = split(/,\s*/, $url);
721 62         178 return join(", ",
722             map($self->outDoc->hyperlink($_), @urls));
723             }
724 112     112 0 138 sub format_annote { my ($self) = @_;
725 112         239 return $self->entry('Annote');
726             }
727 112     112 0 138 sub format_trailer { my ($self, @exclude) = @_;
728             # write additional information:
729             # URL, file, annotation etc.
730 112         391 my %include = map(($_ => $self->option("include$_")), (
731             'URL',
732             'Annote',
733             ));
734 112         139 my $x; foreach $x (@exclude) { $include{$x} = 0 }
  112         190  
  0         0  
735             return (
736 112 50       307 ($include{'URL'} ? [ $self->format_url() ] : ()),
    50          
737             ($include{'Annote'} ? [ $self->format_annote() ] : ()),
738             );
739             }
740            
741            
742             #
743             #
744             # formating methods for different bib types
745             #
746             #
747            
748 20     20 0 23 sub sortkey_article { my ($self) = @_; return $self->sortkey_authors(); }
  20         38  
749 0     0 0 0 sub format_article { my ($self) = @_;
750             return [
751 0         0 [ $self->format_authors() ], # if it's a journal, authors is empty
752             [ $self->format_title() ], # if it's a journal, the title is empty
753             [ [
754             $self->format_journal(1),
755             $self->format_vol_num_pages(),
756             $self->format_date(1),
757             ] ],
758             $self->format_trailer(),
759             ];
760             }
761 4     4 0 9 sub sortkey_book { my ($self) = @_; return $self->sortkey_authors_or_editors(); }
  4         19  
762 0     0 0 0 sub format_book { my ($self) = @_;
763             return [
764 0         0 [ $self->format_authors_or_editors()
765             ],
766             [ [
767             $self->format_title_for_book(1),
768             $self->format_volume_series(),
769             ] ],
770             [
771             $self->format_number_series(),
772             [
773             $self->format_publisher(1),
774             $self->format_address(),
775             $self->format_edition(),
776             $self->format_date(1),
777             ],
778             ],
779             $self->format_trailer(),
780             ];
781             }
782            
783 0     0 0 0 sub sortkey_booklet { my ($self) = @_; return $self->sortkey_authors(); }
  0         0  
784 0     0 0 0 sub format_booklet { my ($self) = @_;
785             ### this is simplyfied: always generate a new block
786             ### between title and howpublished/address ...
787             return [
788 0         0 [ $self->format_authors() ],
789             [ $self->format_title() ],
790             [ [
791             $self->format_howpublished(),
792             $self->format_address(),
793             $self->format_date(),
794             ] ],
795             $self->format_trailer(),
796             ];
797             }
798            
799 0     0 0 0 sub sortkey_inbook { my ($self) = @_; return $self->sortkey_authors_or_editors(); }
  0         0  
800 0     0 0 0 sub format_inbook { my ($self) = @_;
801             return [
802 0         0 [ $self->format_authors_or_editors()
803             ],
804             [ [
805             $self->format_title_for_book(1),
806             $self->format_volume_series(),
807             $self->format_chapter_pages(),
808             ] ],
809             [
810             $self->format_number_series(),
811             [
812             $self->format_publisher(1),
813             $self->format_address(),
814             $self->format_edition(),
815             $self->format_date(1),
816             ],
817             ],
818             $self->format_trailer(),
819             ];
820             }
821            
822 8     8 0 12 sub sortkey_incollection { my ($self) = @_; return $self->sortkey_authors(); }
  8         19  
823 0     0 0 0 sub format_incollection { my ($self) = @_;
824             return [
825 0         0 [ $self->format_authors(1) ],
826             [ $self->format_title(1) ],
827             [ [
828             $self->format_in_ed_booktitle(1),
829             $self->format_volume_number_series(),
830             $self->format_chapter_pages(),
831             ],
832             [
833             $self->format_publisher(1),
834             $self->format_address(),
835             $self->format_edition(),
836             $self->format_date(1),
837             ] ],
838             $self->format_trailer(),
839             ];
840             }
841            
842 60     60 0 76 sub sortkey_inproceedings { my ($self) = @_; return $self->sortkey_authors(); }
  60         109  
843 0     0 0 0 sub format_inproceedings { my ($self) = @_;
844             return [
845 0 0 0     0 [ $self->format_authors(1) ],
    0 0        
846             [ $self->format_title(1) ],
847             (($self->entryNotEmpty('Address') ||
848             ($self->entryNotEmpty('Location'))) ? #### see format_address
849             [ [
850             $self->format_in_ed_booktitle(1),
851             $self->format_volume_number_series(),
852             $self->format_pages(),
853             $self->format_address(),
854             $self->format_date(1),
855             ],
856             [
857             $self->format_organization(),
858             $self->format_publisher(),
859             ] ]
860             : # Address empty
861             (($self->entryNotEmpty('Organization') ||
862             $self->entryNotEmpty('Publisher')) ?
863             [ [
864             $self->format_in_ed_booktitle(1),
865             $self->format_volume_number_series(),
866             $self->format_pages(),
867             ],
868             [
869             $self->format_organization(),
870             $self->format_publisher(),
871             $self->format_date(1),
872             ] ]
873             : # Publisher and Organization empty
874             [ [
875             $self->format_in_ed_booktitle(1),
876             $self->format_volume_number_series(),
877             $self->format_pages(),
878             $self->format_date(1),
879             ] ],
880             )
881             ),
882             $self->format_trailer(),
883             ];
884             }
885            
886 0     0 0 0 sub sortkey_manual { my ($self) = @_; return $self->sortkey_authors_or_organization(); }
  0         0  
887 0     0 0 0 sub format_manual { my ($self) = @_;
888 0         0 my $author = $self->entryNotEmpty('Authors');
889 0         0 my $org = $self->entryNotEmpty('Organization');
890 0         0 my $addr = $self->entryNotEmpty('Address');
891            
892 0 0       0 if($author) {
893             return [
894 0 0 0     0 [ $self->format_authors(1) ],
895             ($org || $addr ? (
896             [ $self->format_title_for_book(1) ],
897             [ [
898             $self->format_organization(),
899             $self->format_address(),
900             $self->format_edition(),
901             $self->format_date(),
902             ] ]
903             ) : ( # no org and no addr
904             [ [
905             $self->format_title_for_book(1),
906             $self->format_edition(),
907             $self->format_date(),
908             ] ]
909             ) ),
910             $self->format_trailer(),
911             ];
912             }
913 0 0       0 if( $org ) {
914             return [
915             [ [
916 0         0 $self->format_organization(),
917             $self->format_address(),
918             ] ],
919             [ [
920             $self->format_title_for_book(1),
921             $self->format_edition(),
922             $self->format_date(),
923             ] ],
924             $self->format_trailer(),
925             ];
926             }
927             # no author and no organization, but an address
928 0 0       0 if( $addr ) {
929             return [
930             [ [
931 0         0 $self->format_title_for_book(1),
932             ] ],
933             [ [
934             $self->format_address(),
935             $self->format_edition(),
936             $self->format_date(),
937             ] ],
938             $self->format_trailer(),
939             ];
940             }
941             # no author, org., addr ...
942             return [
943             [ [
944 0         0 $self->format_title_for_book(1),
945             $self->format_edition(),
946             $self->format_date(),
947             ] ],
948             $self->format_trailer(),
949             ];
950             }
951            
952 6     6 0 13 sub sortkey_thesis { my ($self) = @_; return $self->sortkey_authors(); }
  6         13  
953 0     0 0 0 sub format_thesis { my ($self, $default_type) = @_;
954             ### NEW -> combined masterthesis and phdthesis
955             ### and new StarOffice plain thesis
956             return [
957 0   0     0 [ $self->format_authors(1) ],
958             [ $self->format_title(1) ],
959             [ [
960             $self->format_type($default_type || "thesis"),
961             $self->format_school(1),
962             $self->format_address(),
963             $self->format_date(1),
964             ] ],
965             $self->format_trailer(),
966             ];
967             }
968            
969 0     0 0 0 sub sortkey_masterthesis { my ($self) = @_; return $self->sortkey_thesis(); }
  0         0  
970 0     0 0 0 sub format_masterthesis { my ($self) = @_;
971 0         0 return $self->format_thesis("Master's thesis");
972             }
973            
974 6     6 0 11 sub sortkey_misc { my ($self) = @_; return $self->sortkey_authors(); }
  6         12  
975 0     0 0 0 sub format_misc { my ($self) = @_;
976             ### this is simplyfied: always generate a new block
977             ### between authors, title, and howpublished ...
978             ### MISSING: check
979             return [
980 0         0 [ $self->format_authors() ],
981             [ $self->format_title() ],
982             [ [
983             $self->format_howpublished(1),
984             $self->format_date(1),
985             ] ],
986             [ $self->format_annote() ],
987             $self->format_trailer('Annote'), # exclude Annote
988             ];
989             }
990            
991 0     0 0 0 sub sortkey_phdthesis { my ($self) = @_; return $self->sortkey_thesis(); }
  0         0  
992 0     0 0 0 sub format_phdthesis { my ($self) = @_;
993 0         0 return $self->format_thesis("PhD thesis");
994             }
995            
996 0     0 0 0 sub sortkey_proceedings { my ($self) = @_; return $self->sortkey_editors_or_organization(); }
  0         0  
997 0     0 0 0 sub format_proceedings { my ($self) = @_;
998 0         0 my $editor = $self->entryNotEmpty('Editors');
999 0   0     0 my $addr = $self->entryNotEmpty('Address') || $self->entryNotEmpty('Location');
1000 0         0 my $org = $self->entryNotEmpty('Organization');
1001 0         0 my $publ = $self->entryNotEmpty('Publisher');
1002             return [
1003             [
1004 0 0 0     0 ($editor ?
    0          
    0          
    0          
    0          
    0          
1005             $self->format_editors() :
1006             $self->format_organization()
1007             )
1008             ],
1009             ($addr ?
1010             [ [
1011             $self->format_title_for_book(1),
1012             $self->format_volume_number_series(),
1013             $self->format_address(),
1014             $self->format_date(1),
1015             ],
1016             [
1017             ($editor ?
1018             $self->format_organization()
1019             : () # no editor, the organization is already placed at the top
1020             ),
1021             $self->format_publisher(),
1022             ] ]
1023             : # no addr
1024             ($editor ?
1025             ($org || $publ ?
1026             [ [
1027             $self->format_title_for_book(1),
1028             $self->format_volume_number_series(),
1029             ],
1030             [
1031             $self->format_organization(),
1032             $self->format_publisher(),
1033             $self->format_date(1),
1034             ] ]
1035             : # no org, no publ
1036             [ [
1037             $self->format_title_for_book(1),
1038             $self->format_volume_number_series(),
1039             $self->format_date(1),
1040             ] ]
1041             )
1042             : # no editor, the organization is already placed at the top
1043             ($publ ?
1044             [ [
1045             $self->format_title_for_book(1),
1046             $self->format_volume_number_series(),
1047             ],
1048             [
1049             $self->format_publisher(),
1050             $self->format_date(1),
1051             ] ]
1052             : # no publ
1053             [ [
1054             $self->format_title_for_book(1),
1055             $self->format_volume_number_series(),
1056             $self->format_date(1),
1057             ] ]
1058             )
1059             ),
1060             ),
1061             $self->format_trailer(),
1062             ];
1063             }
1064            
1065 6     6 0 8 sub sortkey_report { my ($self) = @_; return $self->sortkey_authors(); }
  6         12  
1066 0     0 0 0 sub format_report { my ($self) = @_;
1067             return [
1068 0         0 [ $self->format_authors(1) ],
1069             [ $self->format_title(1) ],
1070             [ [
1071             $self->format_techrep_number(),
1072             $self->format_institution(1),
1073             $self->format_address(),
1074             $self->format_date(1),
1075             ] ],
1076             $self->format_trailer(),
1077             ];
1078             }
1079            
1080 0     0 0 0 sub sortkey_unpublished { my ($self) = @_; return $self->sortkey_authors(); }
  0         0  
1081 0     0 0 0 sub format_unpublished { my ($self) = @_;
1082             return [
1083 0         0 [ $self->format_authors(1) ],
1084             [ $self->format_title(1) ],
1085             $self->format_trailer(),
1086             $self->format_date(),
1087             ];
1088             }
1089            
1090 0     0 0 0 sub sortkey_email { my ($self) = @_; return $self->sortkey_unpublished(); }
  0         0  
1091 0     0 0 0 sub format_email { my ($self) = @_; return $self->format_unpublished(); }
  0         0  
1092            
1093 0     0 0 0 sub sortkey_web { my ($self) = @_; return $self->sortkey_authors(); }
  0         0  
1094 0     0 0 0 sub format_web { my ($self) = @_;
1095             return [
1096             [ [
1097 0         0 $self->format_authors(),
1098             $self->format_title(1),
1099             $self->format_booktitle(),
1100             $self->format_edition(),
1101             $self->format_organization(),
1102             $self->format_address(),
1103             $self->spaceConnect(
1104             $self->format_url(1),
1105             $self->format_urldate()
1106             ),
1107             ] ],
1108             $self->format_trailer('URL'), # exclude URL
1109             ];
1110             }
1111            
1112 0     0 0 0 sub sortkey_video { my ($self) = @_; return $self->sortkey_misc(); }
  0         0  
1113 0     0 0 0 sub format_video { my ($self) = @_; return $self->format_misc(); }
  0         0  
1114            
1115 6     6 0 11 sub sortkey_talk { my ($self) = @_; return $self->sortkey_misc(); }
  6         27  
1116 0     0 0   sub format_talk { my ($self) = @_; return $self->format_misc(); }
  0            
1117             # sub format_talk { my ($self) = @_; return $self->format_misc(); }
1118            
1119 0     0 0   sub sortkey_poster { my ($self) = @_; return $self->sortkey_inproceedings(); }
  0            
1120 0     0 0   sub format_poster { my ($self) = @_; return $self->format_inproceedings(); }
  0            
1121            
1122 0     0 0   sub sortkey_patent { my ($self) = @_; return $self->sortkey_misc(); }
  0            
1123 0     0 0   sub format_patent { my ($self) = @_;
1124             # . <ReportType[United States Patent]> no. <Number>, <Month>, <Year>. </td> </tr> <tr> <td class="h" > <a name="1125">1125</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inventors: <Authors>. Assignee: <Institution|Organization>, <Address> </td> </tr> <tr> <td class="h" > <a name="1126">1126</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return $self->format_misc(); </td> </tr> <tr> <td class="h" > <a name="1127">1127</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1128">1128</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="1129">1129</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-PBib-BibItemStyle-pm--subroutine.html#1129-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-PBib-BibItemStyle-pm--subroutine.html#1129-1"> 0 </a> </td> <td >   </td> <td class="s"> sub sortkey_cdrom { my ($self) = @_; return $self->sortkey_misc(); } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1130">1130</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-PBib-BibItemStyle-pm--subroutine.html#1130-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-PBib-BibItemStyle-pm--subroutine.html#1130-1"> 0 </a> </td> <td >   </td> <td class="s"> sub format_cdrom { my ($self) = @_; return $self->format_misc(); } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1131">1131</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="1132">1132</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; </td> </tr> <tr> <td class="h" > <a name="1133">1133</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="1134">1134</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1135">1135</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # $Log: BibItemStyle.pm,v $ </td> </tr> <tr> <td class="h" > <a name="1136">1136</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.1.1.1 2004/09/02 13:53:36 tandler </td> </tr> <tr> <td class="h" > <a name="1137">1137</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Version 2.0 with new dir structure (thanks to krugar) </td> </tr> <tr> <td class="h" > <a name="1138">1138</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1139">1139</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.21 2004/03/29 13:11:37 tandler </td> </tr> <tr> <td class="h" > <a name="1140">1140</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # fix double dots in output </td> </tr> <tr> <td class="h" > <a name="1141">1141</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1142">1142</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.20 2003/12/22 21:52:53 tandler </td> </tr> <tr> <td class="h" > <a name="1143">1143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # new function "first_initials" to format first names as initials </td> </tr> <tr> <td class="h" > <a name="1144">1144</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1145">1145</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.19 2003/12/01 11:20:21 tandler </td> </tr> <tr> <td class="h" > <a name="1146">1146</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # HowPublished has a capital "P" ... </td> </tr> <tr> <td class="h" > <a name="1147">1147</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # bugfix for formatting keyword ("chapter") -- this is toni's change </td> </tr> <tr> <td class="h" > <a name="1148">1148</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # use "Location" as well as "Address" at several places, even if this might be wrong ... ok, not nice, but anyway ... </td> </tr> <tr> <td class="h" > <a name="1149">1149</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1150">1150</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.17 2003/06/12 22:03:40 tandler </td> </tr> <tr> <td class="h" > <a name="1151">1151</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # support for logMessage() and warn() </td> </tr> <tr> <td class="h" > <a name="1152">1152</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # fields: Organization, Institution, School more tolerant </td> </tr> <tr> <td class="h" > <a name="1153">1153</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # fix in et al. handling </td> </tr> <tr> <td class="h" > <a name="1154">1154</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1155">1155</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.16 2003/05/22 11:55:49 tandler </td> </tr> <tr> <td class="h" > <a name="1156">1156</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the "talk" is now formatted just like a inproceedings (paper), but with optional publisher. </td> </tr> <tr> <td class="h" > <a name="1157">1157</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1158">1158</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.15 2003/04/14 09:47:31 ptandler </td> </tr> <tr> <td class="h" > <a name="1159">1159</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # new options "etalNumber", "itemBokmark" </td> </tr> <tr> <td class="h" > <a name="1160">1160</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1161">1161</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.14 2003/01/27 21:12:03 ptandler </td> </tr> <tr> <td class="h" > <a name="1162">1162</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # move split_names etc. to Bib::Util </td> </tr> <tr> <td class="h" > <a name="1163">1163</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1164">1164</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.13 2003/01/14 11:08:09 ptandler </td> </tr> <tr> <td class="h" > <a name="1165">1165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # {space} as label separator </td> </tr> <tr> <td class="h" > <a name="1166">1166</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1167">1167</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.12 2002/11/05 18:28:55 peter </td> </tr> <tr> <td class="h" > <a name="1168">1168</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # names </td> </tr> <tr> <td class="h" > <a name="1169">1169</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # format vol/nr (space/tie connect) </td> </tr> <tr> <td class="h" > <a name="1170">1170</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1171">1171</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.11 2002/11/03 22:15:33 peter </td> </tr> <tr> <td class="h" > <a name="1172">1172</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # format names </td> </tr> <tr> <td class="h" > <a name="1173">1173</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1174">1174</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.10 2002/10/01 21:25:09 ptandler </td> </tr> <tr> <td class="h" > <a name="1175">1175</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - bookmarks in IEE style </td> </tr> <tr> <td class="h" > <a name="1176">1176</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - format names started (initials, last) </td> </tr> <tr> <td class="h" > <a name="1177">1177</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - number_series works now without series </td> </tr> <tr> <td class="h" > <a name="1178">1178</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1179">1179</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.9 2002/09/22 11:00:02 peter </td> </tr> <tr> <td class="h" > <a name="1180">1180</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # allow ';' as separator for names (author, editor etc.) </td> </tr> <tr> <td class="h" > <a name="1181">1181</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1182">1182</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.8 2002/08/22 10:40:05 peter </td> </tr> <tr> <td class="h" > <a name="1183">1183</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - fix option "include-label" </td> </tr> <tr> <td class="h" > <a name="1184">1184</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1185">1185</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.7 2002/08/08 08:25:23 Diss </td> </tr> <tr> <td class="h" > <a name="1186">1186</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - new option "include-label" </td> </tr> <tr> <td class="h" > <a name="1187">1187</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - new option "label-separator" </td> </tr> <tr> <td class="h" > <a name="1188">1188</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - improved sorting: transform umlaute, skip non-alpha chars </td> </tr> <tr> <td class="h" > <a name="1189">1189</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - renamed field "URL" to "Source" </td> </tr> <tr> <td class="h" > <a name="1190">1190</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1191">1191</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.6 2002/05/27 10:23:43 Diss </td> </tr> <tr> <td class="h" > <a name="1192">1192</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # small fixes ... </td> </tr> <tr> <td class="h" > <a name="1193">1193</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1194">1194</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.5 2002/04/03 10:17:58 Diss </td> </tr> <tr> <td class="h" > <a name="1195">1195</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - keyword styles + language (e.g. EnglishAbbrev) </td> </tr> <tr> <td class="h" > <a name="1196">1196</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - sortkeys with special chars (äöü etc) </td> </tr> <tr> <td class="h" > <a name="1197">1197</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - use correct keyword for phdthesis etc. (OrigCiteType) </td> </tr> <tr> <td class="h" > <a name="1198">1198</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - support 'Key' field </td> </tr> <tr> <td class="h" > <a name="1199">1199</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - include 'Language' in bibitem </td> </tr> <tr> <td class="h" > <a name="1200">1200</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - fix. chapter + pages if chapter is undef </td> </tr> <tr> <td class="h" > <a name="1201">1201</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # - put URL-access date in parentheses </td> </tr> <tr> <td class="h" > <a name="1202">1202</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1203">1203</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.4 2002/03/28 13:23:00 Diss </td> </tr> <tr> <td class="h" > <a name="1204">1204</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # added pbib-export.pl, with some support for bp </td> </tr> <tr> <td class="h" > <a name="1205">1205</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1206">1206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.3 2002/03/27 10:00:50 Diss </td> </tr> <tr> <td class="h" > <a name="1207">1207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # new module structure, not yet included in LitRefs/LitUI (R2) </td> </tr> <tr> <td class="h" > <a name="1208">1208</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1209">1209</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.2 2002/03/22 17:31:02 Diss </td> </tr> <tr> <td class="h" > <a name="1210">1210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # small changes </td> </tr> <tr> <td class="h" > <a name="1211">1211</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1212">1212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Revision 1.1 2002/03/18 11:15:47 Diss </td> </tr> <tr> <td class="h" > <a name="1213">1213</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # major additions: replace [] refs, generate bibliography using [{}], ... </td> </tr> <tr> <td class="h" > <a name="1214">1214</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> </table> </body> </html>