diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2011-10-27 18:00:16 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2011-10-27 18:00:16 (GMT) |
commit | 8491e9fbd06ef8a8f1cc542a524c673d7781d4b6 (patch) | |
tree | 7c1bfd20df6135fa1aac607ebe1a46d31d7f4b65 /src/doxygen.bst | |
parent | 3af6ff4c3d2748b45f468695a3db9f26eef4e630 (diff) | |
download | Doxygen-8491e9fbd06ef8a8f1cc542a524c673d7781d4b6.zip Doxygen-8491e9fbd06ef8a8f1cc542a524c673d7781d4b6.tar.gz Doxygen-8491e9fbd06ef8a8f1cc542a524c673d7781d4b6.tar.bz2 |
Release-1.7.5.1-20111027
Diffstat (limited to 'src/doxygen.bst')
-rw-r--r-- | src/doxygen.bst | 760 |
1 files changed, 367 insertions, 393 deletions
diff --git a/src/doxygen.bst b/src/doxygen.bst index 0dd6e28..c6ae7a8 100644 --- a/src/doxygen.bst +++ b/src/doxygen.bst @@ -1,31 +1,10 @@ -%% doxygen.bst -%% This is a modification of plainhtml.bst; the original copyright notice -%% follows. - -%% ORIGINAL COPYRIGHT NOTICE OF plainhtml.bst -%% -%% plainhtml.bst -%% -%% Part of bibhtml, version 2.0.1, released 2009 November 2 -%% Hg node 6ca3807543d6. -%% See <http://purl.org/nxg/dist/bibhtml> -%% -%% Copyright 1999, 2005, 2006, 2009, Norman Gray <norman@astro.gla.ac.uk> -%% -%% This is a modification of a modification! -%% -%%% Modification of BibTeX style file /usr/local/texlive/2008/texmf-dist/bibtex/bst/base/plain.bst -%%% ... by urlbst, version 0.6-4 (marked with "% urlbst") -%%% See <http://purl.org/nxg/dist/urlbst> -%%% Added webpage entry type, and url and lastchecked fields. -%%% Added eprint support. -%%% Added DOI support. -%%% Added PUBMED support. -%%% Added hyperref support. -%%% Original headers follow... - -% BibTeX standard bibliography style `plain' - % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $ + % + % This file is either "html-btxbst.doc" or was derived from + % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited + % from "btxbst.doc" and "named.bst". + % The following copyright information is from btxbst.doc: + % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09. % Copyright (C) 1985, all rights reserved. % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or @@ -33,6 +12,8 @@ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. % This restriction helps ensure that all standard styles are identical. % The file btxbst.doc has the documentation for this style. + % "named" style (sorted keys of the form [name, year]) + % Some code for this was taken from "named.bst". ENTRY { address @@ -57,76 +38,36 @@ ENTRY type volume year - eprint % urlbst - doi % urlbst - pubmed % urlbst - url % urlbst - lastchecked % urlbst + dvi + html + keywords + pdf + postscript + url + doi + mailto } {} - { label } + { label extra.label sort.label } -INTEGERS { output.state before.all mid.sentence after.sentence after.block doiform } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } -STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl openinlinelink closeinlinelink } % urlbst... -INTEGERS { inlinelinks makeinlinelink addeprints adddoiresolver addpubmedresolver } -% Following constants may be adjusted by hand, if desired -FUNCTION {init.urlbst.variables} -{ - "Available from: " 'urlintro := % prefix before URL - "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref - "arXiv:" 'eprintprefix := % text prefix printed before eprint ref - "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI - "doi:" 'doiprefix := % text prefix printed before DOI ref - "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED - "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref - #1 'addeprints := % 0=no eprints; 1=include eprints - #1 'adddoiresolver := % 0=no DOI resolver; 1=include it - #1 'addpubmedresolver := % 0=no PUBMED resolver; 1=include it - #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles - #1 'doiform := % 0=simple, but can produce invalid HTML; 1=needs post-processing - % the following are internal state variables, not config constants - #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink - "" 'openinlinelink := % ditto - "" 'closeinlinelink := % ditto -} -INTEGERS { - bracket.state - outside.brackets - open.brackets - within.brackets - close.brackets - close.first.block -} -% ...urlbst to here FUNCTION {init.state.consts} -{ #0 'outside.brackets := % urlbst - #1 'open.brackets := - #2 'within.brackets := - #3 'close.brackets := - - #0 'before.all := +{ #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := - #0 'close.first.block := } STRINGS { s t } -% urlbst -FUNCTION {output.nonnull.original} +FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ - % close the <dt> after the end of the first block - close.first.block - { newline$ - #0 'close.first.block := } - { newline$ } - if$ + newline$ } { output.state before.all = 'write$ @@ -140,84 +81,6 @@ FUNCTION {output.nonnull.original} s } -% urlbst... -% The following three functions are for handling inlinelink. They wrap -% a block of text which is potentially output with write$ by multiple -% other functions, so we don't know the content a priori. -% They communicate between each other using the variables makeinlinelink -% (which is true if a link should be made), and closeinlinelink (which holds -% the string which should close any current link. They can be called -% at any time, but start.inlinelink will be a no-op unless something has -% previously set makeinlinelink true, and the two ...end.inlinelink functions -% will only do their stuff if start.inlinelink has previously set -% closeinlinelink to be non-empty. -FUNCTION {possibly.setup.inlinelink} -{ makeinlinelink - { "<a href=" quote$ * url * quote$ * ">" * 'openinlinelink := - "</a>" 'closeinlinelink := - #0 'makeinlinelink := } - 'skip$ - if$ % makeinlinelink -} -FUNCTION {add.inlinelink} -{ openinlinelink empty$ - 'skip$ - { openinlinelink swap$ * closeinlinelink * - "" 'openinlinelink := - } - if$ -} -FUNCTION {output.nonnull} -{ % Save the thing we've been asked to output - 's := - % If the bracket-state is close.brackets, then add a close-bracket to - % what is currently at the top of the stack, and set bracket.state - % to outside.brackets - bracket.state close.brackets = - { "]" * - outside.brackets 'bracket.state := - } - 'skip$ - if$ - bracket.state outside.brackets = - { % We're outside all brackets -- this is the normal situation. - % Write out what's currently at the top of the stack, using the - % original output.nonnull function. - s - add.inlinelink - output.nonnull.original % invoke the original output.nonnull - } - { % Still in brackets. Add open-bracket or (continuation) comma, add the - % new text (in s) to the top of the stack, and move to the close-brackets - % state, ready for next time (unless inbrackets resets it). If we come - % into this branch, then output.state is carefully undisturbed. - bracket.state open.brackets = - { " [" * } - { ", " * } % bracket.state will be within.brackets - if$ - s * - close.brackets 'bracket.state := - } - if$ -} - -% Call this function just before adding something which should be presented in -% brackets. bracket.state is handled specially within output.nonnull. -FUNCTION {inbrackets} -{ bracket.state close.brackets = - { within.brackets 'bracket.state := } % reset the state: not open nor closed - { open.brackets 'bracket.state := } - if$ -} - -FUNCTION {format.lastchecked} -{ lastchecked empty$ - { "" } - { inbrackets "cited " lastchecked * } - if$ -} -% ...urlbst to here - FUNCTION {output} { duplicate$ empty$ 'pop$ @@ -233,21 +96,50 @@ FUNCTION {output.check} if$ } -FUNCTION {output.bibitem.original} +FUNCTION {output.bibitem} { newline$ - cite$ write$ - newline$ - "[" label * "] " * write$ - % the <dt> is closed within output.nonnull, as long as close.first.block is true - #1 'close.first.block := - newline$ + author empty$ + { editor empty$ + { organization empty$ + 'skip$ + { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ } + if$ + } + { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ } + if$ + } + { "<!-- Authors: " author purify$ * " -->" * write$ newline$ } + if$ + keywords empty$ + 'skip$ + { "<!-- Keywords: " keywords * " -->" * write$ newline$ } + if$ + "<dt><a name=" quote$ * "CITEREF_" * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$ "" before.all 'output.state := } -FUNCTION {fin.entry.original} +FUNCTION {fin.entry} { add.period$ write$ + postscript empty$ + 'skip$ + { newline$ "<!-- PostScript: " postscript * " -->" * write$ } + if$ + pdf empty$ + 'skip$ + { newline$ "<!-- PDF: " pdf * " -->" * write$ } + if$ + dvi empty$ + 'skip$ + { newline$ "<!-- DVI: " dvi * " -->" * write$ } + if$ + doi empty$ + 'skip$ + { newline$ "<!-- DOI: " doi * " -->" * write$ } + if$ + "</dd>" write$ + newline$ newline$ } @@ -287,6 +179,22 @@ FUNCTION {or} if$ } +FUNCTION {str.to.int} +{ + 's := + #0 + { s empty$ not } + { % Multiply the number on the top of the stack by 10 = 1010 binary + duplicate$ + % x2 + duplicate$ % x2 x2 + duplicate$ + duplicate$ + % x2 x8 + + + s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0' + s #2 global.max$ substring$ 's := + } + while$ +} + FUNCTION {new.block.checka} { empty$ 'skip$ @@ -326,17 +234,39 @@ FUNCTION {field.or.null} if$ } -FUNCTION {bold} +FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } - { "<b>" swap$ * "</b>" * } + { "<em>" swap$ * "</em>" * } if$ } -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "<em>" swap$ * "</em>" * } +FUNCTION {add.link} % title +{ + 't := + t empty$ + { "" } + { url empty$ + { html empty$ + { t } + { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * } + if$ } + { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * } + if$ + } + if$ +} + +FUNCTION {add.mailto} % authors +{ + 't := + t empty$ + { "" } + { mailto empty$ + { t } + { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * } + if$ + } if$ } @@ -349,6 +279,7 @@ FUNCTION {format.names} numnames 'namesleft := { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + "\bibxhtmlname{" t * "}" * 't := nameptr #1 > { namesleft #1 > { ", " * t * } @@ -376,7 +307,7 @@ FUNCTION {format.authors} { "" } { author format.names } if$ - bold + add.mailto } FUNCTION {format.editors} @@ -396,6 +327,7 @@ FUNCTION {format.title} { "" } { title "t" change.case$ } if$ + add.link } FUNCTION {n.dashify} @@ -438,11 +370,11 @@ FUNCTION {format.date} if$ } if$ - bold } FUNCTION {format.btitle} { title emphasize + add.link } FUNCTION {tie.or.space.connect} @@ -616,18 +548,20 @@ FUNCTION {format.tr.number} } FUNCTION {format.article.crossref} -{ key empty$ +{ + "In <a href=" quote$ * "#" * crossref * quote$ * ">" * + key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } - { "In <em>" journal * "</em>" * } + { "<cite>" * journal * "</cite>" * } if$ } - { "In " key * } + { key * } if$ - " <span class='cite'>" * crossref * "</span>" * + "</a> \citelabel{" * crossref * "}" * } FUNCTION {format.crossref.editor} @@ -656,6 +590,7 @@ FUNCTION {format.book.crossref} " of " * } if$ + "<a href=" * quote$ * "#" * crossref * quote$ * ">" * editor empty$ editor field.or.null author field.or.null = or @@ -665,7 +600,7 @@ FUNCTION {format.book.crossref} crossref * warning$ "" * } - { "<em>" * series * "</em>" * } + { "<cite>" * series * "</cite>" * } if$ } { key * } @@ -673,11 +608,13 @@ FUNCTION {format.book.crossref} } { format.crossref.editor * } if$ - " <span class='cite'>" * crossref * "</span>" * + "</a> \citelabel{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} -{ editor empty$ +{ + "In <a href=" quote$ * "#" * crossref * quote$ * ">" * + editor empty$ editor field.or.null author field.or.null = or { key empty$ @@ -686,171 +623,26 @@ FUNCTION {format.incoll.inproc.crossref} crossref * warning$ "" } - { "In <em>" booktitle * "</em>" * } + { "<cite>" * booktitle * "</cite>" * } if$ } - { "In " key * } + { key * } if$ } - { "In " format.crossref.editor * } - if$ - " <span class='cite'>" * crossref * "</span>" * -} - -% urlbst... -% Functions for making hypertext links. -FUNCTION {make.href} -{ - "<a href='" swap$ * "'><code>" * swap$ * "</code></a>" * -} - -% If inlinelinks is true, then format.url should be a no-op, since it's -% (a) redundant, and (b) could end up as a link-within-a-link. -FUNCTION {format.url} -{ inlinelinks #1 = url empty$ or - { "" } - { urlintro "<code>" * url * "</code>" * } - if$ -} - -FUNCTION {format.eprint} -{ eprint empty$ - { "" } - { eprintprefix eprint * eprinturl eprint * make.href } - if$ -} - -FUNCTION {format.doi} -{ doi empty$ - { "" } - { doiform #0 = - { doiprefix doi * doiurl doi * make.href } - { "DOI:{" doi * "}" * } - if$ - } - if$ -} - -FUNCTION {format.pubmed} -{ pubmed empty$ - { "" } - { pubmedprefix pubmed * pubmedurl pubmed * make.href } - if$ -} - -% Output a URL. We can't use the more normal idiom (something like -% `format.url output'), because the `inbrackets' within -% format.lastchecked applies to everything between calls to `output', -% so that `format.url format.lastchecked * output' ends up with both -% the URL and the lastchecked in brackets. -FUNCTION {output.url} -{ url empty$ - 'skip$ - { new.block - format.url output - format.lastchecked output - } - if$ -} - -FUNCTION {output.web.refs} -{ - new.block - output.url - addeprints eprint empty$ not and - { format.eprint output.nonnull } - 'skip$ - if$ - adddoiresolver doi empty$ not and - { format.doi output.nonnull } - 'skip$ - if$ - addpubmedresolver pubmed empty$ not and - { format.pubmed output.nonnull } - 'skip$ - if$ -} - -% Wrapper for output.bibitem.original. -% If the URL field is not empty, set makeinlinelink to be true, -% so that an inline link will be started at the next opportunity -FUNCTION {output.bibitem} -{ outside.brackets 'bracket.state := - output.bibitem.original - inlinelinks url empty$ not and - { #1 'makeinlinelink := } - { #0 'makeinlinelink := } - if$ -} - -% Wrapper for fin.entry.original -FUNCTION {fin.entry} -{ output.web.refs % urlbst - makeinlinelink % ooops, it appears we didn't have a title for inlinelink - { possibly.setup.inlinelink % add some artificial link text here, as a fallback - "[link]" output.nonnull } - 'skip$ - if$ - bracket.state close.brackets = % urlbst - { "]" * } - 'skip$ - if$ - fin.entry.original -} - -% Webpage entry type. -% Title and url fields required; -% author, note, year, month, and lastchecked fields optional -% See references -% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm -% http://www.classroom.net/classroom/CitingNetResources.html -% http://neal.ctstateu.edu/history/cite.html -% http://www.cas.usf.edu/english/walker/mla.html -% for citation formats for web pages. -FUNCTION {webpage} -{ output.bibitem - author empty$ - { editor empty$ - 'skip$ % author and editor both optional - { format.editors output.nonnull } - if$ - } - { editor empty$ - { format.authors output.nonnull } - { "can't use both author and editor fields in " cite$ * warning$ } - if$ - } - if$ - new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ - format.title "title" output.check - inbrackets "online" output - new.block - year empty$ - 'skip$ - { format.date "year" output.check } + { format.crossref.editor * } if$ - % We don't need to output the URL details ('lastchecked' and 'url'), - % because fin.entry does that for us, using output.web.refs. The only - % reason we would want to put them here is if we were to decide that - % they should go in front of the rather miscellaneous information in 'note'. - new.block - note output - fin.entry + "</a> \citelabel{" * crossref * "}" * } -% ...urlbst to here - FUNCTION {article} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block crossref missing$ { journal emphasize "journal" output.check - possibly.setup.inlinelink format.vol.num.pages output% urlbst + format.vol.num.pages output format.date "year" output.check } { format.article.crossref output.nonnull @@ -874,7 +666,6 @@ FUNCTION {book} } if$ new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.btitle "title" output.check crossref missing$ { format.bvolume output @@ -899,7 +690,6 @@ FUNCTION {booklet} { output.bibitem format.authors output new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check howpublished address new.block.checkb howpublished output @@ -922,7 +712,6 @@ FUNCTION {inbook} } if$ new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.btitle "title" output.check crossref missing$ { format.bvolume output @@ -949,7 +738,6 @@ FUNCTION {incollection} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block crossref missing$ @@ -976,7 +764,6 @@ FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block crossref missing$ @@ -1022,7 +809,6 @@ FUNCTION {manual} { format.authors output.nonnull } if$ new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.btitle "title" output.check author empty$ { organization empty$ @@ -1048,7 +834,6 @@ FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block "Master's thesis" format.thesis.type output.nonnull @@ -1064,7 +849,6 @@ FUNCTION {misc} { output.bibitem format.authors output title howpublished new.block.checkb - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title output howpublished new.block.checka howpublished output @@ -1079,7 +863,6 @@ FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.btitle "title" output.check new.block "PhD thesis" format.thesis.type output.nonnull @@ -1098,7 +881,6 @@ FUNCTION {proceedings} { format.editors output.nonnull } if$ new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.btitle "title" output.check format.bvolume output format.number.series output @@ -1131,7 +913,6 @@ FUNCTION {techreport} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block format.tr.number output.nonnull @@ -1147,7 +928,6 @@ FUNCTION {unpublished} { output.bibitem format.authors "author" output.check new.block - title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst format.title "title" output.check new.block note "note" output.check @@ -1156,37 +936,70 @@ FUNCTION {unpublished} } FUNCTION {default.type} { misc } + MACRO {jan} {"January"} + MACRO {feb} {"February"} + MACRO {mar} {"March"} + MACRO {apr} {"April"} + MACRO {may} {"May"} + MACRO {jun} {"June"} + MACRO {jul} {"July"} + MACRO {aug} {"August"} + MACRO {sep} {"September"} + MACRO {oct} {"October"} + MACRO {nov} {"November"} + MACRO {dec} {"December"} + 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 {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 @@ -1207,6 +1020,177 @@ FUNCTION {chop.word} if$ } + +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 = + { s #1 "{vv }{ll}" format.name$ } + { numnames #2 = + { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * } + { s #1 "{vv }{ll }" format.name$ "et~al." * } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {month.to.int} +{ + "l" change.case$ #3 text.prefix$ + 's := + s "jan" = { #1 } { + s "feb" = { #2 } { + s "mar" = { #3 } { + s "apr" = { #4 } { + s "may" = { #5 } { + s "jun" = { #6 } { + s "jul" = { #7 } { + s "aug" = { #8 } { + s "sep" = { #9 } { + s "oct" = { #10 } { + s "nov" = { #11 } { + s "dec" = { #12 } { #13 } % 13 if nothing matches + if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$ +} + +INTEGERS { done c } +FUNCTION { get.day } +{ month field.or.null 's := + + % Strip out month name + #0 'done := + { s "" = not done not and } + { s #1 #1 substring$ " " = 'done := + s #2 global.max$ substring$ 's := + } + while$ + + % Build up first number in t + "0" 't := + #0 'done := + { s "" = not done not and } + { s #1 #1 substring$ chr.to.int$ 'c := + c #47 > c #58 < and + { t c int.to.chr$ * 't := } + { #1 'done := } + if$ + s #2 global.max$ substring$ 's := + } + while$ + + t str.to.int +} + +FUNCTION { sortify.fourdigit } +{ 's := + s empty$ + { "0000" } + { s + } + if$ +} + +FUNCTION { sortify.twodigit } +{ 's := + s empty$ + { "00" } + { s + str.to.int #10 + int.to.str$ + } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + duplicate$ + + year empty$ + 'skip$ + { ", " * } + if$ + year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989 + 'label := + + year field.or.null purify$ + #-1 #4 substring$ + sortify.fourdigit + " " * + month field.or.null month.to.int int.to.str$ sortify.twodigit * + " " * + get.day int.to.str$ sortify.twodigit * + " " * + * sortify 'sort.label := +} + FUNCTION {sort.format.names} { 's := #1 'nameptr := @@ -1220,7 +1204,7 @@ FUNCTION {sort.format.names} if$ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := nameptr numnames = t "others" = and - { "et al" * } + { "et al." * } { t sortify * } if$ nameptr #1 + 'nameptr := @@ -1304,36 +1288,9 @@ FUNCTION {editor.organization.sort} if$ } -FUNCTION {presort.by.author} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -FUNCTION {presort.by.year} -{ year field.or.null sortify +FUNCTION {presort} +{ calc.label + sort.label " " * type$ "book" = @@ -1353,6 +1310,10 @@ FUNCTION {presort.by.year} * " " * + year field.or.null sortify + * + " " + * title field.or.null sort.format.title * @@ -1360,55 +1321,68 @@ FUNCTION {presort.by.year} 'sort.key$ := } -ITERATE {presort.by.author} +ITERATE {presort} SORT -STRINGS { longest.label } +STRINGS { longest.label last.sort.label next.extra } -INTEGERS { number.label longest.label.width } +INTEGERS { longest.label.width last.extra.num } FUNCTION {initialize.longest.label} { "" 'longest.label := - #1 'number.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.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 := + sort.label 'last.sort.label := + } + if$ } -FUNCTION {longest.label.pass} -{ number.label int.to.str$ 'label := - number.label #1 + 'number.label := +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ + extra.label 'next.extra := } EXECUTE {initialize.longest.label} -ITERATE {longest.label.pass} +ITERATE {forward.pass} + +REVERSE {reverse.pass} FUNCTION {begin.bib} -{ preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - %"/** \page bibref References" write$ newline$ - newline$ +{ + "# label-style: default" write$ newline$ } EXECUTE {begin.bib} -EXECUTE {init.urlbst.variables} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ - %"*/" write$ newline$ } EXECUTE {end.bib} - |