From 8d8d528d2ad52599f11250cfc567fea4f37f2a8b Mon Sep 17 00:00:00 2001
From: Context Git Mirror Bot <phg42.2a@gmail.com>
Date: Tue, 12 Jan 2016 17:15:07 +0100
Subject: 2016-01-12 16:26:00

---
 bibtex/bst/context/mkii/cont-ab.bst | 1224 +++++++++++++++++++++++++++++++++++
 1 file changed, 1224 insertions(+)
 create mode 100644 bibtex/bst/context/mkii/cont-ab.bst

(limited to 'bibtex/bst/context/mkii/cont-ab.bst')

diff --git a/bibtex/bst/context/mkii/cont-ab.bst b/bibtex/bst/context/mkii/cont-ab.bst
new file mode 100644
index 000000000..e09da7ca5
--- /dev/null
+++ b/bibtex/bst/context/mkii/cont-ab.bst
@@ -0,0 +1,1224 @@
+% 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
+% \country
+% \crossref
+% \edition
+% \isbn
+% \issn
+% \issue
+% \journal
+% \keyword
+% \keywords
+% \lang
+% \month
+% \names
+% \note
+% \notes
+% \organization
+% \pages
+% \pubname
+% \pubyear
+% \series
+% \size
+% \thekey
+% \title
+% \bibtype
+% \volume
+% \eprint
+% \doi
+% \howpublished
+% \biburl
+% \lastchecked
+% for ieee:
+
+% \nationality
+% \assignee
+% \bibnumber
+% \day
+% \dayfiled
+% \monthfiled
+% \yearfiled
+% \revision
+ 
+ENTRY
+  { abstract
+	address
+    annotate
+	author
+    booktitle
+    chapter
+    comment
+    country
+    doi
+    edition
+    editor
+    eprint
+    howpublished
+    institution
+    isbn
+    issn
+    journal
+    key
+    keyword
+    keywords
+    language
+    lastchecked
+	month
+    names
+    note
+    notes
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    size
+    title
+    type
+    url
+    volume
+    year
+ nationality
+ assignee
+ bibnumber
+ day
+ dayfiled
+ monthfiled
+ yearfiled
+ revision
+  }
+  {}
+  { 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$
+  url empty$
+    {}
+    {
+     "u={" write$
+     url write$
+     "}," write$
+    newline$
+     } if$ 
+  "n=" write$
+  ordinal.label write$
+  ",s=" write$
+  clabel write$
+  "]" write$
+  newline$
+  "" "\lang" language do.out
+}
+ 
+FUNCTION {stop.entry}
+{   "" "\country" country do.out
+    "" "\note" note do.out
+	"" "\notes" notes 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
+	"" "\biburl" url do.out
+	"" "\lastchecked" lastchecked 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
+    { "" "\bibtype" 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}
+{"" "\bibtype" 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
+  "" "\bibtype" 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
+  "" "\day" day 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
+  "" "\bibtype" 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
+}
+
+% 4 additions from IEEEtran
+
+FUNCTION {electronic}
+{ start.entry
+  format.authors
+  format.year
+  format.t.title
+  "" "\month" month do.out
+  "" "\city" address do.out
+  "" "\organization" organization do.out
+  "" "\howpublished" howpublished do.out
+  stop.entry
+}
+FUNCTION {patent}
+{ start.entry
+  format.authors
+  format.year
+  format.t.title
+  "" "\bibnumber" number do.out
+  "" "\city" address do.out
+  "" "\nationality" nationality do.out
+  "" "\assignee" assignee do.out
+  "" "\bibtype" type do.out
+  "" "\month" month do.out
+  "" "\monthfiled" monthfiled do.out
+  "" "\yearfiled" yearfiled do.out
+  "" "\day" day do.out
+  "" "\dayfiled" dayfiled do.out
+  stop.entry
+}
+FUNCTION {periodical}
+{ start.entry
+  format.editors
+  format.year
+  format.title
+  format.number.series
+  "" "\bibnumber" number do.out
+  "" "\month" month do.out
+  "" "\organization" organization do.out
+  stop.entry
+}
+FUNCTION {standard}
+{ start.entry
+  format.authors
+  format.year
+  format.title
+  "" "\bibtype" type do.out
+  "" "\organization" organization do.out
+  "" "\city" address do.out
+  "" "\revision" revision do.out
+  "" "\pubname" institution do.out
+  "" "\howpublished" howpublished do.out
+  "" "\bibnumber" number do.out
+  "" "\month" month do.out
+  stop.entry
+}
+
+FUNCTION {IEEEtranBSTCTL} { }
+
+ 
+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$
+  "{" swap$ * "}" *
+  s num.names$ duplicate$
+  #1 > 
+    { pop$ "," * }
+    { pop$ }
+  if$
+  s num.names$ duplicate$
+  #2 >
+    { pop$ "{}" * }
+    { #2 <
+        'skip$
+        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { "{}" * }
+            { s #2 "{vv~}{ll}" format.name$ "{" swap$ * "}" * * }
+          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}
-- 
cgit v1.2.3

