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
|
|
|
|
|
|
|
# . no. , , .
|
1125
|
|
|
|
|
|
|
# Inventors: . Assignee: ,
|
1126
|
0
|
|
|
|
|
|
return $self->format_misc();
|
1127
|
|
|
|
|
|
|
}
|
1128
|
|
|
|
|
|
|
|
1129
|
0
|
|
|
0
|
0
|
|
sub sortkey_cdrom { my ($self) = @_; return $self->sortkey_misc(); }
|
|
0
|
|
|
|
|
|
|
1130
|
0
|
|
|
0
|
0
|
|
sub format_cdrom { my ($self) = @_; return $self->format_misc(); }
|
|
0
|
|
|
|
|
|
|
1131
|
|
|
|
|
|
|
|
1132
|
|
|
|
|
|
|
1;
|
1133
|
|
|
|
|
|
|
|
1134
|
|
|
|
|
|
|
#
|
1135
|
|
|
|
|
|
|
# $Log: BibItemStyle.pm,v $
|
1136
|
|
|
|
|
|
|
# Revision 1.1.1.1 2004/09/02 13:53:36 tandler
|
1137
|
|
|
|
|
|
|
# Version 2.0 with new dir structure (thanks to krugar)
|
1138
|
|
|
|
|
|
|
#
|
1139
|
|
|
|
|
|
|
# Revision 1.21 2004/03/29 13:11:37 tandler
|
1140
|
|
|
|
|
|
|
# fix double dots in output
|
1141
|
|
|
|
|
|
|
#
|
1142
|
|
|
|
|
|
|
# Revision 1.20 2003/12/22 21:52:53 tandler
|
1143
|
|
|
|
|
|
|
# new function "first_initials" to format first names as initials
|
1144
|
|
|
|
|
|
|
#
|
1145
|
|
|
|
|
|
|
# Revision 1.19 2003/12/01 11:20:21 tandler
|
1146
|
|
|
|
|
|
|
# HowPublished has a capital "P" ...
|
1147
|
|
|
|
|
|
|
# bugfix for formatting keyword ("chapter") -- this is toni's change
|
1148
|
|
|
|
|
|
|
# use "Location" as well as "Address" at several places, even if this might be wrong ... ok, not nice, but anyway ...
|
1149
|
|
|
|
|
|
|
#
|
1150
|
|
|
|
|
|
|
# Revision 1.17 2003/06/12 22:03:40 tandler
|
1151
|
|
|
|
|
|
|
# support for logMessage() and warn()
|
1152
|
|
|
|
|
|
|
# fields: Organization, Institution, School more tolerant
|
1153
|
|
|
|
|
|
|
# fix in et al. handling
|
1154
|
|
|
|
|
|
|
#
|
1155
|
|
|
|
|
|
|
# Revision 1.16 2003/05/22 11:55:49 tandler
|
1156
|
|
|
|
|
|
|
# the "talk" is now formatted just like a inproceedings (paper), but with optional publisher.
|
1157
|
|
|
|
|
|
|
#
|
1158
|
|
|
|
|
|
|
# Revision 1.15 2003/04/14 09:47:31 ptandler
|
1159
|
|
|
|
|
|
|
# new options "etalNumber", "itemBokmark"
|
1160
|
|
|
|
|
|
|
#
|
1161
|
|
|
|
|
|
|
# Revision 1.14 2003/01/27 21:12:03 ptandler
|
1162
|
|
|
|
|
|
|
# move split_names etc. to Bib::Util
|
1163
|
|
|
|
|
|
|
#
|
1164
|
|
|
|
|
|
|
# Revision 1.13 2003/01/14 11:08:09 ptandler
|
1165
|
|
|
|
|
|
|
# {space} as label separator
|
1166
|
|
|
|
|
|
|
#
|
1167
|
|
|
|
|
|
|
# Revision 1.12 2002/11/05 18:28:55 peter
|
1168
|
|
|
|
|
|
|
# names
|
1169
|
|
|
|
|
|
|
# format vol/nr (space/tie connect)
|
1170
|
|
|
|
|
|
|
#
|
1171
|
|
|
|
|
|
|
# Revision 1.11 2002/11/03 22:15:33 peter
|
1172
|
|
|
|
|
|
|
# format names
|
1173
|
|
|
|
|
|
|
#
|
1174
|
|
|
|
|
|
|
# Revision 1.10 2002/10/01 21:25:09 ptandler
|
1175
|
|
|
|
|
|
|
# - bookmarks in IEE style
|
1176
|
|
|
|
|
|
|
# - format names started (initials, last)
|
1177
|
|
|
|
|
|
|
# - number_series works now without series
|
1178
|
|
|
|
|
|
|
#
|
1179
|
|
|
|
|
|
|
# Revision 1.9 2002/09/22 11:00:02 peter
|
1180
|
|
|
|
|
|
|
# allow ';' as separator for names (author, editor etc.)
|
1181
|
|
|
|
|
|
|
#
|
1182
|
|
|
|
|
|
|
# Revision 1.8 2002/08/22 10:40:05 peter
|
1183
|
|
|
|
|
|
|
# - fix option "include-label"
|
1184
|
|
|
|
|
|
|
#
|
1185
|
|
|
|
|
|
|
# Revision 1.7 2002/08/08 08:25:23 Diss
|
1186
|
|
|
|
|
|
|
# - new option "include-label"
|
1187
|
|
|
|
|
|
|
# - new option "label-separator"
|
1188
|
|
|
|
|
|
|
# - improved sorting: transform umlaute, skip non-alpha chars
|
1189
|
|
|
|
|
|
|
# - renamed field "URL" to "Source"
|
1190
|
|
|
|
|
|
|
#
|
1191
|
|
|
|
|
|
|
# Revision 1.6 2002/05/27 10:23:43 Diss
|
1192
|
|
|
|
|
|
|
# small fixes ...
|
1193
|
|
|
|
|
|
|
#
|
1194
|
|
|
|
|
|
|
# Revision 1.5 2002/04/03 10:17:58 Diss
|
1195
|
|
|
|
|
|
|
# - keyword styles + language (e.g. EnglishAbbrev)
|
1196
|
|
|
|
|
|
|
# - sortkeys with special chars (äöü etc)
|
1197
|
|
|
|
|
|
|
# - use correct keyword for phdthesis etc. (OrigCiteType)
|
1198
|
|
|
|
|
|
|
# - support 'Key' field
|
1199
|
|
|
|
|
|
|
# - include 'Language' in bibitem
|
1200
|
|
|
|
|
|
|
# - fix. chapter + pages if chapter is undef
|
1201
|
|
|
|
|
|
|
# - put URL-access date in parentheses
|
1202
|
|
|
|
|
|
|
#
|
1203
|
|
|
|
|
|
|
# Revision 1.4 2002/03/28 13:23:00 Diss
|
1204
|
|
|
|
|
|
|
# added pbib-export.pl, with some support for bp
|
1205
|
|
|
|
|
|
|
#
|
1206
|
|
|
|
|
|
|
# Revision 1.3 2002/03/27 10:00:50 Diss
|
1207
|
|
|
|
|
|
|
# new module structure, not yet included in LitRefs/LitUI (R2)
|
1208
|
|
|
|
|
|
|
#
|
1209
|
|
|
|
|
|
|
# Revision 1.2 2002/03/22 17:31:02 Diss
|
1210
|
|
|
|
|
|
|
# small changes
|
1211
|
|
|
|
|
|
|
#
|
1212
|
|
|
|
|
|
|
# Revision 1.1 2002/03/18 11:15:47 Diss
|
1213
|
|
|
|
|
|
|
# major additions: replace [] refs, generate bibliography using [{}], ...
|
1214
|
|
|
|
|
|
|
# |