public inbox for gentoo-pms@lists.gentoo.org
 help / color / mirror / Atom feed
From: Christian Faulhammer <fauli@gentoo.org>
To: Ciaran McCreesh <ciaran.mccreesh@googlemail.com>
Cc: gentoo-pms@lists.gentoo.org
Subject: Re: [gentoo-pms] Patches for your reviewing pleasure: Various improvements, including cheat sheet
Date: Tue, 14 Apr 2009 15:55:43 +0200	[thread overview]
Message-ID: <20090414155543.16e78e66@terra.solaris> (raw)
In-Reply-To: <20090414140423.27055b57@snowcone>


[-- Attachment #1.1: Type: text/plain, Size: 1453 bytes --]

Hi,

Ciaran McCreesh <ciaran.mccreesh@googlemail.com>:

> On Tue, 14 Apr 2009 10:44:48 +0200
> Christian Faulhammer <fauli@gentoo.org> wrote:
> >  It isn't about managing the files but about getting into the
> > code.  A root directory with only five files is easier to grasp for
> > a beginner than with 20. The move isn't hard, so we can do this at
> > every point in the future.
> 
> I agree with you on the principle, but not on the numbers. It's not
> worth using subdirectories until 'ls' output won't fit on one screen.

 Having actually done the change, does make the thing look really
good. After a make run all the .log, .aux and whatever files are also
around.

> > > >  I wanted to add it when all labels for all EAPIs are ready.
> > > 
> > > I thought they were. Didn't I do labels for 1 and 2 things?
> > 
> >  I wasn't sure if they were complete...anyway, I now have EAPI 3
> > properly referenced.  You want that version or should I go through 1
> > and 2, also?
> 
> Might as well go for the whole thing.

 See attached patches:

0001: Desk reference, updated and all issues you raised handled.
0002: Some Makefile tweaking (really minor).
0003: Use plainurl.bst from the system.
0004: Some proper using of the description environment.

V-Li

-- 
Christian Faulhammer, Gentoo Lisp project
<URL:http://www.gentoo.org/proj/en/lisp/>, #gentoo-lisp on FreeNode

<URL:http://gentoo.faulhammer.org/>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-Desk-reference-for-quick-look-up.patch --]
[-- Type: text/x-patch, Size: 12747 bytes --]

From 07a0d42ed1d963709739ffd509bf2b365355cf32 Mon Sep 17 00:00:00 2001
From: Christian Faulhammer <fauli@gentoo.org>
Date: Mon, 13 Apr 2009 12:11:54 +0200
Subject: [PATCH] Desk reference for quick look-up

This contains a short summary of all EAPI features so far, similar
to appendix E of PMS, but with more information.
---
 Makefile                       |    8 +-
 cheatsheet/eapi_cheatsheet.tex |  207 ++++++++++++++++++++++++++++++++++++++++
 credits.tex                    |    5 +-
 pms.cls                        |    1 +
 pms.tex                        |    2 +
 5 files changed, 219 insertions(+), 4 deletions(-)
 create mode 100644 cheatsheet/eapi_cheatsheet.tex

diff --git a/Makefile b/Makefile
index e9c3dd4..b585411 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,14 @@ clean :
 	rm -f *~ *.pdf *.dvi *.log *.aux *.bbl *.blg *.toc *.lol *.loa *.lox \
 	    *.lot *.out *.html *.css *.png *.4ct *.4tc *.idv *.lg *.tmp *.xref vc.tex || true
 
-LATEXFILES = $(shell ls *.tex) pms.cls
+LATEXFILES = $(shell find -name '*.tex') pms.cls
 LISTINGFILES = $(shell ls *.listing)
 SOURCEFILES = $(LATEXFILES) $(LISTINGFILES)
 
-pms.pdf: $(SOURCEFILES) pms.bbl vc.tex
+pms.pdf: $(SOURCEFILES) pms.bbl vc.tex eapi_cheatsheet.pdf
 	pdflatex pms
 	pdflatex pms
+	pdflatex cheatsheet/eapi_cheatsheet
 	pdflatex pms
 
 pms.html: $(SOURCEFILES) pms.bbl
@@ -31,6 +32,9 @@ pms.bbl: pms.bib pms.tex vc.tex
 	latex pms
 	bibtex pms
 
+eapi_cheatsheet.pdf: vc.tex
+	pdflatex cheatsheet/eapi_cheatsheet
+
 vc.tex: pms.tex
 	/bin/sh ./vc
 
diff --git a/cheatsheet/eapi_cheatsheet.tex b/cheatsheet/eapi_cheatsheet.tex
new file mode 100644
index 0000000..169318e
--- /dev/null
+++ b/cheatsheet/eapi_cheatsheet.tex
@@ -0,0 +1,207 @@
+\documentclass[a4paper,notumble]{leaflet}
+\input{vc}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{
+  url,
+  hyperref,
+  listings,
+  ifthen,
+  xr-hyper,
+  mathptmx,
+  courier
+}
+\usepackage[orig,english]{isodate}
+\usepackage[scaled=.90]{helvet}
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\version}{0.2}
+\newcommand{\featureref}[1]{\textsc{#1} on page~\pageref{feat:#1}}
+\renewcommand{\familydefault}{\sfdefault}
+\urlstyle{sf}
+\externaldocument{pms}
+
+\title{EAPI Cheat Sheet}
+\author{Christian
+  Faulhammer\thanks{\href{mailto:fauli@gentoo.org}{fauli@gentoo.org}}}
+\ifthenelse{\equal{\VCDateISO}{}}
+{
+  \date{Version \version{}, generated on: \\\today}
+}{
+  \date{Version \version\\\printdate{\VCDateISO}}
+}
+\CutLine*{1}
+\CutLine*{3}
+\CutLine*{4}
+\CutLine*{6}
+\hypersetup{%
+  urlcolor=black,
+  colorlinks=true,
+  citecolor=black,
+  linkcolor=black,
+  pdftitle={EAPI Desk Reference},
+  pdfauthor={Christian Faulhammer},
+  pdfsubject={Making look-up faster for EAPI features},
+  pdflang={en},
+  pdfkeywords={Gentoo, package manager, reference},
+  pdfproducer={pdfLaTeX and hyperref},
+}
+\begin{document}
+\maketitle
+\thispagestyle{empty}
+\begin{abstract}
+  An overview of the main EAPI changes in Gentoo, for ebuild authors.
+  For full details, consult the Package Manager
+  Specification\footnote{\url{http://www.gentoo.org/proj/en/qa/pms/}};
+  this is an incomplete summary only.
+
+  Official Gentoo EAPIs are consecutively numbered integers (0, 1, 2,
+  \dots).  Except where otherwise noted, an EAPI is the same as the
+  previous EAPI.  All label refer to the PMS document itself, built
+  from the same checkout as this overview.  
+
+  Please report mistakes or enhancements to this document via the
+  Gentoo bug tracking system\footnote{\url{http://bugs.gentoo.org/}}
+  to the original author or the PMS team.
+
+  This document is released under the Creative Commons
+  Attribution-Share Alike 3.0
+  Licence\footnote{\url{http://creativecommons.org/licenses/by-sa/3.0/}}.
+\end{abstract}
+\section{EAPI 0}
+\label{sec:cs:eapi0}
+If there is no EAPI explicitely specified, EAPI 0 is assumed.
+Currently there is no full specification what EAPI 0 includes.
+Portage, official ebuild documentation and existing ebuilds set the
+standard here, although obvious errors are still errors.
+\newpage
+\section{EAPI 1}
+\label{sec:cs:eapi1}
+\subsection{Additions/Changes}
+\label{sec:cs:eapi1-additions}
+\begin{description}
+\item[IUSE defaults] An USE flag can be marked as mandatory (if not
+  disabled explicitely by user configuration) with a \code{+} sign in
+  front.  See \featureref{iuse-defaults}.
+\item[Named slot dependencies] Dependencies can explicitely request a
+  specific slot by using the \code{dev-libs/foo:SLOT} syntax.
+  See \featureref{slot-deps}.
+\end{description}
+\section{EAPI 2 (2008-09-25)}
+\label{sec:cs:eapi2}
+\subsection{Additions/Changes}
+\label{sec:cs:eapi2-additions}
+\begin{description}
+\item[\code{SRC\_URI} arrows] Allows redirection of upstream file
+  naming scheme by using an "arrow" (\code{->}) to a new file name in
+  DISTDIR.  See \featureref{src-uri-arrows}.
+\item[USE dependencies] Dependencies can be specified to be built with
+  or without a specific USE flag, thus getting rid of countless
+  \code{built\_with\_use} checks.  A more sophisticated syntax is
+  available in EAPI 3.
+  \begin{description}
+  \item[{[opt]}] The flag must be enabled.
+  \item[{[opt=]}] The flag must be enabled if the flag is enabled for the
+    package with the dependency, or disabled otherwise.
+  \item[{[!opt=]}] The flag must be disabled if the flag is enabled for
+    the package with the dependency, or enabled otherwise.
+  \item[{[opt?]}] The flag must be enabled if the flag is enabled for the
+    package with the dependency.
+  \item[{[!opt?]}] The flag must be disabled if the use flag is disabled
+    for the package with the dependency.
+  \item[{[-opt]}] The flag must be disabled.
+  \end{description}
+  See \featureref{use-deps}.
+\item[Blocker syntax] A single exclamation mark as a blocker may be
+  ignored by the package manager as long as the stated package is
+  uninstalled later on.  Two exclamation marks are a strong blocker
+  and will always be respected.  See \featureref{bang-strength}.
+\item[\code{src\_configure, src\_prepare}] Both new phases provide
+  finer granularity in the ebuild's structure.  Configure calls should
+  be moved from \code{src\_compile} to \code{src\_configure}.
+  Patching and other preparing tasks must no longer take place in
+  \code{src\_unpack} but in \code{src\_prepare}.
+  See \featureref{src-prepare} and \featureref{src-configure}.
+\item[Default phase functions] The default functions for the phases
+  \code{pkg\_nofetch}, \code{src\_unpack}, \code{src\_prepare},
+  \code{src\_configure}, \code{src\_compile} and \code{src\_test} can
+  be called via \code{default\_\emph{phasename}}, so small additions
+  you need will not be accompanied by a complete reimplementation of
+  the phase.  Additionally as a shorthand for the current phase's
+  default definition \code{default} can be invoked.
+  See \featureref{default-phase-funcs} and \featureref{default-func}.
+\item[\code{doman} language support] The \code{doman} installation
+  function recognizes lanugage specific man page extensions and
+  behaves accordingly.  See \featureref{doman-langs}
+\end{description}
+\newpage
+\section{EAPI 3 (not yet approved)}
+\label{sec:cs:eapi3}
+\subsection{Additions/Changes}
+\begin{description}
+\item[\code{pkg\_pretend}] Some useful checks (kernel options for
+  example) can be placed in this new phase to inform the user early.
+  Duplicating checks from the \code{pkg\_setup} phase may be
+  necessary.  See \featureref{pkg-pretend}.
+\item[\code{src\_install}] The \code{src\_install} phase is no longer
+  empty but has a default now.  This comes along with an accompanying
+  \code{default} function.  See \featureref{src-install-3}.
+\item[\code{pkg\_info} on non-installed packages] The \code{pkg\_info}
+  phase can be called even for non-installed packages.  Do not depend
+  on any outside programs in that case!  See \featureref{pkg-info}.
+\item[No RDEPEND fall-back] The package manager will not fall back to
+  \code{RDEPEND=DEPEND} if RDEPEND is undefined.
+  See \featureref{rdepend-depend}
+\item[Support for \code{.xz}] Unpack of \code{.xz} and \code{.tar.xz}
+  files is possible.  See \featureref{unpack-extensions}.
+\item[Slot operators] There are two ways to define a wanted slot in a
+  dependency string:
+  \begin{description}
+  \item[\code{:*}] Indicates that any slot value is acceptable. In addition,
+    for runtime dependencies, indicates that the package will not
+    break if the matched package is uninstalled and replaced by a
+    different matching package in a different slot.
+  \item[\code{:=}] Indicates that any slot value is acceptable. In addition,
+    for runtime dependencies, indicates that the package will break
+    unless a matching package with slot equal to the slot of the best
+    installed version at the time the package was installed is
+    available.
+  \end{description}
+  See \featureref{slot-operator-deps}.
+\item[USE dependency defaults] Additionally to the features offered in
+  EAPI 2 for USE dependencies, a \code{(+)} or \code{(-)} can be added
+  after a USE flag (mind the braces).  The former leads to the
+  assumption that the USE flag is available when not found in the
+  dependency, the latter leads to the reverse behaviour.  This mimicks
+  parts of the behaviour of \code{-{}-missing} in
+  \code{built\_with\_use}.  See \featureref{use-dep-defaults}.
+\item[Controllable compression] All items in
+  \code{/usr/share\{doc,info,man\}} are compressed on-disk after
+  \code{src\_install}, except for \code{/usr/share/doc/\$\{PF\}/html}.
+  With \code{docompress} all arguments are passed to the inclusion
+  list, while the behaviour can be inverted with the \code{-x}
+  switch.  See \featureref{controllable-compress}.
+\item[\code{dodoc} recursion] If the \code{-r} switch is given as
+  first argument and followed by directories, files from there are
+  installed recursively.  See \featureref{dodoc}.
+\item[\code{doins} symlink support] Symbolic links are now properly
+  installed when using recursion (\code{-r} switch).
+  See \featureref{doins}.
+\item[New installation functions] \code{doexample}, \code{newexample},
+  \code{doinclude} and \code{newinclude} install example and include
+  files respectively in the known manner.  See \featureref{doexample} and
+  \featureref{doinclude}.
+\item[\code{nonfatal} for commands] If you call \code{nonfatal} the
+  command given as argument will not abort the build process in case
+  of a failure but preserve the exit status nonetheless.  See
+  \featureref{nonfatal}.
+\end{description}
+\label{sec:cs:eapi3-additions}
+\subsection{Removals/Bans}
+\label{sec:cs:eapi3-removalsbans}
+\begin{description}
+\item[USE flags in any-of] Inside of \code{||} constructs USE flag
+  conditionals are forbidden (with exceptions).  See \featureref{any-use}
+\item[\code{dohard}, \code{dosed}] Both functions are not allowed
+  anymore.  See \featureref{banned-commands}.
+\end{description}
+\end{document}
diff --git a/credits.tex b/credits.tex
index 8494516..ceec6cf 100644
--- a/credits.tex
+++ b/credits.tex
@@ -3,8 +3,9 @@
 Thanks to Mike Kelly (package manager provided utilities, section~\ref{sec:pkg-mgr-commands}), Danny van
 Dyk (ebuild functions, section~\ref{sec:ebuild-functions}), David Leverton (various sections) and
 Petteri Räty (environment state, section~\ref{sec:ebuild-env-state}) for contributions. Thanks to
-Christian Faulhammer for fixing some of the more horrible formatting screwups. Thanks also to Mike
-Frysinger and Brian Harring for proof-reading and suggestions for fixes and/or clarification.
+Christian Faulhammer for fixing some of the more horrible formatting screwups and providing the EAPI
+cheat sheet. Thanks also to Mike Frysinger and Brian Harring for proof-reading and suggestions for
+fixes and/or clarification.
 
 \section*{Copyright and Licence}
 
diff --git a/pms.cls b/pms.cls
index ca0874c..acbcf00 100644
--- a/pms.cls
+++ b/pms.cls
@@ -32,6 +32,7 @@
   marginnote,
   paralist,
   parskip,
+  pdfpages,
   verbatim,
   algorithm,
   algorithmic
diff --git a/pms.tex b/pms.tex
index 8426706..745882b 100644
--- a/pms.tex
+++ b/pms.tex
@@ -46,6 +46,8 @@
 
 \bibliography{pms}
 
+\includepdf[pages=-,landscape]{eapi_cheatsheet}
+
 \end{document}
 
 % vim: set filetype=tex fileencoding=utf8 et tw=100 spell spelllang=en :
-- 
1.6.0.6


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: 0002-Make-vc.tex-target-depend-on-the-existence-of-vc-git.patch --]
[-- Type: text/x-patch, Size: 650 bytes --]

From 7ed565f95c4d2d19bc98a5991ac6d1fdaad60ea0 Mon Sep 17 00:00:00 2001
From: Christian Faulhammer <fauli@gentoo.org>
Date: Tue, 14 Apr 2009 08:43:58 +0200
Subject: [PATCH] Make vc.tex target depend on the existence of vc-git.awk

---
 Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index b585411..9a49a6b 100644
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@ pms.bbl: pms.bib pms.tex vc.tex
 eapi_cheatsheet.pdf: vc.tex
 	pdflatex cheatsheet/eapi_cheatsheet
 
-vc.tex: pms.tex
+vc.tex: pms.tex vc-git.awk
 	/bin/sh ./vc
 
 pms.dvi: $(SOURCEFILES) pms.bbl
-- 
1.6.0.6


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.4: 0003-Use-system-s-plainurl.bst.patch --]
[-- Type: text/x-patch, Size: 29212 bytes --]

From 04e3ca5c4bef9c66086071a509ddce927d8a1f99 Mon Sep 17 00:00:00 2001
From: Christian Faulhammer <fauli@gentoo.org>
Date: Tue, 14 Apr 2009 08:40:40 +0200
Subject: [PATCH] Use system's plainurl.bst

The one provided in the PMS repository is out of date and lacks
hyperref support.  This can be avoided by using plainurl.bst from
dev-texlive/texlive-bibtexextra.
---
 plainurl.bst | 1349 ----------------------------------------------------------
 1 files changed, 0 insertions(+), 1349 deletions(-)
 delete mode 100644 plainurl.bst

diff --git a/plainurl.bst b/plainurl.bst
deleted file mode 100644
index 2f6a0e7..0000000
--- a/plainurl.bst
+++ /dev/null
@@ -1,1349 +0,0 @@
-%%% Modification of BibTeX style file /usr/share/texmf/bibtex/bst/base/plain.bst
-%%% ... by urlbst, version 0.5 (marked with "% urlbst")
-%%% See <http://www.astro.gla.ac.uk/users/norman/distrib/urlbst/>
-%%% Added webpage entry type, and url and lastchecked fields.
-%%% Original headers follow...
-
-% BibTeX standard bibliography style `plain'
-	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
-	% Copyright (C) 1985, all rights reserved.
-	% Copying of this file is authorized only if either
-	% (1) you make absolutely no changes to your copy, including name, or
-	% (2) if you do make changes, you name it something other than
-	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
-	% This restriction helps ensure that all standard styles are identical.
-	% The file btxbst.doc has the documentation for this style.
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-    eprint % urlbst
-    doi % urlbst
-    url % urlbst
-    lastchecked % urlbst
-  }
-  {}
-  { label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl } % urlbst...
-INTEGERS { hrefform addeprints adddoiresolver }
-% Following constants may be adjusted by hand, if desired
-FUNCTION {init.config.constants}
-{
-  "Available from: " 'urlintro := % prefix before URL
-  "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
-  "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
-  "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
-  "doi:" 'doiprefix := % text prefix printed before DOI ref
-  #0 'addeprints := % 0=no eprints; 1=include eprints
-  #0 'adddoiresolver := % 0=no DOI resolver; 1=include it
-  #0 'hrefform := % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs
-}
-INTEGERS { 
-  bracket.state
-  outside.brackets
-  open.brackets
-  within.brackets
-  close.brackets
-}
-% ...urlbst to here
-FUNCTION {init.state.consts}
-{ #0 'outside.brackets := % urlbst
-  #1 'open.brackets :=
-  #2 'within.brackets :=
-  #3 'close.brackets :=
-
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-STRINGS { s t }
-
-% urlbst
-FUNCTION {output.nonnull.original}
-{ 's :=
-  output.state mid.sentence =
-    { ", " * write$ }
-    { output.state after.block =
-	{ add.period$ write$
-	  newline$
-	  "\newblock " write$
-	}
-	{ output.state before.all =
-	    'write$
-	    { add.period$ " " * write$ }
-	  if$
-	}
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-% urlbst...
-FUNCTION {output.nonnull}
-{ % Save the thing we've been asked to output
-  's :=
-  % If the bracket-state is close.brackets, then add a close-bracket to
-  % what is currently at the top of the stack, and set bracket.state
-  % to outside.brackets
-  bracket.state close.brackets =
-    { "]" *
-      outside.brackets 'bracket.state :=
-    }
-    'skip$
-  if$
-  bracket.state outside.brackets =
-    { % We're outside all brackets -- this is the normal situation.
-      % Write out what's currently at the top of the stack, using the
-      % original output.nonnull function.
-      s
-      output.nonnull.original
-    }
-    { % Still in brackets.  Add open-bracket or (continuation) comma, add the
-      % new text (in s) to the top of the stack, and move to the close-brackets
-      % state, ready for next time (unless inbrackets resets it).  If we come
-      % into this branch, then output.state is carefully undisturbed.
-      bracket.state open.brackets =
-        { " [" * }
-        { ", " * } % bracket.state will be within.brackets
-      if$ 
-      s * 
-      close.brackets 'bracket.state :=
-    }
-  if$
-}
-
-% Call this function just before adding something which should be presented in 
-% brackets.  bracket.state is handled specially within output.nonnull.
-FUNCTION {inbrackets}
-{ bracket.state close.brackets =
-    { within.brackets 'bracket.state := } % reset the state: not open nor closed
-    { open.brackets 'bracket.state := }
-  if$
-}
-
-FUNCTION {format.lastchecked}
-{ lastchecked empty$
-    { "" }
-    { inbrackets "cited " lastchecked * }
-  if$
-}
-% ...urlbst to here
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.check}
-{ 't :=
-  duplicate$ empty$
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.bibitem}
-{ outside.brackets 'bracket.state := % urlbst
-   newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ 
-  bracket.state close.brackets = % urlbst
-    { "]" * }
-    'skip$
-  if$
-   add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-	'skip$
-	{ after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
-      nameptr #1 >
-	{ namesleft #1 >
-	    { ", " * t * }
-	    { numnames #2 >
-		{ "," * }
-		'skip$
-	      if$
-	      t "others" =
-		{ " et~al." * }
-		{ " and " * t * }
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ ", editors" * }
-	{ ", editor" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.title}
-{ title empty$
-    { "" }
-    { title "t" change.case$ }
-  if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-	{ t #1 #2 substring$ "--" = not
-	    { "--" *
-	      t #2 global.max$ substring$ 't :=
-	    }
-	    {   { t #1 #1 substring$ "-" = }
-		{ "-" *
-		  t #2 global.max$ substring$ 't :=
-		}
-	      while$
-	    }
-	  if$
-	}
-	{ t #1 #1 substring$ *
-	  t #2 global.max$ substring$ 't :=
-	}
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ year empty$
-    { month empty$
-	{ "" }
-	{ "there's a month but no year in " cite$ * warning$
-	  month
-	}
-      if$
-    }
-    { month empty$
-	'year
-	{ month " " * year * }
-      if$
-    }
-  if$
-}
-
-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$
-    { "" }
-    { "volume" volume tie.or.space.connect
-      series empty$
-	'skip$
-	{ " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
-    { number empty$
-	{ series field.or.null }
-	{ output.state mid.sentence =
-	    { "number" }
-	    { "Number" }
-	  if$
-	  number tie.or.space.connect
-	  series empty$
-	    { "there's a number but no series in " cite$ * warning$ }
-	    { " in " * series * }
-	  if$
-	}
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-	{ edition "l" change.case$ " edition" * }
-	{ edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-	{ #1 'multiresult := }
-	{ t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-	{ "pages" pages n.dashify tie.or.space.connect }
-	{ "page" pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
-  number empty$
-    'skip$
-    { "(" number * ")" * *
-      volume empty$
-	{ "there's a number but no volume in " cite$ * warning$ }
-	'skip$
-      if$
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-	{ pop$ format.pages }
-	{ ":" * pages n.dashify * }
-      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$
-	'skip$
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { editor empty$
-	{ "In " booktitle emphasize * }
-	{ "In " format.editors * ", " * booktitle emphasize * }
-      if$
-    }
-  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$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { "Technical Report" }
-    'type
-  if$
-  number empty$
-    { "t" change.case$ }
-    { 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 {\em " journal * "\/}" * }
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al." * }
-    { #2 <
-	'skip$
-	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-	    { " et~al." * }
-	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" 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$
-	      "" *
-	    }
-	    { "{\em " * series * "\/}" * }
-	  if$
-	}
-	{ key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.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$
-	      ""
-	    }
-	    { "In {\em " booktitle * "\/}" * }
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { "In " format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-% urlbst...
-% Functions for making hypertext links.
-% In all cases, the stack has (link-text href-url)
-%
-% make 'null' specials
-FUNCTION {make.href.null}
-{
-  pop$
-}
-% make hypertex specials
-FUNCTION {make.href.hypertex}
-{ 
-  "\special {html:<a href=" quote$ *
-  swap$ * quote$ * "> }" * swap$ *
-  "\special {html:</a>}" *
-}
-% make hyperref specials
-FUNCTION {make.href.hyperref}
-{ 
-  "\href {" swap$ * "} {" * swap$ * "}" *
-}
-FUNCTION {make.href}
-{ hrefform #2 =
-    'make.href.hyperref      % hrefform = 2
-    { hrefform #1 =
-        'make.href.hypertex  % hrefform = 1
-        'make.href.null      % hrefform = 0 (or anything else)
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.url}
-{ url empty$
-    { "" }
-      { hrefform #1 =
-          { % special case -- add HyperTeX specials
-            urlintro "\url{" url * "}" * url make.href.hypertex * }
-          { urlintro "\url{" * url * "}" * }
-       if$
-     }
-  if$
-}
-
-FUNCTION {format.eprint}
-{ eprint empty$
-    { "" }
-    { eprintprefix eprint * eprinturl eprint * make.href }
-  if$
-}
-
-FUNCTION {format.doi}
-{ doi empty$
-    { "" }
-    { doiprefix doi * doiurl doi * make.href }
-  if$
-}
-
-% Output a URL.  We can't use the more normal idiom (something like
-% `format.url output'), because the `inbrackets' within
-% format.lastchecked applies to everything between calls to `output',
-% so that `format.url format.lastchecked * output' ends up with both
-% the URL and the lastchecked in brackets.
-FUNCTION {output.url}
-{ url empty$
-    'skip$ 
-    { new.block 
-      format.url output
-      format.lastchecked output 
-    }
-  if$
-}
-
-FUNCTION {output.web.refs}
-{
-  new.block
-  output.url
-  addeprints eprint empty$ not and
-    { format.eprint output.nonnull }
-    'skip$
-  if$
-  adddoiresolver doi empty$ not and
-    { format.doi output.nonnull }
-    'skip$
-  if$
-%  addeprints
-%    { eprint empty$
-%        'skip$
-%        { format.eprint output.nonnull }
-%      if$
-%    }
-%    'skip$
-%  if$
-}
-
-% Webpage entry type.
-% Title and url fields required;
-% author, note, year, month, and lastchecked fields optional
-% See references 
-%   ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
-%   http://www.classroom.net/classroom/CitingNetResources.html
-%   http://neal.ctstateu.edu/history/cite.html
-%   http://www.cas.usf.edu/english/walker/mla.html
-% for citation formats for web pages.
-FUNCTION {webpage}
-{ output.bibitem
-  author empty$
-    { editor empty$
-        'skip$  % author and editor both optional
-        { format.editors output.nonnull }
-      if$
-    }
-    { editor empty$
-        { format.authors output.nonnull }
-        { "can't use both author and editor fields in " cite$ * warning$ }
-      if$
-    }
-  if$
-%  author empty$
-%    'skip$
-%    { format.authors output.nonnull }
-%  if$
-  new.block
-  format.title "title" output.check
-  inbrackets "online" output
-  new.block
-  year empty$
-    'skip$
-    { format.date "year" output.check }
-  if$
-  lastchecked empty$
-    'skip$
-    { format.lastchecked output }
-  if$
-  new.block
-  format.url "url" output.check
-  new.block
-  note output
-  fin.entry
-}
-% ...urlbst to here
-
-
-FUNCTION {article}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { journal emphasize "journal" output.check
-      format.vol.num.pages output
-      format.date "year" output.check
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
-  format.authors output
-  new.block
-  format.title "title" output.check
-  howpublished address new.block.checkb
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { format.bvolume output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date "year" output.check
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.chapter.pages output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-      format.edition output
-      format.date "year" output.check
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.bvolume output
-      format.number.series output
-      format.pages output
-      address empty$
-	{ organization publisher new.sentence.checkb
-	  organization output
-	  publisher output
-	  format.date "year" output.check
-	}
-	{ address output.nonnull
-	  format.date "year" output.check
-	  new.sentence
-	  organization output
-	  publisher output
-	}
-      if$
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
-  author empty$
-    { organization empty$
-	'skip$
-	{ organization output.nonnull
-	  address output
-	}
-      if$
-    }
-    { format.authors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  author empty$
-    { organization empty$
-	{ address new.block.checka
-	  address output
-	}
-	'skip$
-      if$
-    }
-    { organization address new.block.checkb
-      organization output
-      address output
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  "Master's thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
-  format.authors output
-  title howpublished new.block.checkb
-  format.title output
-  howpublished new.block.checka
-  howpublished output
-  format.date output
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "PhD thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
-  editor empty$
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  format.btitle "title" output.check
-  format.bvolume output
-  format.number.series output
-  address empty$
-    { editor empty$
-	{ publisher new.sentence.checka }
-	{ organization publisher new.sentence.checkb
-	  organization output
-	}
-      if$
-      publisher output
-      format.date "year" output.check
-    }
-    { address output.nonnull
-      format.date "year" output.check
-      new.sentence
-      editor empty$
-	'skip$
-	{ organization output }
-      if$
-      publisher output
-    }
-  if$
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  format.tr.number output.nonnull
-  institution "institution" output.check
-  address output
-  format.date "year" output.check
-  new.block
-  note output
-  output.web.refs  % urlbst
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  note "note" output.check
-  format.date output
-  output.web.refs  % urlbst
-  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"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-	{ "   " * }
-	'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  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 {author.organization.sort}
-{ author empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need author, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need editor, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-	'editor.organization.sort
-	{ type$ "manual" =
-	    'author.organization.sort
-	    'author.sort
-	  if$
-	}
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION {begin.bib}
-{ preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.config.constants}
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
-- 
1.6.0.6


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.5: 0004-Make-item-recognise-its-optional-argument.patch --]
[-- Type: text/x-patch, Size: 3540 bytes --]

From 9aa62bfb269fc718900a13a31211288f3307d080 Mon Sep 17 00:00:00 2001
From: Christian Faulhammer <fauli@gentoo.org>
Date: Tue, 14 Apr 2009 15:01:13 +0200
Subject: [PATCH] Make \item recognise its optional argument

---
 dependencies.tex |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/dependencies.tex b/dependencies.tex
index 9d26378..beda6f3 100644
--- a/dependencies.tex
+++ b/dependencies.tex
@@ -449,19 +449,19 @@ is only for package manager use and must not be used by ebuilds.
     A kdebuild-style use dependency consists of one of the following:
 
     \begin{description}
-    \item{[opt]} The flag must be enabled.
-    \item{[opt=]} The flag must be enabled if the flag is enabled for the package with the
+    \item[{[opt]}] The flag must be enabled.
+    \item[{[opt=]}] The flag must be enabled if the flag is enabled for the package with the
         dependency, or disabled otherwise.
-    \item{[opt!=]} The flag must be disabled if the flag is enabled for the package with the
+    \item[{[opt!=]}] The flag must be disabled if the flag is enabled for the package with the
         dependency, or enabled otherwise.
-    \item{[opt?]} The flag must be enabled if the flag is enabled for the package with the
+    \item[{[opt?]}] The flag must be enabled if the flag is enabled for the package with the
         dependency.
-    \item{[opt!?]} The flag must be enabled if the use flag is disabled for the package with the
+    \item[{[opt!?]}] The flag must be enabled if the use flag is disabled for the package with the
         dependency.
-    \item{[-opt]} The flag must be disabled.
-    \item{[-opt?]} The flag must be disabled if the flag is enabled for the package with the
+    \item[{[-opt]}] The flag must be disabled.
+    \item[{[-opt?]}] The flag must be disabled if the flag is enabled for the package with the
         dependency.
-    \item{[-opt!?]} The flag must be disabled if the flag is disabled for the package with the
+    \item[{[-opt!?]}] The flag must be disabled if the flag is disabled for the package with the
         dependency.
     \end{description}
 
@@ -479,16 +479,16 @@ is only for package manager use and must not be used by ebuilds.
 A 2-style or 3-style use dependency consists of one of the following:
 
 \begin{description}
-\item{[opt]} The flag must be enabled.
-\item{[opt=]} The flag must be enabled if the flag is enabled for the package with the
+\item[{[opt]}] The flag must be enabled.
+\item[{[opt=]}] The flag must be enabled if the flag is enabled for the package with the
     dependency, or disabled otherwise.
-\item{[!opt=]} The flag must be disabled if the flag is enabled for the package with the
+\item[{[!opt=]}] The flag must be disabled if the flag is enabled for the package with the
     dependency, or enabled otherwise.
-\item{[opt?]} The flag must be enabled if the flag is enabled for the package with the
+\item[{[opt?]}] The flag must be enabled if the flag is enabled for the package with the
     dependency.
-\item{[!opt?]} The flag must be disabled if the use flag is disabled for the package with the
+\item[{[!opt?]}] The flag must be disabled if the use flag is disabled for the package with the
     dependency.
-\item{[-opt]} The flag must be disabled.
+\item[{[-opt]}] The flag must be disabled.
 \end{description}
 
 Multiple requirements may be combined using commas, e.g. \t{[first,-second,third?]}.
-- 
1.6.0.6


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2009-04-14 13:56 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-12 19:14 [gentoo-pms] Patches for your reviewing pleasure: Various improvements, including cheat sheet Christian Faulhammer
2009-04-12 19:36 ` Ciaran McCreesh
2009-04-13  9:01   ` Christian Faulhammer
2009-04-13 16:01     ` Ciaran McCreesh
2009-04-14  8:44       ` Christian Faulhammer
2009-04-14 13:04         ` Ciaran McCreesh
2009-04-14 13:55           ` Christian Faulhammer [this message]
2009-04-14 14:46             ` Ciaran McCreesh
2009-04-15 15:28               ` Christian Faulhammer
2009-04-15 20:35                 ` Ciaran McCreesh
2009-04-15 21:58                   ` Christian Faulhammer
2009-04-15 22:10                     ` Ciaran McCreesh
2009-04-15 22:46                   ` Christian Faulhammer
2009-04-16 14:16                     ` Ciaran McCreesh
2009-04-16 22:23                       ` Christian Faulhammer
2009-04-17 14:11                 ` Yannick Mortier
2009-04-12 21:25 ` David Leverton
2009-04-13  9:05   ` Christian Faulhammer
2009-04-13 21:16     ` [gentoo-pms] [PATCH] Work around TeX4ht being weird David Leverton
2009-04-14  8:32       ` Christian Faulhammer
2009-04-15 19:03         ` David Leverton
2009-04-15 21:59           ` Christian Faulhammer
2009-04-16  7:25             ` David Leverton
2009-04-16 19:37           ` [gentoo-pms] [PATCH 1/2] " David Leverton
2009-04-16 19:37             ` [gentoo-pms] [PATCH 2/2] Update TeX4ht sed hacks David Leverton
2009-04-16 19:42               ` Ciaran McCreesh
2009-04-17 14:13               ` Yannick Mortier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090414155543.16e78e66@terra.solaris \
    --to=fauli@gentoo.org \
    --cc=ciaran.mccreesh@googlemail.com \
    --cc=gentoo-pms@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox