%%=============================================================================
%% 
%% This file is part of BibTool.
%% It is distributed under the GNU General Public License.
%% See the file COPYING for details.
%% 
%% (c) 1999 Gerd Neugebauer
%% 
%% Net: gerd.neugebauer@sdm.de
%%	gerd.neugebauer@gmx.de
%% 
%%*****************************************************************************
\documentclass[11pt,a4paper]{article}

\newcommand\BibTool{{\sc Bib\hskip-.1em\-%
        \mbox{T\hskip-.15emo\hskip-.05emo\hskip-.05eml}}}
\newcommand\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
        T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}

\begin{document}

\title{\BibTool---Ideas for Further Development}
\author{Gerd Neugebauer}
\maketitle

This document contains ideas for  improvements.  Most of the items are
mere key  words and may not be  meaningful for others.  I  try to keep
the  items in a  order from  highest to  lowest priority.   However, I
change the order from time  to time and hopefully items will disappear
at some time.

\section*{General ideas}

\begin{itemize}
\item Make a C library of routines for manipulating \BibTeX\ files.
  (partially done. The main emphasis went into the documentation.
  Additional cleaning needed)

  \begin{itemize}
  \item Use the library and provide a interface to various programming
    languages. The first candidate would be C. Other candidates are
    C++, Tcl, Perl, Guile.
  \item Use the library and provide an SQL interface (see below).
  \item Use the library to write a better \BibTeX.
  \end{itemize}
  
\item 	Add a SQL like extraction language (partially exists).  Maybe
  this is the time to completely redesign the resource language. I
  think I will make a major revision or a seperate program/library for
  this.
  
\item Use Unicode UTF8 as character set. This goes beyond \BibTeX\ and
  brings in a new quality.
\end{itemize}

\section*{Special ideas}

\begin{itemize}
\item 	Provide a better installation routine. Especially for BibTcl a
	wish script might be the best solution since wish has to be
	installed before BibTcl can be made.

\item   The different keys: Sortkey/OldKey deserve a clearer handling.
	Maybe some bugs are hidden here.

\item	Maybe an index/several indices should be used to speed up
	access to records. Maybe a real database engine should be used for
	the underlying mechanism.

\item	Support for the extended  key notation file::key. This is said
	to be used in \BibTeX\,1.0.

\item	Support the special fields @ALIAS and @MODIFY as described by
	Oren Patashnik in TUGboat. (partially done) Each function has
	to be checked to decide if a refinement of the specification
	is necessary

\item   Implement a garbage collector for the symbol table to avoid
	memory leaks when used from C/C++/Tcl/Perl/\dots

\item	An escape character in strings might be missing.

\item	Integrate field rewriting into the key generation algorithm.
	Allow arbitrary fields to be constructed like keys.
	Maybe this is a step towards a general manipulation language.
	I should keep this in mind for major revision 3.
	(The reverse is done. Key formats are evaluated when rewriting)

\item	General formatting language (Maybe a replacement for \BibTeX)
	Other applications: extract all keys, prettyprint entries in
        ASCII, HTML, etc.
	The main problem is to make a decision for the scripting language.
	I think I should use something existing and not roll a new one.
	(Tcl, Perl, or Guile are likely candidates)

\item   Use a tree representation in field rewriting instead of parsing and
	evaluating the format each time (speed issue).

\item   Do a better job when sorting. Especially for international
	bibliographies the sorting may not be adequate. Learn something from
	xindy?

\item   Analyze bst files to find record types and entries used.
	(partially exists but is not integrated yet)

\item	Provide a specification for the statistics function. Maybe SQL
	serves for this purpose.

\item   Use the kpathsea library to find files.
	It has been done for Unix-like operating systems. For others it's
	still missing.

\item   Selection of items according to regexp match on fields.
	This has to be generalized to allow full power of a 
	first order language.

\item   Make the program \emph{16-bit} clean. This means UniCode!

\item   Eliminate compiled in defaults completely.
	Use a library directory to load initializations.

\item	Integrate add/delete.field into the rewriting mechanism.

\item	Automatic string detection.
	The reverse of string expansion. Replace common values by new strings.
	This can partially be done with field rewriting!

\item	Respect crossref at selection

\item	Support \verb|\cite| in fields.

\item	Documentation: improve tutorial part. (Maybe a book?)

\item	Documentation in texinfo format?

\item	Documentation in HTML format?\\
  The first step has been done. A converter in Perl can cope with the
  Users Manual and some minor documents. Maybe some additional efforts
  are needed for the Programmer's Manuals.

\item	UN*X man pages?
\end{itemize}


\section*{Write a graphical front end for \BibTool}

This is maybe not a simple task. \BibTool\ is already too powerful.
(first experiments are not very promising)

\section*{Write a replacement for \BibTeX{} :-)}

Maybe I will wait until \BibTeX\,1.0 is out.

\begin{itemize}
\item 	Better styles in a readable programming language.  This is a
  major problem. Which language should I use?  I am working towards
  making a library. Thus it should be easy to integrate \BibTool\ into
  any language.
\item	Object oriented approach.  e.g. for proceedings containing
  articles.
\begin{verbatim}

	@proceeding{abc,
		editor = "...",
		booktitle = "...",
		title = "...",
	    @inprocedings{1,
		author = "...",
		title = "..."
	    }
	}
\end{verbatim}
  The subentry should inherit all the attributes of its parent and the
  key as prefix to its own.
  
\item	Drop limitations. E.g.
  \begin{itemize}
  \item size of a field.
  \item order of crossreferenced records
  \end{itemize}
  
\item Support multi-language bibliographies.
  
\item Backward compatibility: It should be possible to use the new
  program as a replacement for the existing \BibTeX\ without
  modification of the \BibTeX\ database.  The styles should be usable
  or an automatic translation into a new format should be provided.
\end{itemize}


If you have read until here and you want to take one of the tasks then
contact me:
\bigskip

\begin{quote}
  Gerd Neugebauer\\
  \email{gerd.neugebauer@sdm.de}\\
  \email{gerd.neugebauer@gmx.de}
\end{quote}

\end{document}
\endinput
