summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/bibl-tra.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/bibl-tra.mkxl')
-rw-r--r--tex/context/base/mkiv/bibl-tra.mkxl1509
1 files changed, 0 insertions, 1509 deletions
diff --git a/tex/context/base/mkiv/bibl-tra.mkxl b/tex/context/base/mkiv/bibl-tra.mkxl
deleted file mode 100644
index c85a664ba..000000000
--- a/tex/context/base/mkiv/bibl-tra.mkxl
+++ /dev/null
@@ -1,1509 +0,0 @@
-%D \module
-%D [ file=bibl-tra,
-%D version=2009.08.22,
-%D title=\CONTEXT\ Publication Module,
-%D subtitle=Publications,
-%D author=Taco Hoekwater,
-%D date=\currentdate,
-%D copyright={Public Domain}]
-%C
-%C Donated to the public domain.
-
-%D This is really obsolete in \LMTX. For now I keep it but it will either go
-%D away. The code is not upgraded, we only deal with macro protection.
-
-% % % % watch out ... bibl-tra-new.mkiv is work in progress % % % %
-
-% % % % mlbibtex also supports context and we can run that instead of bibtex % % % %
-
-%D This module has been adapted to \MKIV\ by Hans Hagen so if things go wrong, he is
-%D to blame. The changes concern references and lists but teh rendering itself is
-%D unchanged. Future versions might provide variants as we have plans for an
-%D upgrade.
-%D
-%D We use a still somewhat experimental extension to the list mechanism. Eventually
-%D the bibtex module will use the bibl loader and access the data by means of lpath
-%D expressions. In that case we don't need to process the bibliography but still
-%D need to track usage as done here.
-%D
-%D A bit ongoing: make more local macros prefixed with bib, i.e. the bib namespace
-%D is reserved.
-
-%D Todo: commandhandler
-
-\writestatus{loading}{ConTeXt Bibliography Support / BibTeX}
-
-\definefilesynonym[bib][obsolete]
-
-\registerctxluafile{bibl-tra}{}
-
-%D The original was developed independantly by Taco Hoekwater while still working
-%D for Kluwer Academic publishers (it still used the dutch interface then).
-%D Development continued after he left Kluwer, and in Januari 2005, the then already
-%D internationalized file was merged with the core distribution by Hans Hagen. The
-%D current version is once again by Taco.
-%D
-%D More documentation and additional resources can be found on the contextgarden:
-%D \hyphenatedurl {http://wiki.contextgarden.net//Bibliography}.
-
-%D \subject{DONE (dd/mm/yyyy)}
-%D
-%D \startitemize
-%D \item add author definition (and associated system variable) (26/05/2005)
-%D \item add finalnamesep support for Oxford comma (17/09/2005)
-%D \item add \type{\insert...} for: doi, eprint, howpublished (19/09/2005)
-%D \item allow a defaulted \type{\setupcite} (19/11/2005)
-%D \item renamed citation type 'number' to 'serial' (19/11/2005)
-%D \item better definition of \type{\inverted...author} (19/11/2005)
-%D \item don't reset [numbercommand] in \type {\setuppublication} by default (20/11/2005)
-%D \item don't disable other \type {\setuppublication} keys if alternative is present (20/11/2005)
-%D \item drop \type{\sanitizeaccents} (20/11/2005)
-%D \item added \type{\nocite} and \type{\cite[none]} (21/11/2005)
-%D \item added headtext for it (23/11/2005)
-%D \item make \type{\cite[url]} and \type{\cite[doi]} interactive (23/11/2005)
-%D \item make right-aligned labels in the list work even when autohang=no
-%D \item use 'et al.' instead of 'et.al.'. Pointed out by Peter M\"unster (30/12/2005)
-%D \item added headtext for cz (31/12/2005)
-%D \item Keep whitespace after \type{\cite} with single argument (31/12/2005)
-%D \item Fix broken \type{\cite{}} support (31/12/2005)
-%D \item Use \type{\readfile} inside \type{\usepublications} instead of \type{\readsysfile} (12/01/2006)
-%D \item Use \type{\currentbibyear} and \type{\currentbibauthor} instead of \type{\YR} and \type{\AU} (05/02/2006)
-%D \item Fix compressed version of authoryear style (05/02/2006)
-%D \item Rename the clashing data fields \type{\url} and \type{\type} to \type{\biburl} and \type{\bibtype} (05/02/2006)
-%D \item Added two french bibl files from Renaud Aubin (06/02/2006)
-%D \item Five new bib class and eight extra bib fields, for IEEEtran (07/02/2006)
-%D \item French keyword translation, provided by Renaud (08/02/2006)
-%D \item fix underscores in undefined keys (22/02/2006)
-%D \item Destroy interactivity in labels of the publication list (13/03/2006)
-%D \item fix multi-cite list compression (11/4/2006)
-%D \item fix \type{\getcitedata} (11/4/2006)
-%D \item magic for chapter bibs (18-25/4/2006)
-%D \item language setting (25/4/2006)
-%D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006)
-%D \item Add \type{\docitation} to \type{\nocite}(26/4/2006)
-%D \item patents can have numbers, added to bst files (26/4/2006)
-%D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006)
-%D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006)
-%D \item \type{\setuppublications[monthconversion=]} added (15/5/2006)
-%D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006)
-%D \item add grouping around \type{\placepublications} commands (16/5/2006)
-%D \item fix a bug in \type{\cite{<item>}} (17/5/2006)
-%D \item support \type{\cite[authornum]} (18/5/2006)
-%D \item make \type{\cite} unexpandable (20/6/2006)
-%D \item allow hyperlinks in author\&year combo's
-%D (cite list compression has to be off) (20/6/2006)
-%D \item fix duplicate labels for per-chapter style (20/6/2006)
-%D \item allow \type{\setupcite[interaction=(start|stop)]}
-%D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006)
-%D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006)
-%D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006)
-%D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006)
-%D \item add \type{symbol=none} to \type{\setuplist} in unnumbered
-%D mode to prevent typesetting of bare numbers (29/6/2006)
-%D \item remove two incorrect spaces from bibl-num.tex (1/7/2006)
-%D \item reset font styles within \type{\cite}, so that font switches
-%D in \type{left} stay in effect (12/7/2006)
-%D \item guard added against loading bbl files multiple times (13/7/2006)
-%D \item fix \type{\cite[num]} with compression is on. (14/7/2006)
-%D \item test \type{\iflocation} before deciding to use the
-%D interactive version of cite (18/7/2006)
-%D \item support \type{\setupcite[authoretallimit=1]} (18/7/2006)
-%D \item support use of \type{\cite} within titles and captions by
-%D saveguarding the list item extraction and reference placement
-%D code (19/7/2006)
-%D \item support \type{\setuppublicationlist[title=\chapter]} (4/8/2006)
-%D \item use the expansion of \type{\headtext{pubs}} (4/8/2006)
-%D \item hook added for repeated authors in publication list
-%D \type{\setuppublicationlist[artauthorcommand=\mythreeargscommand]}
-%D (4/8/2006)
-%D \item make the bracketed arguments of \type{\artauthor}, \type{\author}
-%D and \type{\editor} (bbl commands) optional (4/8/2006)
-%D \item the constants \type{sorttype}, \type{compress} and
-%D \type{autohang} have moved to the core (8/8/2006)
-%D \item bibtex is now registered as a program to be run by texexec (8/8/2006)
-%D \item fix a bug in \type{\setupcite[authoretallimit=1]} (9/8/2006)
-%D \item fix a bug inside citations that prevented lastpubsep from ever being
-%D used due to a volatile \type{\commalistsize} (25/8/2006).
-%D \item added the possibility of \type{\placepublications[option=continue]}
-%D (6/9/2006)
-%D \item Mojca translated Master's Thesis to Masterarbeit (bibl-apa-de.tex)
-%D (12/9/2006)
-%D \item Added \type{\setuppublicationlist[maybeyear=off]} by request from
-%D Thomas Schmitz (15/9/2006)
-%D \item Removed some spurious spaces pointed out by willi egger (19/9/2006)
-%D \item Add configuration of bibtex executable name (4/11/2006)
-%D \item Fix numbering=short and numbering=bib (spotted by Matthias W\"achter) (4/11/2006)
-%D \item third attempt to get a correct release (5/11/2006)
-%D \item fix a few missing dots in bibl-num.tex (7/12/2006)
-%D \item Patch for DOI's by Tobias Burnus (17/4/2007)
-%D \item Patch for \type{\insertbiburl} and \type{\insertdoi} for Tobias Burnus (18/4/2007)
-%D \item Added a missing \type{\relax} in \type{\dospecialbibinsert},
-%D that made the space before the {\it et al.} text disappear. (18/4/2007)
-%D \item Attempt to fix percent signs in bbl files. As a side-effect,
-%D this prohibits comments in \tex{startpublication} blocks! (17/4/2008)
-%D \item Patch from Matthias W\"achter that allows arbitrary .bst
-%D files to be used with \tex{setupbibtex} (25/9/2008)
-%D \item Extended for the new multilingual setups for the Oct 2008 current of ConTeXt (23/10/2008)
-%D \item Multilingual setups needed another fix (27/10/2008)
-%D \item Two fixes for bibl-apa by Michael Green (27/10/2008)
-%D \item Catalan translation of 'References' (10/11/2008)
-%D \item 'chapter' -> 'chapitre' in bibl-apa-fr (27/11/2008)
-%D \item Run bibtex via os.execute in mkiv modee (01/12/2008)
-%D \item Small correction in bibl-apa's placement of volume
-%D information in articles (05/01/2009)
-%D \item Handle multi-author (more than two) cases in \type{\cite}
-%D (02/03/2009)
-%D \item Suppress a syntax error in \type{cont-xp} mode. The output is
-%D probably not right, though (02/03/2009)
-%D \item Added a \tex{loadmarkfile} at the end, and two new files
-%D from Hans. The \type{t-bib.mkiv} is needed to make the module
-%D work with the new structure code (17/04/2009)
-%D \item Added a patch to \type{t-bib.mkiv} from Hans to make the
-%D cross referencing between multiple citations an
-%D bibliographies work (27/04/2009)
-%D \item Remove a superfluous \type{\unprotect} in t-bib.mkiv (11/05/2009).
-%D \item Patch of incollection in bibl-ams.tex from Xan (08/06/2009).
-%D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009).
-%D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined
-%D language labels, from Hans (13/08/2009).
-%D \item Adapt referencing and list insertion to \MKIV. Update some code
-%D to the latest \CONTEXT. Change some names in order to avoid conflicts
-%D with existing core names (like \type {\insertpages}).
-%D \item All constants, variables, message etc.\ are now in the core.
-%D \item Added key: \type {method} (when \type {global}, previous shown entries are
-%D not shown again, when \type {local} they are repeated).
-%D \stopitemize
-%D
-%D \subject{WISHLIST}
-%D
-%D \startitemize
-%D \item link back from publication list to citation
-%D \item export \type {\citation{<cited item>}}
-%D \item support mlbibtex
-%D \item don't load the whole lot, but filter entries instead
-%D \item 9 vs 10, 19 vs 20 ... prevent extra runs when only subtle changes in wd of reference
-%D \stopitemize
-
-\unprotect
-
-\def\biblistname{pubs} % for compatibility
-
-\definelist
- [pubs]
-
-\setuplist
- [pubs]
- [\c!state=\v!start,
- \c!criterium=\@@pbcriterium,
- \c!headnumber=\v!always, % needed as we provide our own and need to force
- \c!width=]
-
-\installstructurelistprocessor{pubs:userdata}%
- {\ctxlua{bibtex.hacks.add(structures.lists.uservalue("\currentlist",\currentlistindex,"bibref"),\currentlistindex)}}
-
-\ifdefined\bibtexblock \else \newcount\bibtexblock \fi \bibtexblock\plusone
-\ifdefined\bibtexcounter \else \newcount\bibtexcounter \fi
-
-%D \macros{bibdoif,bibdoifnot,bibdoifelse}
-%D
-%D Here are a few small helpers that are used a lot in all the typesetting commands
-%D (\type{\bibinsert...}) we will encounter later.
-
-\protected\def\bibdoifelse#1%
- {\expandafter\def\expandafter\!!stringa\expandafter{#1}%
- \ifx\!!stringa\empty
- \expandafter\secondoftwoarguments
- \else
- \expandafter\firstoftwoarguments
- \fi}
-
-\protected\def\bibdoifnot#1%
- {\expandafter\def\expandafter\!!stringa\expandafter{#1}%
- \ifx\!!stringa\empty
- \expandafter\firstofoneargument
- \else
- \expandafter\gobbleoneargument
- \fi}
-
-\protected\def\bibdoif#1%
- {\expandafter\def\expandafter\!!stringa\expandafter{#1}%
- \ifx\!!stringa\empty
- \expandafter\gobbleoneargument
- \else
- \expandafter\firstofoneargument
- \fi}
-
-%D Unfortunately, \BIBTEX\ is not the best configurable program around. The names of
-%D the commands it parses as well as the \type {.aux} extension to the file name are
-%D both hardwired.
-%D
-%D This means \CONTEXT\ has to write a \LATEX-style auxiliary file, yuk! The good
-%D news is that it can be rather short. We'll just ask \BIBTEX\ to output the entire
-%D database(s) into the \type {bbl} file.
-%D
-%D The \type {\bibstyle} command controls how the \type {bbl} file will be sorted.
-%D The possibilities are:
-%D
-%D \startitemize[packed]
-%D \item by author (+year, title): cont-au.bst
-%D \item by title (+author, year): cont-ti.bst
-%D \item by short key as in abbrev.bst: cont-ab.bst
-%D \item not sorted at all: cont-no.bst
-%D \stopitemize
-
-\newtoks\everysetupbibtex
-
-\protected\def\setupbibtex
- {\dosingleempty\dosetupbibtex}
-
-\protected\def\dosetupbibtex[#1]%
- {\let\@@pbdatabase\empty
- \getparameters[\??pb][#1]%
- \the\everysetupbibtex}
-
-\protected\def\installbibtexsorter#1#2%
- {\setvalue{\??pb:\c!sort:#1}{#2}}
-
-\installbibtexsorter\v!no {no}
-\installbibtexsorter\v!author {au}
-\installbibtexsorter\v!title {ti}
-\installbibtexsorter\v!short {ab}
-\installbibtexsorter\empty {no}
-\installbibtexsorter\s!default{no}
-
-\def\thebibtexsorter{\executeifdefined{\??pb:\c!sort:\@@pbsort}\@@pbsort}
-
-\appendtoks
- \ifx\@@pbdatabase\empty\else
- \doifmode{*\v!first}{\ctxlua{bibtex.hacks.process { style="\thebibtexsorter", database="\@@pbdatabase" }}}%
- \fi
-\to \everysetupbibtex
-
-\setupbibtex
- [\c!sorttype=\v!cite,
- \c!sort=no]
-
-%D \macros{iftypesetall,ifbibcitecompress}
-%D
-%D The module needs some new \type{\if} statements.
-
-\newtoks\everysetuppublications
-
-\protected\def\setuppublications
- {\dosingleargument\dosetuppublications}
-
-\protected\def\dosetuppublications[#1]%
- {\getparameters[\??pb][\c!alternative=,#1]%
- \doifsomething\@@pbalternative
- {\readsysfile{bibl-\@@pbalternative.tex}
- {\showmessage\m!publications{6}{bibl-\@@pbalternative}}
- {\showmessage\m!publications{1}{bibl-\@@pbalternative}}%
- \let\@@pbalternative\empty}%
- \let\setuppublicationlayout\normalsetuppublicationlayout % overloaded in bibl-num ... vadjust needs to be done with option
- \getparameters[\??pb][#1]% as bibl-* can have set things back
- \the\everysetuppublications
- \ignorespaces}
-
-%D We can omit already shown references (\v!global) or use fresh lists each time
-%D (\v!local).
-
-\setnewconstant\bibtexoncemode\plusone % 0=disable, 1=local, 2=global
-
-\appendtoks
- \doifelse\@@pbmethod\v!local
- {\bibtexoncemode\plusone}%
- {\bibtexoncemode\plustwo}%
-\to \everysetuppublications
-
-%D Cite lists are compressed, if possible. This is set later on.
-
-\newif\ifbibcitecompress\bibcitecompresstrue
-
-\def\@@pbinumbercommand{\executeifdefined{\??pb:\c!numbercommand:\@@pbnumbering}\firstofoneargument}
-
-\setvalue{\??pb:\c!numbercommand:\v!yes }#1{#1}%
-\setvalue{\??pb:\c!numbercommand:\v!no }#1{}
-\setvalue{\??pb:\c!numbercommand:\v!short}#1{\bibgetvars\currentpublicationkey}
-\setvalue{\??pb:\c!numbercommand:\v!bib }#1{\bibgetvarn\currentpublicationkey}
-
-% to be tested
-%
-% \setvalue{\??pb:\c!numbercommand:\v!short}{\bibgetvars\currentpublicationkey\firstofoneargument}
-% \setvalue{\??pb:\c!numbercommand:\v!bib }{\bibgetvarn\currentpublicationkey\firstofoneargument}
-
-\appendtoks
- \processaction
- [\@@pbrefcommand]
- [\s!default=>\edef\@@citedefault{\@@pbrefcommand},
- \s!unknown=>\edef\@@citedefault{\@@pbrefcommand}]%
-\to \everysetuppublications
-
-\protected\def\bibleftnumber#1{#1\hfill~}
-
-%D \macros{usepublications}
-%D
-%D After discussing it with Thomas Schmitz it became clear that using external
-%D references makes no sense as one needs to refer to it in special ways and because
-%D similar numbers can be confusing. So, for the moment this is not supported in
-%D \MKIV. (So no: see reference [3-5,9] in "some other document")
-
-\protected\def\usepublications[#1]%
- {\processcommalist[#1]\dousepublications}
-
-\protected\def\dousepublications#1%
- {\doonlyonce{#1.\f!bibextension}{\dodousepublications{#1}}}
-
-\protected\def\dodousepublications#1% brr, this par stuff
- {\let\@@savedpar\par
- \let\par\ignorespaces
- \ifhmode\kern\zeropoint\fi
- \pushcatcodetable
- \setcatcodetable\ctxcatcodes
- \readfile{#1.\f!bibextension}
- {\showmessage\m!publications{4}{#1.\f!bibextension}}
- {\showmessage\m!publications{2}{#1.\f!bibextension}}%
- \popcatcodetable
- \ifhmode\removeunwantedspaces\fi
- \let\par\@@savedpar}
-
-%D \macros{setuppublicationlist}
-%D
-%D This will be the first command in (\BIBTEX-generated) \type {bbl} files. \quote
-%D {samplesize} is a sample value (in case of \BIBTEX|-|generated files, this will
-%D be the longest \quote {short} key). Here \quote {totalnumber} is the total number
-%D of entries that will follow in this file.
-%D
-%D Both values are only needed for the label calculation if \quote {autohang} is
-%D \quote {true}, so by default the command is not even needed, and therefore I saw
-%D no need to give it it's own system variable and it just re-uses \type {pb}.
-
-\def\publicationlistparameter#1{\csname\??pv:l:#1\endcsname}
-
-\protected\def\setuppublicationlist
- {\dosingleempty\dosetuppublicationlist}
-
-\protected\def\dosetuppublicationlist[#1]%
- {\getparameters[\??pv:l:][#1]%
- \setuplist[pubs][\c!samplesize={AA99},\c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1,\c!command=]}
-
-\protected\def\setuppublicationlayout[#1]#2%
- {\setvalue{\??pv:l:#1}{#2}}
-
-\let\normalsetuppublicationlayout\setuppublicationlayout
-
-\setuppublicationlist
- [\c!title=,
- \c!command=\dospecialbibinsert,
- \c!maybeyear=\v!on]
-
-%D \macros{bibalternative}
-%D
-%D A nice little shorthand that will be used so we don't have to key in the weird
-%D \type {\@@pv} parameter names all the time.
-
-\def\bibalternative#1%
- {\csname\??pv\@@currentalternative#1\endcsname}
-
-%D \macros{simplebibdef,bibcommandlist}
-%D
-%D \type {\simplebibdef} defines \type {bib@#1}, which in turn will use one argument
-%D that is stored in \type {@@pb@#1}.
-%D
-%D \type {\simplebibdef} also defines \type {bibinsert#1}, which can be used in the
-%D argument of \type {\setuppublicationlayout} to fetch one of the \type {@@pb@}
-%D data entries. \type {bibinsert#1} then has three arguments: \type {#1} are
-%D commands to be executed before the data, \type {#2} are commands to be executed
-%D after the data, and \type {#3} are commands to be executed if the data is not
-%D found.
-%D
-%D \type {\bibcommandlist} is the list of commands that is affected by this
-%D approach. Later on, it will be used to do a series of assignments from \type {#1}
-%D to \type {bib@#1}: e.g \type {\title} becomes \type {\bib@title} when used within
-%D a publication.
-
-\newtoks\initializebibdefinitions % we need to prevent clashes
-
-\protected\def\simplebibdef#1% hh: funny expansion ?
- {\expandafter\def\csname bib@#1\endcsname##1%
- {\setvalue{\??pb @#1}{##1}\ignorespaces}%
- \expandafter \appendtoks
- \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname
- \to \initializebibdefinitions
- \expandafter\protected\expandafter\def\csname bibinsert#1\endcsname##1##2##3%
- {\expandafter\bibdoifelse\expandafter{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}}
-
-\def\bibcommandlist
- {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city,
- comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn,
- issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality,
- note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey,
- title, volume, yearfiled}
-
-\processcommacommand[\bibcommandlist]\simplebibdef
-
-\protected\def\bibinsertdoi#1#2#3% let's see how this fails
- {\bibdoifelse{\@@pb@doi}{#1\expanded{\bibgotoDOI{\@@pb@thekey}{\@@pb@doi}}#2}{#3}}
-
-\protected\def\bibinsertbiburl#1#2#3% let's see how this fails
- {\bibdoifelse{\@@pb@biburl}{#1\expanded{\bibgotoURL{\@@pb@thekey}{\@@pb@biburl}}#2}{#3}}
-
-\protected\def\bibinsertmonth#1#2#3%
- {\bibdoifelse\@@pb@month
- {#1\doifelsenumber\@@pb@month
- {\doifelseconversiondefined\@@pbmonthconversion
- {\convertnumber\@@pbmonthconversion\@@pb@month}{\@@pb@month}}%
- {\@@pb@month}#2}%
- {#3}}
-
-\appendtoks
- \let\inserturl \bibinsertbiburl % for backward compat.
- \let\inserttype\bibinsertbibtype % for backward compat.
-\to\initializebibdefinitions
-
-\protected\def\newbibfield[#1]%
- {\simplebibdef{#1}%
- \edef\bibcommandlist{\bibcommandlist,#1}}
-
-%D \macros{complexbibdef,specialbibinsert}
-%D
-%D The commands \type {\artauthor}, \type {\author} and \type {\editor} are more
-%D complex than the other commands. Their argument lists have this form:
-%D
-%D \type{\author[junior]{firstnames}[inits]{von}{surname}}
-%D
-%D (bracketed stuff is optional)
-%D
-%D And not only that, but there also might be more than one of each of these
-%D commands. This is why a special command is needed to insert them, as well as one
-%D extra counter for each command.
-
-% todo: instead of \getvalue {bla@num} in specs we should do \bibentrynum {bla} so
-% that we can create a better namespace
-
-%D All of these \type {\expandafter}'s and \type {\csnames} make this code look far
-%D more complex than it really is. For example, the argument \type {author} defines
-%D the macro \type {\bib@author} to do two things: increment the counter \type
-%D {\author@num} (let's say to 2) and next store it's arguments in the macro \type
-%D {\@@pb@author2}. And it defines \type {\bibinsertauthors} to expand into
-%D
-%D \starttyping
-%D \specialbibinsert{author}{\author@num}{<before>}{<after>}{<not>}
-%D \stoptyping
-
-\protected\def\docomplexbibdef#1%
- {\dodoubleempty\dodocomplexbibdef[#1]}
-
-\protected\def\dodocomplexbibdef[#1][#2]#3%
- {\doquadrupleempty\dododocomplexbibdef[#1][#2][#3]}
-
-\protected\def\dododocomplexbibdef[#1][#2][#3][#4]#5#6%
- {\expandafter\increment\csname#1@num\endcsname % todo: bib in name
- \setevalue{\??pb @#1\csname#1@num\endcsname}{{#3}{#5}{#6}{#4}{#2}}\ignorespaces}
-
-\protected\def\complexbibdef#1%
- {\expandafter\newcounter\csname #1@num\endcsname
- \expandafter\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
- \expandafter \appendtoks
- \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname
- \to \initializebibdefinitions
- \expandafter\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}}
-
-\processcommalist[author,artauthor,editor]\complexbibdef
-
-%D Another level of indirection is needed to control the typesetting of all of these
-%D arguments.
-
-\newcount\etallimitcounter
-\newcount\etaldisplaycounter
-\newcount\todocounter
-
-\protected\def\specialbibinsert#1#2#3#4#5%
- {\bgroup
- \ifnum#2>\zerocount
- \etallimitcounter =0\bibalternative{#1etallimit}\relax
- \etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax
- \ifnum #2>\etallimitcounter
- \todocounter\etaldisplaycounter
- % just in case ...
- \ifnum\todocounter>\etallimitcounter
- \todocounter\etallimitcounter
- \fi
- \else
- \todocounter#2\relax
- \fi
- \ifnum\todocounter>\zerocount
- % find the current author list
- \let\templist\empty
- \dorecurse{#2}
- {\scratchtoks\doubleexpandafter{\csname\??pb @#1\recurselevel\endcsname}%
- \edef\templist{\ifx\templist\empty\else\templist,\fi\the\scratchtoks}}%
- #3\publicationlistparameter\c!command{#1}{\todocounter}{\templist}#4\relax
- \else
- #5%
- \fi
- \else
- #5%
- \fi
- \egroup}
-
-%D This macro does the hard work of inserting a list of people in the output, with
-%D proper regard of all the inbetween strings that can arise depending on length of
-%D the list of people.
-
-%D \#1 = type
-%D \#2 = number of items to be typeset
-%D \#3 = commacommand containing authors
-
-\protected\def\doprocessauthoritem#1#2#3%
- {\advance\scratchcounter\plusone
- \ifnum\numexpr\scratchcounter-\plusone\relax<#2\relax
- \publicationlistparameter{#1}#3%
- \ifnum\scratchcounter=#2\relax
- \ifnum\etallimitcounter<\commalistsize\relax
- \bibalternative{#1etaltext}%
- \fi
- \else\ifnum\numexpr\scratchcounter+\plusone\relax=#2\relax
- \ifnum\commalistsize>\plustwo
- \bibalternative\c!finalnamesep
- \else
- \bibalternative\c!lastnamesep
- \fi
- \else
- \bibalternative\c!namesep
- \fi\fi
- \fi}
-
-\protected\def\dospecialbibinsert#1#2#3%
- {\getcommacommandsize[#3]%
- \scratchcounter\zerocount
- \processcommacommand[#3]{\doprocessauthoritem{#1}{#2}}}
-
-%D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor}
-%D
-%D Just some commands that can be used in \type {\setuppublicationparameters}
-%D If you want to write an extension to the styles, you might as well define
-%D some of these commands yourself.
-%D
-%D The argument list has been reordered here, and the meanings are:
-%D
-%D \startlines
-%D \type{#1} firstnames
-%D \type{#2} von
-%D \type{#3} surname
-%D \type{#4} inits
-%D \type{#5} junior
-%D \stoplines
-
-\protected\def\normalauthor#1#2#3#4#5%
- {\bibdoif{#1}{#1\bibalternative\c!firstnamesep}%
- \bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3%
- \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
-
-\protected\def\normalshortauthor#1#2#3#4#5%
- {\bibdoif{#4}{#4\bibalternative\c!firstnamesep}%
- \bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3%
- \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
-
-\protected\def\invertedauthor#1#2#3#4#5%
- {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3%
- \bibdoif{#5}{\bibalternative\c!juniorsep#5}%
- \bibdoif{#1}{\bibalternative\c!surnamesep#1\unskip}}
-
-\protected\def\invertedshortauthor#1#2#3#4#5%
- {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3%
- \bibdoif{#5}{\bibalternative\c!juniorsep#5}%
- \bibdoif{#4}{\bibalternative\c!surnamesep#4\unskip}}
-
-%D \macros{clearbibitem,clearbibitemtwo,bibitemdefs}
-%D
-%D These are used in \type {\typesetapublication} to do initializations and
-%D cleanups.
-
-\protected\def\clearbibitem#1{\setvalue{\??pb @#1}{}}%
-
-\protected\def\clearbibitemtwo#1% is this reset really needed? after all we reset the counter and we are local
- {%\dofastrecurse\plusone{\csname#1@num\endcsname}\plusone{\expandafter\let\csname\??pb @#1\recurselevel\undefined}%
- \letvalue{#1@num}\!!zerocount}
-
-\protected\def\bibitemdefs#1%
- {\expandafter\let\csname#1\expandafter\endcsname\csname bib@#1\endcsname}
-
-\protected\def\presetbibvariables % make a fast resetter (toks)
- {\processcommacommand[\bibcommandlist,crossref]\clearbibitem
- \processcommalist [artauthor,author,editor]\clearbibitemtwo
- \processcommacommand[\bibcommandlist]\bibitemdefs
- \processcommalist [artauthor,author,editor,crossref]\bibitemdefs}
-
-%D \macros{startpublication}
-%D
-%D We are coming to the end of this module, to the macros that do typesetting and
-%D read the \type {bbl} file.
-%D
-%D Just a \type {\dosingleempty} is the most friendly of doing this: there need not
-%D even be an argument to \type {\startpublication}. Of course, then there is no key
-%D either, and it had better be an article (otherwise the layout will be all screwed
-%D up).
-%D
-%D Only specifying the key in the argument is also legal. In storing this stuff into
-%D macros, some trickery with token registers is needed to fix the expansion
-%D problems. Even so, this appears to not always be 100\% safe, so people are
-%D urgently advised to use \ETEX\ instead of traditional \TEX.
-%D
-%D In \ETEX, all expansion problems are conveniently solved by the primitive \type
-%D {\protected}. To put that another way:
-%D
-%D It's not a bug in this module if it does not appear in \ETEX!
-%D
-%D Now prohibits comments, so % can be used for urls
-
-\pushoverloadmode
-
-\overloaded \protected\def\startpublication
- {\dosingleempty\dostartpublication}
-
-\overloaded\let\stoppublication\relax
-
-\popoverloadmode
-
-%D This is rather memory hungry; some day i will rewrite this so that we use the
-%D database instead.
-
-%D \macros{doifbibreferencefoundelse}
-%D
-%D Some macros to fetch the information provided by \type {\startpublication}.
-%D
-%D We can consider a faster variant in the bbl file; we can also consider storing
-%D the keys in lua (and then do more in lua) and use calls to fetch the variables.
-
-% hm, we can store at the lua end ...
-
-\protected\def\dostartpublication[#1]%
- {\begingroup
- \doifelseassignment{#1}%
- {\getparameters[\??pb][k=\s!unknown,t=article,n=,s=,a=,y=,o=,u=,#1]}%
- {\getparameters[\??pb][k=#1,t=article,n=,s=,a=,y=,o=,u=]}%
- \ctxlua{bibtex.hacks.register(\!!bs\@@pbk\!!es,\!!bs\@@pbs\!!es)}%
- \catcode\commentasciicode\othercatcode
- \dodostartpublication}
-
-\protected\def\dodostartpublication#1\stoppublication
- {\setxvalue{pbd:\@@pbk}##1{\noexpand\ifcase##1\noexpand\or
- \@@pbk\noexpand\or
- \@@pba\noexpand\or
- \@@pby\noexpand\or
- \@@pbs\noexpand\or
- \@@pbn\noexpand\or
- \@@pbt\noexpand\or
- \@@pbo\noexpand\or
- \@@pbu\noexpand\or
- \normalunexpanded{#1}\noexpand\fi}%
- \endgroup
- \ignorespaces}
-
-\def\bibgetvark#1{\csname pbd:#1\endcsname\plusone }
-\def\bibgetvara#1{\csname pbd:#1\endcsname\plustwo }
-\def\bibgetvary#1{\csname pbd:#1\endcsname\plusthree}
-\def\bibgetvars#1{\csname pbd:#1\endcsname\plusfour }
-\def\bibgetvarn#1{\csname pbd:#1\endcsname\plusfive }
-\def\bibgetvart#1{\csname pbd:#1\endcsname\plussix }
-\def\bibgetvaro#1{\csname pbd:#1\endcsname\plusseven}
-\def\bibgetvaru#1{\csname pbd:#1\endcsname\pluseight}
-\def\bibgetvard#1{\csname pbd:#1\endcsname\plusnine }
-
-\protected\def\doifelsebibreferencefound#1%
- {\preloadbiblist
- \doifelsedefined{pbd:#1}
- \firstoftwoarguments
- {\showmessage\m!publications{5}{#1,\the\inputlineno}\secondoftwoarguments}}
-
-\let\doifbibreferencefoundelse\doifelsebibreferencefound
-
-%D \macros{bib@crossref}
-%D
-%D \type {\crossref} is used in database files to point to another entry. Because of
-%D this special situation, it has to be defined separately. Since this command will
-%D not be seen until at \type {\placepublications}, it may force extra runs. The
-%D same is true for \type {\cite} commands inside of publications.
-
-% used in bib self
-
-\protected\def\bib@crossref#1% called via \csname \endcsname
- {\setvalue{\??pb @crossref}{#1}\ignorespaces}
-
-\protected\def\bibinsertcrossref#1#2#3%
- {\bibdoifelse\@@pb@crossref{#1\cite[\@@pb@crossref]#2}{#3}}
-
-\let\insertcrossref\gobblethreearguments
-
-\appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions
-
-%D The next macro is needed because the number command of the publist sometimes
-%D needs to fetch something from the current item (like the 'short' key). For this,
-%D the ID of the current item is passed in the implict parameter \type
-%D {\currentpublicationkey}.
-
-\protected\def\doprocessbibtexentry#1{\typesetapublication{#1}}
-
-\protected\def\typesetpubslist
- {\begingroup
- \startpacked[\v!blank]%
- \preloadbiblist
- % \the\initializebibdefinitions % COMMENTED
- \edef\currentlist{pubs}%
- \ctxlua{bibtex.hacks.reset(\number\bibtexoncemode)}%
- \doifelse{\listparameter\c!criterium}\v!all
- {\showmessage\m!publications{7}{}%
- \ctxlua{bibtex.hacks.filterall()}}
- {\doif{\listparameter\c!criterium}\v!cite
- {\setuplist[pubs][\c!criterium=\v!here]}%
- \strc_lists_place_current
- {pubs}%
- {\listparameter\c!criterium}%
- {}%
- {\listparameter\c!extras}%
- {\listparameter\c!order}}%
- \ctxlua{bibtex.hacks.flush("\@@pbsorttype")}%
- \stoppacked
- \endgroup}
-
-\newif\ifinpublist
-
-\protected\def\initializepubslist
- {\def\currentlist{pubs}%
- \edef\@@pbnumbering{\@@pbnumbering}%
- \doifelse\@@pbautohang\v!yes
- {\ifx\@@pbnumbering\v!short
- \setbox\scratchbox\hbox{\@@pbnumbercommand{\listparameter\c!samplesize}}%
- \else
- \doifelse{\listparameter\c!criterium}\v!all
- {\setbox\scratchbox\hbox{\@@pbnumbercommand{\ctxlua{tex.write{bibtex.hacks.nofregistered()}}}}}
- {\determinelistcharacteristics[pubs]%
- \setbox\scratchbox\hbox{\@@pbnumbercommand{\structurelistsize}}}%
- \fi
- \edef\publistnumberbox{\hbox to \the\wd\scratchbox}%
- \expanded{\setuplist[pubs][\c!width=\the\wd\scratchbox,\c!distance=\zeropoint]}%
- \ifx\@@pbnumbering\v!short
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}%
- \else\ifx\@@pbnumbering\v!bib
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}%
- \else
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}%
- \fi\fi}
- {\doifelsenothing{\listparameter\c!width}
- {\let \publistnumberbox \hbox}
- {\edef\publistnumberbox{\hbox to \listparameter\c!width}}%
- \ifx\@@pbnumbering\v!short
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}%
- \else\ifx\@@pbnumbering\v!bib
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}%
- \else
- \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}%
- \fi\fi}%
- \ifx\@@pbnumbering\v!no
- \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]%
- \else
- \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]%
- \fi
- \doifelse{\publicationlistparameter\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}%
- \forgetall}
-
-%D The full list of publications
-
-\protected\def\completepublications
- {\dosingleempty\docompletepublications}
-
-\protected\def\docompletepublications[#1]%
- {\begingroup
- \setuplist[pubs][#1]%
- \edef\currentbibtexsessiontitle{\publicationlistparameter\c!title}%
- \ifx\currentbibtexsessiontitle\empty
- \normalexpanded{\startnamedsection[\v!chapter][\c!reference=pubs,\c!title={\headtext{pubs}}]}%
- \else
- \normalexpanded{\startnamedsection[\v!chapter][\c!reference=pubs,\c!title={\currentbibtexsessiontitle}]}%
- \fi
- \dodoplacepublications
- \stopnamedsection
- \endgroup}
-
-%D And the portion with the entries only.
-
-\def\bibrefprefix{\number\bibtexblock:}
-
-\protected\def\placepublications
- {\dosingleempty\doplacepublications}
-
-\protected\def\doplacepublications[#1]%
- {\begingroup
- \setuplist[pubs][#1]%
- \dodoplacepublications
- \endgroup}
-
-\protected\def\dodoplacepublications
- {\determinelistcharacteristics[pubs]%
- \initializepubslist
- \doifnot{\namedlistparameter{pubs}\c!option}\v!continue
- {\global\bibtexcounter\zerocount}%
- \inpublisttrue
- \typesetpubslist
- \inpublistfalse
- \global\advance\bibtexblock\plusone}
-
-%D \subsubject{What's in a publication}
-%D
-%D Watch out: here all means all publications in database, so use text when you want
-%D text only.
-
-\protected\def\typesetapublication#1%
- {\doifsomething{#1}
- {\doifelse{\namedlistparameter{pubs}\c!criterium}\v!all
- {\doplacepublicationindeed{#1}}%
- {\ctxlua{bibtex.hacks.doifalreadyplaced("#1")}
- {}
- {\doplacepublicationindeed{#1}}}%
- }}
-
-%D For the moment we don't access the data directly but we will do that later when
-%D we get away from storing the data and only deal with references.
-
-% we'll define proper handlers later
-
-\protected\def\doplacepublicationindeed#1%
- {\doifelsebibreferencefound{#1}
- {\global\advance\bibtexcounter\plusone
- \def\currentpublicationkey{#1}%
- \ctxlua{bibtex.hacks.registerplaced("#1")}%
- \def \currentlist {pubs}%
- \edef\currentlistentrynumber {\number\bibtexcounter}%
- \let \currentlistentrytitle \bibtexpubtext
- \let \currentlistentrypagenumber\empty
- \strc_lists_apply_renderingsetup}
- {}} % invalid
-
-\protected\def\bibtexpubtext
- {\expanded{\reference[\bibrefprefix\currentpublicationkey]{\number\bibtexcounter}}%
- \strut\dotypesetapublication\currentpublicationkey\strut}
-
-\protected\def\dotypesetapublication#1%
- {\bgroup
- \the\initializebibdefinitions % NEW
- \def\@@currentalternative{:l:}%
- \presetbibvariables
- \let\biblanguage\empty
- \ignorespaces
- \bibgetvard{#1}%
- \removeunwantedspaces
- \ignorespaces
- \bibalternative{\bibgetvart{#1}}%
- \removeunwantedspaces
- \egroup}
-
-%D An few afterthoughts:
-
-\let\maybeyear\gobbleoneargument
-\let\noopsort \gobbleoneargument
-
-%D This is the result of bibtex's `language' field.
-
-\protected\def\setbiblanguage#1#2{\setvalue{\??pb\s!language#1}{#2}}
-
-\protected\def\lang#1%
- {\edef\biblanguage{#1}%
- \ifcsname\??pb\s!language#1\endcsname
- \language[\getvalue{\??pb\s!language#1}]%
- \fi
- \ignorespaces}
-
-%D \subject{Citations}
-
-%D \macros{cite,bibref}
-%D
-%D The indirection with \type {\dobibref} allows \LATEX\ style \type {\cite}
-%D commands with a braced argument (these might appear in included data from the
-%D \type {.bib} file).
-
-\pushoverloadmode
-
-\protected\def\cite
- {\strictdoifelsenextoptional\dodocite\dobibref}
-
-\popoverloadmode
-
-\protected\def\dobibref#1%
- {\docite[#1][]}
-
-\protected\def\dodocite[#1]%
- {\strictdoifelsenextoptional{\docite[#1]}{\docite[#1][]}}
-
-\protected\def\docite[#1][#2]%
- {\begingroup
- \doifelsenothing{#2}\secondargumentfalse\secondargumenttrue
- \ifsecondargument
- \dowhatevercite{#1}{#2}%
- \else
- \donumberedcite{#1}%
- \fi
- \endgroup}
-
-\protected\def\dowhatevercite#1#2%
- {\processcommalist[#2]\docitation
- \setupinteraction[\c!style=]%
- \doifelseassignment
- {#1}%
- {\getparameters[LO][\c!alternative=,\c!extras=,#1]%
- \edef\@@currentalternative{\LOalternative}%
- \ifx\@@currentalternative\empty
- \edef\@@currentalternative{\@@citedefault}%
- \fi
- \ifx\LOextras\empty
- \setupcite[\@@currentalternative][#1]%
- \else
- \expandafter\ifx\csname \??pv \@@currentalternative\c!right\endcsname\relax
- % avoids tail recursion
- \expandafter\let\csname \??pv \@@currentalternative\c!right\endcsname\empty
- \fi
- \expandafter\ifx\csname LOright\endcsname \relax
- \edef\LOextras{{\LOextras\bibalternative\c!right}}%
- \else
- \edef\LOextras{{\LOextras\LOright}}%
- \fi
- \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}%
- \fi}%
- {\def\@@currentalternative{#1}}%
- \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue
- \getvalue{bib\@@currentalternative ref}[#2]}
-
-\protected\def\donumberedcite#1%
- {\processcommalist[#1]\docitation
- \setupinteraction[\c!style=]%
- \edef\@@currentalternative{\@@citedefault}%
- \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue
- \getvalue{bib\@@citedefault ref}[#1]}
-
-%D \macros{nocite}
-
-\pushoverloadmode
-
-\protected\def\nocite[#1]%
- {\processcommalist[#1]\docitation}
-
-\popoverloadmode
-
-%D \macros{setupcite}
-
-\protected\def\setupcite{\dodoubleempty\dosetupcite}
-
-\protected\def\dosetupcite[#1][#2]%
- {\ifsecondargument
- \def\dodosetupcite##1{\getparameters[\??pv##1][#2]}%
- \processcommalist[#1]\dodosetupcite
- \else % default case
- \getparameters[\??pv\@@citedefault][#1]%
- \fi}
-
-%D Low-level stuff
-
-\protected\def\getcitedata#1[#2]#3[#4]#5to#6%
- {\bgroup
- \dofetchapublication{#4}%
- \doifelsedefined{\??pb @bib#2}%
- {\xdef#6{\getvalue{\??pb @bib#2}}}%
- {\xdef#6{\getvalue{\??pb @#2}}}%
- \egroup}
-
-\protected\def\dofetchapublication#1%
- {\def\currentpublicationkey{#1}%
- \presetbibvariables
- \ignorespaces\bibgetvard{#1}}
-
-\protected\def\docitation#1%
- {\iftrialtypesetting \else
- \expanded{\writedatatolist[pubs][bibref=#1]}%
- \fi}
-
-\let\addthisref\gobbleoneargument % keep this for compatibility
-
-%D \macros{ixbibauthoryear,thebibauthors,thebibyears}
-%D
-%D If compression of \type {\cite}'s argument expansion is on, the macros that deal
-%D with authors and years call this internal command to do the actual typesetting.
-%D
-%D Two entries with same author but with different years may be condensed into
-%D ``Author (year1,year2)''. This is about the only optimization that makes sense
-%D for the (author,year) style of citations (years within one author have to be
-%D unique anyway so no need to test for that, and ``Author1, Author2 (year)''
-%D creates more confusion than it does good).
-%D
-%D In the code below, the macro \type {\thebibauthors} holds the names of the
-%D alternative author info fields for the current list. This is a commalist, and
-%D \type {\thebibyears} holds the (collection of) year(s) that go with this author
-%D (possibly as a nested commalist).
-%D
-%D There had better be an author for all cases, but there does not have to be year
-%D info always. \type{\thebibyears} is pre|-|initialized because this makes the
-%D insertion macros simpler.
-%D
-%D In normal \TEX, of course there are expansion problems again.
-
-%D Delegate this to \LUA.
-
-% \let\ixlastcommand \relax
-% \let\ixsecondcomman \relax
-% \let\ixfirstcommand \relax
-% \let\thebibauthors \empty
-% \let\thebibyears \empty
-% \let\authorcount \!!zerocount
-
-\let\currentbibauthor\empty
-
-\protected\def\ixbibauthoryear#1#2#3#4%
- {\bgroup
- \gdef\ixlastcommand {#4}%
- \gdef\ixsecondcommand{#3}%
- \gdef\ixfirstcommand {#2}%
- \glet\thebibauthors \empty
- \glet\thebibyears \empty
- \getcommalistsize[#1]%
- \ifbibcitecompress
- \dorecurse\commalistsize{\xdef\thebibyears{\thebibyears,}}%
- \processcommalist[#1]\docompressbibauthoryear
- \else
- \processcommalist[#1]\donormalbibauthoryear
- \fi
- \egroup
- \dobibauthoryear}
-
-%D \macros{dodobibauthoryear}
-%D
-%D This macro only has to make sure that the lists \type {\thebibauthors} and \type
-%D {\thebibyears} are printed.
-
-\protected\def\dobibauthoryear
- {\scratchcounter\zerocount
- \getcommacommandsize[\thebibauthors]%
- \edef\authorcount{\commalistsize}%
- \expandafter\processcommalist\expandafter[\thebibauthors]\dodobibauthoryear}
-
-\protected\def\dodobibauthoryear#1%
- {\advance\scratchcounter\plusone
- \edef\wantednumber{\the\scratchcounter}%
- \getfromcommacommand[\thebibyears][\wantednumber]%
- \expandafter\def\expandafter\currentbibyear\expandafter{\commalistelement}%
- \setcurrentbibauthor{#1}%
- \ifnum\scratchcounter=\plusone
- \ixfirstcommand
- \else\ifnum \scratchcounter=\authorcount\relax
- \ixlastcommand
- \else
- \ixsecondcommand
- \fi\fi}
-
-\protected\def\setcurrentbibauthor#1% sensitive for empty entries but I don't want to touch this
- {\getcommacommandsize[#1]%
- \ifcase\commalistsize
- % anonymous?
- \let\currentbibauthor\empty
- \or
- \def\currentbibauthor{#1}%
- \or
- \expanded{\docurrentbibauthor#1}%
- \else
- \handlemultiplebibauthors{\commalistsize}{#1}%
- \fi}
-
-\newcount\citescratchcounter
-
-\protected\def\handlemultiplebibauthors#1#2%
- {\citescratchcounter\zerocount
- \let\currentbibauthor\empty
- \protected\def\bibprocessauthoritem##1%
- {\advance\citescratchcounter\plusone
- \ifnum \citescratchcounter=#1\relax
- \edef\currentbibauthor{\currentbibauthor##1}%
- \else\ifnum\numexpr\citescratchcounter+\plusone\relax=#1\relax
- \edef\currentbibauthor{\currentbibauthor##1\bibalternative{andtext}}%
- \else
- \edef\currentbibauthor{\currentbibauthor##1\bibalternative{namesep}}%
- \fi\fi}%
- \processcommalist[#2]\bibprocessauthoritem}
-
-\setupcite
- [author,authoryear,authoryears]
- [\c!namesep={, }]
-
-%D This discovery of authoretallimit is not the best one,
-%D but it will do for now.
-
-\protected\def\docurrentbibauthor#1,#2%
- {\doifelseempty{#2}
- {\def\currentbibauthor{#1\bibalternative{otherstext}}}
- {\expandafter\ifx\csname\??pv\@@currentalternative authoretallimit\endcsname\relax
- \edef\currentbibauthor{#1\bibalternative{andtext}#2}%
- \else
- \edef\currentbibauthor{#1%
- \ifcase0\bibalternative{authoretallimit}\relax\or
- \bibalternative{otherstext}\else\bibalternative{andtext}#2\fi}%
- \fi}}
-
-%D This is not the one Hans made for me, because I need a global
-%D edef, and the \type {\robustdoifinsetelse} doesn't listen to
-%D \type {\doglobal}.
-
-\pushoverloadmode
-
- \protected\def\robustaddtocommalist#1#2% {item} \cs
- {\robustdoifelseinset{#1}#2\resetglobal
- {\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}}
-
-\popoverloadmode
-
-%D \macros{donormalbibauthoryear}
-%D
-%D Now we get to the macros that fill the two lists. The \quote {simple} one really
-%D is quite simple.
-
-\protected\def\donormalbibauthoryear#1%
- {\def\myauthor{Xxxxxxxxxx}%
- \def\myyear{0000}%
- \doifelsebibreferencefound{#1}
- {\def\myauthor{{\bibgetvara{#1}}}%
- \def\myyear {\bibgetvary{#1}}}%
- {}%
- \expandafter\doglobal\expandafter\appendtocommalist\expandafter{\myauthor}\thebibauthors
- \expandafter\doglobal\expandafter\appendtocommalist\expandafter{\myyear }\thebibyears}
-
-%D \macros{docompressbibauthoryear}
-%D
-%D So much for the easy parts. Nothing at all will be done if the reference is not
-%D found or the reference does not contain author data. No questions marks o.s.s.
-%D (to be fixed later).
-
-\protected\def\docompressbibauthoryear#1%
- {\def\myauthor{Xxxxxxxxxx}%
- \def\myyear {0000}%
- \doifelsebibreferencefound{#1}
- {\xdef\myauthor{\bibgetvara{#1}}%
- \xdef\myyear {\bibgetvary{#1}}}
- {}%
- \ifx\myauthor\empty\else
- \checkifmyauthoralreadyexists
- \findmatchingyear
- \fi}
-
-%D Two temporary counters. One of these two can possibly be replaced by \type
-%D {\scratchcounter}.
-
-\newcount\bibitemcounter
-\newcount\bibitemwanted
-
-%D The first portion is simple enough: if this is the very first author it is quite
-%D straightforward to add it. \type {\bibitemcounter} and \type {\bibitemwanted} are
-%D needed later to insert the year information in the correct item of \type
-%D {\thebibyears}.
-
-\protected\def\checkifmyauthoralreadyexists
- {\doifelseemptyvalue{thebibauthors}
- {\global\bibitemwanted \plusone
- \global\bibitemcounter\plusone
- \xdef\thebibauthors{{\myauthor}}}
- {% the next weirdness is because according to \getcommalistsize,
- % the length of \type{[{{},{}}]} is 2.
- \expandafter\getcommalistsize\expandafter[\thebibauthors,]%
- \global\bibitemcounter\numexpr\commalistsize+\minusone\relax
- \global\bibitemwanted \zerocount
- \processcommacommand[\thebibauthors]\docomparemyauthor}}
-
-%D The outer \type {\ifnum} accomplishes the addition of a new author to \type
-%D {\thebibauthors}. The messing about with the two counters is again to make sure
-%D that \type {\thebibyears} will be updated correctly.If the author {\it was}
-%D found, the counters will stay at their present values and everything will be
-%D setup properly to insert the year info.
-
-\protected\def\docomparemyauthor#1%
- {\global\advance\bibitemwanted \plusone
- \def\mytempc{#1}%
- \ifx\mytempc\myauthor
- \quitcommalist
- \else\ifnum\bibitemwanted=\bibitemcounter\relax
- \global\advance\bibitemwanted \plusone
- \global\bibitemcounter\bibitemwanted\relax
- \expandafter\doglobal\expandafter\robustaddtocommalist\expandafter{{\myauthor}}\thebibauthors
- \fi\fi}
-
-%D This macro should be clear now.
-
-\protected\def\findmatchingyear
- {\edef\wantednumber{\the\bibitemwanted}%
- \getfromcommacommand[\thebibyears][\wantednumber]%
- \ifx\commalistelement\empty
- \edef\myyear{{\myyear}}%
- \else
- \edef\myyear{{\commalistelement,\myyear}}%
- \fi
- \edef\newcommalistelement{\myyear}%
- \doglobal\replaceincommalist \thebibyears \wantednumber}
-
-%D \macros{gotobiblink,inbiblink,atbiblink}
-%D
-%D The final task is looping over that list until a match is found.
-
-%D Beware, we can have cites without reference match.
-
-\protected\def\gotobiblink#1[#2]{\doifelsereferencefound{\bibrefprefix#2}{\goto{#1}[\bibrefprefix#2]}{#1}}
-\protected\def\atbiblink [#1]{\doifelsereferencefound{\bibrefprefix#1}{\at [\bibrefprefix#1]}{#1}}
-\protected\def\inbiblink [#1]{\doifelsereferencefound{\bibrefprefix#1}{\expanded{\goto{\currentreferencetext}}[\bibrefprefix#1]}{#1}}
-
-%D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref}
-%D
-%D Now that all the hard work has been done, these are simple. \type
-%D {\ixbibauthoryearref} stores the data in the macros \type {\currentbibauthor} and
-%D \type {\currentbibyear}.
-
-\protected\def\doifelsebibinteraction
- {\iflocation
- \edef\test{\bibalternative\c!interaction}%
- \ifx\test\v!stop
- \doubleexpandafter\secondoftwoarguments
- \else
- \doubleexpandafter\firstoftwoarguments
- \fi
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\let\doifbibinteractionelse\doifelsebibinteraction
-
-\protected\def\bibmaybeinteractive#1#2%
- {\doifelsebibinteraction{\gotobiblink{#2}[#1]}{#2}}
-
-\protected\def\bibauthoryearref[#1]%
- {\ixbibauthoryear{#1}%
- {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}}
- {\bibalternative\c!pubsep
- \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}
- {\bibalternative\c!lastpubsep
- \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}}
-
-\protected\def\bibauthoryearsref[#1]%
- {\bibalternative\v!left
- \ixbibauthoryear{#1}
- {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
- {\bibalternative\c!pubsep
- \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
- {\bibalternative\c!lastpubsep
- \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}%
- \bibalternative\v!right}
-
-\protected\def\bibauthorref[#1]%
- {\bibalternative\v!left
- \ixbibauthoryear{#1}%
- {\bibmaybeinteractive{#1}{{\currentbibauthor}}}
- {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}}}
- {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}%
- \bibalternative\v!right}
-
-\protected\def\bibyearref[#1]%
- {\bibalternative\v!left
- \ixbibauthoryear{#1}%
- {\bibmaybeinteractive{#1}{{\currentbibyear}}}
- {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibyear}}}
- {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}%
- \bibalternative\v!right}
-
-%D \macros{bibshortref,bibkeyref,bibpageref,bibtyperef,bibserialref}
-%D
-%D There is hardly any point in trying to compress these. The only thing that needs
-%D to be done is making sure that the separations are inserted correctly. And that
-%D is what \type {\bibinsertrefsep} does.
-
-\newconditional\firstbibrefsep
-
-\protected\def\bibresetrefsep
- {\settrue\firstbibrefsep}
-
-\protected\def\bibinsertrefsep
- {\ifconditional\firstbibrefsep
- \setfalse\firstbibrefsep
- \else
- \bibalternative\c!pubsep
- \fi}
-
-\protected\def\bibshortref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibshortref
- \bibalternative\v!right}
-
-\protected\def\dobibshortref#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\gotobiblink{\bibgetvars{#1}}[#1]}
- {}}
-
-\protected\def\bibserialref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibserialref
- \bibalternative\v!right}
-
-\protected\def\dobibserialref#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\gotobiblink{\bibgetvarn{#1}}[#1]}
- {}}
-
-\protected\def\bibkeyref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibkeyref
- \bibalternative\v!right}
-
-\protected\def\dobibkeyref#1%
- {\bibinsertrefsep
- \gotobiblink{#1}[#1]}
-
-\protected\def\bibgotoDOI#1#2%
- {\doifelsebibinteraction
- {\useURL[bibfooDoi#1][#2]%
- \useURL[bibfoo#1][http://dx.doi.org/#2]%
- \goto{\url[bibfooDoi#1]}[url(bibfoo#1)]}
- {\hyphenatedurl{#2}}}
-
-\protected\def\bibdoiref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibdoiref
- \bibalternative\v!right}
-
-\protected\def\dobibdoiref#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\expanded{\bibgotoDOI{#1}{\bibgetvaro{#1}}}}
- {}}
-
-\protected\def\biburlref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobiburlref
- \bibalternative\v!right}
-
-\protected\def\bibgotoURL#1#2%
- {\doifelsebibinteraction
- {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
- {\hyphenatedurl{#2}}}
-
-\protected\def\dobiburlref#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\expanded{\bibgotoURL{#1}{\bibgetvaru{#1}}}}
- {}}
-
-\protected\def\bibtyperef[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibtyperef
- \bibalternative\v!right}
-
-\protected\def\dobibtyperef#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\gotobiblink{\bibgetvart{#1}}[#1]}
- {}}
-
-\protected\def\bibpageref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibpageref
- \bibalternative\v!right}
-
-\protected\def\dobibpageref#1%
- {\bibinsertrefsep
- \doifelsebibinteraction
- {\atbiblink[#1]}
- {{\referencingfalse\at[#1]}}}
-
-\protected\def\bibdataref[#1]%
- {\bibalternative\v!left
- \bibresetrefsep\processcommalist[#1]\dobibdata
- \bibalternative\v!right}
-
-\protected\def\dobibdata#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\dotypesetapublication{#1}}
- {}}
-
-\let\bibnoneref\nocite
-
-%D \macros{bibnumref}
-
-\protected\def\bibnumref[#1]%
- {\begingroup
- \bibalternative\v!left
- \penalty\plustenthousand
- \ctxlua{bibtex.hacks.resolve("","\number\bibtexblock","#1")}%
- \bibalternative\v!right
- \endgroup}
-
-\protected\def\dowithbibtexnumrefconnector#1#2%
- {\ifnum#1>\plusone
- \ifnum#2>\plusone
- \ifnum#2=#1\relax
- \bibalternative{lastpubsep}%
- \else
- \bibalternative{pubsep}%
- \fi
- \fi
- \fi}
-
-\protected\def\dowithbibtexnumref#1#2#3#4#5% n, i, prefix block ref
- {\dowithbibtexnumrefconnector{#1}{#2}%
- \def\bibrefprefix{#4:}%
- \inbiblink[#5]}
-
-\protected\def\dowithbibtexnumrefrange#1#2#3#4#5#6#7% n, i, prefix block ref
- {\dowithbibtexnumrefconnector{#1}{#2}%
- \def\bibrefprefix{#4:}%
- \inbiblink[#5]%
- \endash
- \def\bibrefprefix{#6:}%
- \inbiblink[#7]}
-
-%D By request from Sanjoy. This makes it easier to implement \type {\citeasnoun}.
-
-\protected\def\bibauthornumref[#1]%
- {\getcommalistsize[#1]%
- \global\bibitemcounter\commalistsize
- \bibresetrefsep
- \processcommalist[#1]\dobibauthornumref}
-
-\protected\def\dobibauthornumref#1%
- {\bibinsertrefsep
- \doifelsebibreferencefound{#1}
- {\begingroup
- \cite[\c!left=,\c!right=,\c!alternative=\v!author][#1]%
- \bibalternative\c!inbetween
- \cite[num][#1]%
- \endgroup}
- {}}
-
-%D And some defaults are loaded from bibl-apa:
-
-\setuppublications
- [\c!monthconversion=,
- \c!alternative=apa,
- \c!method=\v!global,
- %\c!criterium=\v!previous,
- \c!criterium=\v!cite, % mojca wants this so bother her, not me
- \c!refcommand=num,
- \c!numbercommand=\bibleftnumber]
-
-\protected\def\preloadbiblist
- {\glet\preloadbiblist\relax
- \dousepublications\jobname}
-
-% \appendtoks \preloadbiblist \to \everysetuppublications
-% \appendtoks \preloadbiblist \to \everystarttext
-
-\let\ifbibinteractionelse\doifbibinteractionelse
-
-\protect \endinput