diff options
Diffstat (limited to 'bibtex/bst')
-rw-r--r-- | bibtex/bst/context/cont-ab.bst | 1120 | ||||
-rw-r--r-- | bibtex/bst/context/cont-au.bst | 1120 | ||||
-rw-r--r-- | bibtex/bst/context/cont-no.bst | 1120 | ||||
-rw-r--r-- | bibtex/bst/context/cont-ti.bst | 1120 |
4 files changed, 4480 insertions, 0 deletions
diff --git a/bibtex/bst/context/cont-ab.bst b/bibtex/bst/context/cont-ab.bst new file mode 100644 index 000000000..cc3c9411a --- /dev/null +++ b/bibtex/bst/context/cont-ab.bst @@ -0,0 +1,1120 @@ +% Written by Taco Hoekwater +% Donated to the Public Domain. Use at your own risk. +% Preliminary version, 19-aug-1999. +% New 17/9/2003: 'eprint' and 'doi' tags + +% This style produces citations in a format the ConTeXt can handle. +% It outputs a large collection of labels so that context can decide +% which one to use. +% +% Actually, there are a number of separate bst files that change in +% only two lines: the ITERATEs right before the two SORTs can +% have different values, sorting by either one of +% +% -------------------------- cont-master.bst clabel +% - the author (+year, title) : cont-au.bst author +% - the title (+author, year) : cont-ti.bst title +% - the short key a la abbrev : cont-ab.bst clabel +% - nothing at all (cite order): cont-no.bst none +% +% +% Output gives the following computed info: +% +% - the total number of bib entries +% - the longest short label +% +% And per entry: +% +% - the key +% - the entry type +% - the yeardata for crossrefs +% - the authordata for crossrefs +% - the short key +% - the .bib appearance number + +% Commands that may be written to the bbl file (not counting stuff the +% bib database defines itself): +% +% \setuppublicationlist +% \startpublication +% \stoppublication + +% Field entries with a strange format/appearance: +% +% \artauthor, +% \editor, +% \author: \xxx[junior]{firstnames}[inits]{von}{lastname} + +% \etalchar: appears in short keys sometimes +% \maybeyear: appears in \pubyear sometimes +% +% And these commands for the entries have only one argument, +% precisely matching the corresponding field. Note that there +% are more fields supported than in the standard bst files. +% +% \abstract +% \annotate +% \arttitle +% \chapter +% \city +% \comment +% \crossref +% \edition +% \isbn +% \issn +% \issue +% \journal +% \keyword +% \keywords +% \lang +% \month +% \names +% \note +% \organization +% \pages +% \pubname +% \pubyear +% \series +% \size +% \thekey +% \title +% \type +% \volume +% \eprint +% \doi +% \howpublished + +ENTRY + { abstract + address + annotate + author + booktitle + chapter + comment + doi + edition + editor + eprint + howpublished + institution + isbn + issn + journal + key + keyword + keywords + language + month + names + note + number + organization + pages + publisher + school + series + size + title + type + volume + year + } + {} + { label extra.label sort.label clabel sort.clabel ordinal.label} + + +STRINGS { s t autype} + +STRINGS { last.label next.extra nlabel } + +STRINGS { longest.label last.sort.label} + +INTEGERS { longest.label.width last.extra.num ordinal.num } + +INTEGERS { nameptr namesleft numnames } + +INTEGERS { len } + + +FUNCTION {begin.bib} +{ #0 'ordinal.num := + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\setuppublicationlist[samplesize={" write$ + longest.label "},totalnumber=" * write$ + nlabel "]" * write$ + newline$ +} + +FUNCTION {end.bib} +{ newline$ +} + + + +FUNCTION {do.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ * "}" * * write$ pop$ newline$ } + if$ +} + + +FUNCTION {do.t.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ "t" change.case$ * "}" * * write$ pop$ newline$ } + if$ +} + +FUNCTION {format.year} +{ year empty$ + 'skip$ + { "\pubyear{" year * write$ + extra.label empty$ + { "}" write$ } + { "\maybeyear{" extra.label * "}}" * write$ } + if$ + newline$ + } + if$ +} + +FUNCTION {start.entry} +{ ordinal.num #1 + 'ordinal.num := + newline$ + "\startpublication[" write$ + "k=" write$ + cite$ "," * write$ + "t=" write$ + type$ "," * write$ + newline$ + label write$ + "," write$ + doi empty$ + {} + { + "o=" write$ + doi write$ + "," write$ + } if$ + newline$ + "n=" write$ + ordinal.label write$ + ",s=" write$ + clabel write$ + "]" write$ + newline$ + "" "\lang" language do.out +} + +FUNCTION {stop.entry} +{ "" "\note" note do.out + "" "\annotate" annotate do.out + "" "\eprint" eprint do.out + "" "\doi" doi do.out + "" "\keyword" keyword do.out + "" "\keywords" keywords do.out + "" "\comment" comment do.out + "" "\abstract" abstract do.out + "" "\names" names do.out + "" "\size" size do.out + "\stoppublication" write$ + newline$ +} + + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + +FUNCTION {format.names} +{ 's := 'autype := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { autype write$ + s nameptr "{jj}" format.name$ 't := + "[" t * "]" * write$ + s nameptr "{ff}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{f}" format.name$ add.period$ 't := + "[" t * "]" * write$ + s nameptr "{vv}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{ll}" format.name$ 't := + "{" t * "}" * write$ + newline$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + +FUNCTION {format.key} +{ "" "\thekey" key do.out } + + +FUNCTION {format.artauthors} +{ author empty$ + { format.key } + { "\artauthor" author format.names } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { format.key } + { "\author" author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { format.key } + { "\editor" editor format.names } + if$ +} + + +FUNCTION {format.title} +{ "" "\title" title do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.t.title} +{ "" "\title" title do.t.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.arttitle} +{ "" "\arttitle" title do.t.out } + +FUNCTION {format.journal} +{ "" "\journal" journal do.out + "" "\issn" issn do.out +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.volume} +{ "" "\volume" volume do.out +} + +FUNCTION {format.volume.issue} +{ "" "\volume" volume do.out + "" "\issue" number do.out +} + +FUNCTION {format.number.series} +{ "" "\series" series do.out + volume empty$ + { "" "\volume" number do.out + } + { "" "\volume" volume do.out + "" "\issue" number do.out } + if$ +} + +FUNCTION {format.edition} +{ "" "\edition" edition do.out + "" "\month" month do.out +} + +FUNCTION {format.pages} +{ "" "\pages" pages do.out } + + +FUNCTION {format.vol.num.pages} +{ format.volume.issue + format.pages +} + +FUNCTION {format.vol.num.page} +{ format.volume.issue + format.pages +} + +FUNCTION {format.type.chapter.pages} +{ chapter empty$ + 'format.pages + { "" "\type" type do.out + "" "\chapter" chapter do.out + } + if$ + format.pages +} + +FUNCTION {format.booktitle} +{"" "\title" booktitle do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + 'skip$ + { format.booktitle } + if$ +} + +FUNCTION {format.in.booktitle.or.series} +{ "" "\series" series do.out + booktitle empty$ + 'skip$ + { editor empty$ + { format.booktitle } + { format.editors format.booktitle } + if$ + } + if$ +} + + +FUNCTION {format.tr.number} +{"" "\type" type do.out + "" "\volume" number do.out +} + +FUNCTION {format.crossref} +{ "" "\crossref" crossref do.out +} + +FUNCTION {format.book.crossref} +{ + "" "\volume" volume do.out + format.crossref +} + +FUNCTION {format.incoll.inproc.crossref} +{ format.crossref +} + +FUNCTION {article} +{ start.entry + format.artauthors + format.year + format.arttitle + crossref missing$ + { format.journal + format.vol.num.pages + } + { format.crossref + format.pages + } + if$ + "" "\month" month do.out + stop.entry +} + +FUNCTION {book} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {booklet} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {inbook} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.type.chapter.pages + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { format.type.chapter.pages + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {incollection} +{ start.entry + format.artauthors + format.year + format.arttitle + format.editors + crossref missing$ + { format.in.ed.booktitle + format.number.series + "" "\city" address do.out + format.edition + format.type.chapter.pages + } + { format.incoll.inproc.crossref + format.type.chapter.pages + } + if$ + "" "\pubname" publisher do.out + stop.entry +} + +FUNCTION {inproceedings} +{ start.entry + format.authors + format.year + format.arttitle + crossref missing$ + { format.in.booktitle.or.series + format.number.series + "" "\city" address do.out + format.pages + } + { format.incoll.inproc.crossref + format.pages + } + if$ + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ start.entry + format.authors + format.year + format.title + "" "\organization" organization do.out + "" "\city" address do.out + "" "\edition" edition do.out + stop.entry +} + +FUNCTION {mastersthesis} +{ start.entry + format.authors + format.year + format.t.title + "" "\type" type do.out + "" "\pubname" school do.out + "" "\month" month do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {misc} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\city" address do.out + "" "\month" month do.out + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + stop.entry +} + +FUNCTION {phdthesis} +{ start.entry + format.authors + format.title + format.year + "" "\type" type do.out + "" "\month" month do.out + "" "\pubname" school do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {proceedings} +{ start.entry + format.editors + format.year + format.title + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {techreport} +{ start.entry + format.authors + format.year + format.t.title + format.tr.number + "" "\city" address do.out + "" "\pubname" institution do.out + stop.entry +} + +FUNCTION {unpublished} +{ start.entry + format.authors + format.year + format.t.title + "" "\month" month do.out + stop.entry +} + + +FUNCTION {default.type} { misc } + +MACRO {jan} {"1"} +MACRO {feb} {"2"} +MACRO {mar} {"3"} +MACRO {apr} {"4"} +MACRO {may} {"5"} +MACRO {jun} {"6"} +MACRO {jul} {"7"} +MACRO {aug} {"8"} +MACRO {sep} {"9"} +MACRO {oct} {"10"} +MACRO {nov} {"11"} +MACRO {dec} {"12"} + +READ + +FUNCTION {initialize.ordinal.label} +{ #0 'ordinal.num := } + +FUNCTION {set.ordinal.label} { + #1 ordinal.num + 'ordinal.num := + ordinal.num int.to.str$ 'ordinal.label := +} + +EXECUTE {initialize.ordinal.label} + +ITERATE {set.ordinal.label} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ + "{" swap$ * "}," * +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + "a=" swap$ * "y=" * + year field.or.null purify$ #-1 #4 substring$ + * + 'label := +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.clab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.clabel} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.editor.key.clabel} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.key.organization.clabel} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {editor.key.organization.clabel} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ +} + +FUNCTION {calc.clabel} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.clabel + { type$ "proceedings" = + 'editor.key.organization.clabel + { type$ "manual" = + 'author.key.organization.clabel + 'author.key.clabel + if$ + } + if$ + } + if$ + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'clabel := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.clabel := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort.title} +{ calc.label + calc.clabel + title field.or.null + sort.format.title + " " + * + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.author} +{ calc.clabel + calc.label + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.clabel} +{ calc.label + calc.clabel + clabel sortify + duplicate$ 'sort.label := + #1 entry.max$ substring$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {presort.none} +{ calc.label + calc.clabel + "" 'sort.label := + "" 'sort.key$ := +} + +ITERATE {presort.clabel} + +SORT + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'ordinal.num := +} + +FUNCTION {forward.pass} +{ ordinal.num #1 + 'ordinal.num := + ordinal.num int.to.str$ 'nlabel := + last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + clabel extra.label * 'clabel := + extra.label 'next.extra := + clabel width$ longest.label.width > + { clabel 'longest.label := + clabel width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.extra.label.stuff} + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order.author} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.title} +{ sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.clabel} +{ sort.label + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.none} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order.clabel} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + + +EXECUTE {end.bib} diff --git a/bibtex/bst/context/cont-au.bst b/bibtex/bst/context/cont-au.bst new file mode 100644 index 000000000..3af407181 --- /dev/null +++ b/bibtex/bst/context/cont-au.bst @@ -0,0 +1,1120 @@ +% Written by Taco Hoekwater +% Donated to the Public Domain. Use at your own risk. +% Preliminary version, 19-aug-1999. +% New 17/9/2003: 'eprint' and 'doi' tags + +% This style produces citations in a format the ConTeXt can handle. +% It outputs a large collection of labels so that context can decide +% which one to use. +% +% Actually, there are a number of separate bst files that change in +% only two lines: the ITERATEs right before the two SORTs can +% have different values, sorting by either one of +% +% -------------------------- cont-master.bst author +% - the author (+year, title) : cont-au.bst author +% - the title (+author, year) : cont-ti.bst title +% - the short key a la abbrev : cont-ab.bst clabel +% - nothing at all (cite order): cont-no.bst none +% +% +% Output gives the following computed info: +% +% - the total number of bib entries +% - the longest short label +% +% And per entry: +% +% - the key +% - the entry type +% - the yeardata for crossrefs +% - the authordata for crossrefs +% - the short key +% - the .bib appearance number + +% Commands that may be written to the bbl file (not counting stuff the +% bib database defines itself): +% +% \setuppublicationlist +% \startpublication +% \stoppublication + +% Field entries with a strange format/appearance: +% +% \artauthor, +% \editor, +% \author: \xxx[junior]{firstnames}[inits]{von}{lastname} + +% \etalchar: appears in short keys sometimes +% \maybeyear: appears in \pubyear sometimes +% +% And these commands for the entries have only one argument, +% precisely matching the corresponding field. Note that there +% are more fields supported than in the standard bst files. +% +% \abstract +% \annotate +% \arttitle +% \chapter +% \city +% \comment +% \crossref +% \edition +% \isbn +% \issn +% \issue +% \journal +% \keyword +% \keywords +% \lang +% \month +% \names +% \note +% \organization +% \pages +% \pubname +% \pubyear +% \series +% \size +% \thekey +% \title +% \type +% \volume +% \eprint +% \doi +% \howpublished + +ENTRY + { abstract + address + annotate + author + booktitle + chapter + comment + doi + edition + editor + eprint + howpublished + institution + isbn + issn + journal + key + keyword + keywords + language + month + names + note + number + organization + pages + publisher + school + series + size + title + type + volume + year + } + {} + { label extra.label sort.label clabel sort.clabel ordinal.label} + + +STRINGS { s t autype} + +STRINGS { last.label next.extra nlabel } + +STRINGS { longest.label last.sort.label} + +INTEGERS { longest.label.width last.extra.num ordinal.num } + +INTEGERS { nameptr namesleft numnames } + +INTEGERS { len } + + +FUNCTION {begin.bib} +{ #0 'ordinal.num := + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\setuppublicationlist[samplesize={" write$ + longest.label "},totalnumber=" * write$ + nlabel "]" * write$ + newline$ +} + +FUNCTION {end.bib} +{ newline$ +} + + + +FUNCTION {do.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ * "}" * * write$ pop$ newline$ } + if$ +} + + +FUNCTION {do.t.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ "t" change.case$ * "}" * * write$ pop$ newline$ } + if$ +} + +FUNCTION {format.year} +{ year empty$ + 'skip$ + { "\pubyear{" year * write$ + extra.label empty$ + { "}" write$ } + { "\maybeyear{" extra.label * "}}" * write$ } + if$ + newline$ + } + if$ +} + +FUNCTION {start.entry} +{ ordinal.num #1 + 'ordinal.num := + newline$ + "\startpublication[" write$ + "k=" write$ + cite$ "," * write$ + "t=" write$ + type$ "," * write$ + newline$ + label write$ + "," write$ + doi empty$ + {} + { + "o=" write$ + doi write$ + "," write$ + } if$ + newline$ + "n=" write$ + ordinal.label write$ + ",s=" write$ + clabel write$ + "]" write$ + newline$ + "" "\lang" language do.out +} + +FUNCTION {stop.entry} +{ "" "\note" note do.out + "" "\annotate" annotate do.out + "" "\eprint" eprint do.out + "" "\doi" doi do.out + "" "\keyword" keyword do.out + "" "\keywords" keywords do.out + "" "\comment" comment do.out + "" "\abstract" abstract do.out + "" "\names" names do.out + "" "\size" size do.out + "\stoppublication" write$ + newline$ +} + + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + +FUNCTION {format.names} +{ 's := 'autype := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { autype write$ + s nameptr "{jj}" format.name$ 't := + "[" t * "]" * write$ + s nameptr "{ff}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{f}" format.name$ add.period$ 't := + "[" t * "]" * write$ + s nameptr "{vv}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{ll}" format.name$ 't := + "{" t * "}" * write$ + newline$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + +FUNCTION {format.key} +{ "" "\thekey" key do.out } + + +FUNCTION {format.artauthors} +{ author empty$ + { format.key } + { "\artauthor" author format.names } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { format.key } + { "\author" author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { format.key } + { "\editor" editor format.names } + if$ +} + + +FUNCTION {format.title} +{ "" "\title" title do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.t.title} +{ "" "\title" title do.t.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.arttitle} +{ "" "\arttitle" title do.t.out } + +FUNCTION {format.journal} +{ "" "\journal" journal do.out + "" "\issn" issn do.out +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.volume} +{ "" "\volume" volume do.out +} + +FUNCTION {format.volume.issue} +{ "" "\volume" volume do.out + "" "\issue" number do.out +} + +FUNCTION {format.number.series} +{ "" "\series" series do.out + volume empty$ + { "" "\volume" number do.out + } + { "" "\volume" volume do.out + "" "\issue" number do.out } + if$ +} + +FUNCTION {format.edition} +{ "" "\edition" edition do.out + "" "\month" month do.out +} + +FUNCTION {format.pages} +{ "" "\pages" pages do.out } + + +FUNCTION {format.vol.num.pages} +{ format.volume.issue + format.pages +} + +FUNCTION {format.vol.num.page} +{ format.volume.issue + format.pages +} + +FUNCTION {format.type.chapter.pages} +{ chapter empty$ + 'format.pages + { "" "\type" type do.out + "" "\chapter" chapter do.out + } + if$ + format.pages +} + +FUNCTION {format.booktitle} +{"" "\title" booktitle do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + 'skip$ + { format.booktitle } + if$ +} + +FUNCTION {format.in.booktitle.or.series} +{ "" "\series" series do.out + booktitle empty$ + 'skip$ + { editor empty$ + { format.booktitle } + { format.editors format.booktitle } + if$ + } + if$ +} + + +FUNCTION {format.tr.number} +{"" "\type" type do.out + "" "\volume" number do.out +} + +FUNCTION {format.crossref} +{ "" "\crossref" crossref do.out +} + +FUNCTION {format.book.crossref} +{ + "" "\volume" volume do.out + format.crossref +} + +FUNCTION {format.incoll.inproc.crossref} +{ format.crossref +} + +FUNCTION {article} +{ start.entry + format.artauthors + format.year + format.arttitle + crossref missing$ + { format.journal + format.vol.num.pages + } + { format.crossref + format.pages + } + if$ + "" "\month" month do.out + stop.entry +} + +FUNCTION {book} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {booklet} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {inbook} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.type.chapter.pages + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { format.type.chapter.pages + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {incollection} +{ start.entry + format.artauthors + format.year + format.arttitle + format.editors + crossref missing$ + { format.in.ed.booktitle + format.number.series + "" "\city" address do.out + format.edition + format.type.chapter.pages + } + { format.incoll.inproc.crossref + format.type.chapter.pages + } + if$ + "" "\pubname" publisher do.out + stop.entry +} + +FUNCTION {inproceedings} +{ start.entry + format.authors + format.year + format.arttitle + crossref missing$ + { format.in.booktitle.or.series + format.number.series + "" "\city" address do.out + format.pages + } + { format.incoll.inproc.crossref + format.pages + } + if$ + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ start.entry + format.authors + format.year + format.title + "" "\organization" organization do.out + "" "\city" address do.out + "" "\edition" edition do.out + stop.entry +} + +FUNCTION {mastersthesis} +{ start.entry + format.authors + format.year + format.t.title + "" "\type" type do.out + "" "\pubname" school do.out + "" "\month" month do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {misc} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\city" address do.out + "" "\month" month do.out + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + stop.entry +} + +FUNCTION {phdthesis} +{ start.entry + format.authors + format.title + format.year + "" "\type" type do.out + "" "\month" month do.out + "" "\pubname" school do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {proceedings} +{ start.entry + format.editors + format.year + format.title + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {techreport} +{ start.entry + format.authors + format.year + format.t.title + format.tr.number + "" "\city" address do.out + "" "\pubname" institution do.out + stop.entry +} + +FUNCTION {unpublished} +{ start.entry + format.authors + format.year + format.t.title + "" "\month" month do.out + stop.entry +} + + +FUNCTION {default.type} { misc } + +MACRO {jan} {"1"} +MACRO {feb} {"2"} +MACRO {mar} {"3"} +MACRO {apr} {"4"} +MACRO {may} {"5"} +MACRO {jun} {"6"} +MACRO {jul} {"7"} +MACRO {aug} {"8"} +MACRO {sep} {"9"} +MACRO {oct} {"10"} +MACRO {nov} {"11"} +MACRO {dec} {"12"} + +READ + +FUNCTION {initialize.ordinal.label} +{ #0 'ordinal.num := } + +FUNCTION {set.ordinal.label} { + #1 ordinal.num + 'ordinal.num := + ordinal.num int.to.str$ 'ordinal.label := +} + +EXECUTE {initialize.ordinal.label} + +ITERATE {set.ordinal.label} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ + "{" swap$ * "}," * +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + "a=" swap$ * "y=" * + year field.or.null purify$ #-1 #4 substring$ + * + 'label := +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.clab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.clabel} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.editor.key.clabel} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.key.organization.clabel} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {editor.key.organization.clabel} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ +} + +FUNCTION {calc.clabel} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.clabel + { type$ "proceedings" = + 'editor.key.organization.clabel + { type$ "manual" = + 'author.key.organization.clabel + 'author.key.clabel + if$ + } + if$ + } + if$ + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'clabel := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.clabel := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort.title} +{ calc.label + calc.clabel + title field.or.null + sort.format.title + " " + * + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.author} +{ calc.clabel + calc.label + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.clabel} +{ calc.label + calc.clabel + clabel sortify + duplicate$ 'sort.label := + #1 entry.max$ substring$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {presort.none} +{ calc.label + calc.clabel + "" 'sort.label := + "" 'sort.key$ := +} + +ITERATE {presort.author} + +SORT + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'ordinal.num := +} + +FUNCTION {forward.pass} +{ ordinal.num #1 + 'ordinal.num := + ordinal.num int.to.str$ 'nlabel := + last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + clabel extra.label * 'clabel := + extra.label 'next.extra := + clabel width$ longest.label.width > + { clabel 'longest.label := + clabel width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.extra.label.stuff} + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order.author} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.title} +{ sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.clabel} +{ sort.label + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.none} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order.author} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + + +EXECUTE {end.bib} diff --git a/bibtex/bst/context/cont-no.bst b/bibtex/bst/context/cont-no.bst new file mode 100644 index 000000000..7b582f359 --- /dev/null +++ b/bibtex/bst/context/cont-no.bst @@ -0,0 +1,1120 @@ +% Written by Taco Hoekwater +% Donated to the Public Domain. Use at your own risk. +% Preliminary version, 19-aug-1999. +% New 17/9/2003: 'eprint' and 'doi' tags + +% This style produces citations in a format the ConTeXt can handle. +% It outputs a large collection of labels so that context can decide +% which one to use. +% +% Actually, there are a number of separate bst files that change in +% only two lines: the ITERATEs right before the two SORTs can +% have different values, sorting by either one of +% +% -------------------------- cont-master.bst none +% - the author (+year, title) : cont-au.bst author +% - the title (+author, year) : cont-ti.bst title +% - the short key a la abbrev : cont-ab.bst clabel +% - nothing at all (cite order): cont-no.bst none +% +% +% Output gives the following computed info: +% +% - the total number of bib entries +% - the longest short label +% +% And per entry: +% +% - the key +% - the entry type +% - the yeardata for crossrefs +% - the authordata for crossrefs +% - the short key +% - the .bib appearance number + +% Commands that may be written to the bbl file (not counting stuff the +% bib database defines itself): +% +% \setuppublicationlist +% \startpublication +% \stoppublication + +% Field entries with a strange format/appearance: +% +% \artauthor, +% \editor, +% \author: \xxx[junior]{firstnames}[inits]{von}{lastname} + +% \etalchar: appears in short keys sometimes +% \maybeyear: appears in \pubyear sometimes +% +% And these commands for the entries have only one argument, +% precisely matching the corresponding field. Note that there +% are more fields supported than in the standard bst files. +% +% \abstract +% \annotate +% \arttitle +% \chapter +% \city +% \comment +% \crossref +% \edition +% \isbn +% \issn +% \issue +% \journal +% \keyword +% \keywords +% \lang +% \month +% \names +% \note +% \organization +% \pages +% \pubname +% \pubyear +% \series +% \size +% \thekey +% \title +% \type +% \volume +% \eprint +% \doi +% \howpublished + +ENTRY + { abstract + address + annotate + author + booktitle + chapter + comment + doi + edition + editor + eprint + howpublished + institution + isbn + issn + journal + key + keyword + keywords + language + month + names + note + number + organization + pages + publisher + school + series + size + title + type + volume + year + } + {} + { label extra.label sort.label clabel sort.clabel ordinal.label} + + +STRINGS { s t autype} + +STRINGS { last.label next.extra nlabel } + +STRINGS { longest.label last.sort.label} + +INTEGERS { longest.label.width last.extra.num ordinal.num } + +INTEGERS { nameptr namesleft numnames } + +INTEGERS { len } + + +FUNCTION {begin.bib} +{ #0 'ordinal.num := + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\setuppublicationlist[samplesize={" write$ + longest.label "},totalnumber=" * write$ + nlabel "]" * write$ + newline$ +} + +FUNCTION {end.bib} +{ newline$ +} + + + +FUNCTION {do.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ * "}" * * write$ pop$ newline$ } + if$ +} + + +FUNCTION {do.t.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ "t" change.case$ * "}" * * write$ pop$ newline$ } + if$ +} + +FUNCTION {format.year} +{ year empty$ + 'skip$ + { "\pubyear{" year * write$ + extra.label empty$ + { "}" write$ } + { "\maybeyear{" extra.label * "}}" * write$ } + if$ + newline$ + } + if$ +} + +FUNCTION {start.entry} +{ ordinal.num #1 + 'ordinal.num := + newline$ + "\startpublication[" write$ + "k=" write$ + cite$ "," * write$ + "t=" write$ + type$ "," * write$ + newline$ + label write$ + "," write$ + doi empty$ + {} + { + "o=" write$ + doi write$ + "," write$ + } if$ + newline$ + "n=" write$ + ordinal.label write$ + ",s=" write$ + clabel write$ + "]" write$ + newline$ + "" "\lang" language do.out +} + +FUNCTION {stop.entry} +{ "" "\note" note do.out + "" "\annotate" annotate do.out + "" "\eprint" eprint do.out + "" "\doi" doi do.out + "" "\keyword" keyword do.out + "" "\keywords" keywords do.out + "" "\comment" comment do.out + "" "\abstract" abstract do.out + "" "\names" names do.out + "" "\size" size do.out + "\stoppublication" write$ + newline$ +} + + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + +FUNCTION {format.names} +{ 's := 'autype := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { autype write$ + s nameptr "{jj}" format.name$ 't := + "[" t * "]" * write$ + s nameptr "{ff}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{f}" format.name$ add.period$ 't := + "[" t * "]" * write$ + s nameptr "{vv}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{ll}" format.name$ 't := + "{" t * "}" * write$ + newline$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + +FUNCTION {format.key} +{ "" "\thekey" key do.out } + + +FUNCTION {format.artauthors} +{ author empty$ + { format.key } + { "\artauthor" author format.names } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { format.key } + { "\author" author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { format.key } + { "\editor" editor format.names } + if$ +} + + +FUNCTION {format.title} +{ "" "\title" title do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.t.title} +{ "" "\title" title do.t.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.arttitle} +{ "" "\arttitle" title do.t.out } + +FUNCTION {format.journal} +{ "" "\journal" journal do.out + "" "\issn" issn do.out +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.volume} +{ "" "\volume" volume do.out +} + +FUNCTION {format.volume.issue} +{ "" "\volume" volume do.out + "" "\issue" number do.out +} + +FUNCTION {format.number.series} +{ "" "\series" series do.out + volume empty$ + { "" "\volume" number do.out + } + { "" "\volume" volume do.out + "" "\issue" number do.out } + if$ +} + +FUNCTION {format.edition} +{ "" "\edition" edition do.out + "" "\month" month do.out +} + +FUNCTION {format.pages} +{ "" "\pages" pages do.out } + + +FUNCTION {format.vol.num.pages} +{ format.volume.issue + format.pages +} + +FUNCTION {format.vol.num.page} +{ format.volume.issue + format.pages +} + +FUNCTION {format.type.chapter.pages} +{ chapter empty$ + 'format.pages + { "" "\type" type do.out + "" "\chapter" chapter do.out + } + if$ + format.pages +} + +FUNCTION {format.booktitle} +{"" "\title" booktitle do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + 'skip$ + { format.booktitle } + if$ +} + +FUNCTION {format.in.booktitle.or.series} +{ "" "\series" series do.out + booktitle empty$ + 'skip$ + { editor empty$ + { format.booktitle } + { format.editors format.booktitle } + if$ + } + if$ +} + + +FUNCTION {format.tr.number} +{"" "\type" type do.out + "" "\volume" number do.out +} + +FUNCTION {format.crossref} +{ "" "\crossref" crossref do.out +} + +FUNCTION {format.book.crossref} +{ + "" "\volume" volume do.out + format.crossref +} + +FUNCTION {format.incoll.inproc.crossref} +{ format.crossref +} + +FUNCTION {article} +{ start.entry + format.artauthors + format.year + format.arttitle + crossref missing$ + { format.journal + format.vol.num.pages + } + { format.crossref + format.pages + } + if$ + "" "\month" month do.out + stop.entry +} + +FUNCTION {book} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {booklet} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {inbook} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.type.chapter.pages + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { format.type.chapter.pages + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {incollection} +{ start.entry + format.artauthors + format.year + format.arttitle + format.editors + crossref missing$ + { format.in.ed.booktitle + format.number.series + "" "\city" address do.out + format.edition + format.type.chapter.pages + } + { format.incoll.inproc.crossref + format.type.chapter.pages + } + if$ + "" "\pubname" publisher do.out + stop.entry +} + +FUNCTION {inproceedings} +{ start.entry + format.authors + format.year + format.arttitle + crossref missing$ + { format.in.booktitle.or.series + format.number.series + "" "\city" address do.out + format.pages + } + { format.incoll.inproc.crossref + format.pages + } + if$ + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ start.entry + format.authors + format.year + format.title + "" "\organization" organization do.out + "" "\city" address do.out + "" "\edition" edition do.out + stop.entry +} + +FUNCTION {mastersthesis} +{ start.entry + format.authors + format.year + format.t.title + "" "\type" type do.out + "" "\pubname" school do.out + "" "\month" month do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {misc} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\city" address do.out + "" "\month" month do.out + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + stop.entry +} + +FUNCTION {phdthesis} +{ start.entry + format.authors + format.title + format.year + "" "\type" type do.out + "" "\month" month do.out + "" "\pubname" school do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {proceedings} +{ start.entry + format.editors + format.year + format.title + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {techreport} +{ start.entry + format.authors + format.year + format.t.title + format.tr.number + "" "\city" address do.out + "" "\pubname" institution do.out + stop.entry +} + +FUNCTION {unpublished} +{ start.entry + format.authors + format.year + format.t.title + "" "\month" month do.out + stop.entry +} + + +FUNCTION {default.type} { misc } + +MACRO {jan} {"1"} +MACRO {feb} {"2"} +MACRO {mar} {"3"} +MACRO {apr} {"4"} +MACRO {may} {"5"} +MACRO {jun} {"6"} +MACRO {jul} {"7"} +MACRO {aug} {"8"} +MACRO {sep} {"9"} +MACRO {oct} {"10"} +MACRO {nov} {"11"} +MACRO {dec} {"12"} + +READ + +FUNCTION {initialize.ordinal.label} +{ #0 'ordinal.num := } + +FUNCTION {set.ordinal.label} { + #1 ordinal.num + 'ordinal.num := + ordinal.num int.to.str$ 'ordinal.label := +} + +EXECUTE {initialize.ordinal.label} + +ITERATE {set.ordinal.label} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ + "{" swap$ * "}," * +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + "a=" swap$ * "y=" * + year field.or.null purify$ #-1 #4 substring$ + * + 'label := +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.clab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.clabel} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.editor.key.clabel} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.key.organization.clabel} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {editor.key.organization.clabel} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ +} + +FUNCTION {calc.clabel} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.clabel + { type$ "proceedings" = + 'editor.key.organization.clabel + { type$ "manual" = + 'author.key.organization.clabel + 'author.key.clabel + if$ + } + if$ + } + if$ + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'clabel := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.clabel := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort.title} +{ calc.label + calc.clabel + title field.or.null + sort.format.title + " " + * + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.author} +{ calc.clabel + calc.label + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.clabel} +{ calc.label + calc.clabel + clabel sortify + duplicate$ 'sort.label := + #1 entry.max$ substring$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {presort.none} +{ calc.label + calc.clabel + "" 'sort.label := + "" 'sort.key$ := +} + +ITERATE {presort.none} + +SORT + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'ordinal.num := +} + +FUNCTION {forward.pass} +{ ordinal.num #1 + 'ordinal.num := + ordinal.num int.to.str$ 'nlabel := + last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + clabel extra.label * 'clabel := + extra.label 'next.extra := + clabel width$ longest.label.width > + { clabel 'longest.label := + clabel width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.extra.label.stuff} + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order.author} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.title} +{ sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.clabel} +{ sort.label + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.none} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order.none} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + + +EXECUTE {end.bib} diff --git a/bibtex/bst/context/cont-ti.bst b/bibtex/bst/context/cont-ti.bst new file mode 100644 index 000000000..b4660d6ae --- /dev/null +++ b/bibtex/bst/context/cont-ti.bst @@ -0,0 +1,1120 @@ +% Written by Taco Hoekwater +% Donated to the Public Domain. Use at your own risk. +% Preliminary version, 19-aug-1999. +% New 17/9/2003: 'eprint' and 'doi' tags + +% This style produces citations in a format the ConTeXt can handle. +% It outputs a large collection of labels so that context can decide +% which one to use. +% +% Actually, there are a number of separate bst files that change in +% only two lines: the ITERATEs right before the two SORTs can +% have different values, sorting by either one of +% +% -------------------------- cont-master.bst title +% - the author (+year, title) : cont-au.bst author +% - the title (+author, year) : cont-ti.bst title +% - the short key a la abbrev : cont-ab.bst clabel +% - nothing at all (cite order): cont-no.bst none +% +% +% Output gives the following computed info: +% +% - the total number of bib entries +% - the longest short label +% +% And per entry: +% +% - the key +% - the entry type +% - the yeardata for crossrefs +% - the authordata for crossrefs +% - the short key +% - the .bib appearance number + +% Commands that may be written to the bbl file (not counting stuff the +% bib database defines itself): +% +% \setuppublicationlist +% \startpublication +% \stoppublication + +% Field entries with a strange format/appearance: +% +% \artauthor, +% \editor, +% \author: \xxx[junior]{firstnames}[inits]{von}{lastname} + +% \etalchar: appears in short keys sometimes +% \maybeyear: appears in \pubyear sometimes +% +% And these commands for the entries have only one argument, +% precisely matching the corresponding field. Note that there +% are more fields supported than in the standard bst files. +% +% \abstract +% \annotate +% \arttitle +% \chapter +% \city +% \comment +% \crossref +% \edition +% \isbn +% \issn +% \issue +% \journal +% \keyword +% \keywords +% \lang +% \month +% \names +% \note +% \organization +% \pages +% \pubname +% \pubyear +% \series +% \size +% \thekey +% \title +% \type +% \volume +% \eprint +% \doi +% \howpublished + +ENTRY + { abstract + address + annotate + author + booktitle + chapter + comment + doi + edition + editor + eprint + howpublished + institution + isbn + issn + journal + key + keyword + keywords + language + month + names + note + number + organization + pages + publisher + school + series + size + title + type + volume + year + } + {} + { label extra.label sort.label clabel sort.clabel ordinal.label} + + +STRINGS { s t autype} + +STRINGS { last.label next.extra nlabel } + +STRINGS { longest.label last.sort.label} + +INTEGERS { longest.label.width last.extra.num ordinal.num } + +INTEGERS { nameptr namesleft numnames } + +INTEGERS { len } + + +FUNCTION {begin.bib} +{ #0 'ordinal.num := + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\setuppublicationlist[samplesize={" write$ + longest.label "},totalnumber=" * write$ + nlabel "]" * write$ + newline$ +} + +FUNCTION {end.bib} +{ newline$ +} + + + +FUNCTION {do.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ * "}" * * write$ pop$ newline$ } + if$ +} + + +FUNCTION {do.t.out} +{ duplicate$ empty$ + { pop$ pop$ write$} + { "{" swap$ "t" change.case$ * "}" * * write$ pop$ newline$ } + if$ +} + +FUNCTION {format.year} +{ year empty$ + 'skip$ + { "\pubyear{" year * write$ + extra.label empty$ + { "}" write$ } + { "\maybeyear{" extra.label * "}}" * write$ } + if$ + newline$ + } + if$ +} + +FUNCTION {start.entry} +{ ordinal.num #1 + 'ordinal.num := + newline$ + "\startpublication[" write$ + "k=" write$ + cite$ "," * write$ + "t=" write$ + type$ "," * write$ + newline$ + label write$ + "," write$ + doi empty$ + {} + { + "o=" write$ + doi write$ + "," write$ + } if$ + newline$ + "n=" write$ + ordinal.label write$ + ",s=" write$ + clabel write$ + "]" write$ + newline$ + "" "\lang" language do.out +} + +FUNCTION {stop.entry} +{ "" "\note" note do.out + "" "\annotate" annotate do.out + "" "\eprint" eprint do.out + "" "\doi" doi do.out + "" "\keyword" keyword do.out + "" "\keywords" keywords do.out + "" "\comment" comment do.out + "" "\abstract" abstract do.out + "" "\names" names do.out + "" "\size" size do.out + "\stoppublication" write$ + newline$ +} + + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + +FUNCTION {format.names} +{ 's := 'autype := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { autype write$ + s nameptr "{jj}" format.name$ 't := + "[" t * "]" * write$ + s nameptr "{ff}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{f}" format.name$ add.period$ 't := + "[" t * "]" * write$ + s nameptr "{vv}" format.name$ 't := + "{" t * "}" * write$ + s nameptr "{ll}" format.name$ 't := + "{" t * "}" * write$ + newline$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + +FUNCTION {format.key} +{ "" "\thekey" key do.out } + + +FUNCTION {format.artauthors} +{ author empty$ + { format.key } + { "\artauthor" author format.names } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { format.key } + { "\author" author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { format.key } + { "\editor" editor format.names } + if$ +} + + +FUNCTION {format.title} +{ "" "\title" title do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.t.title} +{ "" "\title" title do.t.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.arttitle} +{ "" "\arttitle" title do.t.out } + +FUNCTION {format.journal} +{ "" "\journal" journal do.out + "" "\issn" issn do.out +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.volume} +{ "" "\volume" volume do.out +} + +FUNCTION {format.volume.issue} +{ "" "\volume" volume do.out + "" "\issue" number do.out +} + +FUNCTION {format.number.series} +{ "" "\series" series do.out + volume empty$ + { "" "\volume" number do.out + } + { "" "\volume" volume do.out + "" "\issue" number do.out } + if$ +} + +FUNCTION {format.edition} +{ "" "\edition" edition do.out + "" "\month" month do.out +} + +FUNCTION {format.pages} +{ "" "\pages" pages do.out } + + +FUNCTION {format.vol.num.pages} +{ format.volume.issue + format.pages +} + +FUNCTION {format.vol.num.page} +{ format.volume.issue + format.pages +} + +FUNCTION {format.type.chapter.pages} +{ chapter empty$ + 'format.pages + { "" "\type" type do.out + "" "\chapter" chapter do.out + } + if$ + format.pages +} + +FUNCTION {format.booktitle} +{"" "\title" booktitle do.out + "" "\isbn" isbn do.out +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + 'skip$ + { format.booktitle } + if$ +} + +FUNCTION {format.in.booktitle.or.series} +{ "" "\series" series do.out + booktitle empty$ + 'skip$ + { editor empty$ + { format.booktitle } + { format.editors format.booktitle } + if$ + } + if$ +} + + +FUNCTION {format.tr.number} +{"" "\type" type do.out + "" "\volume" number do.out +} + +FUNCTION {format.crossref} +{ "" "\crossref" crossref do.out +} + +FUNCTION {format.book.crossref} +{ + "" "\volume" volume do.out + format.crossref +} + +FUNCTION {format.incoll.inproc.crossref} +{ format.crossref +} + +FUNCTION {article} +{ start.entry + format.artauthors + format.year + format.arttitle + crossref missing$ + { format.journal + format.vol.num.pages + } + { format.crossref + format.pages + } + if$ + "" "\month" month do.out + stop.entry +} + +FUNCTION {book} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {booklet} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {inbook} +{ start.entry + author empty$ + { format.editors + } + { format.authors + } + if$ + format.year + format.title + crossref missing$ + { format.type.chapter.pages + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + } + { format.type.chapter.pages + format.book.crossref + } + if$ + format.edition + stop.entry +} + +FUNCTION {incollection} +{ start.entry + format.artauthors + format.year + format.arttitle + format.editors + crossref missing$ + { format.in.ed.booktitle + format.number.series + "" "\city" address do.out + format.edition + format.type.chapter.pages + } + { format.incoll.inproc.crossref + format.type.chapter.pages + } + if$ + "" "\pubname" publisher do.out + stop.entry +} + +FUNCTION {inproceedings} +{ start.entry + format.authors + format.year + format.arttitle + crossref missing$ + { format.in.booktitle.or.series + format.number.series + "" "\city" address do.out + format.pages + } + { format.incoll.inproc.crossref + format.pages + } + if$ + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ start.entry + format.authors + format.year + format.title + "" "\organization" organization do.out + "" "\city" address do.out + "" "\edition" edition do.out + stop.entry +} + +FUNCTION {mastersthesis} +{ start.entry + format.authors + format.year + format.t.title + "" "\type" type do.out + "" "\pubname" school do.out + "" "\month" month do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {misc} +{ start.entry + format.authors + format.year + format.t.title + format.key + "" "\city" address do.out + "" "\month" month do.out + "" "\pubname" publisher do.out + "" "\howpublished" howpublished do.out + stop.entry +} + +FUNCTION {phdthesis} +{ start.entry + format.authors + format.title + format.year + "" "\type" type do.out + "" "\month" month do.out + "" "\pubname" school do.out + "" "\city" address do.out + stop.entry +} + +FUNCTION {proceedings} +{ start.entry + format.editors + format.year + format.title + format.number.series + "" "\city" address do.out + "" "\pubname" publisher do.out + "" "\organization" organization do.out + stop.entry +} + +FUNCTION {techreport} +{ start.entry + format.authors + format.year + format.t.title + format.tr.number + "" "\city" address do.out + "" "\pubname" institution do.out + stop.entry +} + +FUNCTION {unpublished} +{ start.entry + format.authors + format.year + format.t.title + "" "\month" month do.out + stop.entry +} + + +FUNCTION {default.type} { misc } + +MACRO {jan} {"1"} +MACRO {feb} {"2"} +MACRO {mar} {"3"} +MACRO {apr} {"4"} +MACRO {may} {"5"} +MACRO {jun} {"6"} +MACRO {jul} {"7"} +MACRO {aug} {"8"} +MACRO {sep} {"9"} +MACRO {oct} {"10"} +MACRO {nov} {"11"} +MACRO {dec} {"12"} + +READ + +FUNCTION {initialize.ordinal.label} +{ #0 'ordinal.num := } + +FUNCTION {set.ordinal.label} { + #1 ordinal.num + 'ordinal.num := + ordinal.num int.to.str$ 'ordinal.label := +} + +EXECUTE {initialize.ordinal.label} + +ITERATE {set.ordinal.label} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ + "{" swap$ * "}," * +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { "{" cite$ * "}," *} + { "{" key * "}," * } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + "a=" swap$ * "y=" * + year field.or.null purify$ #-1 #4 substring$ + * + 'label := +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.clab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.clabel} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.editor.key.clabel} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {author.key.organization.clabel} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.clab.names } + if$ +} + +FUNCTION {editor.key.organization.clabel} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { editor format.clab.names } + if$ +} + +FUNCTION {calc.clabel} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.clabel + { type$ "proceedings" = + 'editor.key.organization.clabel + { type$ "manual" = + 'author.key.organization.clabel + 'author.key.clabel + if$ + } + if$ + } + if$ + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'clabel := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.clabel := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort.title} +{ calc.label + calc.clabel + title field.or.null + sort.format.title + " " + * + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.author} +{ calc.clabel + calc.label + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + 'sort.key$ := +} + +FUNCTION {presort.clabel} +{ calc.label + calc.clabel + clabel sortify + duplicate$ 'sort.label := + #1 entry.max$ substring$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {presort.none} +{ calc.label + calc.clabel + "" 'sort.label := + "" 'sort.key$ := +} + +ITERATE {presort.title} + +SORT + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'ordinal.num := +} + +FUNCTION {forward.pass} +{ ordinal.num #1 + 'ordinal.num := + ordinal.num int.to.str$ 'nlabel := + last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + clabel extra.label * 'clabel := + extra.label 'next.extra := + clabel width$ longest.label.width > + { clabel 'longest.label := + clabel width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.extra.label.stuff} + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order.author} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.title} +{ sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.clabel} +{ sort.label + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +FUNCTION {bib.sort.order.none} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order.title} + +SORT + +EXECUTE {begin.bib} + +ITERATE {call.type$} + + +EXECUTE {end.bib} |