summaryrefslogtreecommitdiffstats
path: root/src/doxygen.bst
diff options
context:
space:
mode:
Diffstat (limited to 'src/doxygen.bst')
-rw-r--r--src/doxygen.bst760
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}
-