1911 lines
54 KiB
Plaintext
1911 lines
54 KiB
Plaintext
|
%
|
|||
|
% huplain.bst -- plain.bst in Hungarian
|
|||
|
% by pts@fazekas.hu at Thu Oct 30 10:10:04 CET 2003
|
|||
|
% tetex-url at Mon May 3 20:01:40 CEST 2004
|
|||
|
% derived from BibTeX standard bibliography style `plain'
|
|||
|
% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
|
|||
|
%
|
|||
|
% This program is free software; you can redistribute it and/or modify
|
|||
|
% it under the terms of the GNU General Public License as published by
|
|||
|
% the Free Software Foundation; either version 2 of the License, or
|
|||
|
% (at your option) any later version.
|
|||
|
%
|
|||
|
% This program is distributed in the hope that it will be useful,
|
|||
|
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
% GNU General Public License for more details.
|
|||
|
%
|
|||
|
% !! title={Az foo} -> key={foo}
|
|||
|
% !! auto add space into URLs longer than 70 characters
|
|||
|
% !! don't remove double-accent in T1 encoding: \'{\`a}}
|
|||
|
% !! sort year
|
|||
|
% !! make sure about Hungarian typography of {proceedings} and {inproceedings}
|
|||
|
% it is better now to have talked=1, (Elhangzott a ... c<>m<EFBFBD> konferenci<63>n)
|
|||
|
% !! also remove space after \ae before calling purify$
|
|||
|
% !! crossrefs
|
|||
|
% !! ` type '
|
|||
|
% !! hu ordering: author, year, title if author is present
|
|||
|
% title, year if author is missing!
|
|||
|
% !! use and document ``address''
|
|||
|
% !! MSZ 3401--81. A bibliogr<67>fiai t<>telek bet<65>rendbe sorol<6F>s<EFBFBD>nak szab<61>lyai.
|
|||
|
% !! MSZ 3402--80. K<>nyvek bibliogr<67>fiai adatk<74>zl<7A>se <20>s bels<6C> elrendez<65>se.
|
|||
|
% !! MSZ 3424/*-*. Bibliogr<67>fiai le<6C>r<EFBFBD>s. *.
|
|||
|
% !! MSZ 3432-85. Szavak <20>s sz<73>kapcsolatok r<>vid<69>t<EFBFBD>se a bibliogr<67>fiai le<6C>r<EFBFBD>sban.
|
|||
|
% !! MSZ 3440/*-*. A bibiliogr<67>fiai le<6C>r<EFBFBD>s besorol<6F>si adatai. *.
|
|||
|
% !! abbrv style for J.-P. Sartre
|
|||
|
% !! test all entry types
|
|||
|
% !! optional \uppercase or \textsc
|
|||
|
% !! "5~ {\hbox{ja}}nu\'ar" #1 "({l,}{ff,})" format.name$ warning$
|
|||
|
% !! format.name$ keeps the first char of the name only, so specify {Gy}ula
|
|||
|
% !! don't use width$ ??, because it's the cmr10 font in 1987.
|
|||
|
% !! getting the first chars of names
|
|||
|
% !! \include...
|
|||
|
% !! bibgerman.sty, gerplain.bst, language = "german" | "USenglish" | "english" etc.
|
|||
|
% \selectlanguage{...} \bibitem...
|
|||
|
% !! doc: parametric volume: `k<>tet' (volumeisyearly={1}) instead of `<60>vf.'
|
|||
|
% OK: smaller space for \newblock
|
|||
|
% OK: huname: name in hungarian order
|
|||
|
% SUXX: cannot read current (overridden) MACRO values from .bst
|
|||
|
% SUXX: #161 int.to.chr$ doesn't work (out of bounds), stupid BibTeX...
|
|||
|
% Dat: @preamble { "..." # "..." }
|
|||
|
% Dat: bibtex removes spaces from end of field contents
|
|||
|
% Dat: `volume=' is `<60>vfolyam'
|
|||
|
% Dat: Doc: key={{ }.}
|
|||
|
% Dat: Doc: write non-decaptilized titles: title = {Fejt<6A> {Ferenc} <20>s a szoci<63>ldemokr<6B>cia},
|
|||
|
% Dat: print debug messages with "foo" warning$
|
|||
|
%
|
|||
|
|
|||
|
ENTRY
|
|||
|
{ address
|
|||
|
author
|
|||
|
booktitle
|
|||
|
chapter
|
|||
|
edition
|
|||
|
editor
|
|||
|
howpublished
|
|||
|
institution
|
|||
|
journal
|
|||
|
key
|
|||
|
month
|
|||
|
note
|
|||
|
number
|
|||
|
organization
|
|||
|
pages
|
|||
|
publisher
|
|||
|
school
|
|||
|
series
|
|||
|
title
|
|||
|
type
|
|||
|
volume
|
|||
|
year
|
|||
|
|
|||
|
street
|
|||
|
zip
|
|||
|
city
|
|||
|
phone
|
|||
|
mobile
|
|||
|
name
|
|||
|
|
|||
|
numvolumes
|
|||
|
numpages
|
|||
|
tetex-url
|
|||
|
ctan-url
|
|||
|
url
|
|||
|
isbn
|
|||
|
issn
|
|||
|
nocheck % ****pts****
|
|||
|
huname % ****pts****
|
|||
|
inputenc % ****pts****
|
|||
|
author2 % ****pts****
|
|||
|
talked % ****pts****
|
|||
|
volumeisyearly % ****pts****
|
|||
|
|
|||
|
% vvv for fmts
|
|||
|
firstname.fmt % ****pts****
|
|||
|
lastname.fmt % ****pts****
|
|||
|
}
|
|||
|
{}
|
|||
|
{ label adr.char } % !! what does this mean?
|
|||
|
|
|||
|
|
|||
|
FUNCTION {not}
|
|||
|
{ { #0 }
|
|||
|
{ #1 }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {and}
|
|||
|
{ 'skip$
|
|||
|
{ pop$ #0 }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {or}
|
|||
|
{ { pop$ #1 }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
STRINGS { ss tt }
|
|||
|
|
|||
|
%STRINGS { acc.latin2.160 acc.latin1.160 acc.160 }
|
|||
|
%FUNCTION {init.accs} {
|
|||
|
% " A L LS SSTZ-ZZ a l ls sstz zzRAAAALCCCEEEEIIDDNNOOOO*RUUUUYTsraaaalccceeeeiiddnnoooo/ruuuuytd" 'acc.latin2.160 :=
|
|||
|
% " ! | <!- m +23 m 1 > AAAAAAACEEEEIIIIDNOOOOO*OUUUUYTsaaaaaaaceeeeiiiidnooooo/ouuuuyty" 'acc.latin1.160 :=
|
|||
|
%}
|
|||
|
%%** @param #1 string
|
|||
|
%%** @return string
|
|||
|
%FUNCTION {rmacc.latinx} { % ****pts****
|
|||
|
% 'tt :=
|
|||
|
% "" 'ss :=
|
|||
|
% { tt empty$ not } {
|
|||
|
% #1
|
|||
|
% { duplicate$ tt swap$ #1 substring$
|
|||
|
% duplicate$ "" = { pop$ #0 } { chr.to.int$ #160 < } if$
|
|||
|
% } { #1 + } while$
|
|||
|
% duplicate$ tt swap$ #1 swap$ #1 - substring$
|
|||
|
% % duplicate$ ";" * warning$
|
|||
|
% ss swap$ * 'ss :=
|
|||
|
% duplicate$ tt swap$ #1 substring$
|
|||
|
% duplicate$ "" = { pop$ } {
|
|||
|
% chr.to.int$ #159 - acc.160 swap$ #1 substring$
|
|||
|
% ss swap$ * 'ss :=
|
|||
|
% #1 +
|
|||
|
% } if$
|
|||
|
% tt swap$ global.max$ substring$ 'tt :=
|
|||
|
% % tt warning$
|
|||
|
% } while$
|
|||
|
% ss
|
|||
|
%}
|
|||
|
%
|
|||
|
%%** @param #1 a string
|
|||
|
%%** @return a string
|
|||
|
%FUNCTION {rmacc} { % **** pts ****
|
|||
|
% inputenc empty$ 'skip$ {
|
|||
|
% inputenc "latin1" = { acc.latin1.160 'acc.160 := rmacc.latinx } 'skip$ if$
|
|||
|
% inputenc "latin2" = { acc.latin2.160 'acc.160 := rmacc.latinx } 'skip$ if$
|
|||
|
% } if$
|
|||
|
%}
|
|||
|
|
|||
|
STRINGS { acc4.latin2.160 acc4.latin1.160 acc4.160 }
|
|||
|
FUNCTION {init.accs4} {
|
|||
|
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%\S %\" quote$ "{}%%%%%%%%%%%%%%%%%%%%%%%%\={}%%%%%%%%%%%%%%%%\'{}%%%%\P %%%%%\c\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%\`A%\'A%\^A%\~A%\" quote$ "A%\r A\AE%\c C\`E%\'E%\^E%\" quote$ "E%\`I%\'I%\^I%\" quote$ "I%\DH%\~N%\`O%\'O%\^O%\~O%\" quote$ "O%%%%%\O %\`U%\'U%\^U%\" quote$ "U%\'Y%\TH%\ss%\`a%\'a%\^a%\~a%\" quote$ "a%\r a\ae%\c c\`e%\'e%\^e%\" quote$ "e%\`\i\'\i\^\i\" quote$ "\i\dh%\~n%\`o%\'o%\^o%\~o%\" quote$ "o%%%%%\o %\`u%\'u%\^u%\" quote$ "u%\'y%\th%\" quote$ "y%" * * * * * * * * * * * * * * * * * * * * * * * * 'acc4.latin1.160 :=
|
|||
|
"%%%%\k A\u{}\L %%%%%\v L\'S%\S %\" quote$ "{}\v S\c S\v T\'Z%%%%%\v Z\.Z%%%%%\k a\k\ \l %\'{}\v l\'s%\v{}\c\ \v s\c s\v t\'z%\H{}\v z\.z%\'R%\'A%\^A%\u A\" quote$ "A%\'L%\'C%\c C\v C\'E%\k E\" quote$ "E%\v E\'I%\^I%\v D\DJ%\'N%\v N\'O%\^O%\H O\" quote$ "O%%%%%\v R\r U\'U%\H U\" quote$ "U%\'Y%\c T\ss%\'r%\'a%\^a%\u a\" quote$ "a%\'l%\'c%\c c\v c\'e%\k e\" quote$ "e%\v e\'\i\^\i\v d\dj%\'n%\v n\'o%\^o%\H o\" quote$ "o%%%%%\v r\r u\'u%\H u\" quote$ "u%\'y%\c t\.{}" * * * * * * * * * * * * * * * * * * 'acc4.latin2.160 :=
|
|||
|
}
|
|||
|
%** @param #1 string
|
|||
|
%** @return string
|
|||
|
FUNCTION {rmacc4.latinx} { % ****pts****
|
|||
|
'tt :=
|
|||
|
"" 'ss :=
|
|||
|
{ tt "" = not } { % Dat: empty$ is true for space
|
|||
|
#1
|
|||
|
{ duplicate$ tt swap$ #1 substring$
|
|||
|
duplicate$ "" = { pop$ #0 } { chr.to.int$ #160 < } if$
|
|||
|
} { #1 + } while$
|
|||
|
duplicate$ tt swap$ #1 swap$ #1 - substring$
|
|||
|
% duplicate$ ";" * warning$
|
|||
|
ss swap$ * 'ss :=
|
|||
|
duplicate$ tt swap$ #1 substring$
|
|||
|
duplicate$ "" = { pop$ } {
|
|||
|
% chr.to.int$ #159 - acc.160 swap$ #1 substring$
|
|||
|
duplicate$ chr.to.int$
|
|||
|
acc4.160 swap$ duplicate$ + duplicate$ + #639 - #4 substring$
|
|||
|
duplicate$ "%%%%" = {
|
|||
|
pop$
|
|||
|
} {
|
|||
|
swap$ pop$
|
|||
|
duplicate$ #4 #1 substring$ "%" = { #1 #3 substring$ } 'skip$ if$
|
|||
|
"{" swap$ * "}" *
|
|||
|
} if$
|
|||
|
ss swap$ * 'ss :=
|
|||
|
#1 +
|
|||
|
} if$
|
|||
|
tt swap$ global.max$ substring$ 'tt :=
|
|||
|
% tt warning$
|
|||
|
} while$
|
|||
|
ss
|
|||
|
}
|
|||
|
|
|||
|
%** Changes "<22>" to "{\'a}" etc.
|
|||
|
%** @param #1 a string
|
|||
|
%** @return a string
|
|||
|
FUNCTION {rmacc4} { % **** pts ****
|
|||
|
inputenc empty$ 'skip$ {
|
|||
|
inputenc "latin1" = { acc4.latin1.160 'acc4.160 := rmacc4.latinx } 'skip$ if$
|
|||
|
inputenc "latin2" = { acc4.latin2.160 'acc4.160 := rmacc4.latinx } 'skip$ if$
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { acc.fwd }
|
|||
|
%** Changes "fo{\'o}h{\H u}s" to "fo\'oh\H us". Helps keeping ligatures.
|
|||
|
%** Changes `{\ae}' to `\ae ' and `{\\XY}' to `\XY '
|
|||
|
%** Changes only known accents inside braces, followed by 1 or 2 accented
|
|||
|
%** letters.
|
|||
|
%** Dat: previous \oe must be inserted as {\\oe}, the same for {\DH} etc.
|
|||
|
%** @param #1 string
|
|||
|
%** @return string
|
|||
|
FUNCTION {rmbrace.accs} { % ****pts****
|
|||
|
% Dat: LaTeX non-alphanumeric accents \`\'\^\~\"\=\.
|
|||
|
% Dat: LaTeX accents for purify$: \c\u\v\H\d\b\t\r
|
|||
|
% Dat: specially removed: {\?...} -> ...
|
|||
|
'tt :=
|
|||
|
"" 'ss :=
|
|||
|
{ tt "" = not } {
|
|||
|
#1
|
|||
|
{ duplicate$ tt swap$ #2 substring$
|
|||
|
duplicate$ "" = { pop$ #0 } { "{\" = not } if$
|
|||
|
} { #1 + } while$
|
|||
|
duplicate$ tt swap$ #1 swap$ #1 - substring$
|
|||
|
% duplicate$ ";" * warning$
|
|||
|
ss swap$ * 'ss :=
|
|||
|
|
|||
|
duplicate$ tt swap$ #2 + #1 substring$
|
|||
|
"}" = { #3 } {
|
|||
|
duplicate$ tt swap$ #3 + #1 substring$
|
|||
|
"}" = { % `{\i}' etc.
|
|||
|
duplicate$ tt swap$ #2 + #1 substring$
|
|||
|
duplicate$ "o" = {#4} {
|
|||
|
duplicate$ "O" = {#4} {
|
|||
|
duplicate$ "l" = {#4} {
|
|||
|
duplicate$ "L" = {#4} {
|
|||
|
duplicate$ "i" = {#4} {
|
|||
|
duplicate$ "j" = {#4} {
|
|||
|
#3} % Dat: disallow other {\X}
|
|||
|
if$} if$} if$} if$} if$} if$
|
|||
|
swap$ pop$
|
|||
|
} {
|
|||
|
duplicate$ tt swap$ #4 + #1 substring$
|
|||
|
"}" = { #5 } {
|
|||
|
duplicate$ tt swap$ #5 + #1 substring$
|
|||
|
"}" = { #6 } { #3 } if$
|
|||
|
} if$
|
|||
|
} if$
|
|||
|
} if$
|
|||
|
'acc.fwd :=
|
|||
|
% Status: offset-of-"\{"
|
|||
|
%%acc.fwd int.to.str$ warning$
|
|||
|
acc.fwd #3 = {
|
|||
|
duplicate$ tt swap$ acc.fwd substring$ % copy 3 bytes
|
|||
|
} {
|
|||
|
duplicate$ #1 + tt swap$ acc.fwd #2 - substring$ % keep "\'o" or "\H u" only
|
|||
|
%%duplicate$ warning$
|
|||
|
duplicate$ "\oe" = {#5} {
|
|||
|
duplicate$ "\OE" = {#5} {
|
|||
|
duplicate$ "\ae" = {#5} {
|
|||
|
duplicate$ "\AE" = {#5} {
|
|||
|
duplicate$ "\aa" = {#5} {
|
|||
|
duplicate$ "\AA" = {#5} {
|
|||
|
duplicate$ "\th" = {#5} {
|
|||
|
duplicate$ "\TH" = {#5} {
|
|||
|
duplicate$ "\dh" = {#5} {
|
|||
|
duplicate$ "\DH" = {#5} {
|
|||
|
duplicate$ "\dj" = {#5} {
|
|||
|
duplicate$ "\DJ" = {#5} {
|
|||
|
duplicate$ "\ng" = {#5} {
|
|||
|
duplicate$ "\NG" = {#5} {
|
|||
|
duplicate$ "\ss" = {#5} {
|
|||
|
duplicate$ "\SS" = {#5} {
|
|||
|
duplicate$ "\o" = {#5} {
|
|||
|
duplicate$ "\O" = {#5} {
|
|||
|
duplicate$ "\l" = {#5} {
|
|||
|
duplicate$ "\L" = {#5} {
|
|||
|
duplicate$ "\i" = {#5} {
|
|||
|
duplicate$ "\j" = {#5} {
|
|||
|
duplicate$ #2 #1 substring$
|
|||
|
duplicate$ "`" = {#1} {
|
|||
|
duplicate$ "'" = {#1} {
|
|||
|
duplicate$ "^" = {#1} {
|
|||
|
duplicate$ "~" = {#1} {
|
|||
|
duplicate$ quote$ = {#1} {
|
|||
|
duplicate$ "=" = {#1} {
|
|||
|
duplicate$ "." = {#1} {
|
|||
|
duplicate$ "c" = {#2} {
|
|||
|
duplicate$ "u" = {#2} {
|
|||
|
duplicate$ "v" = {#2} {
|
|||
|
duplicate$ "H" = {#2} {
|
|||
|
duplicate$ "d" = {#2} {
|
|||
|
duplicate$ "b" = {#2} {
|
|||
|
duplicate$ "t" = {#2} {
|
|||
|
duplicate$ "r" = {#2} {
|
|||
|
duplicate$ "?" = {#3} {
|
|||
|
duplicate$ "\" = {#4} { % added at Mon May 17 15:39:30 CEST 2004
|
|||
|
#0} if$} if$} if$} if$} if$} if$} if$} if$} if$}
|
|||
|
if$} if$} if$} if$} if$} if$} if$} if$
|
|||
|
% Stack: "\'o" "'" 0|1|2
|
|||
|
swap$ pop$
|
|||
|
} if$} if$} if$} if$} if$} if$} if$} if$} if$} if$} if$} if$} if$} if$}
|
|||
|
if$} if$} if$} if$} if$} if$} if$} if$
|
|||
|
|
|||
|
% Stack: "\'o" 0|1|2|3
|
|||
|
duplicate$ #5 = {
|
|||
|
pop$ " " * % `{\oe}' becomes `\oe '
|
|||
|
} { duplicate$ #4 = {
|
|||
|
pop$ #2 global.max$ substring$ % include single backlsash
|
|||
|
" " * % add space so `{\\th}' becomes `\th '
|
|||
|
} { duplicate$ #3 = {
|
|||
|
pop$ #3 global.max$ substring$
|
|||
|
} { duplicate$ #2 = {
|
|||
|
pop$
|
|||
|
duplicate$ #3 #1 substring$
|
|||
|
" " =
|
|||
|
} 'skip$ if$
|
|||
|
% Stack: "\'o" 0|1
|
|||
|
'skip$ { "{" swap$ * "}" * } if$
|
|||
|
} if$ } if$ } if$
|
|||
|
} if$
|
|||
|
ss swap$ * 'ss :=
|
|||
|
acc.fwd + tt swap$ global.max$ substring$ 'tt :=
|
|||
|
} while$
|
|||
|
ss
|
|||
|
}
|
|||
|
|
|||
|
% ---
|
|||
|
|
|||
|
INTEGERS { output.state before.all mid.sentence after.sentence after.block
|
|||
|
cur.adr.char after.authors }
|
|||
|
STRINGS { s t ls rs }
|
|||
|
|
|||
|
FUNCTION {init.state.consts}
|
|||
|
{ #0 'before.all :=
|
|||
|
#1 'mid.sentence :=
|
|||
|
#2 'after.sentence :=
|
|||
|
#3 'after.block :=
|
|||
|
#4 'after.authors :=
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FUNCTION {output.nonnull}
|
|||
|
{ 's :=
|
|||
|
output.state mid.sentence =
|
|||
|
{ ", " * write$ }
|
|||
|
{ output.state after.block =
|
|||
|
{ add.period$ write$
|
|||
|
newline$
|
|||
|
"\bibNewBlock " write$
|
|||
|
}
|
|||
|
{ output.state before.all =
|
|||
|
'write$
|
|||
|
{ output.state after.authors =
|
|||
|
{ write$ newline$ "\bibNewBlock " write$ }
|
|||
|
{ add.period$ " " * write$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
mid.sentence 'output.state :=
|
|||
|
}
|
|||
|
if$
|
|||
|
s
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output}
|
|||
|
{ duplicate$ empty$
|
|||
|
'pop$
|
|||
|
'output.nonnull
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.check}
|
|||
|
{ 't :=
|
|||
|
duplicate$ empty$
|
|||
|
{ pop$
|
|||
|
nocheck empty$ { "empty " t * " in " * cite$ * warning$ } {} if$
|
|||
|
}
|
|||
|
'output.nonnull
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
% @return a string
|
|||
|
FUNCTION {output.bibitem}
|
|||
|
{ newline$
|
|||
|
"\bibitem{" write$
|
|||
|
cite$ write$
|
|||
|
"}" write$
|
|||
|
inputenc empty$ {} { " \bibInputEncoding{" inputenc "}" * * write$ } if$
|
|||
|
newline$
|
|||
|
""
|
|||
|
before.all 'output.state :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {fin.entry}
|
|||
|
{ add.period$
|
|||
|
write$
|
|||
|
newline$
|
|||
|
inputenc empty$ 'skip$ { "\bibResetInputEncoding" write$ newline$ } if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.block}
|
|||
|
{ output.state before.all =
|
|||
|
'skip$
|
|||
|
{ after.block 'output.state := }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
% ****pts****
|
|||
|
FUNCTION {new.block.authors} {
|
|||
|
duplicate$ empty$ 'skip$ { ":" * } if$
|
|||
|
output.state before.all =
|
|||
|
'skip$
|
|||
|
{ after.authors 'output.state := }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.sentence}
|
|||
|
{ output.state after.block =
|
|||
|
'skip$
|
|||
|
{ output.state before.all =
|
|||
|
'skip$
|
|||
|
{ after.sentence 'output.state := }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.block.checka}
|
|||
|
{ empty$
|
|||
|
'skip$
|
|||
|
'new.block
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.block.checkb}
|
|||
|
{ empty$
|
|||
|
swap$ empty$
|
|||
|
and
|
|||
|
'skip$
|
|||
|
'new.block
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.sentence.checka}
|
|||
|
{ empty$
|
|||
|
'skip$
|
|||
|
'new.sentence
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {new.sentence.checkb}
|
|||
|
{ empty$
|
|||
|
swap$ empty$
|
|||
|
and
|
|||
|
'skip$
|
|||
|
'new.sentence
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {field.or.null}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {emphasize}
|
|||
|
{ duplicate$ empty$
|
|||
|
{ pop$ "" }
|
|||
|
{ "{\em " swap$ * "}" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { nameptr namesleft numnames }
|
|||
|
|
|||
|
FUNCTION {format.isbn}
|
|||
|
{ isbn empty$
|
|||
|
{ "" }
|
|||
|
{ new.block "ISBN " isbn * }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.issn}
|
|||
|
{ issn empty$
|
|||
|
{ "" }
|
|||
|
{ new.block "ISSN " issn * }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
%** <string-of-length-1> is.url.split.char <0-or-1>
|
|||
|
%** Is the spefified char candidate to split the URL at?
|
|||
|
FUNCTION {is.url.split.char} {
|
|||
|
duplicate$ "/" = { pop$ #1 } {
|
|||
|
duplicate$ "." = { pop$ #1 } {
|
|||
|
duplicate$ "?" = { pop$ #1 } {
|
|||
|
duplicate$ "&" = { pop$ #1 } {
|
|||
|
duplicate$ "-" = { pop$ #1 } {
|
|||
|
pop$ #0 } if$ } if$ } if$ } if$ } if$
|
|||
|
}
|
|||
|
|
|||
|
%** <string> string.length <length>
|
|||
|
%** Imp: a faster implementation
|
|||
|
%** Dat: destroys 'ls
|
|||
|
FUNCTION {string.length} {
|
|||
|
'ls :=
|
|||
|
#1
|
|||
|
{ duplicate$ ls swap$ #1 substring$ "" = #1 swap$ - }
|
|||
|
{ #1 + } while$
|
|||
|
#1 -
|
|||
|
"" 'ls :=
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
INTEGERS { last.split.ofs }
|
|||
|
|
|||
|
%** <url> split.url <url-with-spaces>
|
|||
|
%** We have to add spaces (works with \usepackage{url}), because otherwise
|
|||
|
%** bibtex adds a % at column 79.
|
|||
|
%** After a maxinmum of 71 chars, a space gets inserted.
|
|||
|
%** Clobbers 'ss, 'ls and 'rs.
|
|||
|
FUNCTION {split.url} {
|
|||
|
% We add spaces after the last is.url.split.char
|
|||
|
'ss := % save original string
|
|||
|
#0 'last.split.ofs := % Dat: last offset to split _after_
|
|||
|
"" 'rs :=
|
|||
|
#1 % loop variable
|
|||
|
{ duplicate$ ss swap$ #1 substring$ "" = #1 swap$ - } % more chars in ss
|
|||
|
{ duplicate$ ss swap$ #1 substring$ is.url.split.char {
|
|||
|
duplicate$ 'last.split.ofs :=
|
|||
|
} 'skip$ if$
|
|||
|
duplicate$ #70 > {
|
|||
|
last.split.ofs #0 = {
|
|||
|
duplicate$ 'last.split.ofs := % Dat: split at any char if cannot split at good position
|
|||
|
} 'skip$ if$
|
|||
|
rs ss #1 last.split.ofs substring$ " " * * 'rs :=
|
|||
|
ss last.split.ofs #1 + ss string.length substring$ 'ss :=
|
|||
|
%% ss warning$
|
|||
|
last.split.ofs - #1 + % decrement loop variable
|
|||
|
%% duplicate$ warning$
|
|||
|
#0 'last.split.ofs :=
|
|||
|
} { #1 + } if$
|
|||
|
} while$
|
|||
|
pop$ % Dat: pop loop variable
|
|||
|
rs ss *
|
|||
|
"" 'ss :=
|
|||
|
"" 'rs :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {output.url} {
|
|||
|
url empty$
|
|||
|
{ "" }
|
|||
|
{ new.block "" output.nonnull
|
|||
|
before.all 'output.state :=
|
|||
|
newline$ % Dat: bibtex breaks lines -- let it be longer
|
|||
|
"\bibUrll{URL} >" url split.url * ">" * }
|
|||
|
if$ output
|
|||
|
ctan-url empty$
|
|||
|
{ "" }
|
|||
|
{ new.block "" output.nonnull
|
|||
|
before.all 'output.state :=
|
|||
|
newline$ % Dat: bibtex breaks lines -- let it be longer
|
|||
|
"\bibUrll{CTAN} >" ctan-url split.url * ">" * }
|
|||
|
if$ output
|
|||
|
tetex-url empty$
|
|||
|
{ "" }
|
|||
|
{ new.block "" output.nonnull
|
|||
|
before.all 'output.state :=
|
|||
|
newline$ % Dat: bibtex breaks lines -- let it be longer
|
|||
|
"\bibUrll{te\TeX} >" tetex-url * split.url ">" * }
|
|||
|
if$ output
|
|||
|
}
|
|||
|
|
|||
|
% ****pts****
|
|||
|
STRINGS { nfmt0 nfmt1 nfmt2 nfmt3 }
|
|||
|
STRINGS {firstname.fmt0 lastname.fmt0}
|
|||
|
FUNCTION {init.nfmt0} {
|
|||
|
"ff" 'firstname.fmt0 :=
|
|||
|
"ll" 'lastname.fmt0 :=
|
|||
|
% "f." 'firstname.fmt0 := % similar to abbrev.bst
|
|||
|
}
|
|||
|
FUNCTION {init.nfmts} {
|
|||
|
"{" firstname.fmt0 "~}{vv~}{" lastname.fmt0 "}{, jj}" * * * * 'nfmt0 :=% 0: English order
|
|||
|
"{jj~}{vv~}{" lastname.fmt0 "}{~" firstname.fmt0 "}" * * * * 'nfmt1 := % 1: Hungarian name in Hungarian bib
|
|||
|
"{vv~}{" lastname.fmt0 "}{, " firstname.fmt0 "}{, jj}" * * * * 'nfmt2 := % 2: English name in Hungarian bib
|
|||
|
"{jj~}{vv~}{ll}{~f.}" 'nfmt3 := % 3: Hungarian name in Hungarian bib, abbreviated name
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.names}
|
|||
|
{ rmacc4 's := % ****pts****
|
|||
|
#1 'nameptr :=
|
|||
|
s num.names$ 'numnames :=
|
|||
|
numnames 'namesleft :=
|
|||
|
{ namesleft #0 > } {
|
|||
|
% ****pts****
|
|||
|
huname empty$ { s nameptr nfmt0 format.name$ 't := }{ % empty: English order
|
|||
|
huname "0" = { s nameptr nfmt0 format.name$ 't := }{ % 0: English order
|
|||
|
huname "1" = { s nameptr nfmt1 format.name$ 't := }{ % 1: Hungarian name in Hungarian bib
|
|||
|
huname "2" = { s nameptr nfmt2 format.name$ 't := } % 2: English name in Hungarian bib
|
|||
|
{ s nameptr nfmt3 format.name$ 't := } % 3: Hungarian name in Hungarian bib, abbreviated name
|
|||
|
if$ }if$ }if$ }if$
|
|||
|
% ^^^ Dat: important to have no space in {ll} for "others"
|
|||
|
t rmbrace.accs 't := % ****pts****
|
|||
|
nameptr #1 >
|
|||
|
{ namesleft #1 >
|
|||
|
{ "\bibAnd 0" * t * }
|
|||
|
{ % numnames #2 > { "," * } 'skip$ if$ % ****pts****
|
|||
|
%% t ";;" * warning$
|
|||
|
t "others" =
|
|||
|
{ "\bibEtAl ." * }
|
|||
|
{ numnames #2 > { "\bibAnd 2" } { "\bibAnd 1"} if$ * t * }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
't
|
|||
|
if$
|
|||
|
%% t warning$
|
|||
|
nameptr #1 + 'nameptr :=
|
|||
|
namesleft #1 - 'namesleft :=
|
|||
|
} while$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.authors}
|
|||
|
{ author empty$
|
|||
|
{ "" }
|
|||
|
{ author format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.editors}
|
|||
|
{ editor empty$
|
|||
|
{ "" }
|
|||
|
{ editor format.names
|
|||
|
editor num.names$ #1 > { "\bibEd 1" } { "\bibEd 0" } if$ * %****pts****
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.title}
|
|||
|
{ title empty$
|
|||
|
{ "" }
|
|||
|
{ title rmacc4 "t" change.case$ rmbrace.accs } % Dat: ****pts**** get used to it in English...
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {n.dashify}
|
|||
|
{ 't :=
|
|||
|
""
|
|||
|
{ t empty$ not }
|
|||
|
{ t #1 #1 substring$ "-" =
|
|||
|
{ t #1 #2 substring$ "--" = not
|
|||
|
{ "--" *
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
{ { t #1 #1 substring$ "-" = }
|
|||
|
{ "-" *
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ t #1 #1 substring$ *
|
|||
|
t #2 global.max$ substring$ 't :=
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
|
|||
|
% Dat: possible months formats in .bib:
|
|||
|
% month = jun # "-" # aug, --> "j\'unius--\allowbreak augusztus" !!
|
|||
|
% month = jun, --> "j\'unius"
|
|||
|
% month = "8~" # feb, --> "febru<72>r 8."
|
|||
|
% month = nov # ", " # dec, --> "november\nobreak\hskip--\allowbreak december"
|
|||
|
|
|||
|
FUNCTION {format.date}
|
|||
|
{ year empty$
|
|||
|
{ month empty$
|
|||
|
{ "" }
|
|||
|
{ "there's a month but no year in " cite$ * warning$
|
|||
|
month
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ month empty$
|
|||
|
'year
|
|||
|
{ year ".\ " *
|
|||
|
month #1 "{ll}{~ff.}" format.name$ % convert "december" -> "december"; "5~december" -> "december~5."
|
|||
|
% ^^^ !! convert "janu\'ar--febru\'ar" and "janu\'ar, febru\'ar" to "j--f"...
|
|||
|
% ^^^ !! convert . to \hbox{.} at end, to have frenchspacing...
|
|||
|
* } % !! date
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.btitle}
|
|||
|
{ title rmbrace.accs emphasize
|
|||
|
}
|
|||
|
|
|||
|
%** <a> <b> tie.or.space.connect "<b><conc><a>"
|
|||
|
%** <conc> is ~ if <b> is long (>=3 normal letters)
|
|||
|
FUNCTION {tie.or.space.connect}
|
|||
|
{ duplicate$ text.length$ #3 <
|
|||
|
{ "~" }
|
|||
|
{ " " }
|
|||
|
if$
|
|||
|
swap$ * *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {numpages.output} { % ****pts****
|
|||
|
numpages empty$ 'skip$ {
|
|||
|
numpages "p." tie.or.space.connect output
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {note.output} { % ****pts****
|
|||
|
note empty$ 'skip$ { note rmbrace.accs output.nonnull } if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {either.or.check}
|
|||
|
{ empty$
|
|||
|
'pop$
|
|||
|
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.series} { % ****pts****
|
|||
|
series empty$ { "" } {
|
|||
|
series
|
|||
|
type$ "inproceedings" = type$ "proceedings" = or
|
|||
|
{ " kon\-fe\-ren\-cia\-so\-ro\-zat" } { " sorozat" } if$
|
|||
|
*
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
% Dat: INCOLLECTION: number = 23, series = "Fast Computers",
|
|||
|
FUNCTION {format.bvolume} { % ****pts****
|
|||
|
volume empty$ number empty$ and {
|
|||
|
series empty$ 'skip$ { format.series output new.block } if$
|
|||
|
% ^^^ Dat: don't emphasize {Osiris k<>zik<69>nyvek sorozat}, because it's after the book title.
|
|||
|
numvolumes empty$ { "" }
|
|||
|
{ "\bibNumVolumes {" numvolumes "}." * * } if$ % ****pts****
|
|||
|
} {
|
|||
|
"numvolumes and volume/number" numvolumes either.or.check
|
|||
|
series empty$ 'skip$ { format.series output } if$ % Dat: no new.block
|
|||
|
number empty$
|
|||
|
{ volume }
|
|||
|
{ "volume and number" volume either.or.check number } if$
|
|||
|
n.dashify
|
|||
|
duplicate$ #-1 #1 substring$ "-" = 'skip$ 'add.period$ if$
|
|||
|
"\bibVolume {" swap$ * "}." *
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.edition}
|
|||
|
{ edition empty$
|
|||
|
{ "" }
|
|||
|
{ output.state mid.sentence =
|
|||
|
{ edition rmacc4 "l" change.case$ }
|
|||
|
{ edition rmacc4 "t" change.case$ }
|
|||
|
if$
|
|||
|
add.period$
|
|||
|
" kiad." * % Dat: " kiad.": Gyurgy<67>k J<>nos: Szerkeszt<7A>k <20>s szerz<72>k k<>zik<69>nyve, 533. oldal, 2. sor.
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
% Dat: `FUNCTION {multi.page.check}' not needed
|
|||
|
|
|||
|
%** Used by type$ {inbook} and {incollection}
|
|||
|
%** English typography has:
|
|||
|
%** pages 23--45 (pages={23--45})
|
|||
|
%** pp. 23--45. (pages={23--45})
|
|||
|
%** p. 23. (pages=={23}: on page 23)
|
|||
|
%** p. 234 (numpages=234: the book has 234 pages)
|
|||
|
%** Hungarian typography has:
|
|||
|
%** 234 p. (numpages=234)
|
|||
|
%** 23--45. p (pages={23--45})
|
|||
|
%** 23. p. (pages=23)
|
|||
|
FUNCTION {format.pages} { % ****pts****
|
|||
|
pages empty$
|
|||
|
{ "" }
|
|||
|
{ pages add.period$ n.dashify "p." tie.or.space.connect }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {volume.caption} { % ****pts****
|
|||
|
volumeisyearly empty$ { "1" } { volumeisyearly } if$ % default is "1"
|
|||
|
"0" = { "k\" quote$ "otet" * * } { "\'evf." } if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.vol.num.pages} { % ****pts****
|
|||
|
volume duplicate$ empty$ { pop$ "" } {
|
|||
|
add.period$
|
|||
|
volume.caption % "\'evf."
|
|||
|
tie.or.space.connect } if$
|
|||
|
year empty$ {
|
|||
|
nocheck empty$ { "empty year in " cite$ * warning$ } 'skip$ if$
|
|||
|
} {
|
|||
|
duplicate$ empty$
|
|||
|
{ pop$ format.date add.period$ }
|
|||
|
{ " (" * format.date * ")" * } if$
|
|||
|
} if$
|
|||
|
number empty$ 'skip$ {
|
|||
|
duplicate$ empty$ 'skip$ { " " * } if$
|
|||
|
volume empty$ nocheck empty$ and { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$
|
|||
|
number add.period$ "sz." tie.or.space.connect *
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.chapter.pages}
|
|||
|
{ chapter empty$
|
|||
|
{ "" } % 'format.pages
|
|||
|
{ chapter
|
|||
|
type empty$ { "fejezet" } {
|
|||
|
type "subsection" = { "alszakasz" } {
|
|||
|
type "subsubsection" = { "alalszakasz" } {
|
|||
|
type "chapter" = { "fejezet" } {
|
|||
|
type "section" = { "szakasz" } {
|
|||
|
type "part" = { "r{\'e}sz" } {
|
|||
|
type "appendix" = { "f{\" quote$ "u}ggel{\'e}k" * * } {
|
|||
|
type rmacc4 "l" change.case$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
|
|||
|
tie.or.space.connect
|
|||
|
% Dat: no format.pages here % ****pts****
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.in.edited} { % ****pts****
|
|||
|
editor "self" = % ****pts****
|
|||
|
{ "\bibInSelf0" }
|
|||
|
{ "In " format.editors * ": " * } if$
|
|||
|
booktitle rmbrace.accs emphasize *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.in.ed.booktitle} {
|
|||
|
booktitle empty$
|
|||
|
{ "" }
|
|||
|
{ editor empty$
|
|||
|
% vvv "In ": Gyurgy<67>k J<>nos: Szerkeszt<7A>k <20>s szerz<72>k k<>zik<69>nyve, 130. oldal, 12. sor.
|
|||
|
{ "In " booktitle rmbrace.accs emphasize * }
|
|||
|
'format.in.edited if$
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
INTEGERS { len }
|
|||
|
|
|||
|
FUNCTION {chop.word}
|
|||
|
{ 's :=
|
|||
|
'len :=
|
|||
|
s #1 len substring$ =
|
|||
|
{ s len #1 + global.max$ substring$ }
|
|||
|
's
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
%* @param #1 a string beginning with a possibly accented letter
|
|||
|
%* @return "" or "z", corresponding to the Hungarian definite article "a" and "az"
|
|||
|
FUNCTION {article.az} {
|
|||
|
rmacc4 % remove accents smartly
|
|||
|
purify$
|
|||
|
"l" change.case$
|
|||
|
#1 #1 substring$
|
|||
|
duplicate$ " " = {"z"} { % hack
|
|||
|
duplicate$ "a" = {"z"} {
|
|||
|
duplicate$ "e" = {"z"} {
|
|||
|
duplicate$ "i" = {"z"} {
|
|||
|
duplicate$ "o" = {"z"} {
|
|||
|
duplicate$ "u" = {"z"} {
|
|||
|
""} if$ }if$ }if$ }if$ }if$ }if$
|
|||
|
swap$ pop$
|
|||
|
}
|
|||
|
|
|||
|
%** by pts@fazekas.hu at Thu Nov 9 17:03:00 CET 2006
|
|||
|
%** @example "foo}" split.last.brace "foo" "}"
|
|||
|
%** @example "food" split.last.brace "food" ""
|
|||
|
FUNCTION {split.last.brace} {
|
|||
|
duplicate$ #-1 #1 substring$ "}" =
|
|||
|
{ duplicate$ string.length #1 - #1 swap$ substring$ "}" }
|
|||
|
{ "" } if$
|
|||
|
}
|
|||
|
|
|||
|
%** by pts@fazekas.hu at Thu Nov 9 17:03:00 CET 2006
|
|||
|
%** Clobbers 'rs and 'ls
|
|||
|
%** @example "foobar" "bar" replace.at.end "foo" 1
|
|||
|
%** @example "foobar!" "bar" replace.at.end "foobar!" 0
|
|||
|
FUNCTION {remove.at.end} {
|
|||
|
'rs := % save pattern string % Dat: string.length destroys 'ls
|
|||
|
duplicate$ rs string.length #-1 swap$
|
|||
|
substring$ rs =
|
|||
|
{ duplicate$ string.length rs string.length - #1 swap$ substring$ #1 }
|
|||
|
{ #0 } if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.in.talked.booktitle} {
|
|||
|
booktitle empty$
|
|||
|
{ "" }
|
|||
|
{ editor empty$
|
|||
|
{
|
|||
|
booktitle duplicate$ 's :=
|
|||
|
"A " swap$ #2 swap$ chop.word
|
|||
|
"Az " swap$ #3 swap$ chop.word
|
|||
|
%% duplicate$ warning$
|
|||
|
s = {
|
|||
|
"a" booktitle article.az *
|
|||
|
booktitle rmbrace.accs emphasize
|
|||
|
tie.or.space.connect
|
|||
|
} { booktitle rmbrace.accs emphasize } if$
|
|||
|
% Dat: now: "a~{\em Foo Konferencia}"
|
|||
|
split.last.brace
|
|||
|
swap$
|
|||
|
% Dat: now "}" "a~{\em Foo Konferencia"
|
|||
|
% vvv Imp: maybe we don't need \- here, because it
|
|||
|
% prevents hyphenation in earlier parts of the word
|
|||
|
"Conference" remove.at.end { "Con\-fe\-ren\-ce-en" * swap$ * } {
|
|||
|
"conference" remove.at.end { "con\-fe\-ren\-ce-en" * swap$ * } {
|
|||
|
"Konferencia" remove.at.end { "Kon\-fe\-ren\-ci\'an" * swap$ * } {
|
|||
|
"konferencia" remove.at.end { "kon\-fe\-ren\-ci\'an" * swap$ * } {
|
|||
|
swap$ * " c{\'i}m{\H u} konferenci{\'a}n" *
|
|||
|
} if$ } if$ } if$ } if$
|
|||
|
%% duplicate$ warning$
|
|||
|
% Dat: now "a~{\em Foo Konferenci<63>n}"
|
|||
|
% or "a~{\em Foo} c<>m<EFBFBD> konferenci<63>n"
|
|||
|
%% "alma" string.length warning$
|
|||
|
"Elhangzott " swap$ *
|
|||
|
} 'format.in.edited if$
|
|||
|
} if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {empty.misc.check}
|
|||
|
{ author empty$ title empty$ howpublished empty$
|
|||
|
month empty$ year empty$ note empty$
|
|||
|
and and and and and
|
|||
|
key empty$ not and
|
|||
|
{ "all relevant fields are empty in " cite$ * warning$ }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
%** @param #1 default value for `type'
|
|||
|
FUNCTION {format.thesis.type} { % ****pts****
|
|||
|
type empty$ 'skip$ { pop$ type } if$
|
|||
|
rmacc4 "t" change.case$ rmbrace.accs
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.tr.number} % ****pts****
|
|||
|
{ type empty$
|
|||
|
{ "{\bibTechRep 0}" } % Dat: `{'..`}' to avoid "t" change.case$
|
|||
|
'type
|
|||
|
if$
|
|||
|
number empty$
|
|||
|
{ rmacc4 "t" change.case$ }
|
|||
|
{ number add.period$ swap$ tie.or.space.connect }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.article.crossref}
|
|||
|
{ key empty$
|
|||
|
{ journal empty$
|
|||
|
{ "need key or journal for " cite$ * " to crossref " * crossref *
|
|||
|
warning$
|
|||
|
""
|
|||
|
}
|
|||
|
{ "In {\em " journal * "\/}" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "In " key * }
|
|||
|
if$
|
|||
|
" \cite{" * crossref * "}" *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.crossref.editor}
|
|||
|
{ editor #1 "{vv~}{ll}" format.name$
|
|||
|
editor num.names$ duplicate$
|
|||
|
#2 >
|
|||
|
{ pop$ " \bibEtAl ." * }
|
|||
|
{ #2 <
|
|||
|
'skip$
|
|||
|
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
|
|||
|
{ " \bibEtAl ." * }
|
|||
|
{ " \'es " * editor #2 "{vv~}{ll}" format.name$ * } % !!
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.book.crossref}
|
|||
|
{ volume empty$
|
|||
|
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
|
|||
|
"In "
|
|||
|
}
|
|||
|
{ "Volume" volume tie.or.space.connect
|
|||
|
" of " *
|
|||
|
}
|
|||
|
if$
|
|||
|
editor empty$
|
|||
|
editor field.or.null author field.or.null =
|
|||
|
or
|
|||
|
{ key empty$
|
|||
|
{ series empty$
|
|||
|
{ "need editor, key, or series for " cite$ * " to crossref " *
|
|||
|
crossref * warning$
|
|||
|
"" *
|
|||
|
}
|
|||
|
{ "{\em " * series * "\/}" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ key * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ format.crossref.editor * }
|
|||
|
if$
|
|||
|
" \cite{" * crossref * "}" *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {format.incoll.inproc.crossref}
|
|||
|
{ editor empty$
|
|||
|
editor field.or.null author field.or.null =
|
|||
|
or
|
|||
|
{ key empty$
|
|||
|
{ booktitle empty$
|
|||
|
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
|
|||
|
crossref * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
{ "In {\em " booktitle * "\/}" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "In " key * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "In " format.crossref.editor * }
|
|||
|
if$
|
|||
|
" \cite{" * crossref * "}" *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {article} %*type* ****pts****
|
|||
|
{ output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check
|
|||
|
new.block
|
|||
|
crossref missing$
|
|||
|
{ journal emphasize "journal" output.check
|
|||
|
format.vol.num.pages output % format.date is inside this
|
|||
|
}
|
|||
|
{ format.article.crossref output.nonnull
|
|||
|
} if$
|
|||
|
format.pages output
|
|||
|
format.issn output
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
% copied from KOMA-Script
|
|||
|
% by pts at Thu Oct 30 09:56:33 CET 2003
|
|||
|
|
|||
|
% !! how does it work and why?
|
|||
|
FUNCTION {print.adrchr}
|
|||
|
{ adr.char empty$ 'skip$ { % ****pts**** Dat: default
|
|||
|
adr.char chr.to.int$ cur.adr.char >
|
|||
|
{ newline$ "\adrchar{" adr.char "}" * * write$ newline$
|
|||
|
adr.char chr.to.int$ 'cur.adr.char :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
} if$ % !!
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {get.names}
|
|||
|
{ name empty$
|
|||
|
{ organization empty$
|
|||
|
{ "{}{}" }
|
|||
|
{ organization "{}" * }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "{" name #1 "{ll}" format.name$ "}" * *
|
|||
|
"{" name #1 "{ff}{ vv}" format.name$ "}" * * *
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
%** Dat: deliberately with `sss', to avoid conflict
|
|||
|
FUNCTION {addresss} { %*type*
|
|||
|
% !! many improvements
|
|||
|
output.bibitem pop$
|
|||
|
print.adrchr % !!
|
|||
|
"\adrentry" write$
|
|||
|
get.names write$ newline$
|
|||
|
"{"
|
|||
|
street empty$
|
|||
|
{ "" }
|
|||
|
{ street " \\ " *}
|
|||
|
if$
|
|||
|
*
|
|||
|
zip empty$
|
|||
|
{ "" }
|
|||
|
{ zip }
|
|||
|
if$
|
|||
|
" " * *
|
|||
|
city empty$
|
|||
|
{ "" }
|
|||
|
{ city }
|
|||
|
if$
|
|||
|
"}{" * *
|
|||
|
phone empty$
|
|||
|
{
|
|||
|
mobile empty$
|
|||
|
{ "" }
|
|||
|
{ mobile }
|
|||
|
if$
|
|||
|
}{
|
|||
|
mobile empty$
|
|||
|
{ phone }
|
|||
|
{ phone "\\" mobile * * }
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
"}{}{}{}{" * *
|
|||
|
key empty$
|
|||
|
{ "" }
|
|||
|
{ key }
|
|||
|
if$
|
|||
|
"}" * * write$ newline$
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
% ---
|
|||
|
|
|||
|
%** Used by type$ {book}, {inbook} and {incollection}
|
|||
|
FUNCTION {books.tail} { % ****pts****
|
|||
|
crossref missing$ {
|
|||
|
format.bvolume output % includes functionality of format.number.series
|
|||
|
new.block % no comma in `1--4. k<>t., 7. kiad.'
|
|||
|
} 'skip$ if$
|
|||
|
type$ "book" = {
|
|||
|
chapter empty$ 'skip$
|
|||
|
{ "can't use chapter for @book; try @inbook or @incollection" warning$ } if$
|
|||
|
} {
|
|||
|
format.chapter.pages
|
|||
|
pages empty$ { "chapter and pages" output.check } {output} if$
|
|||
|
new.block % new.sentence? -- for incollection
|
|||
|
} if$
|
|||
|
author2 empty$ 'skip$ { author2 output.nonnull new.block } if$
|
|||
|
format.edition output new.block
|
|||
|
crossref missing$ {
|
|||
|
% format.bvolume output
|
|||
|
% new.block
|
|||
|
% format.number.series output % ****pts****
|
|||
|
% new.sentence
|
|||
|
address output
|
|||
|
format.date "year" output.check
|
|||
|
publisher "publisher" output.check
|
|||
|
} {
|
|||
|
format.date "year" output.check
|
|||
|
new.block
|
|||
|
format.book.crossref output.nonnull
|
|||
|
} if$
|
|||
|
format.pages output
|
|||
|
format.isbn output
|
|||
|
format.issn output % Dat: most books don't have this
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {book} { %*type*
|
|||
|
output.bibitem
|
|||
|
author empty$
|
|||
|
{ editor empty$ key missing$ { "" } { key } if$ "." = and
|
|||
|
'skip$
|
|||
|
{ format.editors "author and editor" output.check } if$
|
|||
|
}
|
|||
|
{ format.authors output.nonnull
|
|||
|
crossref missing$
|
|||
|
{ "author and editor" editor either.or.check }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
new.block.authors
|
|||
|
format.btitle "title" output.check
|
|||
|
new.block
|
|||
|
books.tail
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {booklet} { %*type* ****pts****
|
|||
|
output.bibitem
|
|||
|
format.authors output
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check
|
|||
|
new.block
|
|||
|
format.bvolume output new.block
|
|||
|
author2 output.nonnull new.block
|
|||
|
format.edition output new.block
|
|||
|
% howpublished address new.block.checkb
|
|||
|
howpublished output
|
|||
|
address output
|
|||
|
% Dat: no publisher=
|
|||
|
format.date output
|
|||
|
format.isbn output
|
|||
|
format.issn output % Dat: most books don't have this
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {inbook} %*type*
|
|||
|
{ book % ****pts****
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {incollection} %*type*
|
|||
|
{ output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check
|
|||
|
new.block
|
|||
|
crossref missing$
|
|||
|
{ format.in.ed.booktitle "booktitle" output.check new.block }
|
|||
|
{ format.incoll.inproc.crossref output.nonnull } if$
|
|||
|
books.tail
|
|||
|
}
|
|||
|
|
|||
|
%** @param #1 thesis type
|
|||
|
FUNCTION {thesises.tail} { % ****pts****
|
|||
|
format.thesis.type output.nonnull
|
|||
|
school empty$ { nocheck empty$ { "empty school in " * cite$ * warning$ } 'skip$ if$ } 'skip$ if$
|
|||
|
school empty$ address empty$ and 'skip$ {
|
|||
|
write$ before.all 'output.state := " ("
|
|||
|
% school output address ")" * output
|
|||
|
school ")" * output
|
|||
|
new.block
|
|||
|
} if$
|
|||
|
author2 empty$ 'skip$ { author2 output new.block } if$
|
|||
|
new.block
|
|||
|
address output
|
|||
|
format.date "year" output.check
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
%** Emits a decapitalized title.
|
|||
|
FUNCTION {mastersthesis} { %*type*
|
|||
|
output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check
|
|||
|
new.block
|
|||
|
"{Diplomaterv}" % "{Doktori} {{\'e}rtekez{\'e}s} " % "Master's thesis"
|
|||
|
thesises.tail
|
|||
|
}
|
|||
|
|
|||
|
%** Emits an \emph-asized title.
|
|||
|
FUNCTION {phdthesis} { %*type*
|
|||
|
output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.btitle "title" output.check
|
|||
|
new.block
|
|||
|
"{PhD} {\'e}rtekez{\'e}s " % "PhD thesis"
|
|||
|
thesises.tail
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {misc} %*type* % ****pts****
|
|||
|
{ output.bibitem
|
|||
|
format.authors output
|
|||
|
title empty$ howpublished empty$ and 'skip$ {
|
|||
|
new.block.authors % Dat: emits ":"
|
|||
|
% title howpublished new.block.checkb % Dat: emits "."
|
|||
|
format.title output
|
|||
|
howpublished new.block.checka
|
|||
|
howpublished output
|
|||
|
} if$
|
|||
|
format.date output
|
|||
|
format.isbn output
|
|||
|
format.issn output % Dat: most books don't have this
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
empty.misc.check
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {manual} %*type* ****pts****
|
|||
|
{ output.bibitem
|
|||
|
author empty$
|
|||
|
{ organization empty$
|
|||
|
'skip$
|
|||
|
{ organization output.nonnull } if$
|
|||
|
new.block
|
|||
|
}
|
|||
|
{ format.authors output.nonnull new.block.authors }
|
|||
|
if$
|
|||
|
format.btitle "title" output.check
|
|||
|
author2 empty$ 'skip$ { author2 output new.block } if$
|
|||
|
format.edition output new.block
|
|||
|
|
|||
|
publisher empty$ 'skip$ { "can't use publisher for @manual; try @book" warning$ } if$
|
|||
|
author empty$
|
|||
|
{ address output }
|
|||
|
{ % organization address new.block.checkb
|
|||
|
organization output
|
|||
|
address output
|
|||
|
} if$
|
|||
|
format.edition output
|
|||
|
format.date output
|
|||
|
publisher output
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FUNCTION {techreport} %*type*
|
|||
|
{ output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check
|
|||
|
new.block
|
|||
|
format.tr.number output.nonnull
|
|||
|
author2 empty$ 'skip$ { author2 output new.block } if$
|
|||
|
address output
|
|||
|
format.date "year" output.check
|
|||
|
institution "institution" output.check
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {unpublished} %*type* % ****pts****
|
|||
|
{ output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title "title" output.check new.block
|
|||
|
format.date output
|
|||
|
output.url
|
|||
|
new.block
|
|||
|
note "note" output.check
|
|||
|
fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {inproceedings} %*type*
|
|||
|
{ output.bibitem
|
|||
|
format.authors "author" output.check
|
|||
|
new.block.authors
|
|||
|
format.title
|
|||
|
talked empty$ 'skip$ 'emphasize if$ % at Thu Nov 9 16:19:53 CET 2006
|
|||
|
"title" output.check
|
|||
|
new.block
|
|||
|
crossref missing$
|
|||
|
{ talked empty$ 'format.in.ed.booktitle 'format.in.talked.booktitle if$
|
|||
|
duplicate$ #1 #1 substring$ "I" = { % Dat: don't append to `Elhangzott' or empty booktitle
|
|||
|
series empty$ { duplicate$ empty$ 'skip$ { " (kon\-fe\-ren\-cia\-anyag)" * } if$ } 'skip$ if$
|
|||
|
} 'skip$ if$
|
|||
|
"booktitle" output.check
|
|||
|
format.bvolume output % includes functionality of format.number.series
|
|||
|
author2 empty$ 'skip$ { author2 output.nonnull new.block } if$
|
|||
|
new.block
|
|||
|
address output % ****pts****
|
|||
|
format.date "year" output.check
|
|||
|
% new.sentence
|
|||
|
organization output
|
|||
|
publisher output
|
|||
|
}
|
|||
|
{ format.incoll.inproc.crossref output.nonnull }
|
|||
|
if$
|
|||
|
format.pages output
|
|||
|
format.isbn output
|
|||
|
format.issn output % Dat: most books don't have this
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {proceedings} %*type*
|
|||
|
{ output.bibitem
|
|||
|
editor empty$
|
|||
|
{ organization output }
|
|||
|
{ format.editors output.nonnull }
|
|||
|
if$
|
|||
|
new.block
|
|||
|
format.btitle "title" output.check
|
|||
|
series empty$ { " (konferenciaanyag)" * } 'skip$ if$
|
|||
|
format.bvolume output % includes functionality of format.number.series
|
|||
|
author2 empty$ 'skip$ { author2 output.nonnull new.block } if$
|
|||
|
address empty$
|
|||
|
{ editor empty$
|
|||
|
{ publisher new.sentence.checka }
|
|||
|
{ organization publisher new.sentence.checkb
|
|||
|
organization output
|
|||
|
}
|
|||
|
if$
|
|||
|
publisher output
|
|||
|
format.date "year" output.check
|
|||
|
}
|
|||
|
{ address output.nonnull
|
|||
|
format.date "year" output.check
|
|||
|
% new.sentence % ****pts****
|
|||
|
editor empty$
|
|||
|
'skip$
|
|||
|
{ organization output }
|
|||
|
if$
|
|||
|
publisher output
|
|||
|
}
|
|||
|
if$
|
|||
|
format.isbn output
|
|||
|
format.issn output % Dat: most books don't have this
|
|||
|
output.url
|
|||
|
new.block numpages.output note.output fin.entry
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {conference} %*type* % ****pts****
|
|||
|
{ inproceedings }
|
|||
|
|
|||
|
FUNCTION {default.type} { misc }
|
|||
|
|
|||
|
FUNCTION {fmts} { %*type* % ****pts****
|
|||
|
% Emulation of \bibtem without typesetting anything.
|
|||
|
newline$
|
|||
|
"\immediate\write\@auxout{\string\bibcite{" write$
|
|||
|
cite$ write$
|
|||
|
"}{0}}" write$ newline$
|
|||
|
}
|
|||
|
FUNCTION {fmts2} {
|
|||
|
firstname.fmt empty$ 'skip$ { firstname.fmt 'firstname.fmt0 := } if$
|
|||
|
lastname.fmt empty$ 'skip$ { lastname.fmt 'lastname.fmt0 := } if$
|
|||
|
init.nfmts
|
|||
|
}
|
|||
|
|
|||
|
%****pts****
|
|||
|
% Dat: {\-} is needed for format.name$
|
|||
|
MACRO {jan} {"ja{\-}nu{\-}\'ar"}
|
|||
|
MACRO {feb} {"feb{\-}ru\'ar"}
|
|||
|
MACRO {mar} {"m\'ar{\-}cius"}
|
|||
|
MACRO {apr} {"\'ap{\-}ri{\-}lis"}
|
|||
|
MACRO {may} {"m\'a{\-}jus"}
|
|||
|
MACRO {jun} {"j\'u{\-}ni{\-}us"}
|
|||
|
MACRO {jul} {"j\'u{\-}li{\-}us"}
|
|||
|
MACRO {aug} {"au{\-}gusz{\-}tus"}
|
|||
|
MACRO {sep} {"szep{\-}tem{\-}ber"}
|
|||
|
MACRO {oct} {"ok{\-}t\'o{\-}ber"}
|
|||
|
MACRO {nov} {"no{\-}vem{\-}ber"}
|
|||
|
MACRO {dec} {"de{\-}cem{\-}ber"}
|
|||
|
|
|||
|
% Dat: see also in mrabbrev.bib
|
|||
|
MACRO {acmcs} {"ACM Computing Surveys"}
|
|||
|
MACRO {acta} {"Acta Informatica"}
|
|||
|
MACRO {cacm} {"Communications of the ACM"}
|
|||
|
MACRO {ibmjrd} {"IBM Journal of Research and Development"}
|
|||
|
MACRO {ibmsj} {"IBM Systems Journal"}
|
|||
|
MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
|
|||
|
MACRO {ieeetc} {"IEEE Transactions on Computers"}
|
|||
|
MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
|
|||
|
MACRO {ipl} {"Information Processing Letters"}
|
|||
|
MACRO {jacm} {"Journal of the ACM"}
|
|||
|
MACRO {jcss} {"Journal of Computer and System Sciences"}
|
|||
|
MACRO {scp} {"Science of Computer Programming"}
|
|||
|
MACRO {sicomp} {"SIAM Journal on Computing"}
|
|||
|
MACRO {tocs} {"ACM Transactions on Computer Systems"}
|
|||
|
MACRO {tods} {"ACM Transactions on Database Systems"}
|
|||
|
MACRO {tog} {"ACM Transactions on Graphics"}
|
|||
|
MACRO {toms} {"ACM Transactions on Mathematical Software"}
|
|||
|
MACRO {toois} {"ACM Transactions on Office Information Systems"}
|
|||
|
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
|
|||
|
MACRO {tcs} {"Theoretical Computer Science"}
|
|||
|
|
|||
|
READ
|
|||
|
|
|||
|
%** @param #1 string
|
|||
|
%FUNCTION {reverse} { %
|
|||
|
% 't := "" 's :=
|
|||
|
% #1
|
|||
|
% { duplicate$ t swap$ #1 substring$ "" = not } {
|
|||
|
% duplicate$ t swap$ #1 substring$
|
|||
|
% s * 's :=
|
|||
|
% #1 +
|
|||
|
% } while$
|
|||
|
% pop$ s
|
|||
|
%}
|
|||
|
|
|||
|
%** by pts@fazekas.hu at Mon May 17 16:50:26 CEST 2004
|
|||
|
%** @param 1: TeX string
|
|||
|
%** @return {\th}, {\TH} {\dh} {\DH} {\dj} {\DJ} {\ng} {\NG} {\SS} changed to
|
|||
|
%** th TH dh DH dj DJ ng NG SS
|
|||
|
FUNCTION {rmbrace.extrat1} {
|
|||
|
% Dat: #4 #1 substring$ is substr($_,3,1)
|
|||
|
'ss :=
|
|||
|
"" 'tt :=
|
|||
|
#1 'len :=
|
|||
|
#5
|
|||
|
{ duplicate$ ss swap$ #1 substring$ "" = not } {
|
|||
|
% Stack: index-value (#5, #6 ...)
|
|||
|
duplicate$ ss swap$ #1 substring$ "}" = {
|
|||
|
duplicate$ ss swap$ #4 - #5 substring$
|
|||
|
%% duplicate$ warning$
|
|||
|
duplicate$ "{\th}" = {#1} {
|
|||
|
duplicate$ "{\TH}" = {#1} {
|
|||
|
duplicate$ "{\dh}" = {#1} {
|
|||
|
duplicate$ "{\DH}" = {#1} {
|
|||
|
duplicate$ "{\dj}" = {#1} {
|
|||
|
duplicate$ "{\DJ}" = {#1} {
|
|||
|
duplicate$ "{\ng}" = {#1} {
|
|||
|
duplicate$ "{\NG}" = {#1} {
|
|||
|
duplicate$ "{\SS}" = {#1} {
|
|||
|
#0 }if$ }if$ }if$ }if$ }if$ }if$ }if$ }if$ }if$
|
|||
|
} {#42 #0} if$
|
|||
|
#1 = {
|
|||
|
swap$
|
|||
|
% Stack: 5-char-substring index-value
|
|||
|
duplicate$ tt swap$ ss swap$ len swap$ len - #4 - substring$ * 'tt :=
|
|||
|
swap$ tt swap$ #3 #2 substring$ * 'tt :=
|
|||
|
#1 +
|
|||
|
duplicate$ 'len :=
|
|||
|
} { pop$ #1 + } if$
|
|||
|
} while$
|
|||
|
pop$ % index value
|
|||
|
tt ss len global.max$ substring$ *
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FUNCTION {sortify}
|
|||
|
{ rmacc4 % remove accents smartly, so purify$ will remove the accent
|
|||
|
% rmbrace.accs
|
|||
|
duplicate$ % ****pts****
|
|||
|
rmbrace.extrat1 % ****pts****
|
|||
|
purify$
|
|||
|
% Dat: purify$ removes <20> from "v<>rom", keeps `varom' in "v\'arom","v{\'a}rom"
|
|||
|
% Dat: purify$ changes {\ss} to ss, but {\dj} to empty
|
|||
|
"l" change.case$
|
|||
|
" " *
|
|||
|
swap$ *
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {sort.format.names}
|
|||
|
{ 's :=
|
|||
|
#1 'nameptr :=
|
|||
|
""
|
|||
|
s num.names$ 'numnames :=
|
|||
|
numnames 'namesleft :=
|
|||
|
{ namesleft #0 > }
|
|||
|
{ nameptr #1 >
|
|||
|
{ " " * }
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
|
|||
|
nameptr numnames = t "others" = and
|
|||
|
{ "et al" * }
|
|||
|
{ t sortify % Dat: calls rmacc4 and purify$
|
|||
|
%% duplicate$ warning$
|
|||
|
* }
|
|||
|
if$
|
|||
|
nameptr #1 + 'nameptr :=
|
|||
|
namesleft #1 - 'namesleft :=
|
|||
|
}
|
|||
|
while$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {sort.format.title}
|
|||
|
{ rmacc4 't :=
|
|||
|
"A " #2
|
|||
|
"An " #3
|
|||
|
"The " #4
|
|||
|
"Egy " #4
|
|||
|
"Der " #4
|
|||
|
"Die " #4
|
|||
|
"Das " #4
|
|||
|
"Un " #3
|
|||
|
"Une " #4
|
|||
|
"Az " #3 t chop.word
|
|||
|
chop.word chop.word chop.word chop.word chop.word % ***pts****
|
|||
|
chop.word
|
|||
|
chop.word
|
|||
|
chop.word
|
|||
|
chop.word
|
|||
|
sortify
|
|||
|
#1 global.max$ substring$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {author.sort}
|
|||
|
{ name empty$
|
|||
|
{ author empty$
|
|||
|
{ key empty$
|
|||
|
{ "to sort, need author/key/name in " cite$ * warning$
|
|||
|
title empty$ { "" } { title sort.format.title } if$ % ****pts****
|
|||
|
}{ key sortify }
|
|||
|
if$
|
|||
|
}{ author sort.format.names }
|
|||
|
if$
|
|||
|
}{ name sort.format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {author.editor.sort}
|
|||
|
{ author empty$
|
|||
|
{ editor empty$
|
|||
|
{ key missing$
|
|||
|
{ title empty$ nocheck empty$ or
|
|||
|
{ "to sort, need author, editor, or key in " cite$ * warning$ } 'skip$ if$
|
|||
|
title empty$ { "" } { title sort.format.title } if$ % ****pts****
|
|||
|
}
|
|||
|
{ key "." = % ****pts****
|
|||
|
{ " " title sort.format.title * } % duplicate$ warning$
|
|||
|
% ^^^ Dat: " " is here to put them in front of other books
|
|||
|
{ key sortify } if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
{ editor sort.format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ author sort.format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {author.organization.sort}
|
|||
|
{ author empty$
|
|||
|
{ organization empty$
|
|||
|
{ key empty$
|
|||
|
{ "to sort, need author, organization, or key in " cite$ * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
{ key sortify }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "The " #4 organization chop.word sortify }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ author sort.format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {editor.organization.sort}
|
|||
|
{ editor empty$
|
|||
|
{ organization empty$
|
|||
|
{ key empty$
|
|||
|
{ "to sort, need editor, organization, or key in " cite$ * warning$
|
|||
|
""
|
|||
|
}
|
|||
|
{ key sortify }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ "The " #4 organization chop.word sortify }
|
|||
|
if$
|
|||
|
}
|
|||
|
{ editor sort.format.names }
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {presort}
|
|||
|
{ type$ "book" = type$ "inbook" = or
|
|||
|
'author.editor.sort
|
|||
|
{ type$ "proceedings" =
|
|||
|
'editor.organization.sort
|
|||
|
{ type$ "manual" =
|
|||
|
'author.organization.sort
|
|||
|
{ type$ "fmts" =
|
|||
|
{ fmts2 "" } % ****pts****
|
|||
|
'author.sort
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
}
|
|||
|
if$
|
|||
|
" "
|
|||
|
*
|
|||
|
year field.or.null sortify
|
|||
|
*
|
|||
|
" "
|
|||
|
*
|
|||
|
title field.or.null
|
|||
|
sort.format.title
|
|||
|
*
|
|||
|
#1 entry.max$ substring$
|
|||
|
'sort.key$ :=
|
|||
|
}
|
|||
|
|
|||
|
EXECUTE {init.accs4}
|
|||
|
EXECUTE {init.nfmt0}
|
|||
|
EXECUTE {init.nfmts}
|
|||
|
|
|||
|
ITERATE {presort}
|
|||
|
|
|||
|
SORT
|
|||
|
|
|||
|
STRINGS { longest.label }
|
|||
|
|
|||
|
INTEGERS { number.label longest.label.width }
|
|||
|
|
|||
|
FUNCTION {initialize.longest.label}
|
|||
|
{ "" 'longest.label :=
|
|||
|
#1 'number.label :=
|
|||
|
#0 'longest.label.width :=
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {longest.label.pass}
|
|||
|
{ number.label int.to.str$ 'label :=
|
|||
|
number.label #1 + 'number.label :=
|
|||
|
label width$ longest.label.width >
|
|||
|
{ label 'longest.label :=
|
|||
|
label width$ 'longest.label.width :=
|
|||
|
}
|
|||
|
'skip$
|
|||
|
if$
|
|||
|
}
|
|||
|
|
|||
|
EXECUTE {initialize.longest.label}
|
|||
|
|
|||
|
ITERATE {longest.label.pass}
|
|||
|
|
|||
|
FUNCTION {bibIE.a} {
|
|||
|
"\makeatletter" write$ newline$
|
|||
|
"\global\def\bibIE@lowc{%" write$ newline$
|
|||
|
" \expandafter\ifx\csname inputencoding\endcsname\relax" write$ newline$
|
|||
|
" \def\NeedsTeXFormat##1]{}%" write$ newline$
|
|||
|
" \def\ProvidesPackage##1]{}%" write$ newline$
|
|||
|
" \def\DeclareOption##1##2{}%" write$ newline$
|
|||
|
" \def\ProcessOptions{\@ifstar\@gobble\@empty}%" write$ newline$
|
|||
|
" \input inputenc.sty" write$ newline$
|
|||
|
" \let\NeedsTeXFormat \@notprerr" write$ newline$
|
|||
|
" \let\ProvidesPackage\@notprerr" write$ newline$
|
|||
|
" \let\DeclareOption \@notprerr" write$ newline$
|
|||
|
" \let\ProcessOptions \@notprerr" write$ newline$
|
|||
|
" \fi" write$ newline$
|
|||
|
" \global\let\bibIE@lowc\relax}" write$ newline$
|
|||
|
"\def\bibIE@lowa#1#2{%" write$ newline$
|
|||
|
" \global\def\bibResetInputEncoding{\bibIE@lowb{ascii}}% anti-warning" write$ newline$
|
|||
|
" \ifx#1\relax\else" write$ newline$
|
|||
|
" \ifx#1\@inpenc@undefined@\@empty" write$ newline$
|
|||
|
" \global\def\bibResetInputEncoding{\bibIE@lowb{#2}}%" write$ newline$
|
|||
|
" \ifx\bibResetInputEncoding\reserved@a% keep old encoding" write$ newline$
|
|||
|
" \global\let\bibResetInputEncoding\@empty \let\reserved@a\@empty \fi" write$ newline$
|
|||
|
" \fi\fi}" write$ newline$
|
|||
|
}
|
|||
|
FUNCTION {bibIE.b} {
|
|||
|
"\let\bibIE@input\input" write$ newline$
|
|||
|
"\def\bibIE@ascii{ascii}" write$ newline$
|
|||
|
"\def\bibIE@lowb#1{%" write$ newline$
|
|||
|
" \def\reserved@a{#1}\ifx\reserved@a\bibIE@ascii" write$ newline$
|
|||
|
" \gdef\@inpenc@test{\global\let\@inpenc@test\relax}%" write$ newline$
|
|||
|
" \edef\@inpenc@undefined{\noexpand\@inpenc@undefined@{ascii}}%" write$ newline$
|
|||
|
" \@inpenc@loop\^^A\^^H\@inpenc@loop\^^K\^^K%" write$ newline$
|
|||
|
" \@inpenc@loop\^^N\^^_\@inpenc@loop\^^?\^^ff%" write$ newline$
|
|||
|
"\else\def\input{\global\let\@inpenc@test\relax \bibIE@input}% no {ascii} warn" write$ newline$
|
|||
|
" \inputencoding{#1}\fi}%" write$ newline$
|
|||
|
"\def\bibInputEncoding#1{%" write$ newline$
|
|||
|
" \bibIE@lowc" write$ newline$
|
|||
|
" \def\reserved@a{\bibIE@lowb{#1}}%" write$ newline$
|
|||
|
" % vvv \@inpenc@undefined -> `\@inpenc@undefined@{latin2}' or undefined" write$ newline$
|
|||
|
" \expandafter\expandafter\expandafter\bibIE@lowa\csname" write$ newline$
|
|||
|
" @inpenc@undefined\endcsname\relax" write$ newline$
|
|||
|
" \reserved@a}" write$ newline$ newline$
|
|||
|
}
|
|||
|
|
|||
|
%** Usage: insert `\let\bibEarlyBegin\hfuzz \InputIfFileExists{\jobname.bbl}{}{}'
|
|||
|
%** into the LaTeX document preamble to avoid running latex(1) twice after
|
|||
|
%** bibtex(1) has been run.
|
|||
|
FUNCTION {bibIE.c} {
|
|||
|
"\makeatletter \ifx\bibEarlyBegin\hfuzz" write$ newline$
|
|||
|
" \def\bibEarlyBegin{\begingroup\everypar{}\sloppy\hbadness10000 " write$ newline$
|
|||
|
" \def\Hy@colorlink##1{\begingroup}" write$ newline$ % for hyperref.sty
|
|||
|
" \def\Hy@endcolorlink{\endgroup}" write$ newline$ % for hyperref.sty
|
|||
|
" \def\@inpenc@loop##1##2{}" write$ newline$
|
|||
|
" \def\thebibliography##1{}" write$ newline$
|
|||
|
" \def\endthebibliography{\skip@egroup\aftergroup\bibEarlyEnd}%" write$ newline$
|
|||
|
" \def\inputencoding##1{}\c@enumi\z@" write$ newline$
|
|||
|
" \def\bibitem{\skip@egroup \let\skip@egroup\egroup" write$ newline$
|
|||
|
" \advance\c@enumi\@ne\@ifnextchar[\@lbibitem\@bibitem}%" write$ newline$
|
|||
|
" \def\@lbibitem[##1]##2{\bibcite{##2}{##1}%" write$ newline$
|
|||
|
" \setbox0\vbox\bgroup}% avoid emitting boxes" write$ newline$
|
|||
|
" \def\@bibitem##1{\expandafter\skip@bibcite\expandafter" write$ newline$
|
|||
|
" {\the\c@enumi}{##1}\setbox0\vbox\bgroup}% avoid emitting boxes" write$ newline$
|
|||
|
" \def\skip@bibcite##1##2{\bibcite{##2}{##1}}%" write$ newline$
|
|||
|
" \catcode11=9 % ignored" write$ newline$
|
|||
|
" \@tempcnta 1 \loop\catcode\@tempcnta=9" write$ newline$
|
|||
|
" \ifnum\@tempcnta< 8 \advance\@tempcnta\@ne\repeat" write$ newline$
|
|||
|
" \@tempcnta 14 \loop\catcode\@tempcnta=9" write$ newline$
|
|||
|
" \ifnum\@tempcnta< 31 \advance\@tempcnta\@ne\repeat" write$ newline$
|
|||
|
" \@tempcnta127 \loop\catcode\@tempcnta=9" write$ newline$
|
|||
|
" \ifnum\@tempcnta<255 \advance\@tempcnta\@ne\repeat" write$ newline$
|
|||
|
" \let\skip@egroup\relax}" write$ newline$
|
|||
|
" \def\bibEarlyEnd{\endgroup \let\bibcite\@gobbletwo" write$ newline$
|
|||
|
" \global\let\bibEarlyRead\relax}" write$ newline$
|
|||
|
" \bibEarlyBegin" write$ newline$
|
|||
|
"\else \let\bibEarlyEnd\relax \fi" write$ newline$
|
|||
|
newline$
|
|||
|
}
|
|||
|
|
|||
|
FUNCTION {begin.bib}
|
|||
|
{ bibIE.c
|
|||
|
% Dat: bibTeX breaks long lines (>78 chars), so we wouldn't emit such lines
|
|||
|
"\begin{thebibliography}{" longest.label * "}" * write$ newline$
|
|||
|
preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$
|
|||
|
% ****pts**** Dat: put preamble$ after \begin{thebibliography}
|
|||
|
"\frenchspacing" write$ newline$ % !! optional
|
|||
|
bibIE.a
|
|||
|
bibIE.b
|
|||
|
"\def\leftflushbreak{\ifx\\\@centercr\penalty100 \else" write$ newline$ % Dat: \\ is \@centercr for \raggedright
|
|||
|
" \unpenalty\unpenalty{\@tempdima\lastskip\unskip\nobreak" write$ newline$
|
|||
|
" \hskip\@tempdima plus1fil}\null\penalty100 \hskip0pt plus-1fil\relax\fi}" write$ newline$
|
|||
|
% "\def\leftflushbreak{\nobreak\hskip0pt plus1fil\null\penalty100 \hskip0pt plus-1fil\relax}" write$ newline$
|
|||
|
|
|||
|
% Ignoring newline + spaces in a \verb (usually called in \bibUrll).
|
|||
|
% This doesn't apply for \usepackage{url} -- please use that to have
|
|||
|
% line breaks in the URLs.
|
|||
|
% Example .bbl excerpt (to be converted to \bibUrll{URL} >http://foobarbaz>.)
|
|||
|
% \bibUrll{URL} >http://
|
|||
|
% foobar
|
|||
|
% baz<,
|
|||
|
"\begingroup\lccode\string`~=\string`\^^M" write$ newline$
|
|||
|
" \lowercase{\endgroup\def\verb@eol@error{\obeylines\def~{\bibVerbNoSp}}}" write$ newline$
|
|||
|
"\begingroup\lccode\string`~=\string`\ \relax" write$ newline$
|
|||
|
" \lowercase{\endgroup\def\bibVerbNoSp#1{\ifx#1~\expandafter\bibVerbNoSp" write$ newline$
|
|||
|
" \else\expandafter#1\fi}}" write$ newline$
|
|||
|
|
|||
|
"\expandafter\ifx\csname bibUrll\endcsname\relax" write$ newline$
|
|||
|
"\expandafter\ifx\csname url\endcsname\relax" write$ newline$
|
|||
|
" \def\bibUrll#1>{\leavevmode\leftflushbreak #1~\verb>}" write$ newline$ % Imp: line breaks etc., \PVerb
|
|||
|
"\else\def\bibUrll#1>{\leavevmode\leftflushbreak#1~\begingroup" write$ newline$
|
|||
|
" \catcode\string`\%=12 \catcode\string`\#=12 \bibUrlll}" write$ newline$
|
|||
|
" \def\bibUrlll#1>{\url{#1}\endgroup}\fi" write$ newline$
|
|||
|
% ^^^ "\else\def\bibUrll#1>#2>{\leftflushbreak #1~\url{#2}}\fi" write$ newline$
|
|||
|
% ^^^ Imp: do these parens work? Includes field URL for Internet addresses (best used with with the url.sty package of Donald Arseneau)
|
|||
|
"\fi" write$ newline$
|
|||
|
% vvv Dat: so user can specify `{\empty Maf}fia' and still have the `ffi' ligature -- undocumented.
|
|||
|
% vvv Dat: doesn't work with hyperref.sty, and has marginal benefits -- commented out
|
|||
|
% "\def\empty{\egroup\expandafter\@firstofone\expandafter{\iffalse}\fi}" write$ newline$
|
|||
|
"\def\bibHU@mix#1{\egroup#1}" write$ newline$
|
|||
|
%"\def\empty{\expandafter\bibHU@mix\expandafter{\iffalse}\fi}" write$ newline$
|
|||
|
%"\def\bibHU@mix#1{\egroup#1}" write$ newline$
|
|||
|
% vvv Dat: Hungarian typgrphy dictates 1/3 non-stretchable space, which
|
|||
|
% might look ugly, because the space between f+l names stretches more.
|
|||
|
"\def\bibAnd#1{\nobreak\,\nobreak\hbox{--}\,}" write$ newline$
|
|||
|
% "\def\bibAnd#1{\ifcase#1 , \or\space and \or, and \fi}" write$ newline$
|
|||
|
% "\def\bibAnd#1{\ifcase#1 , \else\space\'es \fi}" write$ newline$
|
|||
|
% "\def\bibEtAl#1{ et~al.}" write$ newline$ % Dat: or `et al.' (meaning: et alii)
|
|||
|
"\def\bibEtAl#1{ \'es m\'asok}" write$ newline$
|
|||
|
% ^^^ Dat: botht \bibEtAl confirmed by Gyurgy<67>k (p. 137)
|
|||
|
"\def\bibEd#1{ (szerk.)}" write$ newline$
|
|||
|
% "\def\bibEd#1{ (szerk\ifcase#1 .\else eszt\H{o}k\fi)}" write$ newline$ % (szerk.) or (szerkeszt<7A>k)
|
|||
|
% "\let\bibNewBlock\newblock" write$ newline$
|
|||
|
"\def\bibNewBlock{\unskip\space}" write$ newline$
|
|||
|
% "\def\bibVolume#1{k\" quote$ "otet}" * * write$ newline$
|
|||
|
"\def\bibVolume#1#2{#1 k\" quote$ "ot.} \let\bibNumVolumes\bibVolume" * * write$ newline$
|
|||
|
% "\def\bibTechRep#1{Technical Report}" write$ newline$
|
|||
|
"\def\bibTechRep#1{Jelent\'{e}s}" write$ newline$ % Dat: `.' ut<75>n van => nagybet<65>
|
|||
|
"\def\bibInSelf#1{In u\H{o}: }" write$ newline$
|
|||
|
"\csname bibOverride\endcsname" write$ newline$
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
EXECUTE {begin.bib}
|
|||
|
|
|||
|
EXECUTE {init.state.consts}
|
|||
|
|
|||
|
ITERATE {call.type$}
|
|||
|
|
|||
|
FUNCTION {end.bib}
|
|||
|
{ newline$
|
|||
|
"\end{thebibliography}" write$ newline$
|
|||
|
}
|
|||
|
|
|||
|
EXECUTE {end.bib}
|
|||
|
|
|||
|
% #****pts**** !!
|
|||
|
FUNCTION {what} {
|
|||
|
% "dr. K<>peczi, B<>la and Jules Verne and Kossuth, Lajos and gr<67>f Sz<53>chenyi, Istv<74>n and John von Neumann and Donald E. Knuth and Strunk, Jr., William and Kn<4B>zy, ifj., Jen<65> and L. R. McColvin and Tin<69>di Lantos, Sebesty<74>n and Moln<6C>r-S<>ska, Bal<61>zs and Claude L<>vi-Strauss and Kis, P<>ter P<>l and Mary-Claire van Leunen and Paul Gerhard Hoel and G. Bernard Godfrey and II., J<>nos-P<>l and {Szerencsej<65>t<EFBFBD>k Rt.} and {\empty Earl of} Traquair and Horace [pseud.] Hunt and Verne, {\empty Gy}ula" 's :=
|
|||
|
% init.nfmts s #1 nfmt0 format.name$ warning$
|
|||
|
% ss #385 #1 substring$ warning$
|
|||
|
% "fo{\'o}\oe{\H u}s{\HON}{\HANT}" rmbrace.accs warning$ % to "fo\'o\oe\H us{\HON}{\HANT}"
|
|||
|
% "fr\'e ncia" purify$ warning$
|
|||
|
% "bar" #-1 #1 substring$ warning$
|
|||
|
% "5~janu\'ar" #1 "{ll~~}{ff{}}" format.name$ warning$
|
|||
|
% "janu\'ar" #1 "{ll}{~ff.}" format.name$ warning$
|
|||
|
% "{\null Gy}urgy<67>k" #1 "{l}/" format.name$ warning$
|
|||
|
% "AzB<7A>rv<72>zt<7A>r<EFBFBD>~t<>k<EFBFBD>rf<72>r<EFBFBD>g<EFBFBD>p" rmacc.latin2 warning$
|
|||
|
% "fogbar" #3 #1 substring$ warning$
|
|||
|
% "Az <20>rv<72>zt<7A>r<EFBFBD><72> t<>k<EFBFBD>rf<72>r<EFBFBD>g<EFBFBD>p<EFBFBD>" sortify warning$
|
|||
|
% "Marjai, Imre and Pataky, D<>nes" rmacc.latin2 warning$
|
|||
|
% "{\empty\'\i}purify" purify$ warning$
|
|||
|
% "grof Szechenyi, Istvan" #1 "{ll}/{ff}/{jj}/{vv}" format.name$ warning$
|
|||
|
% "John von Neumann" #1 "{ll}/{ff}/{jj}/{vv}" format.name$ warning$
|
|||
|
% "Tin<69>di Lantos, Sebesty<74>n" #1 "{ll}/{ff}/{jj}/{vv}" format.name$ warning$
|
|||
|
% "II., Janos., Pal" #1 "{ll}/{ff}/{jj}/{vv}" format.name$ warning$
|
|||
|
% "<22>lom" "u" change.case$ warning$ % "<22>LOM"
|
|||
|
% "{\'a}lom" "u" change.case$ warning$ % "{\'A}LOM"
|
|||
|
%"alma{\ss}t" purify$ warning$ % alma{\ss}t
|
|||
|
%"alma{\dj}t" purify$ warning$ % almat (!)
|
|||
|
% "egykor{\th}Alma korte" rmbrace.extrat1 warning$
|
|||
|
}
|
|||
|
EXECUTE {what}
|