From ab0cd022399feb54b6fef7742376c2286165ccc0 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 11 Jan 2014 23:23:55 +0000
Subject: economic (11jan14)

git-svn-id: svn://tug.org/texlive/trunk@32639 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/bibtex/bst/economic/aer.bst | 1221 +++++++++++++++++++++++++
 1 file changed, 1221 insertions(+)
 create mode 100644 Master/texmf-dist/bibtex/bst/economic/aer.bst

(limited to 'Master/texmf-dist/bibtex/bst/economic/aer.bst')

diff --git a/Master/texmf-dist/bibtex/bst/economic/aer.bst b/Master/texmf-dist/bibtex/bst/economic/aer.bst
new file mode 100644
index 00000000000..c267db6d54f
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/economic/aer.bst
@@ -0,0 +1,1221 @@
+% BibTeX bibliography style `aer' (American Economic Review)
+% this file is based on the `harvard' family of files
+        % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+        % Copyright (C) 1991, all rights reserved.
+        % Copying of this file is authorized only if either
+        % (1) you make absolutely no changes to your copy, including name, or
+        % (2) if you do make changes, you name it something other than
+        % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, abbrv.bst, agsm.bst,
+        % dcu.bst, cje.bst, aer.bst, or kluwer.bst.
+        % This restriction helps ensure that all standard styles are identical.
+
+% ACKNOWLEDGEMENT:
+%   This document is a modified version of alpha.bst to which it owes much of
+%   its functionality.
+
+% AUTHOR
+%   Peter Williams, Key Centre for Design Quality, Sydney University
+%   e-mail: peterw@archsci.arch.su.oz.au
+
+ENTRY
+  { address author booktitle chapter edition editor howpublished institution
+    journal key month note number organization pages publisher school
+    series title type volume year}
+  { field.used }
+  { label.touse extra.label sort.label list.year }
+
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   {}
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    {}
+  if$
+}
+
+INTEGERS {quoted italic bold plain attribute
+        space comma tiedcomma semicolon colon period block empty separator
+        prev.separator next.separator next.attribute}
+
+STRINGS { s temp f name.list first.name.format later.name.formats name.style}
+
+FUNCTION {init.state.consts}
+{
+  #100  'quoted :=
+  #200  'italic :=
+  #300  'bold   :=
+  #400  'plain  :=
+
+  #7 'space :=
+  #6 'comma :=
+%  #5 'tiedcomma :=
+%  #4 'semicolon :=
+  #3 'colon :=
+  #2 'period :=
+  #1 'block :=
+  #0 'empty :=
+}
+
+FUNCTION {output2}
+{
+% Wrap the attribute.
+    attribute bold = {"{\bf " swap$ * "}" *} {} if$
+    attribute italic = {"{\it " swap$ * "}" *} {} if$
+    attribute quoted = {"``" swap$ * "''" *} {} if$
+% Append additional separators
+    separator comma = {"," * space 'separator :=} {} if$
+%    separator tiedcomma = {",~" * empty 'separator :=} {} if$
+    separator space = {" " *} {} if$
+    write$
+    separator block = {newline$ "\newblock " write$} {} if$
+% Update variables, and put the new string back on the stack
+    next.attribute 'attribute :=
+    next.separator 'separator :=
+    temp
+}
+
+% <string> <separator> <string> <attribute> <final separator> output <string>
+FUNCTION {output.nonnull}
+{   'next.separator :=
+    'next.attribute :=
+    'temp :=
+    'prev.separator :=
+% If the new separator is stronger than the previous one, use it.
+    prev.separator separator < {prev.separator 'separator :=} {} if$
+% Append most separators to the string.
+    separator block = {add.period$} {} if$
+    separator period = {add.period$ space 'separator :=} {} if$
+%    separator semicolon = {";" * space 'separator :=} {} if$
+    separator colon = {":" * space 'separator :=} {} if$
+    separator comma = attribute quoted = and
+        {"," * space 'separator :=} {} if$
+    output2
+}
+
+FUNCTION {output}
+{   'next.separator :=
+    'next.attribute :=
+    duplicate$ empty$
+        {pop$ pop$}
+        {next.attribute next.separator output.nonnull}
+        if$
+}
+
+FUNCTION {output.check}
+{   's :=
+    'next.separator :=
+    'next.attribute :=
+    duplicate$ empty$
+        {pop$ pop$ "empty " s * " in " * cite$ * warning$ }
+        {next.attribute next.separator output.nonnull}
+        if$
+}
+
+FUNCTION {item.check}
+{ 'temp :=
+  empty$
+    { "empty " temp * " in " * cite$ * warning$ }
+    {}
+  if$
+}
+
+FUNCTION {plain.space} { plain space }
+
+FUNCTION {plain.space.output} { plain.space output }
+
+FUNCTION {plain.comma} { plain comma }
+
+FUNCTION {fin.entry}
+{ 
+  block note plain.space.output
+  period "" plain empty output.nonnull pop$
+  newline$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    {}
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+FUNCTION {quote}
+{ duplicate$ empty$
+    { pop$ "" }
+    { add.period$ "`" swap$ * "'" * }
+  if$
+}
+
+
+% <prev name list> <new name list> compare.names <modified name list>
+INTEGERS {len1 len2 i}
+FUNCTION {compare.names}
+{   's :=
+    'temp :=
+    temp num.names$ 'len1 :=
+    s num.names$ 'len2 :=
+% len1 := min(len1,len2)
+    len1 len2 > {len2 'len1 :=} {} if$
+% start with an empty string, then while the components are the same
+% add "\bysame"
+    ""
+    #1 'i :=
+    {i len1 > not}
+    { temp i "{ff }{vv }{ll}{ jj}" format.name$
+% duplicate$ i int.to.str$ * warning$
+      s i "{ff }{vv }{ll}{ jj}" format.name$
+% duplicate$ i int.to.str$ * warning$
+      =
+        { #1 i < {" and " *} {} if$
+          "\bysame{}" * i #1 + 'i :=}
+        {#-1 'len1 :=}
+        if$
+      }
+    while$
+% add the rest of the second string
+    {i len2 > not}
+    { #1 i < {" and " *} {} if$
+      s i "{ff }{vv }{ll}{ jj}" format.name$ *
+      i #1 + 'i :=
+      }
+    while$
+% duplicate$ warning$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 'name.list :=
+  'name.style :=
+  'later.name.formats :=
+  's := % binary separator
+  'first.name.format :=
+  #1 'nameptr :=
+  name.list num.names$ 'numnames :=
+% If we're to make this entry bold or something, prepend to the string of names
+  name.style "" = {} {"{" name.style *} if$
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { name.list nameptr nameptr #1 = {first.name.format} {later.name.formats} if$
+                format.name$ 'temp :=
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * temp * }
+            { temp "others" =
+                { " et~al." * }
+                {nameptr #2 =   % handle ", and" vs " and "
+                    {s * temp *}
+                    {", and " * temp * }
+                    if$
+                }
+                if$
+            }
+            if$
+        }
+        'temp
+        if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+% If we're to make this entry bold or something, append to the string of names
+  name.style "" = {} {"}" * *}  if$
+}
+
+FUNCTION {format.authors}
+{ 'temp :=
+    "{vv~}{ll}{, jj}{, ff}" " and " "{ff~}{vv~}{ll}{, jj}" "" temp
+                format.names
+}
+
+FUNCTION {format.editors}
+{ 'temp :=
+    "{vv~}{ll}{, jj}{, ff}" " and " "{ff~}{vv~}{ll}{, jj}" ""
+                temp format.names
+      editor num.names$ #1 >
+        { ", eds" * }
+        { ", ed." * }
+      if$
+}
+
+FUNCTION {format.editors.notkey}
+{ editor empty$
+    { "" }
+    { "{ff~}{vv~}{ll}{, jj}" " and " "{ff~}{vv~}{ll}{, jj}" ""
+                editor format.names
+      editor num.names$ #1 > {", eds."} {", ed."} if$
+      *
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ space title quoted comma }
+
+FUNCTION {n.dashify}
+{ 'temp :=
+  ""
+    { temp empty$ not }
+    { temp #1 #1 substring$ "-" =
+        { temp #1 #2 substring$ "--" = not
+            { "--" *
+              temp #2 global.max$ substring$ 'temp :=
+            }
+            {   { temp #1 #1 substring$ "-" = }
+                { "-" *
+                  temp #2 global.max$ substring$ 'temp :=
+                }
+              while$
+            }
+          if$
+        }
+        { temp #1 #1 substring$ *
+          temp #2 global.max$ substring$ 'temp :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+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.bvolume}
+{ volume empty$
+    { "" }
+    { "Vol." volume tie.or.space.connect
+      series empty$
+        {}
+        { " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+FUNCTION {format.bvolume.output}
+  {comma format.bvolume plain.space.output}
+
+FUNCTION {mid.sentence.q}
+{
+    separator empty = separator block = separator period = or or not
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        {series field.or.null}
+        { mid.sentence.q
+            { "number" }
+            { "Number" }
+          if$
+          number tie.or.space.connect
+          series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { add.period$ " In " * series quote * }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition.output}
+{ edition empty$
+    { }
+    { comma edition
+      mid.sentence.q { "l" } { "t" } if$
+      change.case$ " ed." *
+      plain.space.output
+    }
+  if$
+}
+
+FUNCTION {format.publisher.address}
+{
+    address empty$
+        {comma publisher plain.comma output}
+        {publisher empty$
+            {}
+            {comma address plain colon output
+             colon publisher plain.comma output}
+            if$}
+         if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 'temp :=
+  #0 'multiresult :=
+    { multiresult not
+      temp empty$ not
+      and
+    }
+    { temp #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { temp #2 global.max$ substring$ 'temp := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+        { "pp.~" pages n.dashify * }
+        { "p.~" pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.month.year}
+  {
+      space month plain.space.output
+      space year plain.comma "year" output.check
+  }
+
+FUNCTION {output.vol.num.pages}
+{ space volume italic space output
+  number empty$
+    {}
+    { space "(" number * ")" * plain.comma output.nonnull
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        {}
+      if$
+    }
+  if$
+% "*** a" warning$
+  comma 'next.separator :=      % hack
+  pages empty$
+    {}
+    { number empty$ volume empty$ and
+        { comma format.pages plain.space.output }
+        { comma pages n.dashify plain.space.output }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { "chapter" }
+        { type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+        {}
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.in.ed.booktitle}
+{ booktitle "booktitle" item.check
+  comma "in" plain.space output.nonnull
+  editor empty$
+    { space booktitle quoted space output.nonnull}
+    { space format.editors.notkey plain.space output.nonnull
+          comma booktitle italic comma output.nonnull
+     }
+     if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    {}
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    {}
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    {  }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "in {\it " journal * "\/} \cite{" * crossref * "}" *}
+      if$
+    }
+    { add.period$ "In \citeasnoun{" crossref * "}" * }
+  if$
+ 
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "in "
+    }
+    { "Vol." volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "{\it " * series * "\/} \cite{" * crossref * "}" *}
+          if$
+        }
+        { " \citeasnoun{" * crossref * "}" * }
+      if$
+    }
+    { " \citeasnoun{" * crossref * "}" * }
+  if$
+}
+
+FUNCTION {output.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+            }
+            { period "In {\it " booktitle * "\/}" * " \cite{" * crossref * "}" * plain.space output.nonnull}
+          if$
+        }
+        { period "In \citeasnoun{" crossref * "}" * plain.space output.nonnull}
+      if$
+    }
+    { period "In \citeasnoun{" crossref * "}" * plain.space output.nonnull}
+  if$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { author.field editor.field organization.field title.field key.field }
+
+FUNCTION {init.field.constants}
+{ #0 'author.field :=
+  #1 'editor.field :=
+  #2 'organization.field :=
+  #3 'title.field :=
+  #4 'key.field :=
+}
+
+FUNCTION {format.lab.names.abbr}
+{ 'name.list :=
+  name.list num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #2 >
+        { name.list #1 "{vv~}{ll}" format.name$ " et al." * }
+        { name.list #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { name.list #1 "{vv~}{ll}" format.name$ " et al." * }
+            { name.list #1 "{vv~}{ll}" format.name$ " and " *
+              name.list #2 "{vv~}{ll}" format.name$ * 
+            }
+          if$
+        }
+      if$
+      field.used editor.field = {", eds" *} {} if$
+    }
+    {
+        name.list #1 "{vv~}{ll}" format.name$
+        field.used editor.field = {", ed" *} {} if$
+    }
+  if$
+}
+
+FUNCTION {format.lab.names.full}
+{ 'name.list :=
+  #1 'nameptr :=
+  name.list num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { name.list nameptr "{vv~}{ll}" format.name$ 'temp :=
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * temp * }
+            { temp "others" =
+                { " et~al." * }
+                { " and " * temp * }
+              if$
+            }
+          if$
+        }
+        'temp
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  numnames #1 > field.used editor.field = and {", eds" *} {} if$
+  numnames #1 = field.used editor.field = and {", ed" *} {} if$
+}
+
+STRINGS { prev.author }
+
+FUNCTION {make.list.label}
+{author.field field.used =
+    { prev.author author compare.names format.authors
+         author 'prev.author :=}
+    { editor.field field.used =
+        { prev.author editor compare.names format.editors
+                editor 'prev.author := }
+        { organization.field field.used =
+            { "The " #4 organization chop.word
+                duplicate$ prev.author = {pop$ "\bysame{}"}
+                                         {duplicate$ 'prev.author :=} if$}
+            { "foo" 'prev.author :=
+              title.field field.used =
+                { format.btitle }
+                { key.field field.used =
+                    { key #3 text.prefix$ }
+                    { "Internal error :001 on " cite$ * " label" * warning$ }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {make.full.label}
+{ author.field field.used =
+    { author format.lab.names.full }
+    { editor.field field.used =
+        { editor format.lab.names.full }
+        { organization.field field.used =
+            { "The " #4 organization chop.word #3 text.prefix$ }
+            { title.field field.used =
+                { format.btitle }
+                { key.field field.used =
+                    { key #3 text.prefix$ }
+                    { "Internal error :001 on " cite$ * " label" * warning$ }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {make.abbr.label}
+{ author.field field.used =
+    { author format.lab.names.abbr }
+    { editor.field field.used =
+        { editor format.lab.names.abbr }
+        { organization.field field.used =
+            { "The " #4 organization chop.word #3 text.prefix$ }
+            { title.field field.used =
+                { format.btitle }
+                { key.field field.used =
+                    { key #3 text.prefix$ }
+                    { "Internal error :001 on " cite$ * " label" * warning$ }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\harvarditem[" write$
+  make.abbr.label write$
+  "]{" write$
+  make.full.label write$
+  "}{" write$
+  list.year write$
+  "}{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  empty 'separator :=
+  plain 'attribute :=
+% }
+%
+%  FUNCTION {list.label.output}
+% {
+  space make.list.label bold comma output.nonnull
+  }
+
+FUNCTION {author.item.check} {author "author" item.check}
+
+FUNCTION {format.title.if.not.sortkey.check}
+{title.field field.used =
+    {}
+    { format.title "title" output.check }
+  if$}
+
+FUNCTION {article}
+{ output.bibitem
+  author.item.check
+  format.title.if.not.sortkey.check
+  crossref missing$
+    { space journal italic comma "journal" output.check
+      output.month.year
+      output.vol.num.pages
+    }
+    { space format.article.crossref plain.space output.nonnull
+      comma format.pages plain.space.output
+    }
+  if$
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+    author empty$
+    { editor "author and editor" item.check }
+    { crossref missing$
+        { "author and editor" editor either.or.check }
+        {}
+      if$
+    }
+  if$
+  title.field field.used =
+    {}
+    { space title italic space "title" output.check }
+  if$
+  crossref missing$
+    { 
+      space format.number.series plain.space.output
+      format.edition.output
+      format.bvolume.output
+      format.publisher.address
+      output.month.year
+    }
+    { space format.book.crossref plain.space output.nonnull
+      format.edition.output
+    }
+  if$
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.title.if.not.sortkey.check
+  space howpublished plain.space.output
+  space address plain.space.output
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+    author empty$
+    { editor "author and editor" item.check }
+    { crossref missing$
+        { "author and editor" editor either.or.check }
+        {}
+      if$
+    }
+  if$
+  title.field field.used =
+    {}
+    { space title italic space "title" output.check }
+  if$
+  crossref missing$
+    { space format.number.series plain.space.output
+      format.edition.output
+      comma format.bvolume plain.comma output
+      format.publisher.address
+      output.month.year
+    }
+    { space format.book.crossref plain.space output.nonnull
+      format.edition.output
+    }
+  if$
+  format.chapter.pages "chapter and pages" output.check
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.title.if.not.sortkey.check
+  author.item.check
+  crossref missing$
+    { output.in.ed.booktitle
+      format.edition.output
+      format.bvolume.output
+      space format.number.series plain.space.output
+      format.publisher.address
+      output.month.year
+    }
+    { output.incoll.inproc.crossref }
+  if$
+  space format.chapter.pages plain.space.output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.title.if.not.sortkey.check
+  author.item.check
+  crossref missing$
+    { output.in.ed.booktitle
+      format.bvolume.output
+      space format.number.series plain.space.output
+      address empty$
+        { space organization plain.space.output
+          space publisher plain.space.output
+        }
+        { space organization plain.space.output
+          space publisher plain.space.output
+          space address plain.space output.nonnull
+        }
+      if$
+      output.month.year
+    }
+    { output.incoll.inproc.crossref}
+  if$
+  space format.pages plain.space.output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+    title.field field.used =
+    {}
+    {author empty$ {comma}{space} if$ title italic space "title" output.check }
+  if$
+  organization.field field.used = organization empty$ or
+        {} {space organization plain.space output.nonnull} if$
+  format.edition.output
+  format.publisher.address
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  author.item.check
+  format.title.if.not.sortkey.check
+  space "Master's thesis" format.thesis.type plain.space output.nonnull
+  comma school plain.space "school" output.check
+  comma address plain.space.output
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.title.if.not.sortkey.check
+  space howpublished plain.space.output
+  output.month.year
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+    author.item.check
+  title.field field.used =
+    {}
+    { space title quoted period "title" output.check }
+  if$
+  space "PhD dissertation" format.thesis.type plain.space output.nonnull
+  comma school plain.space "school" output.check
+  comma address plain.space.output
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+    title.field field.used =
+    {}
+    { space title italic space "title" output.check }
+  if$
+  format.bvolume.output
+  space format.number.series plain.space.output
+  address empty$
+    { editor empty$
+        {}
+        { space organization plain.space.output
+        }
+      if$
+      space publisher plain.space.output
+    }
+    { editor empty$
+        {}
+        { space organization plain.space.output }
+      if$
+      space publisher plain.space.output
+      space address plain.space output.nonnull
+    }
+  if$
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  author.item.check
+  format.title.if.not.sortkey.check
+  space format.tr.number plain.space output.nonnull
+  institution empty$
+    {}
+    { comma institution plain.space "institution" output.check }
+    if$
+  comma address plain.space.output
+  output.month.year
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+    author.item.check
+  format.title.if.not.sortkey.check
+  output.month.year
+  note "note" item.check
+  fin.entry
+}
+
+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"}
+
+READ
+
+EXECUTE {init.field.constants}
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { title empty$
+            { key.field 'field.used := }
+            { title.field 'field.used := }
+          if$
+        }
+        { editor.field 'field.used := }
+      if$
+    }
+    { author.field 'field.used := }
+  if$
+}
+
+FUNCTION {key.organization.label}
+ {organization empty$
+        { title empty$
+            { key.field 'field.used := }
+            { title.field 'field.used := }
+          if$
+        }
+        { organization.field 'field.used := }
+        if$}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key.organization.label}
+    { author.field 'field.used := }
+    if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key.organization.label}
+    { editor.field 'field.used := }
+  if$
+}
+
+FUNCTION {sort.format.title}
+{ 'temp :=
+  "A " #2
+    "An " #3
+      "The " #4 temp chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+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.editor.key.label    % don't really use .editor.
+          if$
+        }
+      if$
+    }
+  if$
+  make.abbr.label
+  title.field field.used =
+    { sort.format.title }
+    { sortify }
+  if$
+  year field.or.null purify$ #-1 #4 substring$ sortify
+  *
+  'sort.label :=
+}
+
+FUNCTION {first.presort}
+{ "abcxyz" 'prev.author :=
+  calc.label
+  sort.label
+  title.field field.used =
+    {}
+    { "    "
+      *
+      make.list.label sortify
+      *
+      "    "
+      *
+      title field.or.null
+      sort.format.title
+      *
+    }
+  if$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+
+ITERATE {first.presort}
+
+SORT
+
+STRINGS { last.sort.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.last.extra.num}
+{ #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #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 {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    {}
+  if$
+  year empty$
+    { "n.d." extra.label * 'list.year := }
+    { year extra.label * 'list.year := }
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.last.extra.num}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {second.presort}
+{ "abcxyz" 'prev.author :=
+  make.list.label
+  title.field field.used =
+    { sort.format.title }
+    { sortify }
+  if$
+  "    "
+  *
+  list.year field.or.null sortify
+  *
+  "    "
+  *
+  title.field field.used =
+    {}
+    { title field.or.null
+      sort.format.title
+      *
+    }
+  if$
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {second.presort}
+
+SORT
+
+
+INTEGERS { number.label }
+
+FUNCTION {initialize.longest.label}
+{
+  #1 'number.label :=
+  "abcxyz" 'prev.author :=
+}
+
+FUNCTION {longest.label.pass}
+{ 
+    "" 'extra.label :=
+    author empty$ { editor empty$ {"foo"} {editor} if$}
+                  {author}
+                   if$
+    'f :=
+% remember this entry to compare to the next one
+    author empty$ { editor empty$ {"abcxyz"} {editor} if$} {author} if$
+        'prev.author := 
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    {}
+    { preamble$ write$ newline$ }
+  if$
+  "\ifx\undefined\bysame" write$ newline$
+  "\newcommand{\bysame}{\leavevmode\hbox to\leftmargin{\hrulefill\,\,}}"
+       write$ newline$
+  "\fi" write$ newline$
+  "\begin{thebibliography}{xx}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+FUNCTION {init.call}
+ { "abcxyz" 'prev.author := }
+
+EXECUTE {init.call}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+        {newline$ "\end{thebibliography}" write$ newline$ }
+
+EXECUTE {end.bib}
+
-- 
cgit v1.2.3

