aboutsummaryrefslogtreecommitdiff
path: root/readline/doc
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-10-05 16:39:44 -0600
committerTom Tromey <tom@tromey.com>2019-10-23 15:16:48 -0600
commit6999161a2a3b3cbd918570e094199184331d4f81 (patch)
tree4c20bbd8c1c19e2e7ebcc55d821957e22c4ab9e8 /readline/doc
parent12e7c35ec3c09793ed9613cdf696b9f0f4dd86ec (diff)
downloadgdb-6999161a2a3b3cbd918570e094199184331d4f81.zip
gdb-6999161a2a3b3cbd918570e094199184331d4f81.tar.gz
gdb-6999161a2a3b3cbd918570e094199184331d4f81.tar.bz2
Move readline to the readline/readline subdirectory
readline turns out to be a bit of a stumbling block for the project to move gdbsupport (and then gdbserver) to the top-level. The issue is that readline headers are intended to be included with names like "readline/readline.h". To support this, gdb effectively adds a -I option pointing to the top-level source directory -- but, importantly, this option is not used when the system readline is used. For gdbsupport, a -I option like this would always be needed, but that in turn would break the system readline case. This was PR build/17077, fixed in commit a8a5dbcab8df0b3a9e04745d4fe8d64740acb323. Previously, we had discussed this on the gdb-patches list in terms of removing readline from the tree https://sourceware.org/ml/gdb-patches/2019-09/msg00317.html However, Eli expressed some concerns, and Joel did as well (off-list). Given those concerns, and the fact that a patch-free local readline is relatively new in gdb (it was locally patched for years), I changed my mind and decided to handle this situation by moving the readline sources down a level. That is, upstream readline is now in readline/readline, and the top-level readline directory just contains the minimal configury needed to build that. This fixes the problem because, when gdb unconditionally adds a -I$(top_srcdir), this will not find readline headers. A separate -I will be needed instead, which is exactly what's needed for --with-system-readline. gdb/ChangeLog 2019-10-23 Tom Tromey <tom@tromey.com> * Makefile.in (READLINE_DIR): Update. gdb/doc/ChangeLog 2019-10-23 Tom Tromey <tom@tromey.com> * Makefile.in (READLINE_DIR): Update. readline/ChangeLog 2019-10-23 Tom Tromey <tom@tromey.com> Move old contents to readline/ subdirectory. * aclocal.m4, configure, configure.ac, .gitignore, Makefile.am, Makefile.in, README: New files. Change-Id: Ice156a2ee09ea68722b48f64d97146d7428ea9e4
Diffstat (limited to 'readline/doc')
-rw-r--r--readline/doc/ChangeLog.gdb94
-rw-r--r--readline/doc/Makefile.in271
-rw-r--r--readline/doc/fdl.texi506
-rw-r--r--readline/doc/history.3680
-rw-r--r--readline/doc/history.texi85
-rw-r--r--readline/doc/hstech.texi602
-rw-r--r--readline/doc/hsuser.texi506
-rw-r--r--readline/doc/readline.31539
-rw-r--r--readline/doc/rlman.texi84
-rw-r--r--readline/doc/rltech.texi2731
-rw-r--r--readline/doc/rluser.texi2389
-rw-r--r--readline/doc/rluserman.texi70
-rwxr-xr-xreadline/doc/texi2dvi1944
-rwxr-xr-xreadline/doc/texi2html5428
-rw-r--r--readline/doc/version.texi10
15 files changed, 0 insertions, 16939 deletions
diff --git a/readline/doc/ChangeLog.gdb b/readline/doc/ChangeLog.gdb
deleted file mode 100644
index 5830e1b..0000000
--- a/readline/doc/ChangeLog.gdb
+++ /dev/null
@@ -1,94 +0,0 @@
-2011-05-11 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * hsuser.texi (Using History Interactively): Disable !BashFeatures
- @defcodeindex. Make the `Programming with GNU History' reference
- external.
- * inc-hist.texinfo: Remove.
-
-2011-05-11 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- Imported readline 6.2, and upstream patch 001.
-
-2006-04-24 Daniel Jacobowitz <dan@codesourcery.com>
-
- Imported readline 5.1, and upstream patches 001-004.
-
-2003-09-14 Andrew Cagney <cagney@redhat.com>
-
- * history.0: Delete generated file.
-
-2002-02-24 Elena Zannoni <ezannoni@redhat.com>
-
- * ChangeLog.gdb: Renamed from ChangeLog.
-
-2002-01-20 Eli Zaretskii <eliz@is.elta.co.il>
-
- * rluser.texinfo (Sample Init File): Prevent overfull hboxes.
- From Brian Youmans <3diff@gnu.org>.
-
-2000-07-09 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- * Removed generated files rluserman.{dvi, info, html, ps}.
-
-2000-07-07 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- * Import of readline 4.1.
-
- Regenerated inc-hist.texinfo as copy of hsuser.texinfo, for
- inclusion in the gdb manual.
-
- New file: rluserman.texinfo
-
-Tue Apr 18 15:43:52 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * readline.0: Delete. Generated by Makefile, deleted by distclean
- rule.
-
-Tue Mar 28 16:06:22 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * inc-hist.texinfo, rluser.texinfo: Revert change Fri Mar 24
- 18:04:32 2000 Andrew Cagney <cagney@b1.cygnus.com>.
- Unconditionally provide @chapter and @node.
-
-Fri Mar 24 18:04:32 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * inc-hist.texinfo: When GDBN omit the chapter/node.
- * rluser.texinfo (Command Line Editing): Ditto.
-
-1999-08-10 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- * hsuser.texinfo (Bash History Builtins): Comment out btindex
- commands.
-
- * inc-hist.texinfo: New file. Same as hsuser.texinfo, but w/o
- cross reference to GNU History Manual.
-
-Tue Dec 22 10:07:58 1998 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- * hsuser.texinfo (Bash History Builtins): comment out btindex
- commands.
-
- * Import of Readline 2.2.1.
-
- New files: readline.0, readline.3, texi2dvi, texi2html.
-
-1998-12-17 Felix Lee <flee@cygnus.com>
-
- * inc-hist.texi: @node line "Using History" was wrong.
-
-Thu Jul 9 17:03:26 1998 Edith Epstein <eepstein@sophia.cygnus.com>
-
- * inc-hist.texi: one line change.
-
-Wed Sep 20 12:57:29 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (maintainer-clean): New synonym for realclean.
-
-Tue Feb 2 11:40:04 1993 Roland H. Pesch (pesch@fowanton.cygnus.com)
-
- * Makefile.in: configurable (and useable) Makefile template
- * Makefile: removed, replaced with configurable Makefile.in
- * texindex.c texinfo.tex: remove, replacing w/refs to tools
- elsewhere in distribution tree
- * configure.in: pro forma configure stub
- * ChangeLog: new file
diff --git a/readline/doc/Makefile.in b/readline/doc/Makefile.in
deleted file mode 100644
index a38bc9e..0000000
--- a/readline/doc/Makefile.in
+++ /dev/null
@@ -1,271 +0,0 @@
-# This makefile for Readline library documentation is in -*- text -*- mode.
-# Emacs likes it that way.
-
-# Copyright (C) 1996-2009 Free Software Foundation, Inc.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-
-topdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-
-datarootdir = @datarootdir@
-
-docdir = @docdir@
-infodir = @infodir@
-
-mandir = @mandir@
-manpfx = man
-
-man1ext = .1
-man1dir = $(mandir)/$(manpfx)1
-man3ext = .3
-man3dir = $(mandir)/$(manpfx)3
-
-# set this to a value to have the HTML documentation installed
-htmldir =
-
-# Support an alternate destination root directory for package building
-DESTDIR =
-
-SHELL = @MAKE_SHELL@
-RM = rm -f
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-BUILD_DIR = @BUILD_DIR@
-TEXINPUTDIR = $(srcdir)
-
-MAKEINFO = LANGUAGE= makeinfo
-TEXI2DVI = $(srcdir)/texi2dvi
-TEXI2HTML = $(srcdir)/texi2html
-QUIETPS = #set this to -q to shut up dvips
-PAPERSIZE = letter
-PSDPI = 600
-DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky
-# experimental; uses external texi2dvi for now; this needs pdftex to be present
-TEXI2PDF = texi2dvi --pdf
-
-# These tools might not be available; they're not required
-DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE}
-PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@
-
-RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \
- $(srcdir)/rltech.texi $(srcdir)/version.texi \
- $(srcdir)/rluserman.texi $(srcdir)/fdl.texi
-HISTSRC = $(srcdir)/history.texi $(srcdir)/hsuser.texi \
- $(srcdir)/hstech.texi $(srcdir)/version.texi $(srcdir)/fdl.texi
-
-# This should be a program that converts troff to an ascii-readable format
-NROFF = groff -Tascii
-
-# This should be a program that converts troff to postscript
-GROFF = groff
-
-DVIOBJ = readline.dvi history.dvi rluserman.dvi
-INFOOBJ = readline.info history.info rluserman.info
-PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps
-HTMLOBJ = readline.html history.html rluserman.html
-TEXTOBJ = readline.0 history.0
-PDFOBJ = readline.pdf history.pdf rluserman.pdf
-
-INTERMEDIATE_OBJ = rlman.dvi
-
-DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) $(PDFOBJ)
-
-.SUFFIXES: .0 .3 .ps .txt .dvi .html .pdf
-
-.3.0:
- $(RM) $@
- -${NROFF} -man $< > $@
-
-.ps.pdf:
- $(RM) $@
- -${PSPDF} $<
-
-.dvi.pdf:
- $(RM) $@
- -${DVIPDF} $<
-
-#.texi.pdf:
-# $(RM) $@
-# -${TEXI2PDF} $<
-
-all: info dvi html ps text pdf
-nodvi: info html text
-
-xdist: $(DIST_DOCS)
-
-info: $(INFOOBJ)
-dvi: $(DVIOBJ)
-ps: $(PSOBJ)
-html: $(HTMLOBJ)
-text: $(TEXTOBJ)
-pdf: $(PDFOBJ)
-
-readline.dvi: $(RLSRC)
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texi
- mv rlman.dvi readline.dvi
-
-readline.info: $(RLSRC)
- $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texi
-
-rluserman.dvi: $(RLSRC)
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texi
-
-rluserman.info: $(RLSRC)
- $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texi
-
-history.dvi: ${HISTSRC}
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/history.texi
-
-history.info: ${HISTSRC}
- $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/history.texi
-
-readline.ps: readline.dvi
- $(RM) $@
- $(DVIPS) readline.dvi
-
-rluserman.ps: rluserman.dvi
- $(RM) $@
- $(DVIPS) rluserman.dvi
-
-history.ps: history.dvi
- $(RM) $@
- $(DVIPS) history.dvi
-
-#
-# This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org
-#
-readline.html: ${RLSRC}
- $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texi
- sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html
- $(RM) rlman.html
-
-rluserman.html: ${RLSRC}
- $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texi
-
-history.html: ${HISTSRC}
- $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/history.texi
-
-readline.0: readline.3
-
-readline_3.ps: $(srcdir)/readline.3
- ${RM} $@
- ${GROFF} -man < $(srcdir)/readline.3 > $@
-
-history.0: history.3
-
-history_3.ps: $(srcdir)/history.3
- ${RM} $@
- ${GROFF} -man < $(srcdir)/history.3 > $@
-
-readline.pdf: $(RLSRC)
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/rlman.texi
- mv rlman.pdf $@
-
-history.pdf: $(HISTSRC)
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/history.texi
-
-rluserman.pdf: $(RLSRC)
- TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/rluserman.texi
-
-clean:
- $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \
- *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o \
- core *.core
-
-mostlyclean: clean
-
-distclean: clean maybe-clean
- $(RM) $(INTERMEDIATE_OBJ)
- $(RM) Makefile
-
-maybe-clean:
- -if test "X$(topdir)" != "X.." && test "X$(topdir)" != "X$(BUILD_DIR)"; then \
- $(RM) $(DIST_DOCS); \
- fi
-
-maintainer-clean: clean
- $(RM) $(DIST_DOCS)
- $(RM) $(INTERMEDIATE_OBJ)
- $(RM) $(PDFOBJ)
- $(RM) Makefile
-
-installdirs: $(topdir)/support/mkdirs
- -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir)
- -if test -n "${htmldir}" ; then \
- $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \
- fi
-
-install: installdirs
- if test -f readline.info; then \
- ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \
- else \
- ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \
- fi
- if test -f rluserman.info; then \
- ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
- else \
- ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
- fi
- if test -f history.info; then \
- ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \
- else \
- ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \
- fi
- -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
- install-info --dir-file=$(DESTDIR)$(infodir)/dir \
- $(DESTDIR)$(infodir)/readline.info ; \
- install-info --dir-file=$(DESTDIR)$(infodir)/dir \
- $(DESTDIR)$(infodir)/history.info ; \
- install-info --dir-file=$(DESTDIR)$(infodir)/dir \
- $(DESTDIR)$(infodir)/rluserman.info ; \
- else true; fi
- -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext)
- -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext)
- -if test -n "${htmldir}" ; then \
- if test -f readline.html; then \
- ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \
- else \
- ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \
- fi ; \
- if test -f history.html; then \
- ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \
- else \
- ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \
- fi ; \
- if test -f rluserman.html; then \
- ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
- else \
- ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
- fi ; \
- fi
-
-uninstall:
- $(RM) $(DESTDIR)$(infodir)/readline.info
- $(RM) $(DESTDIR)$(infodir)/rluserman.info
- $(RM) $(DESTDIR)$(infodir)/history.info
- $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext)
- $(RM) $(DESTDIR)$(man3dir)/history$(man3ext)
- -if test -n "${htmldir}" ; then \
- $(RM) $(DESTDIR)$(htmldir)/readline.html ; \
- $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \
- $(RM) $(DESTDIR)$(htmldir)/history.html ; \
- fi
diff --git a/readline/doc/fdl.texi b/readline/doc/fdl.texi
deleted file mode 100644
index 8805f1a..0000000
--- a/readline/doc/fdl.texi
+++ /dev/null
@@ -1,506 +0,0 @@
-@c The GNU Free Documentation License.
-@center Version 1.3, 3 November 2008
-
-@c This file is intended to be included within another document,
-@c hence no sectioning command or @node.
-
-@display
-Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
-@uref{http://fsf.org/}
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@enumerate 0
-@item
-PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document @dfn{free} in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of ``copyleft'', which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-@item
-APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The ``Document'', below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as ``you''. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A ``Modified Version'' of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A ``Secondary Section'' is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The ``Invariant Sections'' are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The ``Cover Texts'' are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A ``Transparent'' copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not ``Transparent'' is called ``Opaque''.
-
-Examples of suitable formats for Transparent copies include plain
-@sc{ascii} without markup, Texinfo input format, La@TeX{} input
-format, @acronym{SGML} or @acronym{XML} using a publicly available
-@acronym{DTD}, and standard-conforming simple @acronym{HTML},
-PostScript or @acronym{PDF} designed for human modification. Examples
-of transparent image formats include @acronym{PNG}, @acronym{XCF} and
-@acronym{JPG}. Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, @acronym{SGML} or
-@acronym{XML} for which the @acronym{DTD} and/or processing tools are
-not generally available, and the machine-generated @acronym{HTML},
-PostScript or @acronym{PDF} produced by some word processors for
-output purposes only.
-
-The ``Title Page'' means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, ``Title Page'' means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-The ``publisher'' means any person or entity that distributes copies
-of the Document to the public.
-
-A section ``Entitled XYZ'' means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as ``Acknowledgements'',
-``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
-of such a section when you modify the Document means that it remains a
-section ``Entitled XYZ'' according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-@item
-VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-@item
-COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-@item
-MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-@enumerate A
-@item
-Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
-@item
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
-@item
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
-@item
-Preserve all the copyright notices of the Document.
-
-@item
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
-@item
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
-@item
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
-@item
-Include an unaltered copy of this License.
-
-@item
-Preserve the section Entitled ``History'', Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled ``History'' in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
-@item
-Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the ``History'' section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
-@item
-For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
-@item
-Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
-@item
-Delete any section Entitled ``Endorsements''. Such a section
-may not be included in the Modified Version.
-
-@item
-Do not retitle any existing section to be Entitled ``Endorsements'' or
-to conflict in title with any Invariant Section.
-
-@item
-Preserve any Warranty Disclaimers.
-@end enumerate
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled ``Endorsements'', provided it contains
-nothing but endorsements of your Modified Version by various
-parties---for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-@item
-COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled ``History''
-in the various original documents, forming one section Entitled
-``History''; likewise combine any sections Entitled ``Acknowledgements'',
-and any sections Entitled ``Dedications''. You must delete all
-sections Entitled ``Endorsements.''
-
-@item
-COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-@item
-AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an ``aggregate'' if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-@item
-TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled ``Acknowledgements'',
-``Dedications'', or ``History'', the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-@item
-TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense, or distribute it is void, and
-will automatically terminate your rights under this License.
-
-However, if you cease all violation of this License, then your license
-from a particular copyright holder is reinstated (a) provisionally,
-unless and until the copyright holder explicitly and finally
-terminates your license, and (b) permanently, if the copyright holder
-fails to notify you of the violation by some reasonable means prior to
-60 days after the cessation.
-
-Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, receipt of a copy of some or all of the same material does
-not give you any rights to use it.
-
-@item
-FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-@uref{http://www.gnu.org/copyleft/}.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License ``or any later version'' applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation. If the Document
-specifies that a proxy can decide which future versions of this
-License can be used, that proxy's public statement of acceptance of a
-version permanently authorizes you to choose that version for the
-Document.
-
-@item
-RELICENSING
-
-``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
-World Wide Web server that publishes copyrightable works and also
-provides prominent facilities for anybody to edit those works. A
-public wiki that anybody can edit is an example of such a server. A
-``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
-site means any set of copyrightable works thus published on the MMC
-site.
-
-``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
-license published by Creative Commons Corporation, a not-for-profit
-corporation with a principal place of business in San Francisco,
-California, as well as future copyleft versions of that license
-published by that same organization.
-
-``Incorporate'' means to publish or republish a Document, in whole or
-in part, as part of another Document.
-
-An MMC is ``eligible for relicensing'' if it is licensed under this
-License, and if all works that were first published under this License
-somewhere other than this MMC, and subsequently incorporated in whole
-or in part into the MMC, (1) had no cover texts or invariant sections,
-and (2) were thus incorporated prior to November 1, 2008.
-
-The operator of an MMC Site may republish an MMC contained in the site
-under CC-BY-SA on the same site at any time before August 1, 2009,
-provided the MMC is eligible for relicensing.
-
-@end enumerate
-
-@page
-@heading ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-@smallexample
-@group
- Copyright (C) @var{year} @var{your name}.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-@end group
-@end smallexample
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the ``with@dots{}Texts.'' line with this:
-
-@smallexample
-@group
- with the Invariant Sections being @var{list their titles}, with
- the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
- being @var{list}.
-@end group
-@end smallexample
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-@c Local Variables:
-@c ispell-local-pdict: "ispell-dict"
-@c End:
-
diff --git a/readline/doc/history.3 b/readline/doc/history.3
deleted file mode 100644
index 8de64f6..0000000
--- a/readline/doc/history.3
+++ /dev/null
@@ -1,680 +0,0 @@
-.\"
-.\" MAN PAGE COMMENTS to
-.\"
-.\" Chet Ramey
-.\" Information Network Services
-.\" Case Western Reserve University
-.\" chet.ramey@case.edu
-.\"
-.\" Last Change: Sun Oct 8 11:43:43 EDT 2017
-.\"
-.TH HISTORY 3 "2017 October 8" "GNU History 6.3"
-.\"
-.\" File Name macro. This used to be `.PN', for Path Name,
-.\" but Sun doesn't seem to like that very much.
-.\"
-.de FN
-\fI\|\\$1\|\fP
-..
-.ds lp \fR\|(\fP
-.ds rp \fR\|)\fP
-.\" FnN return-value fun-name N arguments
-.de Fn1
-\fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp
-.br
-..
-.de Fn2
-.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp
-.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp
-.br
-..
-.de Fn3
-.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp
-.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp
-.br
-..
-.de Vb
-\fI\\$1\fP \fB\\$2\fP
-.br
-..
-.SH NAME
-history \- GNU History Library
-.SH COPYRIGHT
-.if t The GNU History Library is Copyright \(co 1989-2017 by the Free Software Foundation, Inc.
-.if n The GNU History Library is Copyright (C) 1989-2017 by the Free Software Foundation, Inc.
-.SH DESCRIPTION
-Many programs read input from the user a line at a time. The GNU
-History library is able to keep track of those lines, associate arbitrary
-data with each line, and utilize information from previous lines in
-composing new ones.
-.PP
-.SH "HISTORY EXPANSION"
-.PP
-The history library supports a history expansion feature that
-is identical to the history expansion in
-.BR bash.
-This section describes what syntax features are available.
-.PP
-History expansions introduce words from the history list into
-the input stream, making it easy to repeat commands, insert the
-arguments to a previous command into the current input line, or
-fix errors in previous commands quickly.
-.PP
-History expansion is usually performed immediately after a complete line
-is read.
-It takes place in two parts.
-The first is to determine which line from the history list
-to use during substitution.
-The second is to select portions of that line for inclusion into
-the current one.
-The line selected from the history is the \fIevent\fP,
-and the portions of that line that are acted upon are \fIwords\fP.
-Various \fImodifiers\fP are available to manipulate the selected words.
-The line is broken into words in the same fashion as \fBbash\fP
-does when reading input,
-so that several words that would otherwise be separated
-are considered one word when surrounded by quotes (see the
-description of \fBhistory_tokenize()\fP below).
-History expansions are introduced by the appearance of the
-history expansion character, which is \^\fB!\fP\^ by default.
-Only backslash (\^\fB\e\fP\^) and single quotes can quote
-the history expansion character.
-.SS Event Designators
-.PP
-An event designator is a reference to a command line entry in the
-history list.
-Unless the reference is absolute, events are relative to the current
-position in the history list.
-.PP
-.PD 0
-.TP
-.B !
-Start a history substitution, except when followed by a
-.BR blank ,
-newline, = or (.
-.TP
-.B !\fIn\fR
-Refer to command line
-.IR n .
-.TP
-.B !\-\fIn\fR
-Refer to the current command minus
-.IR n .
-.TP
-.B !!
-Refer to the previous command. This is a synonym for `!\-1'.
-.TP
-.B !\fIstring\fR
-Refer to the most recent command
-preceding the current position in the history list
-starting with
-.IR string .
-.TP
-.B !?\fIstring\fR\fB[?]\fR
-Refer to the most recent command
-preceding the current position in the history list
-containing
-.IR string .
-The trailing \fB?\fP may be omitted if
-.I string
-is followed immediately by a newline.
-.TP
-.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
-Quick substitution. Repeat the last command, replacing
-.I string1
-with
-.IR string2 .
-Equivalent to
-``!!:s/\fIstring1\fP/\fIstring2\fP/''
-(see \fBModifiers\fP below).
-.TP
-.B !#
-The entire command line typed so far.
-.PD
-.SS Word Designators
-.PP
-Word designators are used to select desired words from the event.
-A
-.B :
-separates the event specification from the word designator.
-It may be omitted if the word designator begins with a
-.BR ^ ,
-.BR $ ,
-.BR * ,
-.BR \- ,
-or
-.BR % .
-Words are numbered from the beginning of the line,
-with the first word being denoted by 0 (zero).
-Words are inserted into the current line separated by single spaces.
-.PP
-.PD 0
-.TP
-.B 0 (zero)
-The zeroth word. For the shell, this is the command
-word.
-.TP
-.I n
-The \fIn\fRth word.
-.TP
-.B ^
-The first argument. That is, word 1.
-.TP
-.B $
-The last word. This is usually the last argument, but will expand to the
-zeroth word if there is only one word in the line.
-.TP
-.B %
-The word matched by the most recent `?\fIstring\fR?' search.
-.TP
-.I x\fB\-\fPy
-A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
-.TP
-.B *
-All of the words but the zeroth. This is a synonym
-for `\fI1\-$\fP'. It is not an error to use
-.B *
-if there is just one
-word in the event; the empty string is returned in that case.
-.TP
-.B x*
-Abbreviates \fIx\-$\fP.
-.TP
-.B x\-
-Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
-.PD
-.PP
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-.SS Modifiers
-.PP
-After the optional word designator, there may appear a sequence of
-one or more of the following modifiers, each preceded by a `:'.
-.PP
-.PD 0
-.PP
-.TP
-.B h
-Remove a trailing file name component, leaving only the head.
-.TP
-.B t
-Remove all leading file name components, leaving the tail.
-.TP
-.B r
-Remove a trailing suffix of the form \fI.xxx\fP, leaving the
-basename.
-.TP
-.B e
-Remove all but the trailing suffix.
-.TP
-.B p
-Print the new command but do not execute it.
-.TP
-.B q
-Quote the substituted words, escaping further substitutions.
-.TP
-.B x
-Quote the substituted words as with
-.BR q ,
-but break into words at
-.B blanks
-and newlines.
-.TP
-.B s/\fIold\fP/\fInew\fP/
-Substitute
-.I new
-for the first occurrence of
-.I old
-in the event line. Any delimiter can be used in place of /. The
-final delimiter is optional if it is the last character of the
-event line. The delimiter may be quoted in
-.I old
-and
-.I new
-with a single backslash. If & appears in
-.IR new ,
-it is replaced by
-.IR old .
-A single backslash will quote the &. If
-.I old
-is null, it is set to the last
-.I old
-substituted, or, if no previous history substitutions took place,
-the last
-.I string
-in a
-.B !?\fIstring\fR\fB[?]\fR
-search.
-.TP
-.B &
-Repeat the previous substitution.
-.TP
-.B g
-Cause changes to be applied over the entire event line. This is
-used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR')
-or `\fB:&\fP'. If used with
-`\fB:s\fP', any delimiter can be used
-in place of /, and the final delimiter is optional
-if it is the last character of the event line.
-An \fBa\fP may be used as a synonym for \fBg\fP.
-.TP
-.B G
-Apply the following `\fBs\fP' modifier once to each word in the event line.
-.PD
-.SH "PROGRAMMING WITH HISTORY FUNCTIONS"
-This section describes how to use the History library in other programs.
-.SS Introduction to History
-.PP
-The programmer using the History library has available functions
-for remembering lines on a history list, associating arbitrary data
-with a line, removing lines from the list, searching through the list
-for a line containing an arbitrary text string, and referencing any line
-in the list directly. In addition, a history \fIexpansion\fP function
-is available which provides for a consistent user interface across
-different programs.
-.PP
-The user using programs written with the History library has the
-benefit of a consistent user interface with a set of well-known
-commands for manipulating the text of previous lines and using that text
-in new commands. The basic history manipulation commands are
-identical to
-the history substitution provided by \fBbash\fP.
-.PP
-If the programmer desires, he can use the Readline library, which
-includes some history manipulation by default, and has the added
-advantage of command line editing.
-.PP
-Before declaring any functions using any functionality the History
-library provides in other code, an application writer should include
-the file
-.FN <readline/history.h>
-in any file that uses the
-History library's features. It supplies extern declarations for all
-of the library's public functions and variables, and declares all of
-the public data structures.
-
-.SS History Storage
-.PP
-The history list is an array of history entries. A history entry is
-declared as follows:
-.PP
-.Vb "typedef void *" histdata_t;
-.PP
-.nf
-typedef struct _hist_entry {
- char *line;
- char *timestamp;
- histdata_t data;
-} HIST_ENTRY;
-.fi
-.PP
-The history list itself might therefore be declared as
-.PP
-.Vb "HIST_ENTRY **" the_history_list;
-.PP
-The state of the History library is encapsulated into a single structure:
-.PP
-.nf
-/*
- * A structure used to pass around the current state of the history.
- */
-typedef struct _hist_state {
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
- int flags;
-} HISTORY_STATE;
-.fi
-.PP
-If the flags member includes \fBHS_STIFLED\fP, the history has been
-stifled.
-.SH "History Functions"
-.PP
-This section describes the calling sequence for the various functions
-exported by the GNU History library.
-.SS Initializing History and State Management
-This section describes functions used to initialize and manage
-the state of the History library when you want to use the history
-functions in your program.
-
-.Fn1 void using_history void
-Begin a session in which the history functions might be used. This
-initializes the interactive variables.
-
-.Fn1 "HISTORY_STATE *" history_get_history_state void
-Return a structure describing the current state of the input history.
-
-.Fn1 void history_set_history_state "HISTORY_STATE *state"
-Set the state of the history list according to \fIstate\fP.
-
-.SS History List Management
-
-These functions manage individual entries on the history list, or set
-parameters managing the list itself.
-
-.Fn1 void add_history "const char *string"
-Place \fIstring\fP at the end of the history list. The associated data
-field (if any) is set to \fBNULL\fP.
-If the maximum number of history entries has been set using
-\fBstifle_history()\fP, and the new number of history entries would exceed
-that maximum, the oldest history entry is removed.
-
-.Fn1 void add_history_time "const char *string"
-Change the time stamp associated with the most recent history entry to
-\fIstring\fP.
-
-.Fn1 "HIST_ENTRY *" remove_history "int which"
-Remove history entry at offset \fIwhich\fP from the history. The
-removed element is returned so you can free the line, data,
-and containing structure.
-
-.Fn1 "histdata_t" free_history_entry "HIST_ENTRY *histent"
-Free the history entry \fIhistent\fP and any history library private
-data associated with it. Returns the application-specific data
-so the caller can dispose of it.
-
-.Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data"
-Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP.
-This returns the old entry so the caller can dispose of any
-application-specific data. In the case
-of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned.
-
-.Fn1 void clear_history "void"
-Clear the history list by deleting all the entries.
-
-.Fn1 void stifle_history "int max"
-Stifle the history list, remembering only the last \fImax\fP entries.
-The history list will contain only \fImax\fP entries at a time.
-
-.Fn1 int unstifle_history "void"
-Stop stifling the history. This returns the previously-set
-maximum number of history entries (as set by \fBstifle_history()\fP).
-history was stifled. The value is positive if the history was
-stifled, negative if it wasn't.
-
-.Fn1 int history_is_stifled "void"
-Returns non-zero if the history is stifled, zero if it is not.
-
-.SS Information About the History List
-
-These functions return information about the entire history list or
-individual list entries.
-
-.Fn1 "HIST_ENTRY **" history_list "void"
-Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the
-current input history. Element 0 of this list is the beginning of time.
-If there is no history, return \fBNULL\fP.
-
-.Fn1 int where_history "void"
-Returns the offset of the current history element.
-
-.Fn1 "HIST_ENTRY *" current_history "void"
-Return the history entry at the current position, as determined by
-\fBwhere_history()\fP. If there is no entry there, return a \fBNULL\fP
-pointer.
-
-.Fn1 "HIST_ENTRY *" history_get "int offset"
-Return the history entry at position \fIoffset\fP.
-The range of valid values of \fIoffset\fP starts at \fBhistory_base\fP
-and ends at \fBhistory_length\fP \- 1.
-If there is no entry there, or if \fIoffset\fP is outside the valid
-range, return a \fBNULL\fP pointer.
-
-.Fn1 "time_t" history_get_time "HIST_ENTRY *"
-Return the time stamp associated with the history entry passed as the argument.
-
-.Fn1 int history_total_bytes "void"
-Return the number of bytes that the primary history entries are using.
-This function returns the sum of the lengths of all the lines in the
-history.
-
-.SS Moving Around the History List
-
-These functions allow the current index into the history list to be
-set or changed.
-
-.Fn1 int history_set_pos "int pos"
-Set the current history offset to \fIpos\fP, an absolute index
-into the list.
-Returns 1 on success, 0 if \fIpos\fP is less than zero or greater
-than the number of history entries.
-
-.Fn1 "HIST_ENTRY *" previous_history "void"
-Back up the current history offset to the previous history entry, and
-return a pointer to that entry. If there is no previous entry, return
-a \fBNULL\fP pointer.
-
-.Fn1 "HIST_ENTRY *" next_history "void"
-If the current history offset refers to a valid history entry,
-increment the current history offset.
-If the possibly-incremented history offset refers to a valid history
-entry, return a pointer to that entry;
-otherwise, return a \fBNULL\fP pointer.
-
-.SS Searching the History List
-
-These functions allow searching of the history list for entries containing
-a specific string. Searching may be performed both forward and backward
-from the current history position. The search may be \fIanchored\fP,
-meaning that the string must match at the beginning of the history entry.
-
-.Fn2 int history_search "const char *string" "int direction"
-Search the history for \fIstring\fP, starting at the current history offset.
-If \fIdirection\fP is less than 0, then the search is through
-previous entries, otherwise through subsequent entries.
-If \fIstring\fP is found, then
-the current history index is set to that history entry, and the value
-returned is the offset in the line of the entry where
-\fIstring\fP was found. Otherwise, nothing is changed, and a -1 is
-returned.
-
-.Fn2 int history_search_prefix "const char *string" "int direction"
-Search the history for \fIstring\fP, starting at the current history
-offset. The search is anchored: matching lines must begin with
-\fIstring\fP. If \fIdirection\fP is less than 0, then the search is
-through previous entries, otherwise through subsequent entries.
-If \fIstring\fP is found, then the
-current history index is set to that entry, and the return value is 0.
-Otherwise, nothing is changed, and a -1 is returned.
-
-.Fn3 int history_search_pos "const char *string" "int direction" "int pos"
-Search for \fIstring\fP in the history list, starting at \fIpos\fP, an
-absolute index into the list. If \fIdirection\fP is negative, the search
-proceeds backward from \fIpos\fP, otherwise forward. Returns the absolute
-index of the history element where \fIstring\fP was found, or -1 otherwise.
-
-.SS Managing the History File
-The History library can read the history from and write it to a file.
-This section documents the functions for managing a history file.
-
-.Fn1 int read_history "const char *filename"
-Add the contents of \fIfilename\fP to the history list, a line at a time.
-If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP.
-Returns 0 if successful, or \fBerrno\fP if not.
-
-.Fn3 int read_history_range "const char *filename" "int from" "int to"
-Read a range of lines from \fIfilename\fP, adding them to the history list.
-Start reading at line \fIfrom\fP and end at \fIto\fP.
-If \fIfrom\fP is zero, start at the beginning. If \fIto\fP is less than
-\fIfrom\fP, then read until the end of the file. If \fIfilename\fP is
-\fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful,
-or \fBerrno\fP if not.
-
-.Fn1 int write_history "const char *filename"
-Write the current history to \fIfilename\fP, overwriting \fIfilename\fP
-if necessary.
-If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP.
-Returns 0 on success, or \fBerrno\fP on a read or write error.
-
-
-.Fn2 int append_history "int nelements" "const char *filename"
-Append the last \fInelements\fP of the history list to \fIfilename\fP.
-If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP.
-Returns 0 on success, or \fBerrno\fP on a read or write error.
-
-.Fn2 int history_truncate_file "const char *filename" "int nlines"
-Truncate the history file \fIfilename\fP, leaving only the last
-\fInlines\fP lines.
-If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated.
-Returns 0 on success, or \fBerrno\fP on failure.
-
-.SS History Expansion
-
-These functions implement history expansion.
-
-.Fn2 int history_expand "char *string" "char **output"
-Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer
-to a string. Returns:
-.RS
-.PD 0
-.TP
-0
-If no expansions took place (or, if the only change in
-the text was the removal of escape characters preceding the history expansion
-character);
-.TP
-1
-if expansions did take place;
-.TP
--1
-if there was an error in expansion;
-.TP
-2
-if the returned line should be displayed, but not executed,
-as with the \fB:p\fP modifier.
-.PD
-.RE
-If an error ocurred in expansion, then \fIoutput\fP contains a descriptive
-error message.
-
-.Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar"
-Returns the text of the history event beginning at \fIstring\fP +
-\fI*cindex\fP. \fI*cindex\fP is modified to point to after the event
-specifier. At function entry, \fIcindex\fP points to the index into
-\fIstring\fP where the history event specification begins. \fIqchar\fP
-is a character that is allowed to end the event specification in addition
-to the ``normal'' terminating characters.
-
-.Fn1 "char **" history_tokenize "const char *string"
-Return an array of tokens parsed out of \fIstring\fP, much as the
-shell might.
-The tokens are split on the characters in the
-\fBhistory_word_delimiters\fP variable,
-and shell quoting conventions are obeyed.
-
-.Fn3 "char *" history_arg_extract "int first" "int last" "const char *string"
-Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP
-arguments present in \fIstring\fP. Arguments are split using
-\fBhistory_tokenize()\fP.
-
-.SS History Variables
-
-This section describes the externally-visible variables exported by
-the GNU History Library.
-
-.Vb int history_base
-The logical offset of the first entry in the history list.
-
-.Vb int history_length
-The number of entries currently stored in the history list.
-
-.Vb int history_max_entries
-The maximum number of history entries. This must be changed using
-\fBstifle_history()\fP.
-
-.Vb int history_wite_timestamps
-If non-zero, timestamps are written to the history file, so they can be
-preserved between sessions. The default value is 0, meaning that
-timestamps are not saved.
-The current timestamp format uses the value of \fIhistory_comment_char\fP
-to delimit timestamp entries in the history file. If that variable does
-not have a value (the default), timestamps will not be written.
-
-.Vb char history_expansion_char
-The character that introduces a history event. The default is \fB!\fP.
-Setting this to 0 inhibits history expansion.
-
-.Vb char history_subst_char
-The character that invokes word substitution if found at the start of
-a line. The default is \fB^\fP.
-
-.Vb char history_comment_char
-During tokenization, if this character is seen as the first character
-of a word, then it and all subsequent characters up to a newline are
-ignored, suppressing history expansion for the remainder of the line.
-This is disabled by default.
-
-.Vb "char *" history_word_delimiters
-The characters that separate tokens for \fBhistory_tokenize()\fP.
-The default value is \fB"\ \et\en()<>;&|"\fP.
-
-.Vb "char *" history_no_expand_chars
-The list of characters which inhibit history expansion if found immediately
-following \fBhistory_expansion_char\fP. The default is space, tab, newline,
-\fB\er\fP, and \fB=\fP.
-
-.Vb "char *" history_search_delimiter_chars
-The list of additional characters which can delimit a history search
-string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of
-a substring search. The default is empty.
-
-.Vb int history_quotes_inhibit_expansion
-If non-zero, double-quoted words are not scanned for the history expansion
-character or the history comment character. The default value is 0.
-
-.Vb "rl_linebuf_func_t *" history_inhibit_expansion_function
-This should be set to the address of a function that takes two arguments:
-a \fBchar *\fP (\fIstring\fP)
-and an \fBint\fP index into that string (\fIi\fP).
-It should return a non-zero value if the history expansion starting at
-\fIstring[i]\fP should not be performed; zero if the expansion should
-be done.
-It is intended for use by applications like \fBbash\fP that use the history
-expansion character for additional purposes.
-By default, this variable is set to \fBNULL\fP.
-.SH FILES
-.PD 0
-.TP
-.FN ~/.history
-Default filename for reading and writing saved history
-.PD
-.SH "SEE ALSO"
-.PD 0
-.TP
-\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIbash\fP(1)
-.TP
-\fIreadline\fP(3)
-.PD
-.SH AUTHORS
-Brian Fox, Free Software Foundation
-.br
-bfox@gnu.org
-.PP
-Chet Ramey, Case Western Reserve University
-.br
-chet.ramey@case.edu
-.SH BUG REPORTS
-If you find a bug in the
-.B history
-library, you should report it. But first, you should
-make sure that it really is a bug, and that it appears in the latest
-version of the
-.B history
-library that you have.
-.PP
-Once you have determined that a bug actually exists, mail a
-bug report to \fIbug\-readline\fP@\fIgnu.org\fP.
-If you have a fix, you are welcome to mail that
-as well! Suggestions and `philosophical' bug reports may be mailed
-to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet
-newsgroup
-.BR gnu.bash.bug .
-.PP
-Comments and bug reports concerning
-this manual page should be directed to
-.IR chet.ramey@case.edu .
diff --git a/readline/doc/history.texi b/readline/doc/history.texi
deleted file mode 100644
index 98e2233..0000000
--- a/readline/doc/history.texi
+++ /dev/null
@@ -1,85 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename history.info
-@settitle GNU History Library
-@include version.texi
-
-@c %**end of header (This is for running Texinfo on a region.)
-
-@copying
-This document describes the GNU History library
-(version @value{VERSION}, @value{UPDATED}),
-a programming tool that provides a consistent user interface for
-recalling lines of previously typed input.
-
-Copyright @copyright{} 1988--2016 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-
-@end quotation
-@end copying
-
-@dircategory Libraries
-@direntry
-* History: (history). The GNU history library API.
-@end direntry
-
-@titlepage
-@title GNU History Library
-@subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}.
-@subtitle @value{UPDATED-MONTH}
-@author Chet Ramey, Case Western Reserve University
-@author Brian Fox, Free Software Foundation
-
-@page
-
-@vskip 0pt plus 1filll
-@insertcopying
-
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top GNU History Library
-
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-@menu
-* Using History Interactively:: GNU History User's Manual.
-* Programming with GNU History:: GNU History Programmer's Manual.
-* GNU Free Documentation License:: License for copying this manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifnottex
-
-@syncodeindex fn vr
-
-@include hsuser.texi
-@include hstech.texi
-
-@node GNU Free Documentation License
-@appendix GNU Free Documentation License
-
-@include fdl.texi
-
-@node Concept Index
-@appendix Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@appendix Function and Variable Index
-@printindex vr
-
-@bye
diff --git a/readline/doc/hstech.texi b/readline/doc/hstech.texi
deleted file mode 100644
index dbc21c1..0000000
--- a/readline/doc/hstech.texi
+++ /dev/null
@@ -1,602 +0,0 @@
-@ignore
-This file documents the user interface to the GNU History library.
-
-Copyright (C) 1988-2016 Free Software Foundation, Inc.
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@node Programming with GNU History
-@chapter Programming with GNU History
-
-This chapter describes how to interface programs that you write
-with the @sc{gnu} History Library.
-It should be considered a technical guide.
-For information on the interactive use of @sc{gnu} History, @pxref{Using
-History Interactively}.
-
-@menu
-* Introduction to History:: What is the GNU History library for?
-* History Storage:: How information is stored.
-* History Functions:: Functions that you can use.
-* History Variables:: Variables that control behaviour.
-* History Programming Example:: Example of using the GNU History Library.
-@end menu
-
-@node Introduction to History
-@section Introduction to History
-
-Many programs read input from the user a line at a time. The @sc{gnu}
-History library is able to keep track of those lines, associate arbitrary
-data with each line, and utilize information from previous lines in
-composing new ones.
-
-The programmer using the History library has available functions
-for remembering lines on a history list, associating arbitrary data
-with a line, removing lines from the list, searching through the list
-for a line containing an arbitrary text string, and referencing any line
-in the list directly. In addition, a history @dfn{expansion} function
-is available which provides for a consistent user interface across
-different programs.
-
-The user using programs written with the History library has the
-benefit of a consistent user interface with a set of well-known
-commands for manipulating the text of previous lines and using that text
-in new commands. The basic history manipulation commands are similar to
-the history substitution provided by @code{csh}.
-
-If the programmer desires, he can use the Readline library, which
-includes some history manipulation by default, and has the added
-advantage of command line editing.
-
-Before declaring any functions using any functionality the History
-library provides in other code, an application writer should include
-the file @code{<readline/history.h>} in any file that uses the
-History library's features. It supplies extern declarations for all
-of the library's public functions and variables, and declares all of
-the public data structures.
-
-@node History Storage
-@section History Storage
-
-The history list is an array of history entries. A history entry is
-declared as follows:
-
-@example
-typedef void *histdata_t;
-
-typedef struct _hist_entry @{
- char *line;
- char *timestamp;
- histdata_t data;
-@} HIST_ENTRY;
-@end example
-
-The history list itself might therefore be declared as
-
-@example
-HIST_ENTRY **the_history_list;
-@end example
-
-The state of the History library is encapsulated into a single structure:
-
-@example
-/*
- * A structure used to pass around the current state of the history.
- */
-typedef struct _hist_state @{
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
- int flags;
-@} HISTORY_STATE;
-@end example
-
-If the flags member includes @code{HS_STIFLED}, the history has been
-stifled.
-
-@node History Functions
-@section History Functions
-
-This section describes the calling sequence for the various functions
-exported by the @sc{gnu} History library.
-
-@menu
-* Initializing History and State Management:: Functions to call when you
- want to use history in a
- program.
-* History List Management:: Functions used to manage the list
- of history entries.
-* Information About the History List:: Functions returning information about
- the history list.
-* Moving Around the History List:: Functions used to change the position
- in the history list.
-* Searching the History List:: Functions to search the history list
- for entries containing a string.
-* Managing the History File:: Functions that read and write a file
- containing the history list.
-* History Expansion:: Functions to perform csh-like history
- expansion.
-@end menu
-
-@node Initializing History and State Management
-@subsection Initializing History and State Management
-
-This section describes functions used to initialize and manage
-the state of the History library when you want to use the history
-functions in your program.
-
-@deftypefun void using_history (void)
-Begin a session in which the history functions might be used. This
-initializes the interactive variables.
-@end deftypefun
-
-@deftypefun {HISTORY_STATE *} history_get_history_state (void)
-Return a structure describing the current state of the input history.
-@end deftypefun
-
-@deftypefun void history_set_history_state (HISTORY_STATE *state)
-Set the state of the history list according to @var{state}.
-@end deftypefun
-
-@node History List Management
-@subsection History List Management
-
-These functions manage individual entries on the history list, or set
-parameters managing the list itself.
-
-@deftypefun void add_history (const char *string)
-Place @var{string} at the end of the history list. The associated data
-field (if any) is set to @code{NULL}.
-If the maximum number of history entries has been set using
-@code{stifle_history()}, and the new number of history entries would exceed
-that maximum, the oldest history entry is removed.
-@end deftypefun
-
-@deftypefun void add_history_time (const char *string)
-Change the time stamp associated with the most recent history entry to
-@var{string}.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} remove_history (int which)
-Remove history entry at offset @var{which} from the history. The
-removed element is returned so you can free the line, data,
-and containing structure.
-@end deftypefun
-
-@deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent)
-Free the history entry @var{histent} and any history library private
-data associated with it. Returns the application-specific data
-so the caller can dispose of it.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data)
-Make the history entry at offset @var{which} have @var{line} and @var{data}.
-This returns the old entry so the caller can dispose of any
-application-specific data. In the case
-of an invalid @var{which}, a @code{NULL} pointer is returned.
-@end deftypefun
-
-@deftypefun void clear_history (void)
-Clear the history list by deleting all the entries.
-@end deftypefun
-
-@deftypefun void stifle_history (int max)
-Stifle the history list, remembering only the last @var{max} entries.
-The history list will contain only @var{max} entries at a time.
-@end deftypefun
-
-@deftypefun int unstifle_history (void)
-Stop stifling the history. This returns the previously-set
-maximum number of history entries (as set by @code{stifle_history()}).
-The value is positive if the history was
-stifled, negative if it wasn't.
-@end deftypefun
-
-@deftypefun int history_is_stifled (void)
-Returns non-zero if the history is stifled, zero if it is not.
-@end deftypefun
-
-@node Information About the History List
-@subsection Information About the History List
-
-These functions return information about the entire history list or
-individual list entries.
-
-@deftypefun {HIST_ENTRY **} history_list (void)
-Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the
-current input history. Element 0 of this list is the beginning of time.
-If there is no history, return @code{NULL}.
-@end deftypefun
-
-@deftypefun int where_history (void)
-Returns the offset of the current history element.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} current_history (void)
-Return the history entry at the current position, as determined by
-@code{where_history()}. If there is no entry there, return a @code{NULL}
-pointer.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} history_get (int offset)
-Return the history entry at position @var{offset}.
-The range of valid
-values of @var{offset} starts at @code{history_base} and ends at
-@var{history_length} - 1 (@pxref{History Variables}).
-If there is no entry there, or if @var{offset} is outside the valid
-range, return a @code{NULL} pointer.
-@end deftypefun
-
-@deftypefun time_t history_get_time (HIST_ENTRY *entry)
-Return the time stamp associated with the history entry @var{entry}.
-If the timestamp is missing or invalid, return 0.
-@end deftypefun
-
-@deftypefun int history_total_bytes (void)
-Return the number of bytes that the primary history entries are using.
-This function returns the sum of the lengths of all the lines in the
-history.
-@end deftypefun
-
-@node Moving Around the History List
-@subsection Moving Around the History List
-
-These functions allow the current index into the history list to be
-set or changed.
-
-@deftypefun int history_set_pos (int pos)
-Set the current history offset to @var{pos}, an absolute index
-into the list.
-Returns 1 on success, 0 if @var{pos} is less than zero or greater
-than the number of history entries.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} previous_history (void)
-Back up the current history offset to the previous history entry, and
-return a pointer to that entry. If there is no previous entry, return
-a @code{NULL} pointer.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} next_history (void)
-If the current history offset refers to a valid history entry,
-increment the current history offset.
-If the possibly-incremented history offset refers to a valid history
-entry, return a pointer to that entry;
-otherwise, return a @code{BNULL} pointer.
-@end deftypefun
-
-@node Searching the History List
-@subsection Searching the History List
-@cindex History Searching
-
-These functions allow searching of the history list for entries containing
-a specific string. Searching may be performed both forward and backward
-from the current history position. The search may be @dfn{anchored},
-meaning that the string must match at the beginning of the history entry.
-@cindex anchored search
-
-@deftypefun int history_search (const char *string, int direction)
-Search the history for @var{string}, starting at the current history offset.
-If @var{direction} is less than 0, then the search is through
-previous entries, otherwise through subsequent entries.
-If @var{string} is found, then
-the current history index is set to that history entry, and the value
-returned is the offset in the line of the entry where
-@var{string} was found. Otherwise, nothing is changed, and a -1 is
-returned.
-@end deftypefun
-
-@deftypefun int history_search_prefix (const char *string, int direction)
-Search the history for @var{string}, starting at the current history
-offset. The search is anchored: matching lines must begin with
-@var{string}. If @var{direction} is less than 0, then the search is
-through previous entries, otherwise through subsequent entries.
-If @var{string} is found, then the
-current history index is set to that entry, and the return value is 0.
-Otherwise, nothing is changed, and a -1 is returned.
-@end deftypefun
-
-@deftypefun int history_search_pos (const char *string, int direction, int pos)
-Search for @var{string} in the history list, starting at @var{pos}, an
-absolute index into the list. If @var{direction} is negative, the search
-proceeds backward from @var{pos}, otherwise forward. Returns the absolute
-index of the history element where @var{string} was found, or -1 otherwise.
-@end deftypefun
-
-@node Managing the History File
-@subsection Managing the History File
-
-The History library can read the history from and write it to a file.
-This section documents the functions for managing a history file.
-
-@deftypefun int read_history (const char *filename)
-Add the contents of @var{filename} to the history list, a line at a time.
-If @var{filename} is @code{NULL}, then read from @file{~/.history}.
-Returns 0 if successful, or @code{errno} if not.
-@end deftypefun
-
-@deftypefun int read_history_range (const char *filename, int from, int to)
-Read a range of lines from @var{filename}, adding them to the history list.
-Start reading at line @var{from} and end at @var{to}.
-If @var{from} is zero, start at the beginning. If @var{to} is less than
-@var{from}, then read until the end of the file. If @var{filename} is
-@code{NULL}, then read from @file{~/.history}. Returns 0 if successful,
-or @code{errno} if not.
-@end deftypefun
-
-@deftypefun int write_history (const char *filename)
-Write the current history to @var{filename}, overwriting @var{filename}
-if necessary.
-If @var{filename} is @code{NULL}, then write the history list to
-@file{~/.history}.
-Returns 0 on success, or @code{errno} on a read or write error.
-@end deftypefun
-
-@deftypefun int append_history (int nelements, const char *filename)
-Append the last @var{nelements} of the history list to @var{filename}.
-If @var{filename} is @code{NULL}, then append to @file{~/.history}.
-Returns 0 on success, or @code{errno} on a read or write error.
-@end deftypefun
-
-@deftypefun int history_truncate_file (const char *filename, int nlines)
-Truncate the history file @var{filename}, leaving only the last
-@var{nlines} lines.
-If @var{filename} is @code{NULL}, then @file{~/.history} is truncated.
-Returns 0 on success, or @code{errno} on failure.
-@end deftypefun
-
-@node History Expansion
-@subsection History Expansion
-
-These functions implement history expansion.
-
-@deftypefun int history_expand (char *string, char **output)
-Expand @var{string}, placing the result into @var{output}, a pointer
-to a string (@pxref{History Interaction}). Returns:
-@table @code
-@item 0
-If no expansions took place (or, if the only change in
-the text was the removal of escape characters preceding the history expansion
-character);
-@item 1
-if expansions did take place;
-@item -1
-if there was an error in expansion;
-@item 2
-if the returned line should be displayed, but not executed,
-as with the @code{:p} modifier (@pxref{Modifiers}).
-@end table
-
-If an error occurred in expansion, then @var{output} contains a descriptive
-error message.
-@end deftypefun
-
-@deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar)
-Returns the text of the history event beginning at @var{string} +
-@var{*cindex}. @var{*cindex} is modified to point to after the event
-specifier. At function entry, @var{cindex} points to the index into
-@var{string} where the history event specification begins. @var{qchar}
-is a character that is allowed to end the event specification in addition
-to the ``normal'' terminating characters.
-@end deftypefun
-
-@deftypefun {char **} history_tokenize (const char *string)
-Return an array of tokens parsed out of @var{string}, much as the
-shell might. The tokens are split on the characters in the
-@var{history_word_delimiters} variable,
-and shell quoting conventions are obeyed as described below.
-@end deftypefun
-
-@deftypefun {char *} history_arg_extract (int first, int last, const char *string)
-Extract a string segment consisting of the @var{first} through @var{last}
-arguments present in @var{string}. Arguments are split using
-@code{history_tokenize}.
-@end deftypefun
-
-@node History Variables
-@section History Variables
-
-This section describes the externally-visible variables exported by
-the @sc{gnu} History Library.
-
-@deftypevar int history_base
-The logical offset of the first entry in the history list.
-@end deftypevar
-
-@deftypevar int history_length
-The number of entries currently stored in the history list.
-@end deftypevar
-
-@deftypevar int history_max_entries
-The maximum number of history entries. This must be changed using
-@code{stifle_history()}.
-@end deftypevar
-
-@deftypevar int history_write_timestamps
-If non-zero, timestamps are written to the history file, so they can be
-preserved between sessions. The default value is 0, meaning that
-timestamps are not saved.
-
-The current timestamp format uses the value of @var{history_comment_char}
-to delimit timestamp entries in the history file. If that variable does
-not have a value (the default), timestamps will not be written.
-@end deftypevar
-
-@deftypevar char history_expansion_char
-The character that introduces a history event. The default is @samp{!}.
-Setting this to 0 inhibits history expansion.
-@end deftypevar
-
-@deftypevar char history_subst_char
-The character that invokes word substitution if found at the start of
-a line. The default is @samp{^}.
-@end deftypevar
-
-@deftypevar char history_comment_char
-During tokenization, if this character is seen as the first character
-of a word, then it and all subsequent characters up to a newline are
-ignored, suppressing history expansion for the remainder of the line.
-This is disabled by default.
-@end deftypevar
-
-@deftypevar {char *} history_word_delimiters
-The characters that separate tokens for @code{history_tokenize()}.
-The default value is @code{" \t\n()<>;&|"}.
-@end deftypevar
-
-@deftypevar {char *} history_search_delimiter_chars
-The list of additional characters which can delimit a history search
-string, in addition to space, TAB, @samp{:} and @samp{?} in the case of
-a substring search. The default is empty.
-@end deftypevar
-
-@deftypevar {char *} history_no_expand_chars
-The list of characters which inhibit history expansion if found immediately
-following @var{history_expansion_char}. The default is space, tab, newline,
-carriage return, and @samp{=}.
-@end deftypevar
-
-@deftypevar int history_quotes_inhibit_expansion
-If non-zero, the history expansion code implements shell-like quoting:
-single-quoted words are not scanned for the history expansion
-character or the history comment character, and double-quoted words may
-have history expansion performed, since single quotes are not special
-within double quotes.
-The default value is 0.
-@end deftypevar
-
-@deftypevar int history_quoting_state
-An application may set this variable to indicate that the current line
-being expanded is subject to existing quoting. If set to @samp{'}, the
-history expansion function will assume that the line is single-quoted and
-inhibit expansion until it reads an unquoted closing single quote; if set
-to @samp{"}, history expansion will assume the line is double quoted until
-it reads an unquoted closing double quote. If set to zero, the default,
-the history expansion function will assume the line is not quoted and
-treat quote characters within the line as described above.
-This is only effective if @var{history_quotes_inhibit_expansion} is set.
-@end deftypevar
-
-@deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function
-This should be set to the address of a function that takes two arguments:
-a @code{char *} (@var{string})
-and an @code{int} index into that string (@var{i}).
-It should return a non-zero value if the history expansion starting at
-@var{string[i]} should not be performed; zero if the expansion should
-be done.
-It is intended for use by applications like Bash that use the history
-expansion character for additional purposes.
-By default, this variable is set to @code{NULL}.
-@end deftypevar
-
-@node History Programming Example
-@section History Programming Example
-
-The following program demonstrates simple use of the @sc{gnu} History Library.
-
-@smallexample
-#include <stdio.h>
-#include <readline/history.h>
-
-main (argc, argv)
- int argc;
- char **argv;
-@{
- char line[1024], *t;
- int len, done = 0;
-
- line[0] = 0;
-
- using_history ();
- while (!done)
- @{
- printf ("history$ ");
- fflush (stdout);
- t = fgets (line, sizeof (line) - 1, stdin);
- if (t && *t)
- @{
- len = strlen (t);
- if (t[len - 1] == '\n')
- t[len - 1] = '\0';
- @}
-
- if (!t)
- strcpy (line, "quit");
-
- if (line[0])
- @{
- char *expansion;
- int result;
-
- result = history_expand (line, &expansion);
- if (result)
- fprintf (stderr, "%s\n", expansion);
-
- if (result < 0 || result == 2)
- @{
- free (expansion);
- continue;
- @}
-
- add_history (expansion);
- strncpy (line, expansion, sizeof (line) - 1);
- free (expansion);
- @}
-
- if (strcmp (line, "quit") == 0)
- done = 1;
- else if (strcmp (line, "save") == 0)
- write_history ("history_file");
- else if (strcmp (line, "read") == 0)
- read_history ("history_file");
- else if (strcmp (line, "list") == 0)
- @{
- register HIST_ENTRY **the_list;
- register int i;
-
- the_list = history_list ();
- if (the_list)
- for (i = 0; the_list[i]; i++)
- printf ("%d: %s\n", i + history_base, the_list[i]->line);
- @}
- else if (strncmp (line, "delete", 6) == 0)
- @{
- int which;
- if ((sscanf (line + 6, "%d", &which)) == 1)
- @{
- HIST_ENTRY *entry = remove_history (which);
- if (!entry)
- fprintf (stderr, "No such entry %d\n", which);
- else
- @{
- free (entry->line);
- free (entry);
- @}
- @}
- else
- @{
- fprintf (stderr, "non-numeric arg given to `delete'\n");
- @}
- @}
- @}
-@}
-@end smallexample
diff --git a/readline/doc/hsuser.texi b/readline/doc/hsuser.texi
deleted file mode 100644
index e92c794..0000000
--- a/readline/doc/hsuser.texi
+++ /dev/null
@@ -1,506 +0,0 @@
-@ignore
-This file documents the user interface to the GNU History library.
-
-Copyright (C) 1988--2018 Free Software Foundation, Inc.
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@node Using History Interactively
-@chapter Using History Interactively
-
-@c GDB bundling modification:
-@c @ifclear BashFeatures
-@c @defcodeindex bt
-@c @end ifclear
-
-@ifset BashFeatures
-This chapter describes how to use the @sc{gnu} History Library
-interactively, from a user's standpoint.
-It should be considered a user's guide.
-For information on using the @sc{gnu} History Library in other programs,
-see the @sc{gnu} Readline Library Manual.
-@end ifset
-@ifclear BashFeatures
-This chapter describes how to use the @sc{gnu} History Library interactively,
-from a user's standpoint. It should be considered a user's guide. For
-information on using the @sc{gnu} History Library in your own programs,
-@c GDB bundling modification:
-@pxref{Programming with GNU History, , , history, GNU History Library}.
-@end ifclear
-
-@ifset BashFeatures
-@menu
-* Bash History Facilities:: How Bash lets you manipulate your command
- history.
-* Bash History Builtins:: The Bash builtin commands that manipulate
- the command history.
-* History Interaction:: What it feels like using History as a user.
-@end menu
-@end ifset
-@ifclear BashFeatures
-@menu
-* History Interaction:: What it feels like using History as a user.
-@end menu
-@end ifclear
-
-@ifset BashFeatures
-@node Bash History Facilities
-@section Bash History Facilities
-@cindex command history
-@cindex history list
-
-When the @option{-o history} option to the @code{set} builtin
-is enabled (@pxref{The Set Builtin}),
-the shell provides access to the @dfn{command history},
-the list of commands previously typed.
-The value of the @env{HISTSIZE} shell variable is used as the
-number of commands to save in a history list.
-The text of the last @env{$HISTSIZE}
-commands (default 500) is saved.
-The shell stores each command in the history list prior to
-parameter and variable expansion
-but after history expansion is performed, subject to the
-values of the shell variables
-@env{HISTIGNORE} and @env{HISTCONTROL}.
-
-When the shell starts up, the history is initialized from the
-file named by the @env{HISTFILE} variable (default @file{~/.bash_history}).
-The file named by the value of @env{HISTFILE} is truncated, if
-necessary, to contain no more than the number of lines specified by
-the value of the @env{HISTFILESIZE} variable.
-When a shell with history enabled exits, the last
-@env{$HISTSIZE} lines are copied from the history list to the file
-named by @env{$HISTFILE}.
-If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
-the lines are appended to the history file,
-otherwise the history file is overwritten.
-If @env{HISTFILE}
-is unset, or if the history file is unwritable, the history is not saved.
-After saving the history, the history file is truncated
-to contain no more than @env{$HISTFILESIZE} lines.
-If @env{HISTFILESIZE} is unset, or set to null, a non-numeric value, or
-a numeric value less than zero, the history file is not truncated.
-
-If the @env{HISTTIMEFORMAT} is set, the time stamp information
-associated with each history entry is written to the history file,
-marked with the history comment character.
-When the history file is read, lines beginning with the history
-comment character followed immediately by a digit are interpreted
-as timestamps for the following history entry.
-
-The builtin command @code{fc} may be used to list or edit and re-execute
-a portion of the history list.
-The @code{history} builtin may be used to display or modify the history
-list and manipulate the history file.
-When using command-line editing, search commands
-are available in each editing mode that provide access to the
-history list (@pxref{Commands For History}).
-
-The shell allows control over which commands are saved on the history
-list. The @env{HISTCONTROL} and @env{HISTIGNORE}
-variables may be set to cause the shell to save only a subset of the
-commands entered.
-The @code{cmdhist}
-shell option, if enabled, causes the shell to attempt to save each
-line of a multi-line command in the same history entry, adding
-semicolons where necessary to preserve syntactic correctness.
-The @code{lithist}
-shell option causes the shell to save the command with embedded newlines
-instead of semicolons.
-The @code{shopt} builtin is used to set these options.
-@xref{The Shopt Builtin}, for a description of @code{shopt}.
-
-@node Bash History Builtins
-@section Bash History Builtins
-@cindex history builtins
-
-Bash provides two builtin commands which manipulate the
-history list and history file.
-
-@table @code
-
-@item fc
-@btindex fc
-@example
-@code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]}
-@code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
-@end example
-
-The first form selects a range of commands from @var{first} to
-@var{last} from the history list and displays or edits and re-executes
-them.
-Both @var{first} and
-@var{last} may be specified as a string (to locate the most recent
-command beginning with that string) or as a number (an index into the
-history list, where a negative number is used as an offset from the
-current command number). If @var{last} is not specified, it is set to
-@var{first}. If @var{first} is not specified, it is set to the previous
-command for editing and @minus{}16 for listing. If the @option{-l} flag is
-given, the commands are listed on standard output. The @option{-n} flag
-suppresses the command numbers when listing. The @option{-r} flag
-reverses the order of the listing. Otherwise, the editor given by
-@var{ename} is invoked on a file containing those commands. If
-@var{ename} is not given, the value of the following variable expansion
-is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the
-value of the @env{FCEDIT} variable if set, or the value of the
-@env{EDITOR} variable if that is set, or @code{vi} if neither is set.
-When editing is complete, the edited commands are echoed and executed.
-
-In the second form, @var{command} is re-executed after each instance
-of @var{pat} in the selected command is replaced by @var{rep}.
-@var{command} is intepreted the same as @var{first} above.
-
-A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so
-that typing @samp{r cc} runs the last command beginning with @code{cc}
-and typing @samp{r} re-executes the last command (@pxref{Aliases}).
-
-@item history
-@btindex history
-@example
-history [@var{n}]
-history -c
-history -d @var{offset}
-history -d @var{start}-@var{end}
-history [-anrw] [@var{filename}]
-history -ps @var{arg}
-@end example
-
-With no options, display the history list with line numbers.
-Lines prefixed with a @samp{*} have been modified.
-An argument of @var{n} lists only the last @var{n} lines.
-If the shell variable @env{HISTTIMEFORMAT} is set and not null,
-it is used as a format string for @var{strftime} to display
-the time stamp associated with each displayed history entry.
-No intervening blank is printed between the formatted time stamp
-and the history line.
-
-Options, if supplied, have the following meanings:
-
-@table @code
-@item -c
-Clear the history list. This may be combined
-with the other options to replace the history list completely.
-
-@item -d @var{offset}
-Delete the history entry at position @var{offset}.
-If @var{offset} is positive, it should be specified as it appears when
-the history is displayed.
-If @var{offset} is negative, it is interpreted as relative to one greater
-than the last history position, so negative indices count back from the
-end of the history, and an index of @samp{-1} refers to the current
-@code{history -d} command.
-
-@item -d @var{start}-@var{end}
-Delete the history entries between positions @var{start} and @var{end},
-inclusive. Positive and negative values for @var{start} and @var{end}
-are interpreted as described above.
-
-@item -a
-Append the new history lines to the history file.
-These are history lines entered since the beginning of the current
-Bash session, but not already appended to the history file.
-
-@item -n
-Append the history lines not already read from the history file
-to the current history list. These are lines appended to the history
-file since the beginning of the current Bash session.
-
-@item -r
-Read the history file and append its contents to
-the history list.
-
-@item -w
-Write out the current history list to the history file.
-
-@item -p
-Perform history substitution on the @var{arg}s and display the result
-on the standard output, without storing the results in the history list.
-
-@item -s
-The @var{arg}s are added to the end of
-the history list as a single entry.
-
-@end table
-
-When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
-used, if @var{filename}
-is given, then it is used as the history file. If not, then
-the value of the @env{HISTFILE} variable is used.
-
-@end table
-@end ifset
-
-@node History Interaction
-@section History Expansion
-@cindex history expansion
-
-The History library provides a history expansion feature that is similar
-to the history expansion provided by @code{csh}. This section
-describes the syntax used to manipulate the history information.
-
-History expansions introduce words from the history list into
-the input stream, making it easy to repeat commands, insert the
-arguments to a previous command into the current input line, or
-fix errors in previous commands quickly.
-
-@ifset BashFeatures
-History expansion is performed immediately after a complete line
-is read, before the shell breaks it into words, and is performed
-on each line individually. Bash attempts to inform the history
-expansion functions about quoting still in effect from previous lines.
-@end ifset
-
-History expansion takes place in two parts. The first is to determine
-which line from the history list should be used during substitution.
-The second is to select portions of that line for inclusion into the
-current one. The line selected from the history is called the
-@dfn{event}, and the portions of that line that are acted upon are
-called @dfn{words}. Various @dfn{modifiers} are available to manipulate
-the selected words. The line is broken into words in the same fashion
-that Bash does, so that several words
-surrounded by quotes are considered one word.
-History expansions are introduced by the appearance of the
-history expansion character, which is @samp{!} by default.
-
-History expansion implements shell-like quoting conventions:
-a backslash can be used to remove the special handling for the next character;
-single quotes enclose verbatim sequences of characters, and can be used to
-inhibit history expansion;
-and characters enclosed within double quotes may be subject to history
-expansion, since backslash can escape the history expansion character,
-but single quotes may not, since they are not treated specially within
-double quotes.
-
-@ifset BashFeatures
-When using the shell, only @samp{\} and @samp{'} may be used to escape the
-history expansion character, but the history expansion character is
-also treated as quoted if it immediately precedes the closing double quote
-in a double-quoted string.
-@end ifset
-
-@ifset BashFeatures
-Several shell options settable with the @code{shopt}
-builtin (@pxref{The Shopt Builtin}) may be used to tailor
-the behavior of history expansion. If the
-@code{histverify} shell option is enabled, and Readline
-is being used, history substitutions are not immediately passed to
-the shell parser.
-Instead, the expanded line is reloaded into the Readline
-editing buffer for further modification.
-If Readline is being used, and the @code{histreedit}
-shell option is enabled, a failed history expansion will be
-reloaded into the Readline editing buffer for correction.
-The @option{-p} option to the @code{history} builtin command
-may be used to see what a history expansion will do before using it.
-The @option{-s} option to the @code{history} builtin may be used to
-add commands to the end of the history list without actually executing
-them, so that they are available for subsequent recall.
-This is most useful in conjunction with Readline.
-
-The shell allows control of the various characters used by the
-history expansion mechanism with the @code{histchars} variable,
-as explained above (@pxref{Bash Variables}). The shell uses
-the history comment character to mark history timestamps when
-writing the history file.
-@end ifset
-
-@menu
-* Event Designators:: How to specify which history line to use.
-* Word Designators:: Specifying which words are of interest.
-* Modifiers:: Modifying the results of substitution.
-@end menu
-
-@node Event Designators
-@subsection Event Designators
-@cindex event designators
-
-An event designator is a reference to a command line entry in the
-history list.
-Unless the reference is absolute, events are relative to the current
-position in the history list.
-@cindex history events
-
-@table @asis
-
-@item @code{!}
-@ifset BashFeatures
-Start a history substitution, except when followed by a space, tab,
-the end of the line, @samp{=} or @samp{(} (when the
-@code{extglob} shell option is enabled using the @code{shopt} builtin).
-@end ifset
-@ifclear BashFeatures
-Start a history substitution, except when followed by a space, tab,
-the end of the line, or @samp{=}.
-@end ifclear
-
-@item @code{!@var{n}}
-Refer to command line @var{n}.
-
-@item @code{!-@var{n}}
-Refer to the command @var{n} lines back.
-
-@item @code{!!}
-Refer to the previous command. This is a synonym for @samp{!-1}.
-
-@item @code{!@var{string}}
-Refer to the most recent command
-preceding the current position in the history list
-starting with @var{string}.
-
-@item @code{!?@var{string}[?]}
-Refer to the most recent command
-preceding the current position in the history list
-containing @var{string}.
-The trailing
-@samp{?} may be omitted if the @var{string} is followed immediately by
-a newline.
-
-@item @code{^@var{string1}^@var{string2}^}
-Quick Substitution. Repeat the last command, replacing @var{string1}
-with @var{string2}. Equivalent to
-@code{!!:s/@var{string1}/@var{string2}/}.
-
-@item @code{!#}
-The entire command line typed so far.
-
-@end table
-
-@node Word Designators
-@subsection Word Designators
-
-Word designators are used to select desired words from the event.
-A @samp{:} separates the event specification from the word designator. It
-may be omitted if the word designator begins with a @samp{^}, @samp{$},
-@samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning
-of the line, with the first word being denoted by 0 (zero). Words are
-inserted into the current line separated by single spaces.
-
-@need 0.75
-For example,
-
-@table @code
-@item !!
-designates the preceding command. When you type this, the preceding
-command is repeated in toto.
-
-@item !!:$
-designates the last argument of the preceding command. This may be
-shortened to @code{!$}.
-
-@item !fi:2
-designates the second argument of the most recent command starting with
-the letters @code{fi}.
-@end table
-
-@need 0.75
-Here are the word designators:
-
-@table @code
-
-@item 0 (zero)
-The @code{0}th word. For many applications, this is the command word.
-
-@item @var{n}
-The @var{n}th word.
-
-@item ^
-The first argument; that is, word 1.
-
-@item $
-The last argument.
-
-@item %
-The word matched by the most recent @samp{?@var{string}?} search.
-
-@item @var{x}-@var{y}
-A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}.
-
-@item *
-All of the words, except the @code{0}th. This is a synonym for @samp{1-$}.
-It is not an error to use @samp{*} if there is just one word in the event;
-the empty string is returned in that case.
-
-@item @var{x}*
-Abbreviates @samp{@var{x}-$}
-
-@item @var{x}-
-Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
-
-@end table
-
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-
-@node Modifiers
-@subsection Modifiers
-
-After the optional word designator, you can add a sequence of one or more
-of the following modifiers, each preceded by a @samp{:}.
-
-@table @code
-
-@item h
-Remove a trailing pathname component, leaving only the head.
-
-@item t
-Remove all leading pathname components, leaving the tail.
-
-@item r
-Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
-the basename.
-
-@item e
-Remove all but the trailing suffix.
-
-@item p
-Print the new command but do not execute it.
-
-@ifset BashFeatures
-@item q
-Quote the substituted words, escaping further substitutions.
-
-@item x
-Quote the substituted words as with @samp{q},
-but break into words at spaces, tabs, and newlines.
-@end ifset
-
-@item s/@var{old}/@var{new}/
-Substitute @var{new} for the first occurrence of @var{old} in the
-event line. Any delimiter may be used in place of @samp{/}.
-The delimiter may be quoted in @var{old} and @var{new}
-with a single backslash. If @samp{&} appears in @var{new},
-it is replaced by @var{old}. A single backslash will quote
-the @samp{&}. The final delimiter is optional if it is the last
-character on the input line.
-
-@item &
-Repeat the previous substitution.
-
-@item g
-@itemx a
-Cause changes to be applied over the entire event line. Used in
-conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
-or with @samp{&}.
-
-@item G
-Apply the following @samp{s} modifier once to each word in the event.
-
-@end table
diff --git a/readline/doc/readline.3 b/readline/doc/readline.3
deleted file mode 100644
index be89c2d..0000000
--- a/readline/doc/readline.3
+++ /dev/null
@@ -1,1539 +0,0 @@
-.\"
-.\" MAN PAGE COMMENTS to
-.\"
-.\" Chet Ramey
-.\" Information Network Services
-.\" Case Western Reserve University
-.\" chet.ramey@case.edu
-.\"
-.\" Last Change: Thu Dec 28 14:49:51 EST 2017
-.\"
-.TH READLINE 3 "2017 December 28" "GNU Readline 7.0"
-.\"
-.\" File Name macro. This used to be `.PN', for Path Name,
-.\" but Sun doesn't seem to like that very much.
-.\"
-.de FN
-\fI\|\\$1\|\fP
-..
-.SH NAME
-readline \- get a line from a user with editing
-.SH SYNOPSIS
-.LP
-.nf
-.ft B
-#include <stdio.h>
-#include <readline/readline.h>
-#include <readline/history.h>
-.ft
-.fi
-.LP
-.nf
-\fIchar *\fP
-.br
-\fBreadline\fP (\fIconst char *prompt\fP);
-.fi
-.SH COPYRIGHT
-.if n Readline is Copyright (C) 1989\-2014 Free Software Foundation, Inc.
-.if t Readline is Copyright \(co 1989\-2014 Free Software Foundation, Inc.
-.SH DESCRIPTION
-.LP
-.B readline
-will read a line from the terminal
-and return it, using
-.B prompt
-as a prompt. If
-.B prompt
-is \fBNULL\fP or the empty string, no prompt is issued.
-The line returned is allocated with
-.IR malloc (3);
-the caller must free it when finished. The line returned
-has the final newline removed, so only the text of the line
-remains.
-.LP
-.B readline
-offers editing capabilities while the user is entering the
-line.
-By default, the line editing commands
-are similar to those of emacs.
-A vi\-style line editing interface is also available.
-.LP
-This manual page describes only the most basic use of \fBreadline\fP.
-Much more functionality is available; see
-\fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP
-for additional information.
-.SH RETURN VALUE
-.LP
-.B readline
-returns the text of the line read. A blank line
-returns the empty string. If
-.B EOF
-is encountered while reading a line, and the line is empty,
-.B NULL
-is returned. If an
-.B EOF
-is read with a non\-empty line, it is
-treated as a newline.
-.SH NOTATION
-.LP
-An Emacs-style notation is used to denote
-keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
-means Control\-N. Similarly,
-.I meta
-keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards
-without a
-.I meta
-key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key
-then the
-.I x
-key. This makes ESC the \fImeta prefix\fP.
-The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP,
-or press the Escape key
-then hold the Control key while pressing the
-.I x
-key.)
-.PP
-Readline commands may be given numeric
-.IR arguments ,
-which normally act as a repeat count. Sometimes, however, it is the
-sign of the argument that is significant. Passing a negative argument
-to a command that acts in the forward direction (e.g., \fBkill\-line\fP)
-causes that command to act in a backward direction.
-Commands whose behavior with arguments deviates from this are noted
-below.
-.PP
-When a command is described as \fIkilling\fP text, the text
-deleted is saved for possible future retrieval
-(\fIyanking\fP). The killed text is saved in a
-\fIkill ring\fP. Consecutive kills cause the text to be
-accumulated into one unit, which can be yanked all at once.
-Commands which do not kill text separate the chunks of text
-on the kill ring.
-.SH INITIALIZATION FILE
-.LP
-Readline is customized by putting commands in an initialization
-file (the \fIinputrc\fP file).
-The name of this file is taken from the value of the
-.B INPUTRC
-environment variable. If that variable is unset, the default is
-.IR ~/.inputrc .
-If that file does not exist or cannot be read, the ultimate default is
-.IR /etc/inputrc .
-When a program which uses the readline library starts up, the
-init file is read, and the key bindings and variables are set.
-There are only a few basic constructs allowed in the
-readline init file. Blank lines are ignored.
-Lines beginning with a \fB#\fP are comments.
-Lines beginning with a \fB$\fP indicate conditional constructs.
-Other lines denote key bindings and variable settings.
-Each program using this library may add its own commands
-and bindings.
-.PP
-For example, placing
-.RS
-.PP
-M\-Control\-u: universal\-argument
-.RE
-or
-.RS
-C\-Meta\-u: universal\-argument
-.RE
-.sp
-into the
-.I inputrc
-would make M\-C\-u execute the readline command
-.IR universal\-argument .
-.PP
-The following symbolic character names are recognized while
-processing key bindings:
-.IR DEL ,
-.IR ESC ,
-.IR ESCAPE ,
-.IR LFD ,
-.IR NEWLINE ,
-.IR RET ,
-.IR RETURN ,
-.IR RUBOUT ,
-.IR SPACE ,
-.IR SPC ,
-and
-.IR TAB .
-.PP
-In addition to command names, readline allows keys to be bound
-to a string that is inserted when the key is pressed (a \fImacro\fP).
-.PP
-.SS Key Bindings
-.PP
-The syntax for controlling key bindings in the
-.I inputrc
-file is simple. All that is required is the name of the
-command or the text of a macro and a key sequence to which
-it should be bound. The name may be specified in one of two ways:
-as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
-prefixes, or as a key sequence.
-The name and key sequence are separated by a colon. There can be no
-whitespace between the name and the colon.
-.PP
-When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP,
-.I keyname
-is the name of a key spelled out in English. For example:
-.sp
-.RS
-Control\-u: universal\-argument
-.br
-Meta\-Rubout: backward\-kill\-word
-.br
-Control\-o: "> output"
-.RE
-.LP
-In the above example,
-.I C\-u
-is bound to the function
-.BR universal\-argument ,
-.I M-DEL
-is bound to the function
-.BR backward\-kill\-word ,
-and
-.I C\-o
-is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-.if t \f(CW> output\fP
-.if n ``> output''
-into the line).
-.PP
-In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
-.B keyseq
-differs from
-.B keyname
-above in that strings denoting
-an entire key sequence may be specified by placing the sequence
-within double quotes. Some GNU Emacs style key escapes can be
-used, as in the following example, but the symbolic character names
-are not recognized.
-.sp
-.RS
-"\eC\-u": universal\-argument
-.br
-"\eC\-x\eC\-r": re\-read\-init\-file
-.br
-"\ee[11~": "Function Key 1"
-.RE
-.PP
-In this example,
-.I C-u
-is again bound to the function
-.BR universal\-argument .
-.I "C-x C-r"
-is bound to the function
-.BR re\-read\-init\-file ,
-and
-.I "ESC [ 1 1 ~"
-is bound to insert the text
-.if t \f(CWFunction Key 1\fP.
-.if n ``Function Key 1''.
-.PP
-The full set of GNU Emacs style escape sequences available when specifying
-key sequences is
-.RS
-.PD 0
-.TP
-.B \eC\-
-control prefix
-.TP
-.B \eM\-
-meta prefix
-.TP
-.B \ee
-an escape character
-.TP
-.B \e\e
-backslash
-.TP
-.B \e"
-literal ", a double quote
-.TP
-.B \e'
-literal ', a single quote
-.RE
-.PD
-.PP
-In addition to the GNU Emacs style escape sequences, a second
-set of backslash escapes is available:
-.RS
-.PD 0
-.TP
-.B \ea
-alert (bell)
-.TP
-.B \eb
-backspace
-.TP
-.B \ed
-delete
-.TP
-.B \ef
-form feed
-.TP
-.B \en
-newline
-.TP
-.B \er
-carriage return
-.TP
-.B \et
-horizontal tab
-.TP
-.B \ev
-vertical tab
-.TP
-.B \e\fInnn\fP
-the eight-bit character whose value is the octal value \fInnn\fP
-(one to three digits)
-.TP
-.B \ex\fIHH\fP
-the eight-bit character whose value is the hexadecimal value \fIHH\fP
-(one or two hex digits)
-.RE
-.PD
-.PP
-When entering the text of a macro, single or double quotes should
-be used to indicate a macro definition. Unquoted text
-is assumed to be a function name.
-In the macro body, the backslash escapes described above are expanded.
-Backslash will quote any other character in the macro text,
-including " and '.
-.PP
-.B Bash
-allows the current readline key bindings to be displayed or modified
-with the
-.B bind
-builtin command. The editing mode may be switched during interactive
-use by using the
-.B \-o
-option to the
-.B set
-builtin command. Other programs using this library provide
-similar mechanisms. The
-.I inputrc
-file may be edited and re-read if a program does not provide
-any other means to incorporate new bindings.
-.SS Variables
-.PP
-Readline has variables that can be used to further customize its
-behavior. A variable may be set in the
-.I inputrc
-file with a statement of the form
-.RS
-.PP
-\fBset\fP \fIvariable\-name\fP \fIvalue\fP
-.RE
-.PP
-Except where noted, readline variables can take the values
-.B On
-or
-.B Off
-(without regard to case).
-Unrecognized variable names are ignored.
-When a variable value is read, empty or null values, "on" (case-insensitive),
-and "1" are equivalent to \fBOn\fP. All other values are equivalent to
-\fBOff\fP.
-The variables and their default values are:
-.PP
-.PD 0
-.TP
-.B bell\-style (audible)
-Controls what happens when readline wants to ring the terminal bell.
-If set to \fBnone\fP, readline never rings the bell. If set to
-\fBvisible\fP, readline uses a visible bell if one is available.
-If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
-.TP
-.B bind\-tty\-special\-chars (On)
-If set to \fBOn\fP (the default), readline attempts to bind the control
-characters treated specially by the kernel's terminal driver to their
-readline equivalents.
-.TP
-.B blink\-matching\-paren (Off)
-If set to \fBOn\fP, readline attempts to briefly move the cursor to an
-opening parenthesis when a closing parenthesis is inserted.
-.TP
-.B colored\-completion\-prefix (Off)
-If set to \fBOn\fP, when listing completions, readline displays the
-common prefix of the set of possible completions using a different color.
-The color definitions are taken from the value of the \fBLS_COLORS\fP
-environment variable.
-.TP
-.B colored\-stats (Off)
-If set to \fBOn\fP, readline displays possible completions using different
-colors to indicate their file type.
-The color definitions are taken from the value of the \fBLS_COLORS\fP
-environment variable.
-.TP
-.B comment\-begin (``#'')
-The string that is inserted in \fBvi\fP mode when the
-.B insert\-comment
-command is executed.
-This command is bound to
-.B M\-#
-in emacs mode and to
-.B #
-in vi command mode.
-.TP
-.B completion\-display\-width (\-1)
-The number of screen columns used to display possible matches
-when performing completion.
-The value is ignored if it is less than 0 or greater than the terminal
-screen width.
-A value of 0 will cause matches to be displayed one per line.
-The default value is \-1.
-.TP
-.B completion\-ignore\-case (Off)
-If set to \fBOn\fP, readline performs filename matching and completion
-in a case\-insensitive fashion.
-.TP
-.B completion\-map\-case (Off)
-If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline
-treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when
-performing case\-insensitive filename matching and completion.
-.TP
-.B completion\-prefix\-display\-length (0)
-The length in characters of the common prefix of a list of possible
-completions that is displayed without modification. When set to a
-value greater than zero, common prefixes longer than this value are
-replaced with an ellipsis when displaying possible completions.
-.TP
-.B completion\-query\-items (100)
-This determines when the user is queried about viewing
-the number of possible completions
-generated by the \fBpossible\-completions\fP command.
-It may be set to any integer value greater than or equal to
-zero. If the number of possible completions is greater than
-or equal to the value of this variable, the user is asked whether
-or not he wishes to view them; otherwise they are simply listed
-on the terminal. A negative value causes readline to never ask.
-.TP
-.B convert\-meta (On)
-If set to \fBOn\fP, readline will convert characters with the
-eighth bit set to an ASCII key sequence
-by stripping the eighth bit and prefixing it with an
-escape character (in effect, using escape as the \fImeta prefix\fP).
-The default is \fIOn\fP, but readline will set it to \fIOff\fP if the
-locale contains eight-bit characters.
-.TP
-.B disable\-completion (Off)
-If set to \fBOn\fP, readline will inhibit word completion. Completion
-characters will be inserted into the line as if they had been
-mapped to \fBself-insert\fP.
-.TP
-.B echo\-control\-characters (On)
-When set to \fBOn\fP, on operating systems that indicate they support it,
-readline echoes a character corresponding to a signal generated from the
-keyboard.
-.TP
-.B editing\-mode (emacs)
-Controls whether readline begins with a set of key bindings similar
-to \fIEmacs\fP or \fIvi\fP.
-.B editing\-mode
-can be set to either
-.B emacs
-or
-.BR vi .
-.TP
-.B emacs\-mode\-string (@)
-If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when emacs editing mode is active. The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B enable\-bracketed\-paste (Off)
-When set to \fBOn\fP, readline will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard. This can prevent pasted characters
-from being interpreted as editing commands.
-.TP
-.B enable\-keypad (Off)
-When set to \fBOn\fP, readline will try to enable the application
-keypad when it is called. Some systems need this to enable the
-arrow keys.
-.TP
-.B enable\-meta\-key (On)
-When set to \fBOn\fP, readline will try to enable any meta modifier
-key the terminal claims to support when it is called. On many terminals,
-the meta key is used to send eight-bit characters.
-.TP
-.B expand\-tilde (Off)
-If set to \fBOn\fP, tilde expansion is performed when readline
-attempts word completion.
-.TP
-.B history\-preserve\-point (Off)
-If set to \fBOn\fP, the history code attempts to place point at the
-same location on each history line retrieved with \fBprevious-history\fP
-or \fBnext-history\fP.
-.TP
-.B history\-size (unset)
-Set the maximum number of history entries saved in the history list.
-If set to zero, any existing history entries are deleted and no new entries
-are saved.
-If set to a value less than zero, the number of history entries is not
-limited.
-By default, the number of history entries is not limited.
-If an attempt is made to set \fIhistory\-size\fP to a non-numeric value,
-the maximum number of history entries will be set to 500.
-.TP
-.B horizontal\-scroll\-mode (Off)
-When set to \fBOn\fP, makes readline use a single line for display,
-scrolling the input horizontally on a single screen line when it
-becomes longer than the screen width rather than wrapping to a new line.
-.TP
-.B input\-meta (Off)
-If set to \fBOn\fP, readline will enable eight-bit input (that is,
-it will not clear the eighth bit in the characters it reads),
-regardless of what the terminal claims it can support. The name
-.B meta\-flag
-is a synonym for this variable.
-The default is \fIOff\fP, but readline will set it to \fIOn\fP if the
-locale contains eight-bit characters.
-.TP
-.B isearch\-terminators (``C\-[ C\-J'')
-The string of characters that should terminate an incremental
-search without subsequently executing the character as a command.
-If this variable has not been given a value, the characters
-\fIESC\fP and \fIC\-J\fP will terminate an incremental search.
-.TP
-.B keymap (emacs)
-Set the current readline keymap. The set of legal keymap names is
-\fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
-vi-command\fP, and
-.IR vi-insert .
-\fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is
-equivalent to \fIemacs-standard\fP. The default value is
-.IR emacs .
-The value of
-.B editing\-mode
-also affects the default keymap.
-.TP
-.B keyseq\-timeout (500)
-Specifies the duration \fIreadline\fP will wait for a character when reading an
-ambiguous key sequence (one that can form a complete key sequence using
-the input read so far, or can take additional input to complete a longer
-key sequence).
-If no input is received within the timeout, \fIreadline\fP will use the shorter
-but complete key sequence.
-The value is specified in milliseconds, so a value of 1000 means that
-\fIreadline\fP will wait one second for additional input.
-If this variable is set to a value less than or equal to zero, or to a
-non-numeric value, \fIreadline\fP will wait until another key is pressed to
-decide which key sequence to complete.
-.TP
-.B mark\-directories (On)
-If set to \fBOn\fP, completed directory names have a slash
-appended.
-.TP
-.B mark\-modified\-lines (Off)
-If set to \fBOn\fP, history lines that have been modified are displayed
-with a preceding asterisk (\fB*\fP).
-.TP
-.B mark\-symlinked\-directories (Off)
-If set to \fBOn\fP, completed names which are symbolic links to directories
-have a slash appended (subject to the value of
-\fBmark\-directories\fP).
-.TP
-.B match\-hidden\-files (On)
-This variable, when set to \fBOn\fP, causes readline to match files whose
-names begin with a `.' (hidden files) when performing filename
-completion.
-If set to \fBOff\fP, the leading `.' must be
-supplied by the user in the filename to be completed.
-.TP
-.B menu\-complete\-display\-prefix (Off)
-If set to \fBOn\fP, menu completion displays the common prefix of the
-list of possible completions (which may be empty) before cycling through
-the list.
-.TP
-.B output\-meta (Off)
-If set to \fBOn\fP, readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence.
-The default is \fIOff\fP, but readline will set it to \fIOn\fP if the
-locale contains eight-bit characters.
-.TP
-.B page\-completions (On)
-If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
-to display a screenful of possible completions at a time.
-.TP
-.B print\-completions\-horizontally (Off)
-If set to \fBOn\fP, readline will display completions with matches
-sorted horizontally in alphabetical order, rather than down the screen.
-.TP
-.B revert\-all\-at\-newline (Off)
-If set to \fBOn\fP, readline will undo all changes to history lines
-before returning when \fBaccept\-line\fP is executed. By default,
-history lines may be modified and retain individual undo lists across
-calls to \fBreadline\fP.
-.TP
-.B show\-all\-if\-ambiguous (Off)
-This alters the default behavior of the completion functions. If
-set to
-.BR On ,
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-.TP
-.B show\-all\-if\-unmodified (Off)
-This alters the default behavior of the completion functions in
-a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
-If set to
-.BR On ,
-words which have more than one possible completion without any
-possible partial completion (the possible completions don't share
-a common prefix) cause the matches to be listed immediately instead
-of ringing the bell.
-.TP
-.B show\-mode\-in\-prompt (Off)
-If set to \fBOn\fP, add a string to the beginning of the prompt
-indicating the editing mode: emacs, vi command, or vi insertion.
-The mode strings are user-settable (e.g., \fIemacs\-mode\-string\fP).
-.TP
-.B skip\-completed\-text (Off)
-If set to \fBOn\fP, this alters the default completion behavior when
-inserting a single match into the line. It's only active when
-performing completion in the middle of a word. If enabled, readline
-does not insert characters from the completion that match characters
-after point in the word being completed, so portions of the word
-following the cursor are not duplicated.
-.TP
-.B vi\-cmd\-mode\-string ((cmd))
-If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in command mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B vi\-ins\-mode\-string ((ins))
-If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in insertion mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B visible\-stats (Off)
-If set to \fBOn\fP, a character denoting a file's type as reported
-by \fIstat\fP(2) is appended to the filename when listing possible
-completions.
-.PD
-.SS Conditional Constructs
-.PP
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests. There are four parser directives used.
-.IP \fB$if\fP
-The
-.B $if
-construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-readline. The text of the test, after any comparison operator,
-extends to the end of the line;
-unless otherwise noted, no characters are required to isolate it.
-.RS
-.IP \fBmode\fP
-The \fBmode=\fP form of the \fB$if\fP directive is used to test
-whether readline is in emacs or vi mode.
-This may be used in conjunction
-with the \fBset keymap\fP command, for instance, to set bindings in
-the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if
-readline is starting out in emacs mode.
-.IP \fBterm\fP
-The \fBterm=\fP form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys. The word on the right side of the
-.B =
-is tested against the full name of the terminal and the portion
-of the terminal name before the first \fB\-\fP. This allows
-.I sun
-to match both
-.I sun
-and
-.IR sun\-cmd ,
-for instance.
-.IP \fBversion\fP
-The \fBversion\fP test may be used to perform comparisons against
-specific readline versions.
-The \fBversion\fP expands to the current readline version.
-The set of comparison operators includes
-.BR = ,
-(and
-.BR == ),
-.BR != ,
-.BR <= ,
-.BR >= ,
-.BR < ,
-and
-.BR > .
-The version number supplied on the right side of the operator consists
-of a major version number, an optional decimal point, and an optional
-minor version (e.g., \fB7.1\fP). If the minor version is omitted, it
-is assumed to be \fB0\fP.
-The operator may be separated from the string \fBversion\fP
-and from the version number argument by whitespace.
-.IP \fBapplication\fP
-The \fBapplication\fP construct is used to include
-application-specific settings. Each program using the readline
-library sets the \fIapplication name\fP, and an initialization
-file can test for a particular value.
-This could be used to bind key sequences to functions useful for
-a specific program. For instance, the following command adds a
-key sequence that quotes the current or previous word in \fBbash\fP:
-.sp 1
-.RS
-.nf
-\fB$if\fP Bash
-# Quote the current or previous word
-"\eC-xq": "\eeb\e"\eef\e""
-\fB$endif\fP
-.fi
-.RE
-.IP \fIvariable\fP
-The \fIvariable\fP construct provides simple equality tests for readline
-variables and values.
-The permitted comparison operators are \fI=\fP, \fI==\fP, and \fI!=\fP.
-The variable name must be separated from the comparison operator by
-whitespace; the operator may be separated from the value on the right hand
-side by whitespace.
-Both string and boolean variables may be tested. Boolean variables must be
-tested against the values \fIon\fP and \fIoff\fP.
-.RE
-.IP \fB$endif\fP
-This command, as seen in the previous example, terminates an
-\fB$if\fP command.
-.IP \fB$else\fP
-Commands in this branch of the \fB$if\fP directive are executed if
-the test fails.
-.IP \fB$include\fP
-This directive takes a single filename as an argument and reads commands
-and bindings from that file. For example, the following directive
-would read \fI/etc/inputrc\fP:
-.sp 1
-.RS
-.nf
-\fB$include\fP \^ \fI/etc/inputrc\fP
-.fi
-.RE
-.SH SEARCHING
-.PP
-Readline provides commands for searching through the command history
-for lines containing a specified string.
-There are two search modes:
-.I incremental
-and
-.IR non-incremental .
-.PP
-Incremental searches begin before the user has finished typing the
-search string.
-As each character of the search string is typed, readline displays
-the next entry from the history matching the string typed so far.
-An incremental search requires only as many characters as needed to
-find the desired history entry.
-To search backward in the history for a particular string, type
-\fBC\-r\fP. Typing \fBC\-s\fP searches forward through the history.
-The characters present in the value of the \fBisearch-terminators\fP
-variable are used to terminate an incremental search.
-If that variable has not been assigned a value the \fIEscape\fP and
-\fBC\-J\fP characters will terminate an incremental search.
-\fBC\-G\fP will abort an incremental search and restore the original
-line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-.PP
-To find other matching entries in the history list, type \fBC\-s\fP or
-\fBC\-r\fP as appropriate.
-This will search backward or forward in the history for the next
-line matching the search string typed so far.
-Any other key sequence bound to a readline command will terminate
-the search and execute that command.
-For instance, a newline will terminate the search and accept
-the line, thereby executing the command from the history list.
-A movement command will terminate the search, make the last line found
-the current line, and begin editing.
-.PP
-Non-incremental searches read the entire search string before starting
-to search for matching history lines. The search string may be
-typed by the user or be part of the contents of the current line.
-.SH EDITING COMMANDS
-.PP
-The following is a list of the names of the commands and the default
-key sequences to which they are bound.
-Command names without an accompanying key sequence are unbound by default.
-.PP
-In the following descriptions, \fIpoint\fP refers to the current cursor
-position, and \fImark\fP refers to a cursor position saved by the
-\fBset\-mark\fP command.
-The text between the point and mark is referred to as the \fIregion\fP.
-.SS Commands for Moving
-.PP
-.PD 0
-.TP
-.B beginning\-of\-line (C\-a)
-Move to the start of the current line.
-.TP
-.B end\-of\-line (C\-e)
-Move to the end of the line.
-.TP
-.B forward\-char (C\-f)
-Move forward a character.
-.TP
-.B backward\-char (C\-b)
-Move back a character.
-.TP
-.B forward\-word (M\-f)
-Move forward to the end of the next word. Words are composed of
-alphanumeric characters (letters and digits).
-.TP
-.B backward\-word (M\-b)
-Move back to the start of the current or previous word. Words are
-composed of alphanumeric characters (letters and digits).
-.TP
-.B previous\-screen\-line
-Attempt to move point to the same physical screen column on the previous
-physical screen line. This will not have the desired effect if the current
-Readline line does not take up more than one physical line or if point is not
-greater than the length of the prompt plus the screen width.
-.TP
-.B next\-screen\-line
-Attempt to move point to the same physical screen column on the next
-physical screen line. This will not have the desired effect if the current
-Readline line does not take up more than one physical line or if the length
-of the current Readline line is not greater than the length of the prompt
-plus the screen width.
-.TP
-.B clear\-screen (C\-l)
-Clear the screen leaving the current line at the top of the screen.
-With an argument, refresh the current line without clearing the
-screen.
-.TP
-.B redraw\-current\-line
-Refresh the current line.
-.PD
-.SS Commands for Manipulating the History
-.PP
-.PD 0
-.TP
-.B accept\-line (Newline, Return)
-Accept the line regardless of where the cursor is.
-If this line is
-non-empty, it may be added to the history list for future recall with
-\fBadd_history()\fP.
-If the line is a modified history line, the history line is restored to its original state.
-.TP
-.B previous\-history (C\-p)
-Fetch the previous command from the history list, moving back in
-the list.
-.TP
-.B next\-history (C\-n)
-Fetch the next command from the history list, moving forward in the
-list.
-.TP
-.B beginning\-of\-history (M\-<)
-Move to the first line in the history.
-.TP
-.B end\-of\-history (M\->)
-Move to the end of the input history, i.e., the line currently being
-entered.
-.TP
-.B reverse\-search\-history (C\-r)
-Search backward starting at the current line and moving `up' through
-the history as necessary. This is an incremental search.
-.TP
-.B forward\-search\-history (C\-s)
-Search forward starting at the current line and moving `down' through
-the history as necessary. This is an incremental search.
-.TP
-.B non\-incremental\-reverse\-search\-history (M\-p)
-Search backward through the history starting at the current line
-using a non-incremental search for a string supplied by the user.
-.TP
-.B non\-incremental\-forward\-search\-history (M\-n)
-Search forward through the history using a non-incremental search
-for a string supplied by the user.
-.TP
-.B history\-search\-backward
-Search backward through the history for the string of characters
-between the start of the current line and the current cursor
-position (the \fIpoint\fP).
-The search string must match at the beginning of a history line.
-This is a non-incremental search.
-.TP
-.B history\-search\-forward
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-The search string must match at the beginning of a history line.
-This is a non-incremental search.
-.TP
-.B history\-substring\-search\-backward
-Search backward through the history for the string of characters
-between the start of the current line and the current cursor
-position (the \fIpoint\fP).
-The search string may match anywhere in a history line.
-This is a non-incremental search.
-.TP
-.B history\-substring\-search\-forward
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-The search string may match anywhere in a history line.
-This is a non-incremental search.
-.TP
-.B yank\-nth\-arg (M\-C\-y)
-Insert the first argument to the previous command (usually
-the second word on the previous line) at point.
-With an argument
-.IR n ,
-insert the \fIn\fPth word from the previous command (the words
-in the previous command begin with word 0). A negative argument
-inserts the \fIn\fPth word from the end of the previous command.
-Once the argument \fIn\fP is computed, the argument is extracted
-as if the "!\fIn\fP" history expansion had been specified.
-.TP
-.B
-yank\-last\-arg (M\-.\^, M\-_\^)
-Insert the last argument to the previous command (the last word of
-the previous history entry).
-With a numeric argument, behave exactly like \fByank\-nth\-arg\fP.
-Successive calls to \fByank\-last\-arg\fP move back through the history
-list, inserting the last word (or the word specified by the argument to
-the first call) of each line in turn.
-Any numeric argument supplied to these successive calls determines
-the direction to move through the history. A negative argument switches
-the direction through the history (back or forward).
-The history expansion facilities are used to extract the last argument,
-as if the "!$" history expansion had been specified.
-.PD
-.SS Commands for Changing Text
-.PP
-.PD 0
-.TP
-.B \fIend\-of\-file\fP (usually C\-d)
-The character indicating end-of-file as set, for example, by
-.if t \f(CWstty\fP.
-.if n ``stty''.
-If this character is read when there are no characters
-on the line, and point is at the beginning of the line, Readline
-interprets it as the end of input and returns
-.SM
-.BR EOF .
-.TP
-.B delete\-char (C\-d)
-Delete the character at point.
-If this function is bound to the
-same character as the tty \fBEOF\fP character, as \fBC\-d\fP
-commonly is, see above for the effects.
-.TP
-.B backward\-delete\-char (Rubout)
-Delete the character behind the cursor. When given a numeric argument,
-save the deleted text on the kill ring.
-.TP
-.B forward\-backward\-delete\-char
-Delete the character under the cursor, unless the cursor is at the
-end of the line, in which case the character behind the cursor is
-deleted.
-.TP
-.B quoted\-insert (C\-q, C\-v)
-Add the next character that you type to the line verbatim. This is
-how to insert characters like \fBC\-q\fP, for example.
-.TP
-.B tab\-insert (M-TAB)
-Insert a tab character.
-.TP
-.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...)
-Insert the character typed.
-.TP
-.B transpose\-chars (C\-t)
-Drag the character before point forward over the character at point,
-moving point forward as well.
-If point is at the end of the line, then this transposes
-the two characters before point.
-Negative arguments have no effect.
-.TP
-.B transpose\-words (M\-t)
-Drag the word before point past the word after point,
-moving point over that word as well.
-If point is at the end of the line, this transposes
-the last two words on the line.
-.TP
-.B upcase\-word (M\-u)
-Uppercase the current (or following) word. With a negative argument,
-uppercase the previous word, but do not move point.
-.TP
-.B downcase\-word (M\-l)
-Lowercase the current (or following) word. With a negative argument,
-lowercase the previous word, but do not move point.
-.TP
-.B capitalize\-word (M\-c)
-Capitalize the current (or following) word. With a negative argument,
-capitalize the previous word, but do not move point.
-.TP
-.B overwrite\-mode
-Toggle overwrite mode. With an explicit positive numeric argument,
-switches to overwrite mode. With an explicit non-positive numeric
-argument, switches to insert mode. This command affects only
-\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
-Each call to \fIreadline()\fP starts in insert mode.
-In overwrite mode, characters bound to \fBself\-insert\fP replace
-the text at point rather than pushing the text to the right.
-Characters bound to \fBbackward\-delete\-char\fP replace the character
-before point with a space. By default, this command is unbound.
-.PD
-.SS Killing and Yanking
-.PP
-.PD 0
-.TP
-.B kill\-line (C\-k)
-Kill the text from point to the end of the line.
-.TP
-.B backward\-kill\-line (C\-x Rubout)
-Kill backward to the beginning of the line.
-.TP
-.B unix\-line\-discard (C\-u)
-Kill backward from point to the beginning of the line.
-The killed text is saved on the kill-ring.
-.\" There is no real difference between this and backward-kill-line
-.TP
-.B kill\-whole\-line
-Kill all characters on the current line, no matter where point is.
-.TP
-.B kill\-word (M\-d)
-Kill from point the end of the current word, or if between
-words, to the end of the next word. Word boundaries are the same as
-those used by \fBforward\-word\fP.
-.TP
-.B backward\-kill\-word (M\-Rubout)
-Kill the word behind point.
-Word boundaries are the same as those used by \fBbackward\-word\fP.
-.TP
-.B unix\-word\-rubout (C\-w)
-Kill the word behind point, using white space as a word boundary.
-The killed text is saved on the kill-ring.
-.TP
-.B unix\-filename\-rubout
-Kill the word behind point, using white space and the slash character
-as the word boundaries.
-The killed text is saved on the kill-ring.
-.TP
-.B delete\-horizontal\-space (M\-\e)
-Delete all spaces and tabs around point.
-.TP
-.B kill\-region
-Kill the text between the point and \fImark\fP (saved cursor position).
-This text is referred to as the \fIregion\fP.
-.TP
-.B copy\-region\-as\-kill
-Copy the text in the region to the kill buffer.
-.TP
-.B copy\-backward\-word
-Copy the word before point to the kill buffer.
-The word boundaries are the same as \fBbackward\-word\fP.
-.TP
-.B copy\-forward\-word
-Copy the word following point to the kill buffer.
-The word boundaries are the same as \fBforward\-word\fP.
-.TP
-.B yank (C\-y)
-Yank the top of the kill ring into the buffer at point.
-.TP
-.B yank\-pop (M\-y)
-Rotate the kill ring, and yank the new top. Only works following
-.B yank
-or
-.BR yank\-pop .
-.PD
-.SS Numeric Arguments
-.PP
-.PD 0
-.TP
-.B digit\-argument (M\-0, M\-1, ..., M\-\-)
-Add this digit to the argument already accumulating, or start a new
-argument. M\-\- starts a negative argument.
-.TP
-.B universal\-argument
-This is another way to specify an argument.
-If this command is followed by one or more digits, optionally with a
-leading minus sign, those digits define the argument.
-If the command is followed by digits, executing
-.B universal\-argument
-again ends the numeric argument, but is otherwise ignored.
-As a special case, if this command is immediately followed by a
-character that is neither a digit or minus sign, the argument count
-for the next command is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four, a second time makes the
-argument count sixteen, and so on.
-.PD
-.SS Completing
-.PP
-.PD 0
-.TP
-.B complete (TAB)
-Attempt to perform completion on the text before point.
-The actual completion performed is application-specific.
-.BR Bash ,
-for instance, attempts completion treating the text as a variable
-(if the text begins with \fB$\fP), username (if the text begins with
-\fB~\fP), hostname (if the text begins with \fB@\fP), or
-command (including aliases and functions) in turn. If none
-of these produces a match, filename completion is attempted.
-.BR Gdb ,
-on the other hand,
-allows completion of program functions and variables, and
-only attempts filename completion under certain circumstances.
-.TP
-.B possible\-completions (M\-?)
-List the possible completions of the text before point.
-When displaying completions, readline sets the number of columns used
-for display to the value of \fBcompletion-display-width\fP, the value of
-the environment variable
-.SM
-.BR COLUMNS ,
-or the screen width, in that order.
-.TP
-.B insert\-completions (M\-*)
-Insert all completions of the text before point
-that would have been generated by
-\fBpossible\-completions\fP.
-.TP
-.B menu\-complete
-Similar to \fBcomplete\fP, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of \fBmenu\-complete\fP steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung
-(subject to the setting of \fBbell\-style\fP)
-and the original text is restored.
-An argument of \fIn\fP moves \fIn\fP positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to \fBTAB\fP, but is unbound
-by default.
-.TP
-.B menu\-complete\-backward
-Identical to \fBmenu\-complete\fP, but moves backward through the list
-of possible completions, as if \fBmenu\-complete\fP had been given a
-negative argument. This command is unbound by default.
-.TP
-.B delete\-char\-or\-list
-Deletes the character under the cursor if not at the beginning or
-end of the line (like \fBdelete-char\fP).
-If at the end of the line, behaves identically to
-\fBpossible-completions\fP.
-.PD
-.SS Keyboard Macros
-.PP
-.PD 0
-.TP
-.B start\-kbd\-macro (C\-x (\^)
-Begin saving the characters typed into the current keyboard macro.
-.TP
-.B end\-kbd\-macro (C\-x )\^)
-Stop saving the characters typed into the current keyboard macro
-and store the definition.
-.TP
-.B call\-last\-kbd\-macro (C\-x e)
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-.TP
-.B print\-last\-kbd\-macro ()
-Print the last keyboard macro defined in a format suitable for the
-\fIinputrc\fP file.
-.PD
-.SS Miscellaneous
-.PP
-.PD 0
-.TP
-.B re\-read\-init\-file (C\-x C\-r)
-Read in the contents of the \fIinputrc\fP file, and incorporate
-any bindings or variable assignments found there.
-.TP
-.B abort (C\-g)
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-.BR bell\-style ).
-.TP
-.B do\-lowercase\-version (M\-A, M\-B, M\-\fIx\fP, ...)
-If the metafied character \fIx\fP is uppercase, run the command
-that is bound to the corresponding metafied lowercase character.
-The behavior is undefined if \fIx\fP is already lowercase.
-.TP
-.B prefix\-meta (ESC)
-Metafy the next character typed.
-.SM
-.B ESC
-.B f
-is equivalent to
-.BR Meta\-f .
-.TP
-.B undo (C\-_, C\-x C\-u)
-Incremental undo, separately remembered for each line.
-.TP
-.B revert\-line (M\-r)
-Undo all changes made to this line. This is like executing the
-.B undo
-command enough times to return the line to its initial state.
-.TP
-.B tilde\-expand (M\-&)
-Perform tilde expansion on the current word.
-.TP
-.B set\-mark (C\-@, M\-<space>)
-Set the mark to the point. If a
-numeric argument is supplied, the mark is set to that position.
-.TP
-.B exchange\-point\-and\-mark (C\-x C\-x)
-Swap the point with the mark. The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-.TP
-.B character\-search (C\-])
-A character is read and point is moved to the next occurrence of that
-character. A negative count searches for previous occurrences.
-.TP
-.B character\-search\-backward (M\-C\-])
-A character is read and point is moved to the previous occurrence of that
-character. A negative count searches for subsequent occurrences.
-.TP
-.B skip\-csi\-sequence
-Read enough characters to consume a multi-key sequence such as those
-defined for keys like Home and End. Such sequences begin with a
-Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is
-bound to "\e[", keys producing such sequences will have no effect
-unless explicitly bound to a readline command, instead of inserting
-stray characters into the editing buffer. This is unbound by default,
-but usually bound to ESC\-[.
-.TP
-.B insert\-comment (M\-#)
-Without a numeric argument, the value of the readline
-.B comment\-begin
-variable is inserted at the beginning of the current line.
-If a numeric argument is supplied, this command acts as a toggle: if
-the characters at the beginning of the line do not match the value
-of \fBcomment\-begin\fP, the value is inserted, otherwise
-the characters in \fBcomment-begin\fP are deleted from the beginning of
-the line.
-In either case, the line is accepted as if a newline had been typed.
-The default value of
-.B comment\-begin
-makes the current line a shell comment.
-If a numeric argument causes the comment character to be removed, the line
-will be executed by the shell.
-.TP
-.B dump\-functions
-Print all of the functions and their key bindings to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B dump\-variables
-Print all of the settable variables and their values to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B dump\-macros
-Print all of the readline key sequences bound to macros and the
-strings they output. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B emacs\-editing\-mode (C\-e)
-When in
-.B vi
-command mode, this causes a switch to
-.B emacs
-editing mode.
-.TP
-.B vi\-editing\-mode (M\-C\-j)
-When in
-.B emacs
-editing mode, this causes a switch to
-.B vi
-editing mode.
-.PD
-.SH DEFAULT KEY BINDINGS
-.LP
-The following is a list of the default emacs and vi bindings.
-Characters with the eighth bit set are written as M\-<character>, and
-are referred to as
-.I metafied
-characters.
-The printable ASCII characters not mentioned in the list of emacs
-standard bindings are bound to the
-.B self\-insert
-function, which just inserts the given character into the input line.
-In vi insertion mode, all characters not specifically mentioned are
-bound to
-.BR self\-insert .
-Characters assigned to signal generation by
-.IR stty (1)
-or the terminal driver, such as C-Z or C-C,
-retain that function.
-Upper and lower case metafied characters are bound to the same function in
-the emacs mode meta keymap.
-The remaining characters are unbound, which causes readline
-to ring the bell (subject to the setting of the
-.B bell\-style
-variable).
-.SS Emacs Mode
-.RS +.6i
-.nf
-.ta 2.5i
-.sp
-Emacs Standard bindings
-.sp
-"C-@" set-mark
-"C-A" beginning-of-line
-"C-B" backward-char
-"C-D" delete-char
-"C-E" end-of-line
-"C-F" forward-char
-"C-G" abort
-"C-H" backward-delete-char
-"C-I" complete
-"C-J" accept-line
-"C-K" kill-line
-"C-L" clear-screen
-"C-M" accept-line
-"C-N" next-history
-"C-P" previous-history
-"C-Q" quoted-insert
-"C-R" reverse-search-history
-"C-S" forward-search-history
-"C-T" transpose-chars
-"C-U" unix-line-discard
-"C-V" quoted-insert
-"C-W" unix-word-rubout
-"C-Y" yank
-"C-]" character-search
-"C-_" undo
-"\^ " to "/" self-insert
-"0" to "9" self-insert
-":" to "~" self-insert
-"C-?" backward-delete-char
-.PP
-Emacs Meta bindings
-.sp
-"M-C-G" abort
-"M-C-H" backward-kill-word
-"M-C-I" tab-insert
-"M-C-J" vi-editing-mode
-"M-C-M" vi-editing-mode
-"M-C-R" revert-line
-"M-C-Y" yank-nth-arg
-"M-C-[" complete
-"M-C-]" character-search-backward
-"M-space" set-mark
-"M-#" insert-comment
-"M-&" tilde-expand
-"M-*" insert-completions
-"M--" digit-argument
-"M-." yank-last-arg
-"M-0" digit-argument
-"M-1" digit-argument
-"M-2" digit-argument
-"M-3" digit-argument
-"M-4" digit-argument
-"M-5" digit-argument
-"M-6" digit-argument
-"M-7" digit-argument
-"M-8" digit-argument
-"M-9" digit-argument
-"M-<" beginning-of-history
-"M-=" possible-completions
-"M->" end-of-history
-"M-?" possible-completions
-"M-B" backward-word
-"M-C" capitalize-word
-"M-D" kill-word
-"M-F" forward-word
-"M-L" downcase-word
-"M-N" non-incremental-forward-search-history
-"M-P" non-incremental-reverse-search-history
-"M-R" revert-line
-"M-T" transpose-words
-"M-U" upcase-word
-"M-Y" yank-pop
-"M-\e" delete-horizontal-space
-"M-~" tilde-expand
-"M-C-?" backward-kill-word
-"M-_" yank-last-arg
-.PP
-Emacs Control-X bindings
-.sp
-"C-XC-G" abort
-"C-XC-R" re-read-init-file
-"C-XC-U" undo
-"C-XC-X" exchange-point-and-mark
-"C-X(" start-kbd-macro
-"C-X)" end-kbd-macro
-"C-XE" call-last-kbd-macro
-"C-XC-?" backward-kill-line
-.sp
-.RE
-.SS VI Mode bindings
-.RS +.6i
-.nf
-.ta 2.5i
-.sp
-.PP
-VI Insert Mode functions
-.sp
-"C-D" vi-eof-maybe
-"C-H" backward-delete-char
-"C-I" complete
-"C-J" accept-line
-"C-M" accept-line
-"C-R" reverse-search-history
-"C-S" forward-search-history
-"C-T" transpose-chars
-"C-U" unix-line-discard
-"C-V" quoted-insert
-"C-W" unix-word-rubout
-"C-Y" yank
-"C-[" vi-movement-mode
-"C-_" undo
-"\^ " to "~" self-insert
-"C-?" backward-delete-char
-.PP
-VI Command Mode functions
-.sp
-"C-D" vi-eof-maybe
-"C-E" emacs-editing-mode
-"C-G" abort
-"C-H" backward-char
-"C-J" accept-line
-"C-K" kill-line
-"C-L" clear-screen
-"C-M" accept-line
-"C-N" next-history
-"C-P" previous-history
-"C-Q" quoted-insert
-"C-R" reverse-search-history
-"C-S" forward-search-history
-"C-T" transpose-chars
-"C-U" unix-line-discard
-"C-V" quoted-insert
-"C-W" unix-word-rubout
-"C-Y" yank
-"C-_" vi-undo
-"\^ " forward-char
-"#" insert-comment
-"$" end-of-line
-"%" vi-match
-"&" vi-tilde-expand
-"*" vi-complete
-"+" next-history
-"," vi-char-search
-"-" previous-history
-"." vi-redo
-"/" vi-search
-"0" beginning-of-line
-"1" to "9" vi-arg-digit
-";" vi-char-search
-"=" vi-complete
-"?" vi-search
-"A" vi-append-eol
-"B" vi-prev-word
-"C" vi-change-to
-"D" vi-delete-to
-"E" vi-end-word
-"F" vi-char-search
-"G" vi-fetch-history
-"I" vi-insert-beg
-"N" vi-search-again
-"P" vi-put
-"R" vi-replace
-"S" vi-subst
-"T" vi-char-search
-"U" revert-line
-"W" vi-next-word
-"X" backward-delete-char
-"Y" vi-yank-to
-"\e" vi-complete
-"^" vi-first-print
-"_" vi-yank-arg
-"`" vi-goto-mark
-"a" vi-append-mode
-"b" vi-prev-word
-"c" vi-change-to
-"d" vi-delete-to
-"e" vi-end-word
-"f" vi-char-search
-"h" backward-char
-"i" vi-insertion-mode
-"j" next-history
-"k" prev-history
-"l" forward-char
-"m" vi-set-mark
-"n" vi-search-again
-"p" vi-put
-"r" vi-change-char
-"s" vi-subst
-"t" vi-char-search
-"u" vi-undo
-"w" vi-next-word
-"x" vi-delete
-"y" vi-yank-to
-"|" vi-column
-"~" vi-change-case
-.RE
-.SH "SEE ALSO"
-.PD 0
-.TP
-\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIbash\fP(1)
-.PD
-.SH FILES
-.PD 0
-.TP
-.FN ~/.inputrc
-Individual \fBreadline\fP initialization file
-.PD
-.SH AUTHORS
-Brian Fox, Free Software Foundation
-.br
-bfox@gnu.org
-.PP
-Chet Ramey, Case Western Reserve University
-.br
-chet.ramey@case.edu
-.SH BUG REPORTS
-If you find a bug in
-.B readline,
-you should report it. But first, you should
-make sure that it really is a bug, and that it appears in the latest
-version of the
-.B readline
-library that you have.
-.PP
-Once you have determined that a bug actually exists, mail a
-bug report to \fIbug\-readline\fP@\fIgnu.org\fP.
-If you have a fix, you are welcome to mail that
-as well! Suggestions and `philosophical' bug reports may be mailed
-to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet
-newsgroup
-.BR gnu.bash.bug .
-.PP
-Comments and bug reports concerning
-this manual page should be directed to
-.IR chet.ramey@case.edu .
-.SH BUGS
-.PP
-It's too big and too slow.
diff --git a/readline/doc/rlman.texi b/readline/doc/rlman.texi
deleted file mode 100644
index 737f971..0000000
--- a/readline/doc/rlman.texi
+++ /dev/null
@@ -1,84 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename readline.info
-@settitle GNU Readline Library
-@include version.texi
-
-@comment %**end of header (This is for running Texinfo on a region.)
-@synindex vr fn
-
-@copying
-This manual describes the GNU Readline Library
-(version @value{VERSION}, @value{UPDATED}), a library which aids in the
-consistency of user interface across discrete programs which provide
-a command line interface.
-
-Copyright @copyright{} 1988--2016 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-
-@end quotation
-@end copying
-
-@dircategory Libraries
-@direntry
-* Readline: (readline). The GNU readline library API.
-@end direntry
-
-@titlepage
-@title GNU Readline Library
-@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
-@subtitle @value{UPDATED-MONTH}
-@author Chet Ramey, Case Western Reserve University
-@author Brian Fox, Free Software Foundation
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top GNU Readline Library
-
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs which
-provide a command line interface.
-The Readline home page is @url{http://www.gnu.org/software/readline/}.
-
-@menu
-* Command Line Editing:: GNU Readline User's Manual.
-* Programming with GNU Readline:: GNU Readline Programmer's Manual.
-* GNU Free Documentation License:: License for copying this manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifnottex
-
-@include rluser.texi
-@include rltech.texi
-
-@node GNU Free Documentation License
-@appendix GNU Free Documentation License
-
-@include fdl.texi
-
-@node Concept Index
-@unnumbered Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@unnumbered Function and Variable Index
-@printindex fn
-
-@bye
diff --git a/readline/doc/rltech.texi b/readline/doc/rltech.texi
deleted file mode 100644
index 28a02d9..0000000
--- a/readline/doc/rltech.texi
+++ /dev/null
@@ -1,2731 +0,0 @@
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename rltech.info
-@comment %**end of header (This is for running Texinfo on a region.)
-
-@ifinfo
-This document describes the GNU Readline Library, a utility for aiding
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-Copyright (C) 1988--2016 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-pare preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@node Programming with GNU Readline
-@chapter Programming with GNU Readline
-
-This chapter describes the interface between the @sc{gnu} Readline Library and
-other programs. If you are a programmer, and you wish to include the
-features found in @sc{gnu} Readline
-such as completion, line editing, and interactive history manipulation
-in your own programs, this section is for you.
-
-@menu
-* Basic Behavior:: Using the default behavior of Readline.
-* Custom Functions:: Adding your own functions to Readline.
-* Readline Variables:: Variables accessible to custom
- functions.
-* Readline Convenience Functions:: Functions which Readline supplies to
- aid in writing your own custom
- functions.
-* Readline Signal Handling:: How Readline behaves when it receives signals.
-* Custom Completers:: Supplanting or supplementing Readline's
- completion functions.
-@end menu
-
-@node Basic Behavior
-@section Basic Behavior
-
-Many programs provide a command line interface, such as @code{mail},
-@code{ftp}, and @code{sh}. For such programs, the default behaviour of
-Readline is sufficient. This section describes how to use Readline in
-the simplest way possible, perhaps to replace calls in your code to
-@code{gets()} or @code{fgets()}.
-
-@findex readline
-@cindex readline, function
-
-The function @code{readline()} prints a prompt @var{prompt}
-and then reads and returns a single line of text from the user.
-If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed.
-The line @code{readline} returns is allocated with @code{malloc()};
-the caller should @code{free()} the line when it has finished with it.
-The declaration for @code{readline} in ANSI C is
-
-@example
-@code{char *readline (const char *@var{prompt});}
-@end example
-
-@noindent
-So, one might say
-@example
-@code{char *line = readline ("Enter a line: ");}
-@end example
-@noindent
-in order to read a line of text from the user.
-The line returned has the final newline removed, so only the
-text remains.
-
-If @code{readline} encounters an @code{EOF} while reading the line, and the
-line is empty at that point, then @code{(char *)NULL} is returned.
-Otherwise, the line is ended just as if a newline had been typed.
-
-Readline performs some expansion on the @var{prompt} before it is
-displayed on the screen. See the description of @code{rl_expand_prompt}
-(@pxref{Redisplay}) for additional details, especially if @var{prompt}
-will contain characters that do not consume physical screen space when
-displayed.
-
-If you want the user to be able to get at the line later, (with
-@key{C-p} for example), you must call @code{add_history()} to save the
-line away in a @dfn{history} list of such lines.
-
-@example
-@code{add_history (line)};
-@end example
-
-@noindent
-For full details on the GNU History Library, see the associated manual.
-
-It is preferable to avoid saving empty lines on the history list, since
-users rarely have a burning need to reuse a blank line. Here is
-a function which usefully replaces the standard @code{gets()} library
-function, and has the advantage of no static buffer to overflow:
-
-@example
-/* A static variable for holding the line. */
-static char *line_read = (char *)NULL;
-
-/* Read a string, and return a pointer to it.
- Returns NULL on EOF. */
-char *
-rl_gets ()
-@{
- /* If the buffer has already been allocated,
- return the memory to the free pool. */
- if (line_read)
- @{
- free (line_read);
- line_read = (char *)NULL;
- @}
-
- /* Get a line from the user. */
- line_read = readline ("");
-
- /* If the line has any text in it,
- save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-@}
-@end example
-
-This function gives the user the default behaviour of @key{TAB}
-completion: completion on file names. If you do not want Readline to
-complete on filenames, you can change the binding of the @key{TAB} key
-with @code{rl_bind_key()}.
-
-@example
-@code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});}
-@end example
-
-@code{rl_bind_key()} takes two arguments: @var{key} is the character that
-you want to bind, and @var{function} is the address of the function to
-call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert()}
-makes @key{TAB} insert itself.
-@code{rl_bind_key()} returns non-zero if @var{key} is not a valid
-ASCII character code (between 0 and 255).
-
-Thus, to disable the default @key{TAB} behavior, the following suffices:
-@example
-@code{rl_bind_key ('\t', rl_insert);}
-@end example
-
-This code should be executed once at the start of your program; you
-might write a function called @code{initialize_readline()} which
-performs this and other desired initializations, such as installing
-custom completers (@pxref{Custom Completers}).
-
-@node Custom Functions
-@section Custom Functions
-
-Readline provides many functions for manipulating the text of
-the line, but it isn't possible to anticipate the needs of all
-programs. This section describes the various functions and variables
-defined within the Readline library which allow a user program to add
-customized functionality to Readline.
-
-Before declaring any functions that customize Readline's behavior, or
-using any functionality Readline provides in other code, an
-application writer should include the file @code{<readline/readline.h>}
-in any file that uses Readline's features. Since some of the definitions
-in @code{readline.h} use the @code{stdio} library, the file
-@code{<stdio.h>} should be included before @code{readline.h}.
-
-@code{readline.h} defines a C preprocessor variable that should
-be treated as an integer, @code{RL_READLINE_VERSION}, which may
-be used to conditionally compile application code depending on
-the installed Readline version. The value is a hexadecimal
-encoding of the major and minor version numbers of the library,
-of the form 0x@var{MMmm}. @var{MM} is the two-digit major
-version number; @var{mm} is the two-digit minor version number.
-For Readline 4.2, for example, the value of
-@code{RL_READLINE_VERSION} would be @code{0x0402}.
-
-@menu
-* Readline Typedefs:: C declarations to make code readable.
-* Function Writing:: Variables and calling conventions.
-@end menu
-
-@node Readline Typedefs
-@subsection Readline Typedefs
-
-For readability, we declare a number of new object types, all pointers
-to functions.
-
-The reason for declaring these new types is to make it easier to write
-code describing pointers to C functions with appropriately prototyped
-arguments and return values.
-
-For instance, say we want to declare a variable @var{func} as a pointer
-to a function which takes two @code{int} arguments and returns an
-@code{int} (this is the type of all of the Readline bindable functions).
-Instead of the classic C declaration
-
-@code{int (*func)();}
-
-@noindent
-or the ANSI-C style declaration
-
-@code{int (*func)(int, int);}
-
-@noindent
-we may write
-
-@code{rl_command_func_t *func;}
-
-The full list of function pointer types available is
-
-@table @code
-@item typedef int rl_command_func_t (int, int);
-
-@item typedef char *rl_compentry_func_t (const char *, int);
-
-@item typedef char **rl_completion_func_t (const char *, int, int);
-
-@item typedef char *rl_quote_func_t (char *, int, char *);
-
-@item typedef char *rl_dequote_func_t (char *, int);
-
-@item typedef int rl_compignore_func_t (char **);
-
-@item typedef void rl_compdisp_func_t (char **, int, int);
-
-@item typedef int rl_hook_func_t (void);
-
-@item typedef int rl_getc_func_t (FILE *);
-
-@item typedef int rl_linebuf_func_t (char *, int);
-
-@item typedef int rl_intfunc_t (int);
-@item #define rl_ivoidfunc_t rl_hook_func_t
-@item typedef int rl_icpfunc_t (char *);
-@item typedef int rl_icppfunc_t (char **);
-
-@item typedef void rl_voidfunc_t (void);
-@item typedef void rl_vintfunc_t (int);
-@item typedef void rl_vcpfunc_t (char *);
-@item typedef void rl_vcppfunc_t (char **);
-
-@end table
-
-@node Function Writing
-@subsection Writing a New Function
-
-In order to write new functions for Readline, you need to know the
-calling conventions for keyboard-invoked functions, and the names of the
-variables that describe the current state of the line read so far.
-
-The calling sequence for a command @code{foo} looks like
-
-@example
-@code{int foo (int count, int key)}
-@end example
-
-@noindent
-where @var{count} is the numeric argument (or 1 if defaulted) and
-@var{key} is the key that invoked this function.
-
-It is completely up to the function as to what should be done with the
-numeric argument. Some functions use it as a repeat count, some
-as a flag, and others to choose alternate behavior (refreshing the current
-line as opposed to refreshing the screen, for example). Some choose to
-ignore it. In general, if a
-function uses the numeric argument as a repeat count, it should be able
-to do something useful with both negative and positive arguments.
-At the very least, it should be aware that it can be passed a
-negative argument.
-
-A command function should return 0 if its action completes successfully,
-and a value greater than zero if some error occurs.
-This is the convention obeyed by all of the builtin Readline bindable
-command functions.
-
-@node Readline Variables
-@section Readline Variables
-
-These variables are available to function writers.
-
-@deftypevar {char *} rl_line_buffer
-This is the line gathered so far. You are welcome to modify the
-contents of the line, but see @ref{Allowing Undoing}. The
-function @code{rl_extend_line_buffer} is available to increase
-the memory allocated to @code{rl_line_buffer}.
-@end deftypevar
-
-@deftypevar int rl_point
-The offset of the current cursor position in @code{rl_line_buffer}
-(the @emph{point}).
-@end deftypevar
-
-@deftypevar int rl_end
-The number of characters present in @code{rl_line_buffer}. When
-@code{rl_point} is at the end of the line, @code{rl_point} and
-@code{rl_end} are equal.
-@end deftypevar
-
-@deftypevar int rl_mark
-The @var{mark} (saved position) in the current line. If set, the mark
-and point define a @emph{region}.
-@end deftypevar
-
-@deftypevar int rl_done
-Setting this to a non-zero value causes Readline to return the current
-line immediately.
-@end deftypevar
-
-@deftypevar int rl_num_chars_to_read
-Setting this to a positive value before calling @code{readline()} causes
-Readline to return after accepting that many characters, rather
-than reading up to a character bound to @code{accept-line}.
-@end deftypevar
-
-@deftypevar int rl_pending_input
-Setting this to a value makes it the next keystroke read. This is a
-way to stuff a single character into the input stream.
-@end deftypevar
-
-@deftypevar int rl_dispatching
-Set to a non-zero value if a function is being called from a key binding;
-zero otherwise. Application functions can test this to discover whether
-they were called directly or by Readline's dispatching mechanism.
-@end deftypevar
-
-@deftypevar int rl_erase_empty_line
-Setting this to a non-zero value causes Readline to completely erase
-the current line, including any prompt, any time a newline is typed as
-the only character on an otherwise-empty line. The cursor is moved to
-the beginning of the newly-blank line.
-@end deftypevar
-
-@deftypevar {char *} rl_prompt
-The prompt Readline uses. This is set from the argument to
-@code{readline()}, and should not be assigned to directly.
-The @code{rl_set_prompt()} function (@pxref{Redisplay}) may
-be used to modify the prompt string after calling @code{readline()}.
-@end deftypevar
-
-@deftypevar {char *} rl_display_prompt
-The string displayed as the prompt. This is usually identical to
-@var{rl_prompt}, but may be changed temporarily by functions that
-use the prompt string as a message area, such as incremental search.
-@end deftypevar
-
-@deftypevar int rl_already_prompted
-If an application wishes to display the prompt itself, rather than have
-Readline do it the first time @code{readline()} is called, it should set
-this variable to a non-zero value after displaying the prompt.
-The prompt must also be passed as the argument to @code{readline()} so
-the redisplay functions can update the display properly.
-The calling application is responsible for managing the value; Readline
-never sets it.
-@end deftypevar
-
-@deftypevar {const char *} rl_library_version
-The version number of this revision of the library.
-@end deftypevar
-
-@deftypevar int rl_readline_version
-An integer encoding the current version of the library. The encoding is
-of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version
-number, and @var{mm} is the two-digit minor version number.
-For example, for Readline-4.2, @code{rl_readline_version} would have the
-value 0x0402.
-@end deftypevar
-
-@deftypevar {int} rl_gnu_readline_p
-Always set to 1, denoting that this is @sc{gnu} readline rather than some
-emulation.
-@end deftypevar
-
-@deftypevar {const char *} rl_terminal_name
-The terminal type, used for initialization. If not set by the application,
-Readline sets this to the value of the @env{TERM} environment variable
-the first time it is called.
-@end deftypevar
-
-@deftypevar {const char *} rl_readline_name
-This variable is set to a unique name by each application using Readline.
-The value allows conditional parsing of the inputrc file
-(@pxref{Conditional Init Constructs}).
-@end deftypevar
-
-@deftypevar {FILE *} rl_instream
-The stdio stream from which Readline reads input.
-If @code{NULL}, Readline defaults to @var{stdin}.
-@end deftypevar
-
-@deftypevar {FILE *} rl_outstream
-The stdio stream to which Readline performs output.
-If @code{NULL}, Readline defaults to @var{stdout}.
-@end deftypevar
-
-@deftypevar int rl_prefer_env_winsize
-If non-zero, Readline gives values found in the @env{LINES} and
-@env{COLUMNS} environment variables greater precedence than values fetched
-from the kernel when computing the screen dimensions.
-@end deftypevar
-
-@deftypevar {rl_command_func_t *} rl_last_func
-The address of the last command function Readline executed. May be used to
-test whether or not a function is being executed twice in succession, for
-example.
-@end deftypevar
-
-@deftypevar {rl_hook_func_t *} rl_startup_hook
-If non-zero, this is the address of a function to call just
-before @code{readline} prints the first prompt.
-@end deftypevar
-
-@deftypevar {rl_hook_func_t *} rl_pre_input_hook
-If non-zero, this is the address of a function to call after
-the first prompt has been printed and just before @code{readline}
-starts reading input characters.
-@end deftypevar
-
-@deftypevar {rl_hook_func_t *} rl_event_hook
-If non-zero, this is the address of a function to call periodically
-when Readline is waiting for terminal input.
-By default, this will be called at most ten times a second if there
-is no keyboard input.
-@end deftypevar
-
-@deftypevar {rl_getc_func_t *} rl_getc_function
-If non-zero, Readline will call indirectly through this pointer
-to get a character from the input stream. By default, it is set to
-@code{rl_getc}, the default Readline character input function
-(@pxref{Character Input}).
-In general, an application that sets @var{rl_getc_function} should consider
-setting @var{rl_input_available_hook} as well.
-@end deftypevar
-
-@deftypevar {rl_hook_func_t *} rl_signal_event_hook
-If non-zero, this is the address of a function to call if a read system
-call is interrupted when Readline is reading terminal input.
-@end deftypevar
-
-@deftypevar {rl_hook_func_t *} rl_input_available_hook
-If non-zero, Readline will use this function's return value when it needs
-to determine whether or not there is available input on the current input
-source.
-The default hook checks @code{rl_instream}; if an application is using a
-different input source, it should set the hook appropriately.
-Readline queries for available input when implementing intra-key-sequence
-timeouts during input and incremental searches.
-This may use an application-specific timeout before returning a value;
-Readline uses the value passed to @code{rl_set_keyboard_input_timeout()}
-or the value of the user-settable @var{keyseq-timeout} variable.
-This is designed for use by applications using Readline's callback interface
-(@pxref{Alternate Interface}), which may not use the traditional
-@code{read(2)} and file descriptor interface, or other applications using
-a different input mechanism.
-If an application uses an input mechanism or hook that can potentially exceed
-the value of @var{keyseq-timeout}, it should increase the timeout or set
-this hook appropriately even when not using the callback interface.
-In general, an application that sets @var{rl_getc_function} should consider
-setting @var{rl_input_available_hook} as well.
-@end deftypevar
-
-@deftypevar {rl_voidfunc_t *} rl_redisplay_function
-If non-zero, Readline will call indirectly through this pointer
-to update the display with the current contents of the editing buffer.
-By default, it is set to @code{rl_redisplay}, the default Readline
-redisplay function (@pxref{Redisplay}).
-@end deftypevar
-
-@deftypevar {rl_vintfunc_t *} rl_prep_term_function
-If non-zero, Readline will call indirectly through this pointer
-to initialize the terminal. The function takes a single argument, an
-@code{int} flag that says whether or not to use eight-bit characters.
-By default, this is set to @code{rl_prep_terminal}
-(@pxref{Terminal Management}).
-@end deftypevar
-
-@deftypevar {rl_voidfunc_t *} rl_deprep_term_function
-If non-zero, Readline will call indirectly through this pointer
-to reset the terminal. This function should undo the effects of
-@code{rl_prep_term_function}.
-By default, this is set to @code{rl_deprep_terminal}
-(@pxref{Terminal Management}).
-@end deftypevar
-
-@deftypevar {Keymap} rl_executing_keymap
-This variable is set to the keymap (@pxref{Keymaps}) in which the
-currently executing readline function was found.
-@end deftypevar
-
-@deftypevar {Keymap} rl_binding_keymap
-This variable is set to the keymap (@pxref{Keymaps}) in which the
-last key binding occurred.
-@end deftypevar
-
-@deftypevar {char *} rl_executing_macro
-This variable is set to the text of any currently-executing macro.
-@end deftypevar
-
-@deftypevar int rl_executing_key
-The key that caused the dispatch to the currently-executing Readline function.
-@end deftypevar
-
-@deftypevar {char *} rl_executing_keyseq
-The full key sequence that caused the dispatch to the currently-executing
-Readline function.
-@end deftypevar
-
-@deftypevar int rl_key_sequence_length
-The number of characters in @var{rl_executing_keyseq}.
-@end deftypevar
-
-@deftypevar {int} rl_readline_state
-A variable with bit values that encapsulate the current Readline state.
-A bit is set with the @code{RL_SETSTATE} macro, and unset with the
-@code{RL_UNSETSTATE} macro. Use the @code{RL_ISSTATE} macro to test
-whether a particular state bit is set. Current state bits include:
-
-@table @code
-@item RL_STATE_NONE
-Readline has not yet been called, nor has it begun to initialize.
-@item RL_STATE_INITIALIZING
-Readline is initializing its internal data structures.
-@item RL_STATE_INITIALIZED
-Readline has completed its initialization.
-@item RL_STATE_TERMPREPPED
-Readline has modified the terminal modes to do its own input and redisplay.
-@item RL_STATE_READCMD
-Readline is reading a command from the keyboard.
-@item RL_STATE_METANEXT
-Readline is reading more input after reading the meta-prefix character.
-@item RL_STATE_DISPATCHING
-Readline is dispatching to a command.
-@item RL_STATE_MOREINPUT
-Readline is reading more input while executing an editing command.
-@item RL_STATE_ISEARCH
-Readline is performing an incremental history search.
-@item RL_STATE_NSEARCH
-Readline is performing a non-incremental history search.
-@item RL_STATE_SEARCH
-Readline is searching backward or forward through the history for a string.
-@item RL_STATE_NUMERICARG
-Readline is reading a numeric argument.
-@item RL_STATE_MACROINPUT
-Readline is currently getting its input from a previously-defined keyboard
-macro.
-@item RL_STATE_MACRODEF
-Readline is currently reading characters defining a keyboard macro.
-@item RL_STATE_OVERWRITE
-Readline is in overwrite mode.
-@item RL_STATE_COMPLETING
-Readline is performing word completion.
-@item RL_STATE_SIGHANDLER
-Readline is currently executing the readline signal handler.
-@item RL_STATE_UNDOING
-Readline is performing an undo.
-@item RL_STATE_INPUTPENDING
-Readline has input pending due to a call to @code{rl_execute_next()}.
-@item RL_STATE_TTYCSAVED
-Readline has saved the values of the terminal's special characters.
-@item RL_STATE_CALLBACK
-Readline is currently using the alternate (callback) interface
-(@pxref{Alternate Interface}).
-@item RL_STATE_VIMOTION
-Readline is reading the argument to a vi-mode "motion" command.
-@item RL_STATE_MULTIKEY
-Readline is reading a multiple-keystroke command.
-@item RL_STATE_VICMDONCE
-Readline has entered vi command (movement) mode at least one time during
-the current call to @code{readline()}.
-@item RL_STATE_DONE
-Readline has read a key sequence bound to @code{accept-line}
-and is about to return the line to the caller.
-@end table
-
-@end deftypevar
-
-@deftypevar {int} rl_explicit_arg
-Set to a non-zero value if an explicit numeric argument was specified by
-the user. Only valid in a bindable command function.
-@end deftypevar
-
-@deftypevar {int} rl_numeric_arg
-Set to the value of any numeric argument explicitly specified by the user
-before executing the current Readline function. Only valid in a bindable
-command function.
-@end deftypevar
-
-@deftypevar {int} rl_editing_mode
-Set to a value denoting Readline's current editing mode. A value of
-@var{1} means Readline is currently in emacs mode; @var{0}
-means that vi mode is active.
-@end deftypevar
-
-
-@node Readline Convenience Functions
-@section Readline Convenience Functions
-
-@menu
-* Function Naming:: How to give a function you write a name.
-* Keymaps:: Making keymaps.
-* Binding Keys:: Changing Keymaps.
-* Associating Function Names and Bindings:: Translate function names to
- key sequences.
-* Allowing Undoing:: How to make your functions undoable.
-* Redisplay:: Functions to control line display.
-* Modifying Text:: Functions to modify @code{rl_line_buffer}.
-* Character Input:: Functions to read keyboard input.
-* Terminal Management:: Functions to manage terminal settings.
-* Utility Functions:: Generally useful functions and hooks.
-* Miscellaneous Functions:: Functions that don't fall into any category.
-* Alternate Interface:: Using Readline in a `callback' fashion.
-* A Readline Example:: An example Readline function.
-* Alternate Interface Example:: An example program using the alternate interface.
-@end menu
-
-@node Function Naming
-@subsection Naming a Function
-
-The user can dynamically change the bindings of keys while using
-Readline. This is done by representing the function with a descriptive
-name. The user is able to type the descriptive name when referring to
-the function. Thus, in an init file, one might find
-
-@example
-Meta-Rubout: backward-kill-word
-@end example
-
-This binds the keystroke @key{Meta-Rubout} to the function
-@emph{descriptively} named @code{backward-kill-word}. You, as the
-programmer, should bind the functions you write to descriptive names as
-well. Readline provides a function for doing that:
-
-@deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key)
-Add @var{name} to the list of named functions. Make @var{function} be
-the function that gets called. If @var{key} is not -1, then bind it to
-@var{function} using @code{rl_bind_key()}.
-@end deftypefun
-
-Using this function alone is sufficient for most applications.
-It is the recommended way to add a few functions to the default
-functions that Readline has built in.
-If you need to do something other than adding a function to Readline,
-you may need to use the underlying functions described below.
-
-@node Keymaps
-@subsection Selecting a Keymap
-
-Key bindings take place on a @dfn{keymap}. The keymap is the
-association between the keys that the user types and the functions that
-get run. You can make your own keymaps, copy existing keymaps, and tell
-Readline which keymap to use.
-
-@deftypefun Keymap rl_make_bare_keymap (void)
-Returns a new, empty keymap. The space for the keymap is allocated with
-@code{malloc()}; the caller should free it by calling
-@code{rl_free_keymap()} when done.
-@end deftypefun
-
-@deftypefun Keymap rl_copy_keymap (Keymap map)
-Return a new keymap which is a copy of @var{map}.
-@end deftypefun
-
-@deftypefun Keymap rl_make_keymap (void)
-Return a new keymap with the printing characters bound to rl_insert,
-the lowercase Meta characters bound to run their equivalents, and
-the Meta digits bound to produce numeric arguments.
-@end deftypefun
-
-@deftypefun void rl_discard_keymap (Keymap keymap)
-Free the storage associated with the data in @var{keymap}.
-The caller should free @var{keymap}.
-@end deftypefun
-
-@deftypefun void rl_free_keymap (Keymap keymap)
-Free all storage associated with @var{keymap}. This calls
-@code{rl_discard_keymap} to free subordindate keymaps and macros.
-@end deftypefun
-
-@deftypefun int rl_empty_keymap (Keymap keymap)
-Return non-zero if there are no keys bound to functions in @var{keymap};
-zero if there are any keys bound.
-@end deftypefun
-
-Readline has several internal keymaps. These functions allow you to
-change which keymap is active.
-
-@deftypefun Keymap rl_get_keymap (void)
-Returns the currently active keymap.
-@end deftypefun
-
-@deftypefun void rl_set_keymap (Keymap keymap)
-Makes @var{keymap} the currently active keymap.
-@end deftypefun
-
-@deftypefun Keymap rl_get_keymap_by_name (const char *name)
-Return the keymap matching @var{name}. @var{name} is one which would
-be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
-@end deftypefun
-
-@deftypefun {char *} rl_get_keymap_name (Keymap keymap)
-Return the name matching @var{keymap}. @var{name} is one which would
-be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
-@end deftypefun
-
-@deftypefun int rl_set_keymap_name (const char *name, Keymap keymap)
-Set the name of @var{keymap}. This name will then be "registered" and
-available for use in a @code{set keymap} inputrc directive
-@pxref{Readline Init File}).
-The @var{name} may not be one of Readline's builtin keymap names;
-you may not add a different name for one of Readline's builtin keymaps.
-You may replace the name associated with a given keymap by calling this
-function more than once with the same @var{keymap} argument.
-You may associate a registered @var{name} with a new keymap by calling this
-function more than once with the same @var{name} argument.
-There is no way to remove a named keymap once the name has been
-registered.
-Readline will make a copy of @var{name}.
-The return value is greater than zero unless @var{name} is one of
-Readline's builtin keymap names or @var{keymap} is one of Readline's
-builtin keymaps.
-@end deftypefun
-
-@node Binding Keys
-@subsection Binding Keys
-
-Key sequences are associate with functions through the keymap.
-Readline has several internal keymaps: @code{emacs_standard_keymap},
-@code{emacs_meta_keymap}, @code{emacs_ctlx_keymap},
-@code{vi_movement_keymap}, and @code{vi_insertion_keymap}.
-@code{emacs_standard_keymap} is the default, and the examples in
-this manual assume that.
-
-Since @code{readline()} installs a set of default key bindings the first
-time it is called, there is always the danger that a custom binding
-installed before the first call to @code{readline()} will be overridden.
-An alternate mechanism is to install custom key bindings in an
-initialization function assigned to the @code{rl_startup_hook} variable
-(@pxref{Readline Variables}).
-
-These functions manage key bindings.
-
-@deftypefun int rl_bind_key (int key, rl_command_func_t *function)
-Binds @var{key} to @var{function} in the currently active keymap.
-Returns non-zero in the case of an invalid @var{key}.
-@end deftypefun
-
-@deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)
-Bind @var{key} to @var{function} in @var{map}.
-Returns non-zero in the case of an invalid @var{key}.
-@end deftypefun
-
-@deftypefun int rl_bind_key_if_unbound (int key, rl_command_func_t *function)
-Binds @var{key} to @var{function} if it is not already bound in the
-currently active keymap.
-Returns non-zero in the case of an invalid @var{key} or if @var{key} is
-already bound.
-@end deftypefun
-
-@deftypefun int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map)
-Binds @var{key} to @var{function} if it is not already bound in @var{map}.
-Returns non-zero in the case of an invalid @var{key} or if @var{key} is
-already bound.
-@end deftypefun
-
-@deftypefun int rl_unbind_key (int key)
-Bind @var{key} to the null function in the currently active keymap.
-Returns non-zero in case of error.
-@end deftypefun
-
-@deftypefun int rl_unbind_key_in_map (int key, Keymap map)
-Bind @var{key} to the null function in @var{map}.
-Returns non-zero in case of error.
-@end deftypefun
-
-@deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map)
-Unbind all keys that execute @var{function} in @var{map}.
-@end deftypefun
-
-@deftypefun int rl_unbind_command_in_map (const char *command, Keymap map)
-Unbind all keys that are bound to @var{command} in @var{map}.
-@end deftypefun
-
-@deftypefun int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)
-Bind the key sequence represented by the string @var{keyseq} to the function
-@var{function}, beginning in the current keymap.
-This makes new keymaps as necessary.
-The return value is non-zero if @var{keyseq} is invalid.
-@end deftypefun
-
-@deftypefun int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
-Bind the key sequence represented by the string @var{keyseq} to the function
-@var{function}. This makes new keymaps as necessary.
-Initial bindings are performed in @var{map}.
-The return value is non-zero if @var{keyseq} is invalid.
-@end deftypefun
-
-@deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
-Equivalent to @code{rl_bind_keyseq_in_map}.
-@end deftypefun
-
-@deftypefun int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function)
-Binds @var{keyseq} to @var{function} if it is not already bound in the
-currently active keymap.
-Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is
-already bound.
-@end deftypefun
-
-@deftypefun int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
-Binds @var{keyseq} to @var{function} if it is not already bound in @var{map}.
-Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is
-already bound.
-@end deftypefun
-
-@deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
-Bind the key sequence represented by the string @var{keyseq} to the arbitrary
-pointer @var{data}. @var{type} says what kind of data is pointed to by
-@var{data}; this can be a function (@code{ISFUNC}), a macro
-(@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as
-necessary. The initial keymap in which to do bindings is @var{map}.
-@end deftypefun
-
-@deftypefun int rl_parse_and_bind (char *line)
-Parse @var{line} as if it had been read from the @code{inputrc} file and
-perform any key bindings and variable assignments found
-(@pxref{Readline Init File}).
-@end deftypefun
-
-@deftypefun int rl_read_init_file (const char *filename)
-Read keybindings and variable assignments from @var{filename}
-(@pxref{Readline Init File}).
-@end deftypefun
-
-@node Associating Function Names and Bindings
-@subsection Associating Function Names and Bindings
-
-These functions allow you to find out what keys invoke named functions
-and the functions invoked by a particular key sequence. You may also
-associate a new function name with an arbitrary function.
-
-@deftypefun {rl_command_func_t *} rl_named_function (const char *name)
-Return the function with name @var{name}.
-@end deftypefun
-
-@deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)
-Return the function invoked by @var{keyseq} in keymap @var{map}.
-If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is
-not @code{NULL}, the type of the object is returned in the @code{int} variable
-it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}).
-It takes a "translated" key sequence and should not be used if the key sequence
-can include NUL.
-@end deftypefun
-
-@deftypefun {rl_command_func_t *} rl_function_of_keyseq_len (const char *keyseq, size_t len, Keymap map, int *type)
-Return the function invoked by @var{keyseq} of length @var{len}
-in keymap @var{map}. Equivalent to @code{rl_function_of_keyseq} with the
-addition of the @var{len} parameter.
-It takes a "translated" key sequence and should be used if the key sequence
-can include NUL.
-@end deftypefun
-
-@deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function)
-Return an array of strings representing the key sequences used to
-invoke @var{function} in the current keymap.
-@end deftypefun
-
-@deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
-Return an array of strings representing the key sequences used to
-invoke @var{function} in the keymap @var{map}.
-@end deftypefun
-
-@deftypefun void rl_function_dumper (int readable)
-Print the readline function names and the key sequences currently
-bound to them to @code{rl_outstream}. If @var{readable} is non-zero,
-the list is formatted in such a way that it can be made part of an
-@code{inputrc} file and re-read.
-@end deftypefun
-
-@deftypefun void rl_list_funmap_names (void)
-Print the names of all bindable Readline functions to @code{rl_outstream}.
-@end deftypefun
-
-@deftypefun {const char **} rl_funmap_names (void)
-Return a NULL terminated array of known function names. The array is
-sorted. The array itself is allocated, but not the strings inside. You
-should free the array, but not the pointers, using @code{free} or
-@code{rl_free} when you are done.
-@end deftypefun
-
-@deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
-Add @var{name} to the list of bindable Readline command names, and make
-@var{function} the function to be called when @var{name} is invoked.
-@end deftypefun
-
-@node Allowing Undoing
-@subsection Allowing Undoing
-
-Supporting the undo command is a painless thing, and makes your
-functions much more useful. It is certainly easy to try
-something if you know you can undo it.
-
-If your function simply inserts text once, or deletes text once, and
-uses @code{rl_insert_text()} or @code{rl_delete_text()} to do it, then
-undoing is already done for you automatically.
-
-If you do multiple insertions or multiple deletions, or any combination
-of these operations, you should group them together into one operation.
-This is done with @code{rl_begin_undo_group()} and
-@code{rl_end_undo_group()}.
-
-The types of events that can be undone are:
-
-@smallexample
-enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @};
-@end smallexample
-
-Notice that @code{UNDO_DELETE} means to insert some text, and
-@code{UNDO_INSERT} means to delete some text. That is, the undo code
-tells what to undo, not how to undo it. @code{UNDO_BEGIN} and
-@code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and
-@code{rl_end_undo_group()}.
-
-@deftypefun int rl_begin_undo_group (void)
-Begins saving undo information in a group construct. The undo
-information usually comes from calls to @code{rl_insert_text()} and
-@code{rl_delete_text()}, but could be the result of calls to
-@code{rl_add_undo()}.
-@end deftypefun
-
-@deftypefun int rl_end_undo_group (void)
-Closes the current undo group started with @code{rl_begin_undo_group
-()}. There should be one call to @code{rl_end_undo_group()}
-for each call to @code{rl_begin_undo_group()}.
-@end deftypefun
-
-@deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text)
-Remember how to undo an event (according to @var{what}). The affected
-text runs from @var{start} to @var{end}, and encompasses @var{text}.
-@end deftypefun
-
-@deftypefun void rl_free_undo_list (void)
-Free the existing undo list.
-@end deftypefun
-
-@deftypefun int rl_do_undo (void)
-Undo the first thing on the undo list. Returns @code{0} if there was
-nothing to undo, non-zero if something was undone.
-@end deftypefun
-
-Finally, if you neither insert nor delete text, but directly modify the
-existing text (e.g., change its case), call @code{rl_modifying()}
-once, just before you modify the text. You must supply the indices of
-the text range that you are going to modify.
-
-@deftypefun int rl_modifying (int start, int end)
-Tell Readline to save the text between @var{start} and @var{end} as a
-single undo unit. It is assumed that you will subsequently modify
-that text.
-@end deftypefun
-
-@node Redisplay
-@subsection Redisplay
-
-@deftypefun void rl_redisplay (void)
-Change what's displayed on the screen to reflect the current contents
-of @code{rl_line_buffer}.
-@end deftypefun
-
-@deftypefun int rl_forced_update_display (void)
-Force the line to be updated and redisplayed, whether or not
-Readline thinks the screen display is correct.
-@end deftypefun
-
-@deftypefun int rl_on_new_line (void)
-Tell the update functions that we have moved onto a new (empty) line,
-usually after outputting a newline.
-@end deftypefun
-
-@deftypefun int rl_on_new_line_with_prompt (void)
-Tell the update functions that we have moved onto a new line, with
-@var{rl_prompt} already displayed.
-This could be used by applications that want to output the prompt string
-themselves, but still need Readline to know the prompt string length for
-redisplay.
-It should be used after setting @var{rl_already_prompted}.
-@end deftypefun
-
-@deftypefun int rl_clear_visible_line (void)
-Clear the screen lines corresponding to the current line's contents.
-@end deftypefun
-
-@deftypefun int rl_reset_line_state (void)
-Reset the display state to a clean state and redisplay the current line
-starting on a new line.
-@end deftypefun
-
-@deftypefun int rl_crlf (void)
-Move the cursor to the start of the next screen line.
-@end deftypefun
-
-@deftypefun int rl_show_char (int c)
-Display character @var{c} on @code{rl_outstream}.
-If Readline has not been set to display meta characters directly, this
-will convert meta characters to a meta-prefixed key sequence.
-This is intended for use by applications which wish to do their own
-redisplay.
-@end deftypefun
-
-@deftypefun int rl_message (const char *, @dots{})
-The arguments are a format string as would be supplied to @code{printf},
-possibly containing conversion specifications such as @samp{%d}, and
-any additional arguments necessary to satisfy the conversion specifications.
-The resulting string is displayed in the @dfn{echo area}. The echo area
-is also used to display numeric arguments and search strings.
-You should call @code{rl_save_prompt} to save the prompt information
-before calling this function.
-@end deftypefun
-
-@deftypefun int rl_clear_message (void)
-Clear the message in the echo area. If the prompt was saved with a call to
-@code{rl_save_prompt} before the last call to @code{rl_message},
-call @code{rl_restore_prompt} before calling this function.
-@end deftypefun
-
-@deftypefun void rl_save_prompt (void)
-Save the local Readline prompt display state in preparation for
-displaying a new message in the message area with @code{rl_message()}.
-@end deftypefun
-
-@deftypefun void rl_restore_prompt (void)
-Restore the local Readline prompt display state saved by the most
-recent call to @code{rl_save_prompt}.
-if @code{rl_save_prompt} was called to save the prompt before a call
-to @code{rl_message}, this function should be called before the
-corresponding call to @code{rl_clear_message}.
-@end deftypefun
-
-@deftypefun int rl_expand_prompt (char *prompt)
-Expand any special character sequences in @var{prompt} and set up the
-local Readline prompt redisplay variables.
-This function is called by @code{readline()}. It may also be called to
-expand the primary prompt if the @code{rl_on_new_line_with_prompt()}
-function or @code{rl_already_prompted} variable is used.
-It returns the number of visible characters on the last line of the
-(possibly multi-line) prompt.
-Applications may indicate that the prompt contains characters that take
-up no physical screen space when displayed by bracketing a sequence of
-such characters with the special markers @code{RL_PROMPT_START_IGNORE}
-and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}). This may
-be used to embed terminal-specific escape sequences in prompts.
-@end deftypefun
-
-@deftypefun int rl_set_prompt (const char *prompt)
-Make Readline use @var{prompt} for subsequent redisplay. This calls
-@code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt}
-to the result.
-@end deftypefun
-
-@node Modifying Text
-@subsection Modifying Text
-
-@deftypefun int rl_insert_text (const char *text)
-Insert @var{text} into the line at the current cursor position.
-Returns the number of characters inserted.
-@end deftypefun
-
-@deftypefun int rl_delete_text (int start, int end)
-Delete the text between @var{start} and @var{end} in the current line.
-Returns the number of characters deleted.
-@end deftypefun
-
-@deftypefun {char *} rl_copy_text (int start, int end)
-Return a copy of the text between @var{start} and @var{end} in
-the current line.
-@end deftypefun
-
-@deftypefun int rl_kill_text (int start, int end)
-Copy the text between @var{start} and @var{end} in the current line
-to the kill ring, appending or prepending to the last kill if the
-last command was a kill command. The text is deleted.
-If @var{start} is less than @var{end},
-the text is appended, otherwise prepended. If the last command was
-not a kill, a new kill ring slot is used.
-@end deftypefun
-
-@deftypefun int rl_push_macro_input (char *macro)
-Cause @var{macro} to be inserted into the line, as if it had been invoked
-by a key bound to a macro. Not especially useful; use
-@code{rl_insert_text()} instead.
-@end deftypefun
-
-@node Character Input
-@subsection Character Input
-
-@deftypefun int rl_read_key (void)
-Return the next character available from Readline's current input stream.
-This handles input inserted into
-the input stream via @var{rl_pending_input} (@pxref{Readline Variables})
-and @code{rl_stuff_char()}, macros, and characters read from the keyboard.
-While waiting for input, this function will call any function assigned to
-the @code{rl_event_hook} variable.
-@end deftypefun
-
-@deftypefun int rl_getc (FILE *stream)
-Return the next character available from @var{stream}, which is assumed to
-be the keyboard.
-@end deftypefun
-
-@deftypefun int rl_stuff_char (int c)
-Insert @var{c} into the Readline input stream. It will be "read"
-before Readline attempts to read characters from the terminal with
-@code{rl_read_key()}. Up to 512 characters may be pushed back.
-@code{rl_stuff_char} returns 1 if the character was successfully inserted;
-0 otherwise.
-@end deftypefun
-
-@deftypefun int rl_execute_next (int c)
-Make @var{c} be the next command to be executed when @code{rl_read_key()}
-is called. This sets @var{rl_pending_input}.
-@end deftypefun
-
-@deftypefun int rl_clear_pending_input (void)
-Unset @var{rl_pending_input}, effectively negating the effect of any
-previous call to @code{rl_execute_next()}. This works only if the
-pending input has not already been read with @code{rl_read_key()}.
-@end deftypefun
-
-@deftypefun int rl_set_keyboard_input_timeout (int u)
-While waiting for keyboard input in @code{rl_read_key()}, Readline will
-wait for @var{u} microseconds for input before calling any function
-assigned to @code{rl_event_hook}. @var{u} must be greater than or equal
-to zero (a zero-length timeout is equivalent to a poll).
-The default waiting period is one-tenth of a second.
-Returns the old timeout value.
-@end deftypefun
-
-@node Terminal Management
-@subsection Terminal Management
-
-@deftypefun void rl_prep_terminal (int meta_flag)
-Modify the terminal settings for Readline's use, so @code{readline()}
-can read a single character at a time from the keyboard.
-The @var{meta_flag} argument should be non-zero if Readline should
-read eight-bit input.
-@end deftypefun
-
-@deftypefun void rl_deprep_terminal (void)
-Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in
-the state in which it was before the most recent call to
-@code{rl_prep_terminal()}.
-@end deftypefun
-
-@deftypefun void rl_tty_set_default_bindings (Keymap kmap)
-Read the operating system's terminal editing characters (as would be
-displayed by @code{stty}) to their Readline equivalents.
-The bindings are performed in @var{kmap}.
-@end deftypefun
-
-@deftypefun void rl_tty_unset_default_bindings (Keymap kmap)
-Reset the bindings manipulated by @code{rl_tty_set_default_bindings} so
-that the terminal editing characters are bound to @code{rl_insert}.
-The bindings are performed in @var{kmap}.
-@end deftypefun
-
-@deftypefun int rl_tty_set_echoing (int value)
-Set Readline's idea of whether or not it is echoing output to its output
-stream (@var{rl_outstream}). If @var{value} is 0, Readline does not display
-output to @var{rl_outstream}; any other value enables output. The initial
-value is set when Readline initializes the terminal settings.
-This function returns the previous value.
-@end deftypefun
-
-@deftypefun int rl_reset_terminal (const char *terminal_name)
-Reinitialize Readline's idea of the terminal settings using
-@var{terminal_name} as the terminal type (e.g., @code{vt100}).
-If @var{terminal_name} is @code{NULL}, the value of the @code{TERM}
-environment variable is used.
-@end deftypefun
-
-@node Utility Functions
-@subsection Utility Functions
-
-@deftypefun int rl_save_state (struct readline_state *sp)
-Save a snapshot of Readline's internal state to @var{sp}.
-The contents of the @var{readline_state} structure are documented
-in @file{readline.h}.
-The caller is responsible for allocating the structure.
-@end deftypefun
-
-@deftypefun int rl_restore_state (struct readline_state *sp)
-Restore Readline's internal state to that stored in @var{sp}, which must
-have been saved by a call to @code{rl_save_state}.
-The contents of the @var{readline_state} structure are documented
-in @file{readline.h}.
-The caller is responsible for freeing the structure.
-@end deftypefun
-
-@deftypefun void rl_free (void *mem)
-Deallocate the memory pointed to by @var{mem}. @var{mem} must have been
-allocated by @code{malloc}.
-@end deftypefun
-
-@deftypefun void rl_replace_line (const char *text, int clear_undo)
-Replace the contents of @code{rl_line_buffer} with @var{text}.
-The point and mark are preserved, if possible.
-If @var{clear_undo} is non-zero, the undo list associated with the
-current line is cleared.
-@end deftypefun
-
-@deftypefun void rl_extend_line_buffer (int len)
-Ensure that @code{rl_line_buffer} has enough space to hold @var{len}
-characters, possibly reallocating it if necessary.
-@end deftypefun
-
-@deftypefun int rl_initialize (void)
-Initialize or re-initialize Readline's internal state.
-It's not strictly necessary to call this; @code{readline()} calls it before
-reading any input.
-@end deftypefun
-
-@deftypefun int rl_ding (void)
-Ring the terminal bell, obeying the setting of @code{bell-style}.
-@end deftypefun
-
-@deftypefun int rl_alphabetic (int c)
-Return 1 if @var{c} is an alphabetic character.
-@end deftypefun
-
-@deftypefun void rl_display_match_list (char **matches, int len, int max)
-A convenience function for displaying a list of strings in
-columnar format on Readline's output stream. @code{matches} is the list
-of strings, in argv format, such as a list of completion matches.
-@code{len} is the number of strings in @code{matches}, and @code{max}
-is the length of the longest string in @code{matches}. This function uses
-the setting of @code{print-completions-horizontally} to select how the
-matches are displayed (@pxref{Readline Init File Syntax}).
-When displaying completions, this function sets the number of columns used
-for display to the value of @code{completion-display-width}, the value of
-the environment variable @env{COLUMNS}, or the screen width, in that order.
-@end deftypefun
-
-The following are implemented as macros, defined in @code{chardefs.h}.
-Applications should refrain from using them.
-
-@deftypefun int _rl_uppercase_p (int c)
-Return 1 if @var{c} is an uppercase alphabetic character.
-@end deftypefun
-
-@deftypefun int _rl_lowercase_p (int c)
-Return 1 if @var{c} is a lowercase alphabetic character.
-@end deftypefun
-
-@deftypefun int _rl_digit_p (int c)
-Return 1 if @var{c} is a numeric character.
-@end deftypefun
-
-@deftypefun int _rl_to_upper (int c)
-If @var{c} is a lowercase alphabetic character, return the corresponding
-uppercase character.
-@end deftypefun
-
-@deftypefun int _rl_to_lower (int c)
-If @var{c} is an uppercase alphabetic character, return the corresponding
-lowercase character.
-@end deftypefun
-
-@deftypefun int _rl_digit_value (int c)
-If @var{c} is a number, return the value it represents.
-@end deftypefun
-
-@node Miscellaneous Functions
-@subsection Miscellaneous Functions
-
-@deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
-Bind the key sequence @var{keyseq} to invoke the macro @var{macro}.
-The binding is performed in @var{map}. When @var{keyseq} is invoked, the
-@var{macro} will be inserted into the line. This function is deprecated;
-use @code{rl_generic_bind()} instead.
-@end deftypefun
-
-@deftypefun void rl_macro_dumper (int readable)
-Print the key sequences bound to macros and their values, using
-the current keymap, to @code{rl_outstream}.
-If @var{readable} is non-zero, the list is formatted in such a way
-that it can be made part of an @code{inputrc} file and re-read.
-@end deftypefun
-
-@deftypefun int rl_variable_bind (const char *variable, const char *value)
-Make the Readline variable @var{variable} have @var{value}.
-This behaves as if the readline command
-@samp{set @var{variable} @var{value}} had been executed in an @code{inputrc}
-file (@pxref{Readline Init File Syntax}).
-@end deftypefun
-
-@deftypefun {char *} rl_variable_value (const char *variable)
-Return a string representing the value of the Readline variable @var{variable}.
-For boolean variables, this string is either @samp{on} or @samp{off}.
-@end deftypefun
-
-@deftypefun void rl_variable_dumper (int readable)
-Print the readline variable names and their current values
-to @code{rl_outstream}.
-If @var{readable} is non-zero, the list is formatted in such a way
-that it can be made part of an @code{inputrc} file and re-read.
-@end deftypefun
-
-@deftypefun int rl_set_paren_blink_timeout (int u)
-Set the time interval (in microseconds) that Readline waits when showing
-a balancing character when @code{blink-matching-paren} has been enabled.
-@end deftypefun
-
-@deftypefun {char *} rl_get_termcap (const char *cap)
-Retrieve the string value of the termcap capability @var{cap}.
-Readline fetches the termcap entry for the current terminal name and
-uses those capabilities to move around the screen line and perform other
-terminal-specific operations, like erasing a line. Readline does not
-use all of a terminal's capabilities, and this function will return
-values for only those capabilities Readline uses.
-@end deftypefun
-
-@deftypefun {void} rl_clear_history (void)
-Clear the history list by deleting all of the entries, in the same manner
-as the History library's @code{clear_history()} function.
-This differs from @code{clear_history} because it frees private data
-Readline saves in the history list.
-@end deftypefun
-
-@node Alternate Interface
-@subsection Alternate Interface
-
-An alternate interface is available to plain @code{readline()}. Some
-applications need to interleave keyboard I/O with file, device, or
-window system I/O, typically by using a main loop to @code{select()}
-on various file descriptors. To accommodate this need, readline can
-also be invoked as a `callback' function from an event loop. There
-are functions available to make this easy.
-
-@deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
-Set up the terminal for readline I/O and display the initial
-expanded value of @var{prompt}. Save the value of @var{lhandler} to
-use as a handler function to call when a complete line of input has been
-entered.
-The handler function receives the text of the line as an argument.
-As with @code{readline()}, the handler function should @code{free} the
-line when it it finished with it.
-@end deftypefun
-
-@deftypefun void rl_callback_read_char (void)
-Whenever an application determines that keyboard input is available, it
-should call @code{rl_callback_read_char()}, which will read the next
-character from the current input source.
-If that character completes the line, @code{rl_callback_read_char} will
-invoke the @var{lhandler} function installed by
-@code{rl_callback_handler_install} to process the line.
-Before calling the @var{lhandler} function, the terminal settings are
-reset to the values they had before calling
-@code{rl_callback_handler_install}.
-If the @var{lhandler} function returns,
-and the line handler remains installed,
-the terminal settings are modified for Readline's use again.
-@code{EOF} is indicated by calling @var{lhandler} with a
-@code{NULL} line.
-@end deftypefun
-
-@deftypefun void rl_callback_sigcleanup (void)
-Clean up any internal state the callback interface uses to maintain state
-between calls to rl_callback_read_char (e.g., the state of any active
-incremental searches). This is intended to be used by applications that
-wish to perform their own signal handling; Readline's internal signal handler
-calls this when appropriate.
-@end deftypefun
-
-@deftypefun void rl_callback_handler_remove (void)
-Restore the terminal to its initial state and remove the line handler.
-You may call this function from within a callback as well as independently.
-If the @var{lhandler} installed by @code{rl_callback_handler_install}
-does not exit the program, either this function or the function referred
-to by the value of @code{rl_deprep_term_function} should be called before
-the program exits to reset the terminal settings.
-@end deftypefun
-
-@node A Readline Example
-@subsection A Readline Example
-
-Here is a function which changes lowercase characters to their uppercase
-equivalents, and uppercase characters to lowercase. If
-this function was bound to @samp{M-c}, then typing @samp{M-c} would
-change the case of the character under point. Typing @samp{M-1 0 M-c}
-would change the case of the following 10 characters, leaving the cursor on
-the last character changed.
-
-@example
-/* Invert the case of the COUNT following characters. */
-int
-invert_case_line (count, key)
- int count, key;
-@{
- register int start, end, i;
-
- start = rl_point;
-
- if (rl_point >= rl_end)
- return (0);
-
- if (count < 0)
- @{
- direction = -1;
- count = -count;
- @}
- else
- direction = 1;
-
- /* Find the end of the range to modify. */
- end = start + (count * direction);
-
- /* Force it to be within range. */
- if (end > rl_end)
- end = rl_end;
- else if (end < 0)
- end = 0;
-
- if (start == end)
- return (0);
-
- if (start > end)
- @{
- int temp = start;
- start = end;
- end = temp;
- @}
-
- /* Tell readline that we are modifying the line,
- so it will save the undo information. */
- rl_modifying (start, end);
-
- for (i = start; i != end; i++)
- @{
- if (_rl_uppercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
- else if (_rl_lowercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
- @}
- /* Move point to on top of the last character changed. */
- rl_point = (direction == 1) ? end - 1 : start;
- return (0);
-@}
-@end example
-
-@node Alternate Interface Example
-@subsection Alternate Interface Example
-
-Here is a complete program that illustrates Readline's alternate interface.
-It reads lines from the terminal and displays them, providing the
-standard history and TAB completion functions.
-It understands the EOF character or "exit" to exit the program.
-
-@example
-/* Standard include files. stdio.h is required. */
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <locale.h>
-
-/* Used for select(2) */
-#include <sys/types.h>
-#include <sys/select.h>
-
-#include <signal.h>
-
-#include <stdio.h>
-
-/* Standard readline include files. */
-#include <readline/readline.h>
-#include <readline/history.h>
-
-static void cb_linehandler (char *);
-static void sighandler (int);
-
-int running;
-int sigwinch_received;
-const char *prompt = "rltest$ ";
-
-/* Handle SIGWINCH and window size changes when readline is not active and
- reading a character. */
-static void
-sighandler (int sig)
-@{
- sigwinch_received = 1;
-@}
-
-/* Callback function called for each line when accept-line executed, EOF
- seen, or EOF character read. This sets a flag and returns; it could
- also call exit(3). */
-static void
-cb_linehandler (char *line)
-@{
- /* Can use ^D (stty eof) or `exit' to exit. */
- if (line == NULL || strcmp (line, "exit") == 0)
- @{
- if (line == 0)
- printf ("\n");
- printf ("exit\n");
- /* This function needs to be called to reset the terminal settings,
- and calling it from the line handler keeps one extra prompt from
- being displayed. */
- rl_callback_handler_remove ();
-
- running = 0;
- @}
- else
- @{
- if (*line)
- add_history (line);
- printf ("input line: %s\n", line);
- free (line);
- @}
-@}
-
-int
-main (int c, char **v)
-@{
- fd_set fds;
- int r;
-
- /* Set the default locale values according to environment variables. */
- setlocale (LC_ALL, "");
-
- /* Handle window size changes when readline is not active and reading
- characters. */
- signal (SIGWINCH, sighandler);
-
- /* Install the line handler. */
- rl_callback_handler_install (prompt, cb_linehandler);
-
- /* Enter a simple event loop. This waits until something is available
- to read on readline's input stream (defaults to standard input) and
- calls the builtin character read callback to read it. It does not
- have to modify the user's terminal settings. */
- running = 1;
- while (running)
- @{
- FD_ZERO (&fds);
- FD_SET (fileno (rl_instream), &fds);
-
- r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
- if (r < 0 && errno != EINTR)
- @{
- perror ("rltest: select");
- rl_callback_handler_remove ();
- break;
- @}
- if (sigwinch_received)
- @{
- rl_resize_terminal ();
- sigwinch_received = 0;
- @}
- if (r < 0)
- continue;
-
- if (FD_ISSET (fileno (rl_instream), &fds))
- rl_callback_read_char ();
- @}
-
- printf ("rltest: Event loop has exited\n");
- return 0;
-@}
-@end example
-
-@node Readline Signal Handling
-@section Readline Signal Handling
-
-Signals are asynchronous events sent to a process by the Unix kernel,
-sometimes on behalf of another process. They are intended to indicate
-exceptional events, like a user pressing the interrupt key on his terminal,
-or a network connection being broken. There is a class of signals that can
-be sent to the process currently reading input from the keyboard. Since
-Readline changes the terminal attributes when it is called, it needs to
-perform special processing when such a signal is received in order to
-restore the terminal to a sane state, or provide application writers with
-functions to do so manually.
-
-Readline contains an internal signal handler that is installed for a
-number of signals (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM},
-@code{SIGHUP},
-@code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}).
-When one of these signals is received, the signal handler
-will reset the terminal attributes to those that were in effect before
-@code{readline()} was called, reset the signal handling to what it was
-before @code{readline()} was called, and resend the signal to the calling
-application.
-If and when the calling application's signal handler returns, Readline
-will reinitialize the terminal and continue to accept input.
-When a @code{SIGINT} is received, the Readline signal handler performs
-some additional work, which will cause any partially-entered line to be
-aborted (see the description of @code{rl_free_line_state()} below).
-
-There is an additional Readline signal handler, for @code{SIGWINCH}, which
-the kernel sends to a process whenever the terminal's size changes (for
-example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH}
-handler updates Readline's internal screen size information, and then calls
-any @code{SIGWINCH} signal handler the calling application has installed.
-Readline calls the application's @code{SIGWINCH} signal handler without
-resetting the terminal to its original state. If the application's signal
-handler does more than update its idea of the terminal size and return (for
-example, a @code{longjmp} back to a main processing loop), it @emph{must}
-call @code{rl_cleanup_after_signal()} (described below), to restore the
-terminal state.
-
-When an application is using the callback interface
-(@pxref{Alternate Interface}), Readline installs signal handlers only for
-the duration of the call to @code{rl_callback_read_char}. Applications
-using the callback interface should be prepared to clean up Readline's
-state if they wish to handle the signal before the line handler completes
-and restores the terminal state.
-
-If an application using the callback interface wishes to have Readline
-install its signal handlers at the time the application calls
-@code{rl_callback_handler_install} and remove them only when a complete
-line of input has been read, it should set the
-@code{rl_persistent_signal_handlers} variable to a non-zero value.
-This allows an application to defer all of the handling of the signals
-Readline catches to Readline.
-Applications should use this variable with care; it can result in Readline
-catching signals and not acting on them (or allowing the application to react
-to them) until the application calls @code{rl_callback_read_char}. This
-can result in an application becoming less responsive to keyboard signals
-like SIGINT.
-If an application does not want or need to perform any signal handling, or
-does not need to do any processing between calls to @code{rl_callback_read_char},
-setting this variable may be desirable.
-
-Readline provides two variables that allow application writers to
-control whether or not it will catch certain signals and act on them
-when they are received. It is important that applications change the
-values of these variables only when calling @code{readline()}, not in
-a signal handler, so Readline's internal signal state is not corrupted.
-
-@deftypevar int rl_catch_signals
-If this variable is non-zero, Readline will install signal handlers for
-@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM},
-@code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}.
-
-The default value of @code{rl_catch_signals} is 1.
-@end deftypevar
-
-@deftypevar int rl_catch_sigwinch
-If this variable is set to a non-zero value,
-Readline will install a signal handler for @code{SIGWINCH}.
-
-The default value of @code{rl_catch_sigwinch} is 1.
-@end deftypevar
-
-@deftypevar int rl_persistent_signal_handlers
-If an application using the callback interface wishes Readline's signal
-handlers to be installed and active during the set of calls to
-@code{rl_callback_read_char} that constitutes an entire single line,
-it should set this variable to a non-zero value.
-
-The default value of @code{rl_persistent_signal_handlers} is 0.
-@end deftypevar
-
-@deftypevar int rl_change_environment
-If this variable is set to a non-zero value,
-and Readline is handling @code{SIGWINCH}, Readline will modify the
-@var{LINES} and @var{COLUMNS} environment variables upon receipt of a
-@code{SIGWINCH}
-
-The default value of @code{rl_change_environment} is 1.
-@end deftypevar
-
-If an application does not wish to have Readline catch any signals, or
-to handle signals other than those Readline catches (@code{SIGHUP},
-for example),
-Readline provides convenience functions to do the necessary terminal
-and internal state cleanup upon receipt of a signal.
-
-@deftypefun int rl_pending_signal (void)
-Return the signal number of the most recent signal Readline received but
-has not yet handled, or 0 if there is no pending signal.
-@end deftypefun
-
-@deftypefun void rl_cleanup_after_signal (void)
-This function will reset the state of the terminal to what it was before
-@code{readline()} was called, and remove the Readline signal handlers for
-all signals, depending on the values of @code{rl_catch_signals} and
-@code{rl_catch_sigwinch}.
-@end deftypefun
-
-@deftypefun void rl_free_line_state (void)
-This will free any partial state associated with the current input line
-(undo information, any partial history entry, any partially-entered
-keyboard macro, and any partially-entered numeric argument). This
-should be called before @code{rl_cleanup_after_signal()}. The
-Readline signal handler for @code{SIGINT} calls this to abort the
-current input line.
-@end deftypefun
-
-@deftypefun void rl_reset_after_signal (void)
-This will reinitialize the terminal and reinstall any Readline signal
-handlers, depending on the values of @code{rl_catch_signals} and
-@code{rl_catch_sigwinch}.
-@end deftypefun
-
-If an application wants to force Readline to handle any signals that
-have arrived while it has been executing, @code{rl_check_signals()}
-will call Readline's internal signal handler if there are any pending
-signals. This is primarily intended for those applications that use
-a custom @code{rl_getc_function} (@pxref{Readline Variables}) and wish
-to handle signals received while waiting for input.
-
-@deftypefun void rl_check_signals (void)
-If there are any pending signals, call Readline's internal signal handling
-functions to process them. @code{rl_pending_signal()} can be used independently
-to determine whether or not there are any pending signals.
-@end deftypefun
-
-If an application does not wish Readline to catch @code{SIGWINCH}, it may
-call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force
-Readline to update its idea of the terminal size when a @code{SIGWINCH}
-is received.
-
-@deftypefun void rl_echo_signal_char (int sig)
-If an application wishes to install its own signal handlers, but still
-have readline display characters that generate signals, calling this
-function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or
-@code{SIGTSTP} will display the character generating that signal.
-@end deftypefun
-
-@deftypefun void rl_resize_terminal (void)
-Update Readline's internal screen size by reading values from the kernel.
-@end deftypefun
-
-@deftypefun void rl_set_screen_size (int rows, int cols)
-Set Readline's idea of the terminal size to @var{rows} rows and
-@var{cols} columns. If either @var{rows} or @var{columns} is less than
-or equal to 0, Readline's idea of that terminal dimension is unchanged.
-@end deftypefun
-
-If an application does not want to install a @code{SIGWINCH} handler, but
-is still interested in the screen dimensions, Readline's idea of the screen
-size may be queried.
-
-@deftypefun void rl_get_screen_size (int *rows, int *cols)
-Return Readline's idea of the terminal's size in the
-variables pointed to by the arguments.
-@end deftypefun
-
-@deftypefun void rl_reset_screen_size (void)
-Cause Readline to reobtain the screen size and recalculate its dimensions.
-@end deftypefun
-
-The following functions install and remove Readline's signal handlers.
-
-@deftypefun int rl_set_signals (void)
-Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT},
-@code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN},
-@code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of
-@code{rl_catch_signals} and @code{rl_catch_sigwinch}.
-@end deftypefun
-
-@deftypefun int rl_clear_signals (void)
-Remove all of the Readline signal handlers installed by
-@code{rl_set_signals()}.
-@end deftypefun
-
-@node Custom Completers
-@section Custom Completers
-@cindex application-specific completion functions
-
-Typically, a program that reads commands from the user has a way of
-disambiguating commands and data. If your program is one of these, then
-it can provide completion for commands, data, or both.
-The following sections describe how your program and Readline
-cooperate to provide this service.
-
-@menu
-* How Completing Works:: The logic used to do completion.
-* Completion Functions:: Functions provided by Readline.
-* Completion Variables:: Variables which control completion.
-* A Short Completion Example:: An example of writing completer subroutines.
-@end menu
-
-@node How Completing Works
-@subsection How Completing Works
-
-In order to complete some text, the full list of possible completions
-must be available. That is, it is not possible to accurately
-expand a partial word without knowing all of the possible words
-which make sense in that context. The Readline library provides
-the user interface to completion, and two of the most common
-completion functions: filename and username. For completing other types
-of text, you must write your own completion function. This section
-describes exactly what such functions must do, and provides an example.
-
-There are three major functions used to perform completion:
-
-@enumerate
-@item
-The user-interface function @code{rl_complete()}. This function is
-called with the same arguments as other bindable Readline functions:
-@var{count} and @var{invoking_key}.
-It isolates the word to be completed and calls
-@code{rl_completion_matches()} to generate a list of possible completions.
-It then either lists the possible completions, inserts the possible
-completions, or actually performs the
-completion, depending on which behavior is desired.
-
-@item
-The internal function @code{rl_completion_matches()} uses an
-application-supplied @dfn{generator} function to generate the list of
-possible matches, and then returns the array of these matches.
-The caller should place the address of its generator function in
-@code{rl_completion_entry_function}.
-
-@item
-The generator function is called repeatedly from
-@code{rl_completion_matches()}, returning a string each time. The
-arguments to the generator function are @var{text} and @var{state}.
-@var{text} is the partial word to be completed. @var{state} is zero the
-first time the function is called, allowing the generator to perform
-any necessary initialization, and a positive non-zero integer for
-each subsequent call. The generator function returns
-@code{(char *)NULL} to inform @code{rl_completion_matches()} that there are
-no more possibilities left. Usually the generator function computes the
-list of possible completions when @var{state} is zero, and returns them
-one at a time on subsequent calls. Each string the generator function
-returns as a match must be allocated with @code{malloc()}; Readline
-frees the strings when it has finished with them.
-Such a generator function is referred to as an
-@dfn{application-specific completion function}.
-
-@end enumerate
-
-@deftypefun int rl_complete (int ignore, int invoking_key)
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-@code{rl_completion_matches()}). The default is to do filename completion.
-@end deftypefun
-
-@deftypevar {rl_compentry_func_t *} rl_completion_entry_function
-This is a pointer to the generator function for
-@code{rl_completion_matches()}.
-If the value of @code{rl_completion_entry_function} is
-@code{NULL} then the default filename generator
-function, @code{rl_filename_completion_function()}, is used.
-An @dfn{application-specific completion function} is a function whose
-address is assigned to @code{rl_completion_entry_function} and whose
-return values are used to generate possible completions.
-@end deftypevar
-
-@node Completion Functions
-@subsection Completion Functions
-
-Here is the complete list of callable completion functions present in
-Readline.
-
-@deftypefun int rl_complete_internal (int what_to_do)
-Complete the word at or before point. @var{what_to_do} says what to do
-with the completion. A value of @samp{?} means list the possible
-completions. @samp{TAB} means do standard completion. @samp{*} means
-insert all of the possible completions. @samp{!} means to display
-all of the possible completions, if there is more than one, as well as
-performing partial completion. @samp{@@} is similar to @samp{!}, but
-possible completions are not listed if the possible completions share
-a common prefix.
-@end deftypefun
-
-@deftypefun int rl_complete (int ignore, int invoking_key)
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-@code{rl_completion_matches()} and @code{rl_completion_entry_function}).
-The default is to do filename
-completion. This calls @code{rl_complete_internal()} with an
-argument depending on @var{invoking_key}.
-@end deftypefun
-
-@deftypefun int rl_possible_completions (int count, int invoking_key)
-List the possible completions. See description of @code{rl_complete
-()}. This calls @code{rl_complete_internal()} with an argument of
-@samp{?}.
-@end deftypefun
-
-@deftypefun int rl_insert_completions (int count, int invoking_key)
-Insert the list of possible completions into the line, deleting the
-partially-completed word. See description of @code{rl_complete()}.
-This calls @code{rl_complete_internal()} with an argument of @samp{*}.
-@end deftypefun
-
-@deftypefun int rl_completion_mode (rl_command_func_t *cfunc)
-Returns the appropriate value to pass to @code{rl_complete_internal()}
-depending on whether @var{cfunc} was called twice in succession and
-the values of the @code{show-all-if-ambiguous} and
-@code{show-all-if-unmodified} variables.
-Application-specific completion functions may use this function to present
-the same interface as @code{rl_complete()}.
-@end deftypefun
-
-@deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
-Returns an array of strings which is a list of completions for
-@var{text}. If there are no completions, returns @code{NULL}.
-The first entry in the returned array is the substitution for @var{text}.
-The remaining entries are the possible completions. The array is
-terminated with a @code{NULL} pointer.
-
-@var{entry_func} is a function of two args, and returns a
-@code{char *}. The first argument is @var{text}. The second is a
-state argument; it is zero on the first call, and non-zero on subsequent
-calls. @var{entry_func} returns a @code{NULL} pointer to the caller
-when there are no more matches.
-@end deftypefun
-
-@deftypefun {char *} rl_filename_completion_function (const char *text, int state)
-A generator function for filename completion in the general case.
-@var{text} is a partial filename.
-The Bash source is a useful reference for writing application-specific
-completion functions (the Bash completion functions call this and other
-Readline functions).
-@end deftypefun
-
-@deftypefun {char *} rl_username_completion_function (const char *text, int state)
-A completion generator for usernames. @var{text} contains a partial
-username preceded by a random character (usually @samp{~}). As with all
-completion generators, @var{state} is zero on the first call and non-zero
-for subsequent calls.
-@end deftypefun
-
-@node Completion Variables
-@subsection Completion Variables
-
-@deftypevar {rl_compentry_func_t *} rl_completion_entry_function
-A pointer to the generator function for @code{rl_completion_matches()}.
-@code{NULL} means to use @code{rl_filename_completion_function()},
-the default filename completer.
-@end deftypevar
-
-@deftypevar {rl_completion_func_t *} rl_attempted_completion_function
-A pointer to an alternative function to create matches.
-The function is called with @var{text}, @var{start}, and @var{end}.
-@var{start} and @var{end} are indices in @code{rl_line_buffer} defining
-the boundaries of @var{text}, which is a character string.
-If this function exists and returns @code{NULL}, or if this variable is
-set to @code{NULL}, then @code{rl_complete()} will call the value of
-@code{rl_completion_entry_function} to generate matches, otherwise the
-array of strings returned will be used.
-If this function sets the @code{rl_attempted_completion_over}
-variable to a non-zero value, Readline will not perform its default
-completion even if this function returns no matches.
-@end deftypevar
-
-@deftypevar {rl_quote_func_t *} rl_filename_quoting_function
-A pointer to a function that will quote a filename in an
-application-specific fashion. This is called if filename completion is being
-attempted and one of the characters in @code{rl_filename_quote_characters}
-appears in a completed filename. The function is called with
-@var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text}
-is the filename to be quoted. The @var{match_type} is either
-@code{SINGLE_MATCH}, if there is only one completion match, or
-@code{MULT_MATCH}. Some functions use this to decide whether or not to
-insert a closing quote character. The @var{quote_pointer} is a pointer
-to any opening quote character the user typed. Some functions choose
-to reset this character.
-@end deftypevar
-
-@deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function
-A pointer to a function that will remove application-specific quoting
-characters from a filename before completion is attempted, so those
-characters do not interfere with matching the text against names in
-the filesystem. It is called with @var{text}, the text of the word
-to be dequoted, and @var{quote_char}, which is the quoting character
-that delimits the filename (usually @samp{'} or @samp{"}). If
-@var{quote_char} is zero, the filename was not in an embedded string.
-@end deftypevar
-
-@deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p
-A pointer to a function to call that determines whether or not a specific
-character in the line buffer is quoted, according to whatever quoting
-mechanism the program calling Readline uses. The function is called with
-two arguments: @var{text}, the text of the line, and @var{index}, the
-index of the character in the line. It is used to decide whether a
-character found in @code{rl_completer_word_break_characters} should be
-used to break words for the completer.
-@end deftypevar
-
-@deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function
-This function, if defined, is called by the completer when real filename
-completion is done, after all the matching names have been generated.
-It is passed a @code{NULL} terminated array of matches.
-The first element (@code{matches[0]}) is the
-maximal substring common to all matches. This function can
-re-arrange the list of matches as required, but each element deleted
-from the array must be freed.
-@end deftypevar
-
-@deftypevar {rl_icppfunc_t *} rl_directory_completion_hook
-This function, if defined, is allowed to modify the directory portion
-of filenames Readline completes.
-It could be used to expand symbolic links or shell variables in pathnames.
-It is called with the address of a string (the current directory name) as an
-argument, and may modify that string.
-If the string is replaced with a new string, the old value should be freed.
-Any modified directory name should have a trailing slash.
-The modified value will be used as part of the completion, replacing
-the directory portion of the pathname the user typed.
-At the least, even if no other expansion is performed, this function should
-remove any quote characters from the directory name, because its result will
-be passed directly to @code{opendir()}.
-
-The directory completion hook returns an integer that should be non-zero if
-the function modifies its directory argument.
-The function should not modify the directory argument if it returns 0.
-@end deftypevar
-
-@deftypevar {rl_icppfunc_t *} rl_directory_rewrite_hook;
-If non-zero, this is the address of a function to call when completing
-a directory name. This function takes the address of the directory name
-to be modified as an argument. Unlike @code{rl_directory_completion_hook},
-it only modifies the directory name used in @code{opendir}, not what is
-displayed when the possible completions are printed or inserted. It is
-called before rl_directory_completion_hook.
-At the least, even if no other expansion is performed, this function should
-remove any quote characters from the directory name, because its result will
-be passed directly to @code{opendir()}.
-
-The directory rewrite hook returns an integer that should be non-zero if
-the function modfies its directory argument.
-The function should not modify the directory argument if it returns 0.
-@end deftypevar
-
-@deftypevar {rl_icppfunc_t *} rl_filename_stat_hook
-If non-zero, this is the address of a function for the completer to
-call before deciding which character to append to a completed name.
-This function modifies its filename name argument, and the modified value
-is passed to @code{stat()} to determine the file's type and characteristics.
-This function does not need to remove quote characters from the filename.
-
-The stat hook returns an integer that should be non-zero if
-the function modfies its directory argument.
-The function should not modify the directory argument if it returns 0.
-@end deftypevar
-
-@deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook
-If non-zero, this is the address of a function called when reading
-directory entries from the filesystem for completion and comparing
-them to the partial word to be completed. The function should
-perform any necessary application or system-specific conversion on
-the filename, such as converting between character sets or converting
-from a filesystem format to a character input format.
-The function takes two arguments: @var{fname}, the filename to be converted,
-and @var{fnlen}, its length in bytes.
-It must either return its first argument (if no conversion takes place)
-or the converted filename in newly-allocated memory. The converted
-form is used to compare against the word to be completed, and, if it
-matches, is added to the list of matches. Readline will free the
-allocated string.
-@end deftypevar
-
-@deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook
-If non-zero, then this is the address of a function to call when
-completing a word would normally display the list of possible matches.
-This function is called in lieu of Readline displaying the list.
-It takes three arguments:
-(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length})
-where @var{matches} is the array of matching strings,
-@var{num_matches} is the number of strings in that array, and
-@var{max_length} is the length of the longest string in that array.
-Readline provides a convenience function, @code{rl_display_match_list},
-that takes care of doing the display to Readline's output stream.
-You may call that function from this hook.
-@end deftypevar
-
-@deftypevar {const char *} rl_basic_word_break_characters
-The basic list of characters that signal a break between words for the
-completer routine. The default value of this variable is the characters
-which break words for completion in Bash:
-@code{" \t\n\"\\'`@@$><=;|&@{("}.
-@end deftypevar
-
-@deftypevar {const char *} rl_basic_quote_characters
-A list of quote characters which can cause a word break.
-@end deftypevar
-
-@deftypevar {const char *} rl_completer_word_break_characters
-The list of characters that signal a break between words for
-@code{rl_complete_internal()}. The default list is the value of
-@code{rl_basic_word_break_characters}.
-@end deftypevar
-
-@deftypevar {rl_cpvfunc_t *} rl_completion_word_break_hook
-If non-zero, this is the address of a function to call when Readline is
-deciding where to separate words for word completion. It should return
-a character string like @code{rl_completer_word_break_characters} to be
-used to perform the current completion. The function may choose to set
-@code{rl_completer_word_break_characters} itself. If the function
-returns @code{NULL}, @code{rl_completer_word_break_characters} is used.
-@end deftypevar
-
-@deftypevar {const char *} rl_completer_quote_characters
-A list of characters which can be used to quote a substring of the line.
-Completion occurs on the entire substring, and within the substring
-@code{rl_completer_word_break_characters} are treated as any other character,
-unless they also appear within this list.
-@end deftypevar
-
-@deftypevar {const char *} rl_filename_quote_characters
-A list of characters that cause a filename to be quoted by the completer
-when they appear in a completed filename. The default is the null string.
-@end deftypevar
-
-@deftypevar {const char *} rl_special_prefixes
-The list of characters that are word break characters, but should be
-left in @var{text} when it is passed to the completion function.
-Programs can use this to help determine what kind of completing to do.
-For instance, Bash sets this variable to "$@@" so that it can complete
-shell variables and hostnames.
-@end deftypevar
-
-@deftypevar int rl_completion_query_items
-Up to this many items will be displayed in response to a
-possible-completions call. After that, readline asks the user if she is sure
-she wants to see them all. The default value is 100. A negative value
-indicates that Readline should never ask the user.
-@end deftypevar
-
-@deftypevar {int} rl_completion_append_character
-When a single completion alternative matches at the end of the command
-line, this character is appended to the inserted completion text. The
-default is a space character (@samp{ }). Setting this to the null
-character (@samp{\0}) prevents anything being appended automatically.
-This can be changed in application-specific completion functions to
-provide the ``most sensible word separator character'' according to
-an application-specific command line syntax specification.
-It is set to the default before any application-specific completion function
-is called, and may only be changed within such a function.
-@end deftypevar
-
-@deftypevar int rl_completion_suppress_append
-If non-zero, @var{rl_completion_append_character} is not appended to
-matches at the end of the command line, as described above.
-It is set to 0 before any application-specific completion function
-is called, and may only be changed within such a function.
-@end deftypevar
-
-@deftypevar int rl_completion_quote_character
-When Readline is completing quoted text, as delimited by one of the
-characters in @var{rl_completer_quote_characters}, it sets this variable
-to the quoting character found.
-This is set before any application-specific completion function is called.
-@end deftypevar
-
-@deftypevar int rl_completion_suppress_quote
-If non-zero, Readline does not append a matching quote character when
-performing completion on a quoted string.
-It is set to 0 before any application-specific completion function
-is called, and may only be changed within such a function.
-@end deftypevar
-
-@deftypevar int rl_completion_found_quote
-When Readline is completing quoted text, it sets this variable
-to a non-zero value if the word being completed contains or is delimited
-by any quoting characters, including backslashes.
-This is set before any application-specific completion function is called.
-@end deftypevar
-
-@deftypevar int rl_completion_mark_symlink_dirs
-If non-zero, a slash will be appended to completed filenames that are
-symbolic links to directory names, subject to the value of the
-user-settable @var{mark-directories} variable.
-This variable exists so that application-specific completion functions
-can override the user's global preference (set via the
-@var{mark-symlinked-directories} Readline variable) if appropriate.
-This variable is set to the user's preference before any
-application-specific completion function is called, so unless that
-function modifies the value, the user's preferences are honored.
-@end deftypevar
-
-@deftypevar int rl_ignore_completion_duplicates
-If non-zero, then duplicates in the matches are removed.
-The default is 1.
-@end deftypevar
-
-@deftypevar int rl_filename_completion_desired
-Non-zero means that the results of the matches are to be treated as
-filenames. This is @emph{always} zero when completion is attempted,
-and can only be changed
-within an application-specific completion function. If it is set to a
-non-zero value by such a function, directory names have a slash appended
-and Readline attempts to quote completed filenames if they contain any
-characters in @code{rl_filename_quote_characters} and
-@code{rl_filename_quoting_desired} is set to a non-zero value.
-@end deftypevar
-
-@deftypevar int rl_filename_quoting_desired
-Non-zero means that the results of the matches are to be quoted using
-double quotes (or an application-specific quoting mechanism) if the
-completed filename contains any characters in
-@code{rl_filename_quote_chars}. This is @emph{always} non-zero
-when completion is attempted, and can only be changed within an
-application-specific completion function.
-The quoting is effected via a call to the function pointed to
-by @code{rl_filename_quoting_function}.
-@end deftypevar
-
-@deftypevar int rl_attempted_completion_over
-If an application-specific completion function assigned to
-@code{rl_attempted_completion_function} sets this variable to a non-zero
-value, Readline will not perform its default filename completion even
-if the application's completion function returns no matches.
-It should be set only by an application's completion function.
-@end deftypevar
-
-@deftypevar int rl_sort_completion_matches
-If an application sets this variable to 0, Readline will not sort the
-list of completions (which implies that it cannot remove any duplicate
-completions). The default value is 1, which means that Readline will
-sort the completions and, depending on the value of
-@code{rl_ignore_completion_duplicates}, will attempt to remove duplicate
-matches.
-@end deftypevar
-
-@deftypevar int rl_completion_type
-Set to a character describing the type of completion Readline is currently
-attempting; see the description of @code{rl_complete_internal()}
-(@pxref{Completion Functions}) for the list of characters.
-This is set to the appropriate value before any application-specific
-completion function is called, allowing such functions to present
-the same interface as @code{rl_complete()}.
-@end deftypevar
-
-@deftypevar int rl_completion_invoking_key
-Set to the final character in the key sequence that invoked one of the
-completion functions that call @code{rl_complete_internal()}. This is
-set to the appropriate value before any application-specific completion
-function is called.
-@end deftypevar
-
-@deftypevar int rl_inhibit_completion
-If this variable is non-zero, completion is inhibited. The completion
-character will be inserted as any other bound to @code{self-insert}.
-@end deftypevar
-
-@node A Short Completion Example
-@subsection A Short Completion Example
-
-Here is a small application demonstrating the use of the GNU Readline
-library. It is called @code{fileman}, and the source code resides in
-@file{examples/fileman.c}. This sample application provides
-completion of command names, line editing features, and access to the
-history list.
-
-@page
-@smallexample
-/* fileman.c -- A tiny application which demonstrates how to use the
- GNU Readline library. This application interactively allows users
- to manipulate files and their modes. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#ifdef HAVE_SYS_FILE_H
-# include <sys/file.h>
-#endif
-#include <sys/stat.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#include <time.h>
-
-#include <readline/readline.h>
-#include <readline/history.h>
-
-extern char *xmalloc PARAMS((size_t));
-
-/* The names of functions that actually do the manipulation. */
-int com_list PARAMS((char *));
-int com_view PARAMS((char *));
-int com_rename PARAMS((char *));
-int com_stat PARAMS((char *));
-int com_pwd PARAMS((char *));
-int com_delete PARAMS((char *));
-int com_help PARAMS((char *));
-int com_cd PARAMS((char *));
-int com_quit PARAMS((char *));
-
-/* A structure which contains information on the commands this program
- can understand. */
-
-typedef struct @{
- char *name; /* User printable name of the function. */
- rl_icpfunc_t *func; /* Function to call to do the job. */
- char *doc; /* Documentation for this function. */
-@} COMMAND;
-
-COMMAND commands[] = @{
- @{ "cd", com_cd, "Change to directory DIR" @},
- @{ "delete", com_delete, "Delete FILE" @},
- @{ "help", com_help, "Display this text" @},
- @{ "?", com_help, "Synonym for `help'" @},
- @{ "list", com_list, "List files in DIR" @},
- @{ "ls", com_list, "Synonym for `list'" @},
- @{ "pwd", com_pwd, "Print the current working directory" @},
- @{ "quit", com_quit, "Quit using Fileman" @},
- @{ "rename", com_rename, "Rename FILE to NEWNAME" @},
- @{ "stat", com_stat, "Print out statistics on FILE" @},
- @{ "view", com_view, "View the contents of FILE" @},
- @{ (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL @}
-@};
-
-/* Forward declarations. */
-char *stripwhite ();
-COMMAND *find_command ();
-
-/* The name of this program, as taken from argv[0]. */
-char *progname;
-
-/* When non-zero, this global means the user is done using this program. */
-int done;
-
-char *
-dupstr (s)
- char *s;
-@{
- char *r;
-
- r = xmalloc (strlen (s) + 1);
- strcpy (r, s);
- return (r);
-@}
-
-main (argc, argv)
- int argc;
- char **argv;
-@{
- char *line, *s;
-
- progname = argv[0];
-
- initialize_readline (); /* Bind our completer. */
-
- /* Loop reading and executing lines until the user quits. */
- for ( ; done == 0; )
- @{
- line = readline ("FileMan: ");
-
- if (!line)
- break;
-
- /* Remove leading and trailing whitespace from the line.
- Then, if there is anything left, add it to the history list
- and execute it. */
- s = stripwhite (line);
-
- if (*s)
- @{
- add_history (s);
- execute_line (s);
- @}
-
- free (line);
- @}
- exit (0);
-@}
-
-/* Execute a command line. */
-int
-execute_line (line)
- char *line;
-@{
- register int i;
- COMMAND *command;
- char *word;
-
- /* Isolate the command word. */
- i = 0;
- while (line[i] && whitespace (line[i]))
- i++;
- word = line + i;
-
- while (line[i] && !whitespace (line[i]))
- i++;
-
- if (line[i])
- line[i++] = '\0';
-
- command = find_command (word);
-
- if (!command)
- @{
- fprintf (stderr, "%s: No such command for FileMan.\n", word);
- return (-1);
- @}
-
- /* Get argument to command, if any. */
- while (whitespace (line[i]))
- i++;
-
- word = line + i;
-
- /* Call the function. */
- return ((*(command->func)) (word));
-@}
-
-/* Look up NAME as the name of a command, and return a pointer to that
- command. Return a NULL pointer if NAME isn't a command name. */
-COMMAND *
-find_command (name)
- char *name;
-@{
- register int i;
-
- for (i = 0; commands[i].name; i++)
- if (strcmp (name, commands[i].name) == 0)
- return (&commands[i]);
-
- return ((COMMAND *)NULL);
-@}
-
-/* Strip whitespace from the start and end of STRING. Return a pointer
- into STRING. */
-char *
-stripwhite (string)
- char *string;
-@{
- register char *s, *t;
-
- for (s = string; whitespace (*s); s++)
- ;
-
- if (*s == 0)
- return (s);
-
- t = s + strlen (s) - 1;
- while (t > s && whitespace (*t))
- t--;
- *++t = '\0';
-
- return s;
-@}
-
-/* **************************************************************** */
-/* */
-/* Interface to Readline Completion */
-/* */
-/* **************************************************************** */
-
-char *command_generator PARAMS((const char *, int));
-char **fileman_completion PARAMS((const char *, int, int));
-
-/* Tell the GNU Readline library how to complete. We want to try to complete
- on command names if this is the first word in the line, or on filenames
- if not. */
-initialize_readline ()
-@{
- /* Allow conditional parsing of the ~/.inputrc file. */
- rl_readline_name = "FileMan";
-
- /* Tell the completer that we want a crack first. */
- rl_attempted_completion_function = fileman_completion;
-@}
-
-/* Attempt to complete on the contents of TEXT. START and END bound the
- region of rl_line_buffer that contains the word to complete. TEXT is
- the word to complete. We can use the entire contents of rl_line_buffer
- in case we want to do some simple parsing. Return the array of matches,
- or NULL if there aren't any. */
-char **
-fileman_completion (text, start, end)
- const char *text;
- int start, end;
-@{
- char **matches;
-
- matches = (char **)NULL;
-
- /* If this word is at the start of the line, then it is a command
- to complete. Otherwise it is the name of a file in the current
- directory. */
- if (start == 0)
- matches = rl_completion_matches (text, command_generator);
-
- return (matches);
-@}
-
-/* Generator function for command completion. STATE lets us know whether
- to start from scratch; without any state (i.e. STATE == 0), then we
- start at the top of the list. */
-char *
-command_generator (text, state)
- const char *text;
- int state;
-@{
- static int list_index, len;
- char *name;
-
- /* If this is a new word to complete, initialize now. This includes
- saving the length of TEXT for efficiency, and initializing the index
- variable to 0. */
- if (!state)
- @{
- list_index = 0;
- len = strlen (text);
- @}
-
- /* Return the next name which partially matches from the command list. */
- while (name = commands[list_index].name)
- @{
- list_index++;
-
- if (strncmp (name, text, len) == 0)
- return (dupstr(name));
- @}
-
- /* If no names matched, then return NULL. */
- return ((char *)NULL);
-@}
-
-/* **************************************************************** */
-/* */
-/* FileMan Commands */
-/* */
-/* **************************************************************** */
-
-/* String to pass to system (). This is for the LIST, VIEW and RENAME
- commands. */
-static char syscom[1024];
-
-/* List the file(s) named in arg. */
-com_list (arg)
- char *arg;
-@{
- if (!arg)
- arg = "";
-
- sprintf (syscom, "ls -FClg %s", arg);
- return (system (syscom));
-@}
-
-com_view (arg)
- char *arg;
-@{
- if (!valid_argument ("view", arg))
- return 1;
-
-#if defined (__MSDOS__)
- /* more.com doesn't grok slashes in pathnames */
- sprintf (syscom, "less %s", arg);
-#else
- sprintf (syscom, "more %s", arg);
-#endif
- return (system (syscom));
-@}
-
-com_rename (arg)
- char *arg;
-@{
- too_dangerous ("rename");
- return (1);
-@}
-
-com_stat (arg)
- char *arg;
-@{
- struct stat finfo;
-
- if (!valid_argument ("stat", arg))
- return (1);
-
- if (stat (arg, &finfo) == -1)
- @{
- perror (arg);
- return (1);
- @}
-
- printf ("Statistics for `%s':\n", arg);
-
- printf ("%s has %d link%s, and is %d byte%s in length.\n",
- arg,
- finfo.st_nlink,
- (finfo.st_nlink == 1) ? "" : "s",
- finfo.st_size,
- (finfo.st_size == 1) ? "" : "s");
- printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
- printf (" Last access at: %s", ctime (&finfo.st_atime));
- printf (" Last modified at: %s", ctime (&finfo.st_mtime));
- return (0);
-@}
-
-com_delete (arg)
- char *arg;
-@{
- too_dangerous ("delete");
- return (1);
-@}
-
-/* Print out help for ARG, or for all of the commands if ARG is
- not present. */
-com_help (arg)
- char *arg;
-@{
- register int i;
- int printed = 0;
-
- for (i = 0; commands[i].name; i++)
- @{
- if (!*arg || (strcmp (arg, commands[i].name) == 0))
- @{
- printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
- printed++;
- @}
- @}
-
- if (!printed)
- @{
- printf ("No commands match `%s'. Possibilties are:\n", arg);
-
- for (i = 0; commands[i].name; i++)
- @{
- /* Print in six columns. */
- if (printed == 6)
- @{
- printed = 0;
- printf ("\n");
- @}
-
- printf ("%s\t", commands[i].name);
- printed++;
- @}
-
- if (printed)
- printf ("\n");
- @}
- return (0);
-@}
-
-/* Change to the directory ARG. */
-com_cd (arg)
- char *arg;
-@{
- if (chdir (arg) == -1)
- @{
- perror (arg);
- return 1;
- @}
-
- com_pwd ("");
- return (0);
-@}
-
-/* Print out the current working directory. */
-com_pwd (ignore)
- char *ignore;
-@{
- char dir[1024], *s;
-
- s = getcwd (dir, sizeof(dir) - 1);
- if (s == 0)
- @{
- printf ("Error getting pwd: %s\n", dir);
- return 1;
- @}
-
- printf ("Current directory is %s\n", dir);
- return 0;
-@}
-
-/* The user wishes to quit using this program. Just set DONE non-zero. */
-com_quit (arg)
- char *arg;
-@{
- done = 1;
- return (0);
-@}
-
-/* Function which tells you that you can't do this. */
-too_dangerous (caller)
- char *caller;
-@{
- fprintf (stderr,
- "%s: Too dangerous for me to distribute. Write it yourself.\n",
- caller);
-@}
-
-/* Return non-zero if ARG is a valid argument for CALLER, else print
- an error message and return zero. */
-int
-valid_argument (caller, arg)
- char *caller, *arg;
-@{
- if (!arg || !*arg)
- @{
- fprintf (stderr, "%s: Argument required.\n", caller);
- return (0);
- @}
-
- return (1);
-@}
-@end smallexample
diff --git a/readline/doc/rluser.texi b/readline/doc/rluser.texi
deleted file mode 100644
index a59bd14..0000000
--- a/readline/doc/rluser.texi
+++ /dev/null
@@ -1,2389 +0,0 @@
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename rluser.info
-@comment %**end of header (This is for running Texinfo on a region.)
-
-@ignore
-This file documents the end user interface to the GNU command line
-editing features. It is to be an appendix to manuals for programs which
-use these features. There is a document entitled "readline.texinfo"
-which contains both end-user and programmer documentation for the
-GNU Readline Library.
-
-Copyright (C) 1988--2016 Free Software Foundation, Inc.
-
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@comment If you are including this manual as an appendix, then set the
-@comment variable readline-appendix.
-
-@ifclear BashFeatures
-@defcodeindex bt
-@end ifclear
-
-@node Command Line Editing
-@chapter Command Line Editing
-
-This chapter describes the basic features of the @sc{gnu}
-command line editing interface.
-@ifset BashFeatures
-Command line editing is provided by the Readline library, which is
-used by several different programs, including Bash.
-Command line editing is enabled by default when using an interactive shell,
-unless the @option{--noediting} option is supplied at shell invocation.
-Line editing is also used when using the @option{-e} option to the
-@code{read} builtin command (@pxref{Bash Builtins}).
-By default, the line editing commands are similar to those of Emacs.
-A vi-style line editing interface is also available.
-Line editing can be enabled at any time using the @option{-o emacs} or
-@option{-o vi} options to the @code{set} builtin command
-(@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or
-@option{+o vi} options to @code{set}.
-@end ifset
-
-@menu
-* Introduction and Notation:: Notation used in this text.
-* Readline Interaction:: The minimum set of commands for editing a line.
-* Readline Init File:: Customizing Readline from a user's view.
-* Bindable Readline Commands:: A description of most of the Readline commands
- available for binding
-* Readline vi Mode:: A short description of how to make Readline
- behave like the vi editor.
-@ifset BashFeatures
-* Programmable Completion:: How to specify the possible completions for
- a specific command.
-* Programmable Completion Builtins:: Builtin commands to specify how to
- complete arguments for a particular command.
-* A Programmable Completion Example:: An example shell function for
- generating possible completions.
-@end ifset
-@end menu
-
-@node Introduction and Notation
-@section Introduction to Line Editing
-
-The following paragraphs describe the notation used to represent
-keystrokes.
-
-The text @kbd{C-k} is read as `Control-K' and describes the character
-produced when the @key{k} key is pressed while the Control key
-is depressed.
-
-The text @kbd{M-k} is read as `Meta-K' and describes the character
-produced when the Meta key (if you have one) is depressed, and the @key{k}
-key is pressed.
-The Meta key is labeled @key{ALT} on many keyboards.
-On keyboards with two keys labeled @key{ALT} (usually to either side of
-the space bar), the @key{ALT} on the left side is generally set to
-work as a Meta key.
-The @key{ALT} key on the right may also be configured to work as a
-Meta key or may be configured as some other modifier, such as a
-Compose key for typing accented characters.
-
-If you do not have a Meta or @key{ALT} key, or another key working as
-a Meta key, the identical keystroke can be generated by typing @key{ESC}
-@emph{first}, and then typing @key{k}.
-Either process is known as @dfn{metafying} the @key{k} key.
-
-The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the
-character produced by @dfn{metafying} @kbd{C-k}.
-
-In addition, several keys have their own names. Specifically,
-@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
-stand for themselves when seen in this text, or in an init file
-(@pxref{Readline Init File}).
-If your keyboard lacks a @key{LFD} key, typing @key{C-j} will
-produce the desired character.
-The @key{RET} key may be labeled @key{Return} or @key{Enter} on
-some keyboards.
-
-@node Readline Interaction
-@section Readline Interaction
-@cindex interaction, readline
-
-Often during an interactive session you type in a long line of text,
-only to notice that the first word on the line is misspelled. The
-Readline library gives you a set of commands for manipulating the text
-as you type it in, allowing you to just fix your typo, and not forcing
-you to retype the majority of the line. Using these editing commands,
-you move the cursor to the place that needs correction, and delete or
-insert the text of the corrections. Then, when you are satisfied with
-the line, you simply press @key{RET}. You do not have to be at the
-end of the line to press @key{RET}; the entire line is accepted
-regardless of the location of the cursor within the line.
-
-@menu
-* Readline Bare Essentials:: The least you need to know about Readline.
-* Readline Movement Commands:: Moving about the input line.
-* Readline Killing Commands:: How to delete text, and how to get it back!
-* Readline Arguments:: Giving numeric arguments to commands.
-* Searching:: Searching through previous lines.
-@end menu
-
-@node Readline Bare Essentials
-@subsection Readline Bare Essentials
-@cindex notation, readline
-@cindex command editing
-@cindex editing command lines
-
-In order to enter characters into the line, simply type them. The typed
-character appears where the cursor was, and then the cursor moves one
-space to the right. If you mistype a character, you can use your
-erase character to back up and delete the mistyped character.
-
-Sometimes you may mistype a character, and
-not notice the error until you have typed several other characters. In
-that case, you can type @kbd{C-b} to move the cursor to the left, and then
-correct your mistake. Afterwards, you can move the cursor to the right
-with @kbd{C-f}.
-
-When you add text in the middle of a line, you will notice that characters
-to the right of the cursor are `pushed over' to make room for the text
-that you have inserted. Likewise, when you delete text behind the cursor,
-characters to the right of the cursor are `pulled back' to fill in the
-blank space created by the removal of the text. A list of the bare
-essentials for editing the text of an input line follows.
-
-@table @asis
-@item @kbd{C-b}
-Move back one character.
-@item @kbd{C-f}
-Move forward one character.
-@item @key{DEL} or @key{Backspace}
-Delete the character to the left of the cursor.
-@item @kbd{C-d}
-Delete the character underneath the cursor.
-@item @w{Printing characters}
-Insert the character into the line at the cursor.
-@item @kbd{C-_} or @kbd{C-x C-u}
-Undo the last editing command. You can undo all the way back to an
-empty line.
-@end table
-
-@noindent
-(Depending on your configuration, the @key{Backspace} key be set to
-delete the character to the left of the cursor and the @key{DEL} key set
-to delete the character underneath the cursor, like @kbd{C-d}, rather
-than the character to the left of the cursor.)
-
-@node Readline Movement Commands
-@subsection Readline Movement Commands
-
-
-The above table describes the most basic keystrokes that you need
-in order to do editing of the input line. For your convenience, many
-other commands have been added in addition to @kbd{C-b}, @kbd{C-f},
-@kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly
-about the line.
-
-@table @kbd
-@item C-a
-Move to the start of the line.
-@item C-e
-Move to the end of the line.
-@item M-f
-Move forward a word, where a word is composed of letters and digits.
-@item M-b
-Move backward a word.
-@item C-l
-Clear the screen, reprinting the current line at the top.
-@end table
-
-Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves
-forward a word. It is a loose convention that control keystrokes
-operate on characters while meta keystrokes operate on words.
-
-@node Readline Killing Commands
-@subsection Readline Killing Commands
-
-@cindex killing text
-@cindex yanking text
-
-@dfn{Killing} text means to delete the text from the line, but to save
-it away for later use, usually by @dfn{yanking} (re-inserting)
-it back into the line.
-(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
-
-If the description for a command says that it `kills' text, then you can
-be sure that you can get the text back in a different (or the same)
-place later.
-
-When you use a kill command, the text is saved in a @dfn{kill-ring}.
-Any number of consecutive kills save all of the killed text together, so
-that when you yank it back, you get it all. The kill
-ring is not line specific; the text that you killed on a previously
-typed line is available to be yanked back later, when you are typing
-another line.
-@cindex kill ring
-
-Here is the list of commands for killing text.
-
-@table @kbd
-@item C-k
-Kill the text from the current cursor position to the end of the line.
-
-@item M-d
-Kill from the cursor to the end of the current word, or, if between
-words, to the end of the next word.
-Word boundaries are the same as those used by @kbd{M-f}.
-
-@item M-@key{DEL}
-Kill from the cursor the start of the current word, or, if between
-words, to the start of the previous word.
-Word boundaries are the same as those used by @kbd{M-b}.
-
-@item C-w
-Kill from the cursor to the previous whitespace. This is different than
-@kbd{M-@key{DEL}} because the word boundaries differ.
-
-@end table
-
-Here is how to @dfn{yank} the text back into the line. Yanking
-means to copy the most-recently-killed text from the kill buffer.
-
-@table @kbd
-@item C-y
-Yank the most recently killed text back into the buffer at the cursor.
-
-@item M-y
-Rotate the kill-ring, and yank the new top. You can only do this if
-the prior command is @kbd{C-y} or @kbd{M-y}.
-@end table
-
-@node Readline Arguments
-@subsection Readline Arguments
-
-You can pass numeric arguments to Readline commands. Sometimes the
-argument acts as a repeat count, other times it is the @i{sign} of the
-argument that is significant. If you pass a negative argument to a
-command which normally acts in a forward direction, that command will
-act in a backward direction. For example, to kill text back to the
-start of the line, you might type @samp{M-- C-k}.
-
-The general way to pass numeric arguments to a command is to type meta
-digits before the command. If the first `digit' typed is a minus
-sign (@samp{-}), then the sign of the argument will be negative. Once
-you have typed one meta digit to get the argument started, you can type
-the remainder of the digits, and then the command. For example, to give
-the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d},
-which will delete the next ten characters on the input line.
-
-@node Searching
-@subsection Searching for Commands in the History
-
-Readline provides commands for searching through the command history
-@ifset BashFeatures
-(@pxref{Bash History Facilities})
-@end ifset
-for lines containing a specified string.
-There are two search modes: @dfn{incremental} and @dfn{non-incremental}.
-
-Incremental searches begin before the user has finished typing the
-search string.
-As each character of the search string is typed, Readline displays
-the next entry from the history matching the string typed so far.
-An incremental search requires only as many characters as needed to
-find the desired history entry.
-To search backward in the history for a particular string, type
-@kbd{C-r}. Typing @kbd{C-s} searches forward through the history.
-The characters present in the value of the @code{isearch-terminators} variable
-are used to terminate an incremental search.
-If that variable has not been assigned a value, the @key{ESC} and
-@kbd{C-J} characters will terminate an incremental search.
-@kbd{C-g} will abort an incremental search and restore the original line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-
-To find other matching entries in the history list, type @kbd{C-r} or
-@kbd{C-s} as appropriate.
-This will search backward or forward in the history for the next
-entry matching the search string typed so far.
-Any other key sequence bound to a Readline command will terminate
-the search and execute that command.
-For instance, a @key{RET} will terminate the search and accept
-the line, thereby executing the command from the history list.
-A movement command will terminate the search, make the last line found
-the current line, and begin editing.
-
-Readline remembers the last incremental search string. If two
-@kbd{C-r}s are typed without any intervening characters defining a new
-search string, any remembered search string is used.
-
-Non-incremental searches read the entire search string before starting
-to search for matching history lines. The search string may be
-typed by the user or be part of the contents of the current line.
-
-@node Readline Init File
-@section Readline Init File
-@cindex initialization file, readline
-
-Although the Readline library comes with a set of Emacs-like
-keybindings installed by default, it is possible to use a different set
-of keybindings.
-Any user can customize programs that use Readline by putting
-commands in an @dfn{inputrc} file, conventionally in his home directory.
-The name of this
-@ifset BashFeatures
-file is taken from the value of the shell variable @env{INPUTRC}. If
-@end ifset
-@ifclear BashFeatures
-file is taken from the value of the environment variable @env{INPUTRC}. If
-@end ifclear
-that variable is unset, the default is @file{~/.inputrc}. If that
-file does not exist or cannot be read, the ultimate default is
-@file{/etc/inputrc}.
-
-When a program which uses the Readline library starts up, the
-init file is read, and the key bindings are set.
-
-In addition, the @code{C-x C-r} command re-reads this init file, thus
-incorporating any changes that you might have made to it.
-
-@menu
-* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
-
-* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
-
-* Sample Init File:: An example inputrc file.
-@end menu
-
-@node Readline Init File Syntax
-@subsection Readline Init File Syntax
-
-There are only a few basic constructs allowed in the
-Readline init file. Blank lines are ignored.
-Lines beginning with a @samp{#} are comments.
-Lines beginning with a @samp{$} indicate conditional
-constructs (@pxref{Conditional Init Constructs}). Other lines
-denote variable settings and key bindings.
-
-@table @asis
-@item Variable Settings
-You can modify the run-time behavior of Readline by
-altering the values of variables in Readline
-using the @code{set} command within the init file.
-The syntax is simple:
-
-@example
-set @var{variable} @var{value}
-@end example
-
-@noindent
-Here, for example, is how to
-change from the default Emacs-like key binding to use
-@code{vi} line editing commands:
-
-@example
-set editing-mode vi
-@end example
-
-Variable names and values, where appropriate, are recognized without regard
-to case. Unrecognized variable names are ignored.
-
-Boolean variables (those that can be set to on or off) are set to on if
-the value is null or empty, @var{on} (case-insensitive), or 1. Any other
-value results in the variable being set to off.
-
-@ifset BashFeatures
-The @w{@code{bind -V}} command lists the current Readline variable names
-and values. @xref{Bash Builtins}.
-@end ifset
-
-A great deal of run-time behavior is changeable with the following
-variables.
-
-@cindex variables, readline
-@table @code
-
-@item bell-style
-@vindex bell-style
-Controls what happens when Readline wants to ring the terminal bell.
-If set to @samp{none}, Readline never rings the bell. If set to
-@samp{visible}, Readline uses a visible bell if one is available.
-If set to @samp{audible} (the default), Readline attempts to ring
-the terminal's bell.
-
-@item bind-tty-special-chars
-@vindex bind-tty-special-chars
-If set to @samp{on} (the default), Readline attempts to bind the control
-characters treated specially by the kernel's terminal driver to their
-Readline equivalents.
-
-@item blink-matching-paren
-@vindex blink-matching-paren
-If set to @samp{on}, Readline attempts to briefly move the cursor to an
-opening parenthesis when a closing parenthesis is inserted. The default
-is @samp{off}.
-
-@item colored-completion-prefix
-@vindex colored-completion-prefix
-If set to @samp{on}, when listing completions, Readline displays the
-common prefix of the set of possible completions using a different color.
-The color definitions are taken from the value of the @env{LS_COLORS}
-environment variable.
-The default is @samp{off}.
-
-@item colored-stats
-@vindex colored-stats
-If set to @samp{on}, Readline displays possible completions using different
-colors to indicate their file type.
-The color definitions are taken from the value of the @env{LS_COLORS}
-environment variable.
-The default is @samp{off}.
-
-@item comment-begin
-@vindex comment-begin
-The string to insert at the beginning of the line when the
-@code{insert-comment} command is executed. The default value
-is @code{"#"}.
-
-@item completion-display-width
-@vindex completion-display-width
-The number of screen columns used to display possible matches
-when performing completion.
-The value is ignored if it is less than 0 or greater than the terminal
-screen width.
-A value of 0 will cause matches to be displayed one per line.
-The default value is -1.
-
-@item completion-ignore-case
-@vindex completion-ignore-case
-If set to @samp{on}, Readline performs filename matching and completion
-in a case-insensitive fashion.
-The default value is @samp{off}.
-
-@item completion-map-case
-@vindex completion-map-case
-If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline
-treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when
-performing case-insensitive filename matching and completion.
-The default value is @samp{off}.
-
-@item completion-prefix-display-length
-@vindex completion-prefix-display-length
-The length in characters of the common prefix of a list of possible
-completions that is displayed without modification. When set to a
-value greater than zero, common prefixes longer than this value are
-replaced with an ellipsis when displaying possible completions.
-
-@item completion-query-items
-@vindex completion-query-items
-The number of possible completions that determines when the user is
-asked whether the list of possibilities should be displayed.
-If the number of possible completions is greater than this value,
-Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed.
-This variable must be set to an integer value greater than or equal to 0.
-A negative value means Readline should never ask.
-The default limit is @code{100}.
-
-@item convert-meta
-@vindex convert-meta
-If set to @samp{on}, Readline will convert characters with the
-eighth bit set to an @sc{ascii} key sequence by stripping the eighth
-bit and prefixing an @key{ESC} character, converting them to a
-meta-prefixed key sequence. The default value is @samp{on}, but
-will be set to @samp{off} if the locale is one that contains
-eight-bit characters.
-
-@item disable-completion
-@vindex disable-completion
-If set to @samp{On}, Readline will inhibit word completion.
-Completion characters will be inserted into the line as if they had
-been mapped to @code{self-insert}. The default is @samp{off}.
-
-@item echo-control-characters
-@vindex echo-control-characters
-When set to @samp{on}, on operating systems that indicate they support it,
-readline echoes a character corresponding to a signal generated from the
-keyboard. The default is @samp{on}.
-
-@item editing-mode
-@vindex editing-mode
-The @code{editing-mode} variable controls which default set of
-key bindings is used. By default, Readline starts up in Emacs editing
-mode, where the keystrokes are most similar to Emacs. This variable can be
-set to either @samp{emacs} or @samp{vi}.
-
-@item emacs-mode-string
-@vindex emacs-mode-string
-If the @var{show-mode-in-prompt} variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when emacs editing mode is active. The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-The default is @samp{@@}.
-
-@item enable-bracketed-paste
-@vindex enable-bracketed-paste
-When set to @samp{On}, Readline will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard. This can prevent pasted characters
-from being interpreted as editing commands. The default is @samp{off}.
-
-@item enable-keypad
-@vindex enable-keypad
-When set to @samp{on}, Readline will try to enable the application
-keypad when it is called. Some systems need this to enable the
-arrow keys. The default is @samp{off}.
-
-@item enable-meta-key
-When set to @samp{on}, Readline will try to enable any meta modifier
-key the terminal claims to support when it is called. On many terminals,
-the meta key is used to send eight-bit characters.
-The default is @samp{on}.
-
-@item expand-tilde
-@vindex expand-tilde
-If set to @samp{on}, tilde expansion is performed when Readline
-attempts word completion. The default is @samp{off}.
-
-@item history-preserve-point
-@vindex history-preserve-point
-If set to @samp{on}, the history code attempts to place the point (the
-current cursor position) at the
-same location on each history line retrieved with @code{previous-history}
-or @code{next-history}. The default is @samp{off}.
-
-@item history-size
-@vindex history-size
-Set the maximum number of history entries saved in the history list.
-If set to zero, any existing history entries are deleted and no new entries
-are saved.
-If set to a value less than zero, the number of history entries is not
-limited.
-By default, the number of history entries is not limited.
-If an attempt is made to set @var{history-size} to a non-numeric value,
-the maximum number of history entries will be set to 500.
-
-@item horizontal-scroll-mode
-@vindex horizontal-scroll-mode
-This variable can be set to either @samp{on} or @samp{off}. Setting it
-to @samp{on} means that the text of the lines being edited will scroll
-horizontally on a single screen line when they are longer than the width
-of the screen, instead of wrapping onto a new screen line. By default,
-this variable is set to @samp{off}.
-
-@item input-meta
-@vindex input-meta
-@vindex meta-flag
-If set to @samp{on}, Readline will enable eight-bit input (it
-will not clear the eighth bit in the characters it reads),
-regardless of what the terminal claims it can support. The
-default value is @samp{off}, but Readline will set it to @samp{on} if the
-locale contains eight-bit characters.
-The name @code{meta-flag} is a synonym for this variable.
-
-@item isearch-terminators
-@vindex isearch-terminators
-The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (@pxref{Searching}).
-If this variable has not been given a value, the characters @key{ESC} and
-@kbd{C-J} will terminate an incremental search.
-
-@item keymap
-@vindex keymap
-Sets Readline's idea of the current keymap for key binding commands.
-Built-in @code{keymap} names are
-@code{emacs},
-@code{emacs-standard},
-@code{emacs-meta},
-@code{emacs-ctlx},
-@code{vi},
-@code{vi-move},
-@code{vi-command}, and
-@code{vi-insert}.
-@code{vi} is equivalent to @code{vi-command} (@code{vi-move} is also a
-synonym); @code{emacs} is equivalent to @code{emacs-standard}.
-Applications may add additional names.
-The default value is @code{emacs}.
-The value of the @code{editing-mode} variable also affects the
-default keymap.
-
-@item keyseq-timeout
-Specifies the duration Readline will wait for a character when reading an
-ambiguous key sequence (one that can form a complete key sequence using
-the input read so far, or can take additional input to complete a longer
-key sequence).
-If no input is received within the timeout, Readline will use the shorter
-but complete key sequence.
-Readline uses this value to determine whether or not input is
-available on the current input source (@code{rl_instream} by default).
-The value is specified in milliseconds, so a value of 1000 means that
-Readline will wait one second for additional input.
-If this variable is set to a value less than or equal to zero, or to a
-non-numeric value, Readline will wait until another key is pressed to
-decide which key sequence to complete.
-The default value is @code{500}.
-
-@item mark-directories
-If set to @samp{on}, completed directory names have a slash
-appended. The default is @samp{on}.
-
-@item mark-modified-lines
-@vindex mark-modified-lines
-This variable, when set to @samp{on}, causes Readline to display an
-asterisk (@samp{*}) at the start of history lines which have been modified.
-This variable is @samp{off} by default.
-
-@item mark-symlinked-directories
-@vindex mark-symlinked-directories
-If set to @samp{on}, completed names which are symbolic links
-to directories have a slash appended (subject to the value of
-@code{mark-directories}).
-The default is @samp{off}.
-
-@item match-hidden-files
-@vindex match-hidden-files
-This variable, when set to @samp{on}, causes Readline to match files whose
-names begin with a @samp{.} (hidden files) when performing filename
-completion.
-If set to @samp{off}, the leading @samp{.} must be
-supplied by the user in the filename to be completed.
-This variable is @samp{on} by default.
-
-@item menu-complete-display-prefix
-@vindex menu-complete-display-prefix
-If set to @samp{on}, menu completion displays the common prefix of the
-list of possible completions (which may be empty) before cycling through
-the list. The default is @samp{off}.
-
-@item output-meta
-@vindex output-meta
-If set to @samp{on}, Readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence.
-The default is @samp{off}, but Readline will set it to @samp{on} if the
-locale contains eight-bit characters.
-
-@item page-completions
-@vindex page-completions
-If set to @samp{on}, Readline uses an internal @code{more}-like pager
-to display a screenful of possible completions at a time.
-This variable is @samp{on} by default.
-
-@item print-completions-horizontally
-If set to @samp{on}, Readline will display completions with matches
-sorted horizontally in alphabetical order, rather than down the screen.
-The default is @samp{off}.
-
-@item revert-all-at-newline
-@vindex revert-all-at-newline
-If set to @samp{on}, Readline will undo all changes to history lines
-before returning when @code{accept-line} is executed. By default,
-history lines may be modified and retain individual undo lists across
-calls to @code{readline}. The default is @samp{off}.
-
-@item show-all-if-ambiguous
-@vindex show-all-if-ambiguous
-This alters the default behavior of the completion functions. If
-set to @samp{on},
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-The default value is @samp{off}.
-
-@item show-all-if-unmodified
-@vindex show-all-if-unmodified
-This alters the default behavior of the completion functions in
-a fashion similar to @var{show-all-if-ambiguous}.
-If set to @samp{on},
-words which have more than one possible completion without any
-possible partial completion (the possible completions don't share
-a common prefix) cause the matches to be listed immediately instead
-of ringing the bell.
-The default value is @samp{off}.
-
-@item show-mode-in-prompt
-@vindex show-mode-in-prompt
-If set to @samp{on}, add a string to the beginning of the prompt
-indicating the editing mode: emacs, vi command, or vi insertion.
-The mode strings are user-settable (e.g., @var{emacs-mode-string}).
-The default value is @samp{off}.
-
-@item skip-completed-text
-@vindex skip-completed-text
-If set to @samp{on}, this alters the default completion behavior when
-inserting a single match into the line. It's only active when
-performing completion in the middle of a word. If enabled, readline
-does not insert characters from the completion that match characters
-after point in the word being completed, so portions of the word
-following the cursor are not duplicated.
-For instance, if this is enabled, attempting completion when the cursor
-is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile}
-rather than @samp{Makefilefile}, assuming there is a single possible
-completion.
-The default value is @samp{off}.
-
-@item vi-cmd-mode-string
-@vindex vi-cmd-mode-string
-If the @var{show-mode-in-prompt} variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in command mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-The default is @samp{(cmd)}.
-
-@item vi-ins-mode-string
-@vindex vi-ins-mode-string
-If the @var{show-mode-in-prompt} variable is enabled,
-this string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in insertion mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-The default is @samp{(ins)}.
-
-@item visible-stats
-@vindex visible-stats
-If set to @samp{on}, a character denoting a file's type
-is appended to the filename when listing possible
-completions. The default is @samp{off}.
-
-@end table
-
-@item Key Bindings
-The syntax for controlling key bindings in the init file is
-simple. First you need to find the name of the command that you
-want to change. The following sections contain tables of the command
-name, the default keybinding, if any, and a short description of what
-the command does.
-
-Once you know the name of the command, simply place on a line
-in the init file the name of the key
-you wish to bind the command to, a colon, and then the name of the
-command.
-There can be no space between the key name and the colon -- that will be
-interpreted as part of the key name.
-The name of the key can be expressed in different ways, depending on
-what you find most comfortable.
-
-In addition to command names, readline allows keys to be bound
-to a string that is inserted when the key is pressed (a @var{macro}).
-
-@ifset BashFeatures
-The @w{@code{bind -p}} command displays Readline function names and
-bindings in a format that can put directly into an initialization file.
-@xref{Bash Builtins}.
-@end ifset
-
-@table @asis
-@item @w{@var{keyname}: @var{function-name} or @var{macro}}
-@var{keyname} is the name of a key spelled out in English. For example:
-@example
-Control-u: universal-argument
-Meta-Rubout: backward-kill-word
-Control-o: "> output"
-@end example
-
-In the example above, @kbd{C-u} is bound to the function
-@code{universal-argument},
-@kbd{M-DEL} is bound to the function @code{backward-kill-word}, and
-@kbd{C-o} is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-@samp{> output} into the line).
-
-A number of symbolic character names are recognized while
-processing this key binding syntax:
-@var{DEL},
-@var{ESC},
-@var{ESCAPE},
-@var{LFD},
-@var{NEWLINE},
-@var{RET},
-@var{RETURN},
-@var{RUBOUT},
-@var{SPACE},
-@var{SPC},
-and
-@var{TAB}.
-
-@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
-@var{keyseq} differs from @var{keyname} above in that strings
-denoting an entire key sequence can be specified, by placing
-the key sequence in double quotes. Some @sc{gnu} Emacs style key
-escapes can be used, as in the following example, but the
-special character names are not recognized.
-
-@example
-"\C-u": universal-argument
-"\C-x\C-r": re-read-init-file
-"\e[11~": "Function Key 1"
-@end example
-
-In the above example, @kbd{C-u} is again bound to the function
-@code{universal-argument} (just as it was in the first example),
-@samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file},
-and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert
-the text @samp{Function Key 1}.
-
-@end table
-
-The following @sc{gnu} Emacs style escape sequences are available when
-specifying key sequences:
-
-@table @code
-@item @kbd{\C-}
-control prefix
-@item @kbd{\M-}
-meta prefix
-@item @kbd{\e}
-an escape character
-@item @kbd{\\}
-backslash
-@item @kbd{\"}
-@key{"}, a double quotation mark
-@item @kbd{\'}
-@key{'}, a single quote or apostrophe
-@end table
-
-In addition to the @sc{gnu} Emacs style escape sequences, a second
-set of backslash escapes is available:
-
-@table @code
-@item \a
-alert (bell)
-@item \b
-backspace
-@item \d
-delete
-@item \f
-form feed
-@item \n
-newline
-@item \r
-carriage return
-@item \t
-horizontal tab
-@item \v
-vertical tab
-@item \@var{nnn}
-the eight-bit character whose value is the octal value @var{nnn}
-(one to three digits)
-@item \x@var{HH}
-the eight-bit character whose value is the hexadecimal value @var{HH}
-(one or two hex digits)
-@end table
-
-When entering the text of a macro, single or double quotes must
-be used to indicate a macro definition.
-Unquoted text is assumed to be a function name.
-In the macro body, the backslash escapes described above are expanded.
-Backslash will quote any other character in the macro text,
-including @samp{"} and @samp{'}.
-For example, the following binding will make @samp{@kbd{C-x} \}
-insert a single @samp{\} into the line:
-@example
-"\C-x\\": "\\"
-@end example
-
-@end table
-
-@node Conditional Init Constructs
-@subsection Conditional Init Constructs
-
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests. There are four parser directives used.
-
-@table @code
-@item $if
-The @code{$if} construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-Readline. The text of the test, after any comparison operator,
-extends to the end of the line;
-unless otherwise noted, no characters are required to isolate it.
-
-@table @code
-@item mode
-The @code{mode=} form of the @code{$if} directive is used to test
-whether Readline is in @code{emacs} or @code{vi} mode.
-This may be used in conjunction
-with the @samp{set keymap} command, for instance, to set bindings in
-the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if
-Readline is starting out in @code{emacs} mode.
-
-@item term
-The @code{term=} form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys. The word on the right side of the
-@samp{=} is tested against both the full name of the terminal and
-the portion of the terminal name before the first @samp{-}. This
-allows @code{sun} to match both @code{sun} and @code{sun-cmd},
-for instance.
-
-@item version
-The @code{version} test may be used to perform comparisons against
-specific Readline versions.
-The @code{version} expands to the current Readline version.
-The set of comparison operators includes
-@samp{=} (and @samp{==}), @samp{!=}, @samp{<=}, @samp{>=}, @samp{<},
-and @samp{>}.
-The version number supplied on the right side of the operator consists
-of a major version number, an optional decimal point, and an optional
-minor version (e.g., @samp{7.1}). If the minor version is omitted, it
-is assumed to be @samp{0}.
-The operator may be separated from the string @code{version} and
-from the version number argument by whitespace.
-The following example sets a variable if the Readline version being used
-is 7.0 or newer:
-@example
-$if version >= 7.0
-set show-mode-in-prompt on
-$endif
-@end example
-
-@item application
-The @var{application} construct is used to include
-application-specific settings. Each program using the Readline
-library sets the @var{application name}, and you can test for
-a particular value.
-This could be used to bind key sequences to functions useful for
-a specific program. For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
-@example
-$if Bash
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-$endif
-@end example
-
-@item variable
-The @var{variable} construct provides simple equality tests for Readline
-variables and values.
-The permitted comparison operators are @samp{=}, @samp{==}, and @samp{!=}.
-The variable name must be separated from the comparison operator by
-whitespace; the operator may be separated from the value on the right hand
-side by whitespace.
-Both string and boolean variables may be tested. Boolean variables must be
-tested against the values @var{on} and @var{off}.
-The following example is equivalent to the @code{mode=emacs} test described
-above:
-@example
-$if editing-mode == emacs
-set show-mode-in-prompt on
-$endif
-@end example
-@end table
-
-@item $endif
-This command, as seen in the previous example, terminates an
-@code{$if} command.
-
-@item $else
-Commands in this branch of the @code{$if} directive are executed if
-the test fails.
-
-@item $include
-This directive takes a single filename as an argument and reads commands
-and bindings from that file.
-For example, the following directive reads from @file{/etc/inputrc}:
-@example
-$include /etc/inputrc
-@end example
-@end table
-
-@node Sample Init File
-@subsection Sample Init File
-
-Here is an example of an @var{inputrc} file. This illustrates key
-binding, variable assignment, and conditional syntax.
-
-@example
-@page
-# This file controls the behaviour of line input editing for
-# programs that use the GNU Readline library. Existing
-# programs include FTP, Bash, and GDB.
-#
-# You can re-read the inputrc file with C-x C-r.
-# Lines beginning with '#' are comments.
-#
-# First, include any system-wide bindings and variable
-# assignments from /etc/Inputrc
-$include /etc/Inputrc
-
-#
-# Set various bindings for emacs mode.
-
-set editing-mode emacs
-
-$if mode=emacs
-
-Meta-Control-h: backward-kill-word Text after the function name is ignored
-
-#
-# Arrow keys in keypad mode
-#
-#"\M-OD": backward-char
-#"\M-OC": forward-char
-#"\M-OA": previous-history
-#"\M-OB": next-history
-#
-# Arrow keys in ANSI mode
-#
-"\M-[D": backward-char
-"\M-[C": forward-char
-"\M-[A": previous-history
-"\M-[B": next-history
-#
-# Arrow keys in 8 bit keypad mode
-#
-#"\M-\C-OD": backward-char
-#"\M-\C-OC": forward-char
-#"\M-\C-OA": previous-history
-#"\M-\C-OB": next-history
-#
-# Arrow keys in 8 bit ANSI mode
-#
-#"\M-\C-[D": backward-char
-#"\M-\C-[C": forward-char
-#"\M-\C-[A": previous-history
-#"\M-\C-[B": next-history
-
-C-q: quoted-insert
-
-$endif
-
-# An old-style binding. This happens to be the default.
-TAB: complete
-
-# Macros that are convenient for shell interaction
-$if Bash
-# edit the path
-"\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word --
-# insert open and close double quotes
-# and move to just after the open quote
-"\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes
-# in sequences and macros)
-"\C-x\\": "\\"
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-# Add a binding to refresh the line, which is unbound
-"\C-xr": redraw-current-line
-# Edit variable on current line.
-"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
-$endif
-
-# use a visible bell if one is available
-set bell-style visible
-
-# don't strip characters to 7 bits when reading
-set input-meta on
-
-# allow iso-latin1 characters to be inserted rather
-# than converted to prefix-meta sequences
-set convert-meta off
-
-# display characters with the eighth bit set directly
-# rather than as meta-prefixed characters
-set output-meta on
-
-# if there are more than 150 possible completions for
-# a word, ask the user if he wants to see all of them
-set completion-query-items 150
-
-# For FTP
-$if Ftp
-"\C-xg": "get \M-?"
-"\C-xt": "put \M-?"
-"\M-.": yank-last-arg
-$endif
-@end example
-
-@node Bindable Readline Commands
-@section Bindable Readline Commands
-
-@menu
-* Commands For Moving:: Moving about the line.
-* Commands For History:: Getting at previous lines.
-* Commands For Text:: Commands for changing text.
-* Commands For Killing:: Commands for killing and yanking.
-* Numeric Arguments:: Specifying numeric arguments, repeat counts.
-* Commands For Completion:: Getting Readline to do the typing for you.
-* Keyboard Macros:: Saving and re-executing typed characters
-* Miscellaneous Commands:: Other miscellaneous commands.
-@end menu
-
-This section describes Readline commands that may be bound to key
-sequences.
-@ifset BashFeatures
-You can list your key bindings by executing
-@w{@code{bind -P}} or, for a more terse format, suitable for an
-@var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.)
-@end ifset
-Command names without an accompanying key sequence are unbound by default.
-
-In the following descriptions, @dfn{point} refers to the current cursor
-position, and @dfn{mark} refers to a cursor position saved by the
-@code{set-mark} command.
-The text between the point and mark is referred to as the @dfn{region}.
-
-@node Commands For Moving
-@subsection Commands For Moving
-@ftable @code
-@item beginning-of-line (C-a)
-Move to the start of the current line.
-
-@item end-of-line (C-e)
-Move to the end of the line.
-
-@item forward-char (C-f)
-Move forward a character.
-
-@item backward-char (C-b)
-Move back a character.
-
-@item forward-word (M-f)
-Move forward to the end of the next word.
-Words are composed of letters and digits.
-
-@item backward-word (M-b)
-Move back to the start of the current or previous word.
-Words are composed of letters and digits.
-
-@ifset BashFeatures
-@item shell-forward-word ()
-Move forward to the end of the next word.
-Words are delimited by non-quoted shell metacharacters.
-
-@item shell-backward-word ()
-Move back to the start of the current or previous word.
-Words are delimited by non-quoted shell metacharacters.
-@end ifset
-
-@item previous-screen-line ()
-Attempt to move point to the same physical screen column on the previous
-physical screen line. This will not have the desired effect if the current
-Readline line does not take up more than one physical line or if point is not
-greater than the length of the prompt plus the screen width.
-
-@item next-screen-line ()
-Attempt to move point to the same physical screen column on the next
-physical screen line. This will not have the desired effect if the current
-Readline line does not take up more than one physical line or if the length
-of the current Readline line is not greater than the length of the prompt
-plus the screen width.
-
-@item clear-screen (C-l)
-Clear the screen and redraw the current line,
-leaving the current line at the top of the screen.
-
-@item redraw-current-line ()
-Refresh the current line. By default, this is unbound.
-
-@end ftable
-
-@node Commands For History
-@subsection Commands For Manipulating The History
-
-@ftable @code
-@item accept-line (Newline or Return)
-@ifset BashFeatures
-Accept the line regardless of where the cursor is.
-If this line is
-non-empty, add it to the history list according to the setting of
-the @env{HISTCONTROL} and @env{HISTIGNORE} variables.
-If this line is a modified history line, then restore the history line
-to its original state.
-@end ifset
-@ifclear BashFeatures
-Accept the line regardless of where the cursor is.
-If this line is
-non-empty, it may be added to the history list for future recall with
-@code{add_history()}.
-If this line is a modified history line, the history line is restored
-to its original state.
-@end ifclear
-
-@item previous-history (C-p)
-Move `back' through the history list, fetching the previous command.
-
-@item next-history (C-n)
-Move `forward' through the history list, fetching the next command.
-
-@item beginning-of-history (M-<)
-Move to the first line in the history.
-
-@item end-of-history (M->)
-Move to the end of the input history, i.e., the line currently
-being entered.
-
-@item reverse-search-history (C-r)
-Search backward starting at the current line and moving `up' through
-the history as necessary. This is an incremental search.
-
-@item forward-search-history (C-s)
-Search forward starting at the current line and moving `down' through
-the history as necessary. This is an incremental search.
-
-@item non-incremental-reverse-search-history (M-p)
-Search backward starting at the current line and moving `up'
-through the history as necessary using a non-incremental search
-for a string supplied by the user.
-The search string may match anywhere in a history line.
-
-@item non-incremental-forward-search-history (M-n)
-Search forward starting at the current line and moving `down'
-through the history as necessary using a non-incremental search
-for a string supplied by the user.
-The search string may match anywhere in a history line.
-
-@item history-search-forward ()
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-The search string must match at the beginning of a history line.
-This is a non-incremental search.
-By default, this command is unbound.
-
-@item history-search-backward ()
-Search backward through the history for the string of characters
-between the start of the current line and the point.
-The search string must match at the beginning of a history line.
-This is a non-incremental search.
-By default, this command is unbound.
-
-@item history-substring-search-forward ()
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-The search string may match anywhere in a history line.
-This is a non-incremental search.
-By default, this command is unbound.
-
-@item history-substring-search-backward ()
-Search backward through the history for the string of characters
-between the start of the current line and the point.
-The search string may match anywhere in a history line.
-This is a non-incremental search.
-By default, this command is unbound.
-
-@item yank-nth-arg (M-C-y)
-Insert the first argument to the previous command (usually
-the second word on the previous line) at point.
-With an argument @var{n},
-insert the @var{n}th word from the previous command (the words
-in the previous command begin with word 0). A negative argument
-inserts the @var{n}th word from the end of the previous command.
-Once the argument @var{n} is computed, the argument is extracted
-as if the @samp{!@var{n}} history expansion had been specified.
-
-@item yank-last-arg (M-. or M-_)
-Insert last argument to the previous command (the last word of the
-previous history entry).
-With a numeric argument, behave exactly like @code{yank-nth-arg}.
-Successive calls to @code{yank-last-arg} move back through the history
-list, inserting the last word (or the word specified by the argument to
-the first call) of each line in turn.
-Any numeric argument supplied to these successive calls determines
-the direction to move through the history. A negative argument switches
-the direction through the history (back or forward).
-The history expansion facilities are used to extract the last argument,
-as if the @samp{!$} history expansion had been specified.
-
-@end ftable
-
-@node Commands For Text
-@subsection Commands For Changing Text
-
-@ftable @code
-
-@item @i{end-of-file} (usually C-d)
-The character indicating end-of-file as set, for example, by
-@code{stty}. If this character is read when there are no characters
-on the line, and point is at the beginning of the line, Readline
-interprets it as the end of input and returns @sc{eof}.
-
-@item delete-char (C-d)
-Delete the character at point. If this function is bound to the
-same character as the tty @sc{eof} character, as @kbd{C-d}
-commonly is, see above for the effects.
-
-@item backward-delete-char (Rubout)
-Delete the character behind the cursor. A numeric argument means
-to kill the characters instead of deleting them.
-
-@item forward-backward-delete-char ()
-Delete the character under the cursor, unless the cursor is at the
-end of the line, in which case the character behind the cursor is
-deleted. By default, this is not bound to a key.
-
-@item quoted-insert (C-q or C-v)
-Add the next character typed to the line verbatim. This is
-how to insert key sequences like @kbd{C-q}, for example.
-
-@ifclear BashFeatures
-@item tab-insert (M-@key{TAB})
-Insert a tab character.
-@end ifclear
-
-@item self-insert (a, b, A, 1, !, @dots{})
-Insert yourself.
-
-@item bracketed-paste-begin ()
-This function is intended to be bound to the "bracketed paste" escape
-sequence sent by some terminals, and such a binding is assigned by default.
-It allows Readline to insert the pasted text as a single unit without treating
-each character as if it had been read from the keyboard. The characters
-are inserted as if each one was bound to @code{self-insert} instead of
-executing any editing commands.
-
-@item transpose-chars (C-t)
-Drag the character before the cursor forward over
-the character at the cursor, moving the
-cursor forward as well. If the insertion point
-is at the end of the line, then this
-transposes the last two characters of the line.
-Negative arguments have no effect.
-
-@item transpose-words (M-t)
-Drag the word before point past the word after point,
-moving point past that word as well.
-If the insertion point is at the end of the line, this transposes
-the last two words on the line.
-
-@item upcase-word (M-u)
-Uppercase the current (or following) word. With a negative argument,
-uppercase the previous word, but do not move the cursor.
-
-@item downcase-word (M-l)
-Lowercase the current (or following) word. With a negative argument,
-lowercase the previous word, but do not move the cursor.
-
-@item capitalize-word (M-c)
-Capitalize the current (or following) word. With a negative argument,
-capitalize the previous word, but do not move the cursor.
-
-@item overwrite-mode ()
-Toggle overwrite mode. With an explicit positive numeric argument,
-switches to overwrite mode. With an explicit non-positive numeric
-argument, switches to insert mode. This command affects only
-@code{emacs} mode; @code{vi} mode does overwrite differently.
-Each call to @code{readline()} starts in insert mode.
-
-In overwrite mode, characters bound to @code{self-insert} replace
-the text at point rather than pushing the text to the right.
-Characters bound to @code{backward-delete-char} replace the character
-before point with a space.
-
-By default, this command is unbound.
-
-@end ftable
-
-@node Commands For Killing
-@subsection Killing And Yanking
-
-@ftable @code
-
-@item kill-line (C-k)
-Kill the text from point to the end of the line.
-
-@item backward-kill-line (C-x Rubout)
-Kill backward from the cursor to the beginning of the current line.
-
-@item unix-line-discard (C-u)
-Kill backward from the cursor to the beginning of the current line.
-
-@item kill-whole-line ()
-Kill all characters on the current line, no matter where point is.
-By default, this is unbound.
-
-@item kill-word (M-d)
-Kill from point to the end of the current word, or if between
-words, to the end of the next word.
-Word boundaries are the same as @code{forward-word}.
-
-@item backward-kill-word (M-@key{DEL})
-Kill the word behind point.
-Word boundaries are the same as @code{backward-word}.
-
-@ifset BashFeatures
-@item shell-kill-word ()
-Kill from point to the end of the current word, or if between
-words, to the end of the next word.
-Word boundaries are the same as @code{shell-forward-word}.
-
-@item shell-backward-kill-word ()
-Kill the word behind point.
-Word boundaries are the same as @code{shell-backward-word}.
-@end ifset
-
-@item unix-word-rubout (C-w)
-Kill the word behind point, using white space as a word boundary.
-The killed text is saved on the kill-ring.
-
-@item unix-filename-rubout ()
-Kill the word behind point, using white space and the slash character
-as the word boundaries.
-The killed text is saved on the kill-ring.
-
-@item delete-horizontal-space ()
-Delete all spaces and tabs around point. By default, this is unbound.
-
-@item kill-region ()
-Kill the text in the current region.
-By default, this command is unbound.
-
-@item copy-region-as-kill ()
-Copy the text in the region to the kill buffer, so it can be yanked
-right away. By default, this command is unbound.
-
-@item copy-backward-word ()
-Copy the word before point to the kill buffer.
-The word boundaries are the same as @code{backward-word}.
-By default, this command is unbound.
-
-@item copy-forward-word ()
-Copy the word following point to the kill buffer.
-The word boundaries are the same as @code{forward-word}.
-By default, this command is unbound.
-
-@item yank (C-y)
-Yank the top of the kill ring into the buffer at point.
-
-@item yank-pop (M-y)
-Rotate the kill-ring, and yank the new top. You can only do this if
-the prior command is @code{yank} or @code{yank-pop}.
-@end ftable
-
-@node Numeric Arguments
-@subsection Specifying Numeric Arguments
-@ftable @code
-
-@item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--})
-Add this digit to the argument already accumulating, or start a new
-argument. @kbd{M--} starts a negative argument.
-
-@item universal-argument ()
-This is another way to specify an argument.
-If this command is followed by one or more digits, optionally with a
-leading minus sign, those digits define the argument.
-If the command is followed by digits, executing @code{universal-argument}
-again ends the numeric argument, but is otherwise ignored.
-As a special case, if this command is immediately followed by a
-character that is neither a digit nor minus sign, the argument count
-for the next command is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four, a second time makes the
-argument count sixteen, and so on.
-By default, this is not bound to a key.
-@end ftable
-
-@node Commands For Completion
-@subsection Letting Readline Type For You
-
-@ftable @code
-@item complete (@key{TAB})
-Attempt to perform completion on the text before point.
-The actual completion performed is application-specific.
-@ifset BashFeatures
-Bash attempts completion treating the text as a variable (if the
-text begins with @samp{$}), username (if the text begins with
-@samp{~}), hostname (if the text begins with @samp{@@}), or
-command (including aliases and functions) in turn. If none
-of these produces a match, filename completion is attempted.
-@end ifset
-@ifclear BashFeatures
-The default is filename completion.
-@end ifclear
-
-@item possible-completions (M-?)
-List the possible completions of the text before point.
-When displaying completions, Readline sets the number of columns used
-for display to the value of @code{completion-display-width}, the value of
-the environment variable @env{COLUMNS}, or the screen width, in that order.
-
-@item insert-completions (M-*)
-Insert all completions of the text before point that would have
-been generated by @code{possible-completions}.
-
-@item menu-complete ()
-Similar to @code{complete}, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of @code{menu-complete} steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung
-(subject to the setting of @code{bell-style})
-and the original text is restored.
-An argument of @var{n} moves @var{n} positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to @key{TAB}, but is unbound
-by default.
-
-@item menu-complete-backward ()
-Identical to @code{menu-complete}, but moves backward through the list
-of possible completions, as if @code{menu-complete} had been given a
-negative argument.
-
-@item delete-char-or-list ()
-Deletes the character under the cursor if not at the beginning or
-end of the line (like @code{delete-char}).
-If at the end of the line, behaves identically to
-@code{possible-completions}.
-This command is unbound by default.
-
-@ifset BashFeatures
-@item complete-filename (M-/)
-Attempt filename completion on the text before point.
-
-@item possible-filename-completions (C-x /)
-List the possible completions of the text before point,
-treating it as a filename.
-
-@item complete-username (M-~)
-Attempt completion on the text before point, treating
-it as a username.
-
-@item possible-username-completions (C-x ~)
-List the possible completions of the text before point,
-treating it as a username.
-
-@item complete-variable (M-$)
-Attempt completion on the text before point, treating
-it as a shell variable.
-
-@item possible-variable-completions (C-x $)
-List the possible completions of the text before point,
-treating it as a shell variable.
-
-@item complete-hostname (M-@@)
-Attempt completion on the text before point, treating
-it as a hostname.
-
-@item possible-hostname-completions (C-x @@)
-List the possible completions of the text before point,
-treating it as a hostname.
-
-@item complete-command (M-!)
-Attempt completion on the text before point, treating
-it as a command name. Command completion attempts to
-match the text against aliases, reserved words, shell
-functions, shell builtins, and finally executable filenames,
-in that order.
-
-@item possible-command-completions (C-x !)
-List the possible completions of the text before point,
-treating it as a command name.
-
-@item dynamic-complete-history (M-@key{TAB})
-Attempt completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-
-@item dabbrev-expand ()
-Attempt menu completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-
-@item complete-into-braces (M-@{)
-Perform filename completion and insert the list of possible completions
-enclosed within braces so the list is available to the shell
-(@pxref{Brace Expansion}).
-
-@end ifset
-@end ftable
-
-@node Keyboard Macros
-@subsection Keyboard Macros
-@ftable @code
-
-@item start-kbd-macro (C-x ()
-Begin saving the characters typed into the current keyboard macro.
-
-@item end-kbd-macro (C-x ))
-Stop saving the characters typed into the current keyboard macro
-and save the definition.
-
-@item call-last-kbd-macro (C-x e)
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-
-@item print-last-kbd-macro ()
-Print the last keboard macro defined in a format suitable for the
-@var{inputrc} file.
-
-@end ftable
-
-@node Miscellaneous Commands
-@subsection Some Miscellaneous Commands
-@ftable @code
-
-@item re-read-init-file (C-x C-r)
-Read in the contents of the @var{inputrc} file, and incorporate
-any bindings or variable assignments found there.
-
-@item abort (C-g)
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-@code{bell-style}).
-
-@item do-lowercase-version (M-A, M-B, M-@var{x}, @dots{})
-If the metafied character @var{x} is upper case, run the command
-that is bound to the corresponding metafied lower case character.
-The behavior is undefined if @var{x} is already lower case.
-
-@item prefix-meta (@key{ESC})
-Metafy the next character typed. This is for keyboards
-without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing
-@kbd{M-f}.
-
-@item undo (C-_ or C-x C-u)
-Incremental undo, separately remembered for each line.
-
-@item revert-line (M-r)
-Undo all changes made to this line. This is like executing the @code{undo}
-command enough times to get back to the beginning.
-
-@ifset BashFeatures
-@item tilde-expand (M-&)
-@end ifset
-@ifclear BashFeatures
-@item tilde-expand (M-~)
-@end ifclear
-Perform tilde expansion on the current word.
-
-@item set-mark (C-@@)
-Set the mark to the point. If a
-numeric argument is supplied, the mark is set to that position.
-
-@item exchange-point-and-mark (C-x C-x)
-Swap the point with the mark. The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-
-@item character-search (C-])
-A character is read and point is moved to the next occurrence of that
-character. A negative count searches for previous occurrences.
-
-@item character-search-backward (M-C-])
-A character is read and point is moved to the previous occurrence
-of that character. A negative count searches for subsequent
-occurrences.
-
-@item skip-csi-sequence ()
-Read enough characters to consume a multi-key sequence such as those
-defined for keys like Home and End. Such sequences begin with a
-Control Sequence Indicator (CSI), usually ESC-[. If this sequence is
-bound to "\e[", keys producing such sequences will have no effect
-unless explicitly bound to a readline command, instead of inserting
-stray characters into the editing buffer. This is unbound by default,
-but usually bound to ESC-[.
-
-@item insert-comment (M-#)
-Without a numeric argument, the value of the @code{comment-begin}
-variable is inserted at the beginning of the current line.
-If a numeric argument is supplied, this command acts as a toggle: if
-the characters at the beginning of the line do not match the value
-of @code{comment-begin}, the value is inserted, otherwise
-the characters in @code{comment-begin} are deleted from the beginning of
-the line.
-In either case, the line is accepted as if a newline had been typed.
-@ifset BashFeatures
-The default value of @code{comment-begin} causes this command
-to make the current line a shell comment.
-If a numeric argument causes the comment character to be removed, the line
-will be executed by the shell.
-@end ifset
-
-@item dump-functions ()
-Print all of the functions and their key bindings to the
-Readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@item dump-variables ()
-Print all of the settable variables and their values to the
-Readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@item dump-macros ()
-Print all of the Readline key sequences bound to macros and the
-strings they output. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@ifset BashFeatures
-@item glob-complete-word (M-g)
-The word before point is treated as a pattern for pathname expansion,
-with an asterisk implicitly appended. This pattern is used to
-generate a list of matching file names for possible completions.
-
-@item glob-expand-word (C-x *)
-The word before point is treated as a pattern for pathname expansion,
-and the list of matching file names is inserted, replacing the word.
-If a numeric argument is supplied, a @samp{*} is appended before
-pathname expansion.
-
-@item glob-list-expansions (C-x g)
-The list of expansions that would have been generated by
-@code{glob-expand-word} is displayed, and the line is redrawn.
-If a numeric argument is supplied, a @samp{*} is appended before
-pathname expansion.
-
-@item display-shell-version (C-x C-v)
-Display version information about the current instance of Bash.
-
-@item shell-expand-line (M-C-e)
-Expand the line as the shell does.
-This performs alias and history expansion as well as all of the shell
-word expansions (@pxref{Shell Expansions}).
-
-@item history-expand-line (M-^)
-Perform history expansion on the current line.
-
-@item magic-space ()
-Perform history expansion on the current line and insert a space
-(@pxref{History Interaction}).
-
-@item alias-expand-line ()
-Perform alias expansion on the current line (@pxref{Aliases}).
-
-@item history-and-alias-expand-line ()
-Perform history and alias expansion on the current line.
-
-@item insert-last-argument (M-. or M-_)
-A synonym for @code{yank-last-arg}.
-
-@item operate-and-get-next (C-o)
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing.
-A numeric argument, if supplied, specifies the history entry to use instead
-of the current line.
-
-@item edit-and-execute-command (C-x C-e)
-Invoke an editor on the current command line, and execute the result as shell
-commands.
-Bash attempts to invoke
-@code{$VISUAL}, @code{$EDITOR}, and @code{emacs}
-as the editor, in that order.
-
-@end ifset
-
-@ifclear BashFeatures
-@item emacs-editing-mode (C-e)
-When in @code{vi} command mode, this causes a switch to @code{emacs}
-editing mode.
-
-@item vi-editing-mode (M-C-j)
-When in @code{emacs} editing mode, this causes a switch to @code{vi}
-editing mode.
-
-@end ifclear
-
-@end ftable
-
-@node Readline vi Mode
-@section Readline vi Mode
-
-While the Readline library does not have a full set of @code{vi}
-editing functions, it does contain enough to allow simple editing
-of the line. The Readline @code{vi} mode behaves as specified in
-the @sc{posix} standard.
-
-@ifset BashFeatures
-In order to switch interactively between @code{emacs} and @code{vi}
-editing modes, use the @samp{set -o emacs} and @samp{set -o vi}
-commands (@pxref{The Set Builtin}).
-@end ifset
-@ifclear BashFeatures
-In order to switch interactively between @code{emacs} and @code{vi}
-editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode
-when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode).
-@end ifclear
-The Readline default is @code{emacs} mode.
-
-When you enter a line in @code{vi} mode, you are already placed in
-`insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC}
-switches you into `command' mode, where you can edit the text of the
-line with the standard @code{vi} movement keys, move to previous
-history lines with @samp{k} and subsequent lines with @samp{j}, and
-so forth.
-
-@ifset BashFeatures
-@node Programmable Completion
-@section Programmable Completion
-@cindex programmable completion
-
-When word completion is attempted for an argument to a command for
-which a completion specification (a @var{compspec}) has been defined
-using the @code{complete} builtin (@pxref{Programmable Completion Builtins}),
-the programmable completion facilities are invoked.
-
-First, the command name is identified.
-If a compspec has been defined for that command, the
-compspec is used to generate the list of possible completions for the word.
-If the command word is the empty string (completion attempted at the
-beginning of an empty line), any compspec defined with
-the @option{-E} option to @code{complete} is used.
-If the command word is a full pathname, a compspec for the full
-pathname is searched for first.
-If no compspec is found for the full pathname, an attempt is made to
-find a compspec for the portion following the final slash.
-If those searches do not result in a compspec, any compspec defined with
-the @option{-D} option to @code{complete} is used as the default.
-If there is no default compspec, Bash attempts alias expansion
-on the command word as a final resort, and attempts to find a compspec
-for the command word from any successful expansion
-
-Once a compspec has been found, it is used to generate the list of
-matching words.
-If a compspec is not found, the default Bash completion
-described above (@pxref{Commands For Completion}) is performed.
-
-First, the actions specified by the compspec are used.
-Only matches which are prefixed by the word being completed are
-returned.
-When the @option{-f} or @option{-d} option is used for filename or
-directory name completion, the shell variable @env{FIGNORE} is
-used to filter the matches.
-@xref{Bash Variables}, for a description of @env{FIGNORE}.
-
-Any completions specified by a filename expansion pattern to the
-@option{-G} option are generated next.
-The words generated by the pattern need not match the word being completed.
-The @env{GLOBIGNORE} shell variable is not used to filter the matches,
-but the @env{FIGNORE} shell variable is used.
-
-Next, the string specified as the argument to the @option{-W} option
-is considered.
-The string is first split using the characters in the @env{IFS}
-special variable as delimiters.
-Shell quoting is honored within the string, in order to provide a
-mechanism for the words to contain shell metacharacters or characters
-in the value of @env{IFS}.
-Each word is then expanded using
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, and arithmetic expansion,
-as described above (@pxref{Shell Expansions}).
-The results are split using the rules described above
-(@pxref{Word Splitting}).
-The results of the expansion are prefix-matched against the word being
-completed, and the matching words become the possible completions.
-
-After these matches have been generated, any shell function or command
-specified with the @option{-F} and @option{-C} options is invoked.
-When the command or function is invoked, the @env{COMP_LINE},
-@env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are
-assigned values as described above (@pxref{Bash Variables}).
-If a shell function is being invoked, the @env{COMP_WORDS} and
-@env{COMP_CWORD} variables are also set.
-When the function or command is invoked, the first argument ($1) is the
-name of the command whose arguments are being completed, the
-second argument ($2) is the word being completed, and the third argument
-($3) is the word preceding the word being completed on the current command
-line.
-No filtering of the generated completions against the word being completed
-is performed; the function or command has complete freedom in generating
-the matches.
-
-Any function specified with @option{-F} is invoked first.
-The function may use any of the shell facilities, including the
-@code{compgen} and @code{compopt} builtins described below
-(@pxref{Programmable Completion Builtins}), to generate the matches.
-It must put the possible completions in the @env{COMPREPLY} array
-variable, one per array element.
-
-Next, any command specified with the @option{-C} option is invoked
-in an environment equivalent to command substitution.
-It should print a list of completions, one per line, to
-the standard output.
-Backslash may be used to escape a newline, if necessary.
-
-After all of the possible completions are generated, any filter
-specified with the @option{-X} option is applied to the list.
-The filter is a pattern as used for pathname expansion; a @samp{&}
-in the pattern is replaced with the text of the word being completed.
-A literal @samp{&} may be escaped with a backslash; the backslash
-is removed before attempting a match.
-Any completion that matches the pattern will be removed from the list.
-A leading @samp{!} negates the pattern; in this case any completion
-not matching the pattern will be removed.
-If the @code{nocasematch} shell option
-(see the description of @code{shopt} in @ref{The Shopt Builtin})
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-
-Finally, any prefix and suffix specified with the @option{-P} and @option{-S}
-options are added to each member of the completion list, and the result is
-returned to the Readline completion code as the list of possible
-completions.
-
-If the previously-applied actions do not generate any matches, and the
-@option{-o dirnames} option was supplied to @code{complete} when the
-compspec was defined, directory name completion is attempted.
-
-If the @option{-o plusdirs} option was supplied to @code{complete} when
-the compspec was defined, directory name completion is attempted and any
-matches are added to the results of the other actions.
-
-By default, if a compspec is found, whatever it generates is returned to
-the completion code as the full set of possible completions.
-The default Bash completions are not attempted, and the Readline default
-of filename completion is disabled.
-If the @option{-o bashdefault} option was supplied to @code{complete} when
-the compspec was defined, the default Bash completions are attempted
-if the compspec generates no matches.
-If the @option{-o default} option was supplied to @code{complete} when the
-compspec was defined, Readline's default completion will be performed
-if the compspec (and, if attempted, the default Bash completions)
-generate no matches.
-
-When a compspec indicates that directory name completion is desired,
-the programmable completion functions force Readline to append a slash
-to completed names which are symbolic links to directories, subject to
-the value of the @var{mark-directories} Readline variable, regardless
-of the setting of the @var{mark-symlinked-directories} Readline variable.
-
-There is some support for dynamically modifying completions. This is
-most useful when used in combination with a default completion specified
-with @option{-D}. It's possible for shell functions executed as completion
-handlers to indicate that completion should be retried by returning an
-exit status of 124. If a shell function returns 124, and changes
-the compspec associated with the command on which completion is being
-attempted (supplied as the first argument when the function is executed),
-programmable completion restarts from the beginning, with an
-attempt to find a new compspec for that command. This allows a set of
-completions to be built dynamically as completion is attempted, rather than
-being loaded all at once.
-
-For instance, assuming that there is a library of compspecs, each kept in a
-file corresponding to the name of the command, the following default
-completion function would load completions dynamically:
-
-@example
-_completion_loader()
-@{
- . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
-@}
-complete -D -F _completion_loader -o bashdefault -o default
-@end example
-
-@node Programmable Completion Builtins
-@section Programmable Completion Builtins
-@cindex completion builtins
-
-Three builtin commands are available to manipulate the programmable completion
-facilities: one to specify how the arguments to a particular command are to
-be completed, and two to modify the completion as it is happening.
-
-@table @code
-@item compgen
-@btindex compgen
-@example
-@code{compgen [@var{option}] [@var{word}]}
-@end example
-
-Generate possible completion matches for @var{word} according to
-the @var{option}s, which may be any option accepted by the
-@code{complete}
-builtin with the exception of @option{-p} and @option{-r}, and write
-the matches to the standard output.
-When using the @option{-F} or @option{-C} options, the various shell variables
-set by the programmable completion facilities, while available, will not
-have useful values.
-
-The matches will be generated in the same way as if the programmable
-completion code had generated them directly from a completion specification
-with the same flags.
-If @var{word} is specified, only those completions matching @var{word}
-will be displayed.
-
-The return value is true unless an invalid option is supplied, or no
-matches were generated.
-
-@item complete
-@btindex complete
-@example
-@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DEI] [-A @var{action}] [-G @var{globpat}]
-[-W @var{wordlist}] [-F @var{function}] [-C @var{command}] [-X @var{filterpat}]
-[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]}
-@code{complete -pr [-DEI] [@var{name} @dots{}]}
-@end example
-
-Specify how arguments to each @var{name} should be completed.
-If the @option{-p} option is supplied, or if no options are supplied, existing
-completion specifications are printed in a way that allows them to be
-reused as input.
-The @option{-r} option removes a completion specification for
-each @var{name}, or, if no @var{name}s are supplied, all
-completion specifications.
-The @option{-D} option indicates that other supplied options and actions should
-apply to the ``default'' command completion; that is, completion attempted
-on a command for which no completion has previously been defined.
-The @option{-E} option indicates that other supplied options and actions should
-apply to ``empty'' command completion; that is, completion attempted on a
-blank line.
-The @option{-I} option indicates that other supplied options and actions should
-apply to completion on the inital non-assignment word on the line, or after a
-command delimiter such as @samp{;} or @samp{|}, which is usually command
-name completion.
-If multiple options are supplied, the @option{-D} option takes precedence
-over @option{-E}, and both take precedence over @option{-I}.
-If any of @option{-D}, @option{-E}, or @option{-I} are supplied, any other
-@var{name} arguments are ignored; these completions only apply to the case
-specified by the option.
-
-The process of applying these completion specifications when word completion
-is attempted is described above (@pxref{Programmable Completion}).
-
-Other options, if specified, have the following meanings.
-The arguments to the @option{-G}, @option{-W}, and @option{-X} options
-(and, if necessary, the @option{-P} and @option{-S} options)
-should be quoted to protect them from expansion before the
-@code{complete} builtin is invoked.
-
-
-@table @code
-@item -o @var{comp-option}
-The @var{comp-option} controls several aspects of the compspec's behavior
-beyond the simple generation of completions.
-@var{comp-option} may be one of:
-
-@table @code
-
-@item bashdefault
-Perform the rest of the default Bash completions if the compspec
-generates no matches.
-
-@item default
-Use Readline's default filename completion if the compspec generates
-no matches.
-
-@item dirnames
-Perform directory name completion if the compspec generates no matches.
-
-@item filenames
-Tell Readline that the compspec generates filenames, so it can perform any
-filename-specific processing (like adding a slash to directory names,
-quoting special characters, or suppressing trailing spaces).
-This option is intended to be used with shell functions specified
-with @option{-F}.
-
-@item noquote
-Tell Readline not to quote the completed words if they are filenames
-(quoting filenames is the default).
-
-@item nosort
-Tell Readline not to sort the list of possible completions alphabetically.
-
-@item nospace
-Tell Readline not to append a space (the default) to words completed at
-the end of the line.
-
-@item plusdirs
-After any matches defined by the compspec are generated,
-directory name completion is attempted and any
-matches are added to the results of the other actions.
-
-@end table
-
-@item -A @var{action}
-The @var{action} may be one of the following to generate a list of possible
-completions:
-
-@table @code
-@item alias
-Alias names. May also be specified as @option{-a}.
-
-@item arrayvar
-Array variable names.
-
-@item binding
-Readline key binding names (@pxref{Bindable Readline Commands}).
-
-@item builtin
-Names of shell builtin commands. May also be specified as @option{-b}.
-
-@item command
-Command names. May also be specified as @option{-c}.
-
-@item directory
-Directory names. May also be specified as @option{-d}.
-
-@item disabled
-Names of disabled shell builtins.
-
-@item enabled
-Names of enabled shell builtins.
-
-@item export
-Names of exported shell variables. May also be specified as @option{-e}.
-
-@item file
-File names. May also be specified as @option{-f}.
-
-@item function
-Names of shell functions.
-
-@item group
-Group names. May also be specified as @option{-g}.
-
-@item helptopic
-Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
-
-@item hostname
-Hostnames, as taken from the file specified by the
-@env{HOSTFILE} shell variable (@pxref{Bash Variables}).
-
-@item job
-Job names, if job control is active. May also be specified as @option{-j}.
-
-@item keyword
-Shell reserved words. May also be specified as @option{-k}.
-
-@item running
-Names of running jobs, if job control is active.
-
-@item service
-Service names. May also be specified as @option{-s}.
-
-@item setopt
-Valid arguments for the @option{-o} option to the @code{set} builtin
-(@pxref{The Set Builtin}).
-
-@item shopt
-Shell option names as accepted by the @code{shopt} builtin
-(@pxref{Bash Builtins}).
-
-@item signal
-Signal names.
-
-@item stopped
-Names of stopped jobs, if job control is active.
-
-@item user
-User names. May also be specified as @option{-u}.
-
-@item variable
-Names of all shell variables. May also be specified as @option{-v}.
-@end table
-
-@item -C @var{command}
-@var{command} is executed in a subshell environment, and its output is
-used as the possible completions.
-
-@item -F @var{function}
-The shell function @var{function} is executed in the current shell
-environment.
-When it is executed, $1 is the name of the command whose arguments are
-being completed, $2 is the word being completed, and $3 is the word
-preceding the word being completed, as described above
-(@pxref{Programmable Completion}).
-When it finishes, the possible completions are retrieved from the value
-of the @env{COMPREPLY} array variable.
-
-@item -G @var{globpat}
-The filename expansion pattern @var{globpat} is expanded to generate
-the possible completions.
-
-@item -P @var{prefix}
-@var{prefix} is added at the beginning of each possible completion
-after all other options have been applied.
-
-@item -S @var{suffix}
-@var{suffix} is appended to each possible completion
-after all other options have been applied.
-
-@item -W @var{wordlist}
-The @var{wordlist} is split using the characters in the
-@env{IFS} special variable as delimiters, and each resultant word
-is expanded.
-The possible completions are the members of the resultant list which
-match the word being completed.
-
-@item -X @var{filterpat}
-@var{filterpat} is a pattern as used for filename expansion.
-It is applied to the list of possible completions generated by the
-preceding options and arguments, and each completion matching
-@var{filterpat} is removed from the list.
-A leading @samp{!} in @var{filterpat} negates the pattern; in this
-case, any completion not matching @var{filterpat} is removed.
-@end table
-
-The return value is true unless an invalid option is supplied, an option
-other than @option{-p} or @option{-r} is supplied without a @var{name}
-argument, an attempt is made to remove a completion specification for
-a @var{name} for which no specification exists, or
-an error occurs adding a completion specification.
-
-@item compopt
-@btindex compopt
-@example
-@code{compopt} [-o @var{option}] [-DEI] [+o @var{option}] [@var{name}]
-@end example
-Modify completion options for each @var{name} according to the
-@var{option}s, or for the currently-executing completion if no @var{name}s
-are supplied.
-If no @var{option}s are given, display the completion options for each
-@var{name} or the current completion.
-The possible values of @var{option} are those valid for the @code{complete}
-builtin described above.
-The @option{-D} option indicates that other supplied options should
-apply to the ``default'' command completion; that is, completion attempted
-on a command for which no completion has previously been defined.
-The @option{-E} option indicates that other supplied options should
-apply to ``empty'' command completion; that is, completion attempted on a
-blank line.
-The @option{-I} option indicates that other supplied options should
-apply to completion on the inital non-assignment word on the line, or after a
-command delimiter such as @samp{;} or @samp{|}, which is usually command
-name completion.
-
-If multiple options are supplied, the @option{-D} option takes precedence
-over @option{-E}, and both take precedence over @option{-I}
-
-The return value is true unless an invalid option is supplied, an attempt
-is made to modify the options for a @var{name} for which no completion
-specification exists, or an output error occurs.
-
-@end table
-
-@node A Programmable Completion Example
-@section A Programmable Completion Example
-
-The most common way to obtain additional completion functionality beyond
-the default actions @code{complete} and @code{compgen} provide is to use
-a shell function and bind it to a particular command using @code{complete -F}.
-
-The following function provides completions for the @code{cd} builtin.
-It is a reasonably good example of what shell functions must do when
-used for completion. This function uses the word passed as @code{$2}
-to determine the directory name to complete. You can also use the
-@code{COMP_WORDS} array variable; the current word is indexed by the
-@code{COMP_CWORD} variable.
-
-The function relies on the @code{complete} and @code{compgen} builtins
-to do much of the work, adding only the things that the Bash @code{cd}
-does beyond accepting basic directory names:
-tilde expansion (@pxref{Tilde Expansion}),
-searching directories in @var{$CDPATH}, which is described above
-(@pxref{Bourne Shell Builtins}),
-and basic support for the @code{cdable_vars} shell option
-(@pxref{The Shopt Builtin}).
-@code{_comp_cd} modifies the value of @var{IFS} so that it contains only
-a newline to accommodate file names containing spaces and tabs --
-@code{compgen} prints the possible completions it generates one per line.
-
-Possible completions go into the @var{COMPREPLY} array variable, one
-completion per array element. The programmable completion system retrieves
-the completions from there when the function returns.
-
-@example
-# A completion function for the cd builtin
-# based on the cd completion function from the bash_completion package
-_comp_cd()
-@{
- local IFS=$' \t\n' # normalize IFS
- local cur _skipdot _cdpath
- local i j k
-
- # Tilde expansion, which also expands tilde to full pathname
- case "$2" in
- \~*) eval cur="$2" ;;
- *) cur=$2 ;;
- esac
-
- # no cdpath or absolute pathname -- straight directory completion
- if [[ -z "$@{CDPATH:-@}" ]] || [[ "$cur" == @@(./*|../*|/*) ]]; then
- # compgen prints paths one per line; could also use while loop
- IFS=$'\n'
- COMPREPLY=( $(compgen -d -- "$cur") )
- IFS=$' \t\n'
- # CDPATH+directories in the current directory if not in CDPATH
- else
- IFS=$'\n'
- _skipdot=false
- # preprocess CDPATH to convert null directory names to .
- _cdpath=$@{CDPATH/#:/.:@}
- _cdpath=$@{_cdpath//::/:.:@}
- _cdpath=$@{_cdpath/%:/:.@}
- for i in $@{_cdpath//:/$'\n'@}; do
- if [[ $i -ef . ]]; then _skipdot=true; fi
- k="$@{#COMPREPLY[@@]@}"
- for j in $( compgen -d -- "$i/$cur" ); do
- COMPREPLY[k++]=$@{j#$i/@} # cut off directory
- done
- done
- $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
- IFS=$' \t\n'
- fi
-
- # variable names if appropriate shell option set and no completions
- if shopt -q cdable_vars && [[ $@{#COMPREPLY[@@]@} -eq 0 ]]; then
- COMPREPLY=( $(compgen -v -- "$cur") )
- fi
-
- return 0
-@}
-@end example
-
-We install the completion function using the @option{-F} option to
-@code{complete}:
-
-@example
-# Tell readline to quote appropriate and append slashes to directories;
-# use the bash default completion for other arguments
-complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
-@end example
-
-@noindent
-Since we'd like Bash and Readline to take care of some
-of the other details for us, we use several other options to tell Bash
-and Readline what to do. The @option{-o filenames} option tells Readline
-that the possible completions should be treated as filenames, and quoted
-appropriately. That option will also cause Readline to append a slash to
-filenames it can determine are directories (which is why we might want to
-extend @code{_comp_cd} to append a slash if we're using directories found
-via @var{CDPATH}: Readline can't tell those completions are directories).
-The @option{-o nospace} option tells Readline to not append a space
-character to the directory name, in case we want to append to it.
-The @option{-o bashdefault} option brings in the rest of the "Bash default"
-completions -- possible completion that Bash adds to the default Readline
-set. These include things like command name completion, variable completion
-for words beginning with @samp{@{}, completions containing pathname
-expansion patterns (@pxref{Filename Expansion}), and so on.
-
-Once installed using @code{complete}, @code{_comp_cd} will be called every
-time we attempt word completion for a @code{cd} command.
-
-Many more examples -- an extensive collection of completions for most of
-the common GNU, Unix, and Linux commands -- are available as part of the
-bash_completion project. This is installed by default on many GNU/Linux
-distributions. Originally written by Ian Macdonald, the project now lives
-at @url{http://bash-completion.alioth.debian.org/}. There are ports for
-other systems such as Solaris and Mac OS X.
-
-An older version of the bash_completion package is distributed with bash
-in the @file{examples/complete} subdirectory.
-
-@end ifset
diff --git a/readline/doc/rluserman.texi b/readline/doc/rluserman.texi
deleted file mode 100644
index b575438..0000000
--- a/readline/doc/rluserman.texi
+++ /dev/null
@@ -1,70 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename rluserman.info
-@settitle GNU Readline Library
-@include version.texi
-
-@comment %**end of header (This is for running Texinfo on a region.)
-
-@copying
-This manual describes the end user interface of the GNU Readline Library
-(version @value{VERSION}, @value{UPDATED}), a library which aids in the
-consistency of user interface across discrete programs which provide
-a command line interface.
-
-Copyright @copyright{} 1988--2016 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-
-@end quotation
-@end copying
-
-@dircategory Libraries
-@direntry
-* RLuserman: (rluserman). The GNU readline library User's Manual.
-@end direntry
-
-@titlepage
-@title GNU Readline Library User Interface
-@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
-@subtitle @value{UPDATED-MONTH}
-@author Chet Ramey, Case Western Reserve University
-@author Brian Fox, Free Software Foundation
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top GNU Readline Library
-
-This document describes the end user interface of the GNU Readline Library,
-a utility which aids in the consistency of user interface across discrete
-programs which provide a command line interface.
-The Readline home page is @url{http://www.gnu.org/software/readline/}.
-
-@menu
-* Command Line Editing:: GNU Readline User's Manual.
-* GNU Free Documentation License:: License for copying this manual.
-@end menu
-@end ifnottex
-
-@include rluser.texi
-
-@node GNU Free Documentation License
-@appendix GNU Free Documentation License
-
-@include fdl.texi
-
-@bye
diff --git a/readline/doc/texi2dvi b/readline/doc/texi2dvi
deleted file mode 100755
index 173e8ab..0000000
--- a/readline/doc/texi2dvi
+++ /dev/null
@@ -1,1944 +0,0 @@
-#! /bin/sh
-# texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources.
-# $Id: texi2dvi 5704 2014-07-07 17:45:16Z karl $
-#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
-# Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License,
-# or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Originally written by Noah Friedman.
-#
-# Please send bug reports, etc. to bug-texinfo@gnu.org.
-# If possible, please send a copy of the output of the script called with
-# the `--debug' option when making a bug report.
-
-test -f /bin/ksh && test -z "$RUNNING_KSH" \
- && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
- && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
-unset RUNNING_KSH
-
-# No failure shall remain unpunished.
-set -e
-
-# In case the default sed doesn't suffice.
-: ${SED=sed}
-
-# This string is expanded automatically when this file is checked out.
-rcs_revision='$Revision: 5704 $'
-rcs_version=`set - $rcs_revision; echo $2`
-program=`echo $0 | $SED -e 's!.*/!!'`
-
-build_mode=${TEXI2DVI_BUILD_MODE:-local}
-build_dir=${TEXI2DVI_BUILD_DIRECTORY:-.}
-
-# Initialize variables for option overriding and otherwise.
-# Don't use `unset' since old bourne shells don't have this command.
-# Instead, assign them an empty value.
-action=compile
-batch=false # interact normally
-catcode_special=maybe
-debug=false
-escape="\\"
-expand=false # true for expansion via makeinfo
-includes=
-line_error=true # pass --file-line-error to TeX
-max_iters=7 # when to quit
-oname= # --output
-out_lang=dvi
-quiet=false # let the tools' message be displayed
-set_language=
-src_specials=
-shell_escape=
-latex2html=hevea # or set to tex4ht
-textra= # Extra TeX commands to insert in the input file.
-txiprereq=19990129 # minimum texinfo.tex version with macro expansion
-verb=false # true for verbose mode
-translate_file= # name of charset translation file
-
-orig_pwd=`pwd`
-
-# We have to initialize IFS to space tab newline since we save and
-# restore IFS and apparently POSIX allows stupid/broken behavior with
-# empty-but-set IFS.
-# http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html
-# We need space, tab and new line, in precisely that order. And don't leave
-# trailing blanks.
-space=' '
-tab=' '
-newline='
-'
-IFS="$space$tab$newline"
-
-# In case someone pedantic insists on using grep -E.
-: ${EGREP=egrep}
-
-# Systems which define $COMSPEC or $ComSpec use semicolons to separate
-# directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC
-# might be inherited, but : is used.
-if test -n "$COMSPEC$ComSpec" \
- && uname | $EGREP -iv 'cygwin|mingw|djgpp' >/dev/null; then
- path_sep=";"
-else
- path_sep=":"
-fi
-
-# Pacify verbose cds.
-CDPATH=${ZSH_VERSION+.}$path_sep
-
-# If $TEX is set to a directory, don't use it.
-test -n "$TEX" && test -d "$TEX" && unset TEX
-
-#
-## --------------------- ##
-## Auxiliary functions. ##
-## --------------------- ##
-
-# In case `local' is not supported by the shell, provide a function
-# that simulates it by simply performing the assignments. This means
-# that we must not expect `local' to work, i.e., we must not (i) rely
-# on it during recursion, and (ii) have two local declarations of the
-# same variable. (ii) is easy to check statically, and our test suite
-# does make sure there is never twice a static local declaration of a
-# variable. (i) cannot be checked easily, so just be careful.
-#
-# Note that since we might use a function simulating `local', we can
-# no longer rely on the fact that no IFS-splitting is performed. So,
-# while
-#
-# foo=$bar
-#
-# is fine (no IFS-splitting), never write
-#
-# local foo=$bar
-#
-# but rather
-#
-# local foo="$bar"
-(
- foo=bar
- test_local () {
- local foo=foo
- }
- test_local >/dev/null 2>&1
- test $foo = bar
-) || eval '
-local () {
- case $1 in
- *=*) eval "$1";;
- esac
-}
-'
-
-
-# cd_orig
-# -------
-# Return to the original directory.
-cd_orig ()
-{
- # In case $orig_pwd is on a different drive (for DOS).
- cd /
-
- # Return to the original directory so that
- # - the next file is processed in correct conditions
- # - the temporary file can be removed
- cd "$orig_pwd" || exit 1
-}
-
-# func_dirname FILE
-# -----------------
-# Return the directory part of FILE.
-func_dirname ()
-{
- dirname "$1" 2>/dev/null \
- || { echo "$1" | $SED 's!/[^/]*$!!;s!^$!.!'; }
-}
-
-
-# noexit FILE
-# -----------
-# Return FILE with one extension remove. foo.bar.baz -> foo.bar.
-noext ()
-{
- echo "$1" | $SED -e 's/\.[^/.][^/.]*$//'
-}
-
-
-# absolute NAME -> ABS-NAME
-# -------------------------
-# Return an absolute path to NAME.
-absolute ()
-{
- case $1 in
- [\\/]* | ?:[\\/]*)
- # Absolute paths don't need to be expanded.
- echo "$1"
- ;;
- *) local slashes
- slashes=`echo "$1" | $SED -n 's,.*[^/]\(/*\)$,\1,p'`
- local rel
- rel=$orig_pwd/`func_dirname "$1"`
- if test -d "$rel"; then
- (cd "$rel" 2>/dev/null \
- && local n
- n=`pwd`/`basename "$1"`"$slashes"
- echo "$n")
- else
- error 1 "not a directory: $rel"
- fi
- ;;
- esac
-}
-
-
-# ensure_dir DIR1 DIR2...
-# -----------------------
-# Make sure the directories exist.
-ensure_dir ()
-{
- for dir
- do
- # Beware that in parallel builds we may have several concurrent
- # attempts to create the directory. So fail only if "mkdir"
- # failed *and* the directory still does not exist.
- test -d "$dir" \
- || mkdir "$dir" \
- || test -d "$dir" \
- || error 1 "cannot create directory: $dir"
- done
-}
-
-
-# error EXIT_STATUS LINE1 LINE2...
-# --------------------------------
-# Report an error and exit with failure if EXIT_STATUS is non-null.
-error ()
-{
- local s="$1"
- shift
- report "$@"
- if test "$s" != 0; then
- exit $s
- fi
-}
-
-
-# findprog PROG
-# -------------
-# Return true if PROG is somewhere in PATH, else false.
-findprog ()
-{
- local saveIFS="$IFS"
- IFS=$path_sep # break path components at the path separator
- for dir in $PATH; do
- IFS=$saveIFS
- # The basic test for an executable is `test -f $f && test -x $f'.
- # (`test -x' is not enough, because it can also be true for directories.)
- # We have to try this both for $1 and $1.exe.
- #
- # Note: On Cygwin and DJGPP, `test -x' also looks for .exe. On Cygwin,
- # also `test -f' has this enhancement, but not on DJGPP. (Both are
- # design decisions, so there is little chance to make them consistent.)
- # Thusly, it seems to be difficult to make use of these enhancements.
- #
- if { test -f "$dir/$1" && test -x "$dir/$1"; } \
- || { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
- return 0
- fi
- done
- return 1
-}
-
-# report LINE1 LINE2...
-# ---------------------
-# Report some information on stderr.
-report ()
-{
- for i in "$@"
- do
- echo >&2 "$0: $i"
- done
-}
-
-
-# run COMMAND-LINE
-# ----------------
-# Run the COMMAND-LINE verbosely, and catching errors as failures.
-run ()
-{
- verbose "Running $@"
- "$@" 2>&5 1>&2 \
- || error 1 "$1 failed"
-}
-
-
-# usage
-# -----
-# Display usage and exit successfully.
-usage ()
-{
- # We used to simply have `echo "$usage"', but coping with the
- # changing behavior of `echo' is much harder than simply using a
- # here-doc.
- #
- # echo '\noto' echo '\\noto' echo -e '\\noto'
- # bash 3.1 \noto \\noto \noto
- # bash 3.2 %oto \noto -e \noto
- #
- # where % denotes the eol character.
- cat <<EOF
-Usage: $program [OPTION]... FILE...
- or: texi2pdf [OPTION]... FILE...
- or: pdftexi2dvi [OPTION]... FILE...
-
-Run each Texinfo or (La)TeX FILE through TeX in turn until all
-cross-references are resolved, building all indices. The directory
-containing each FILE is searched for included files. The suffix of FILE
-is used to determine its language ((La)TeX or Texinfo). To process
-(e)plain TeX files, set the environment variable LATEX=tex.
-
-In order to make texi2dvi a drop-in replacement of TeX/LaTeX in AUC-TeX,
-the FILE may also be composed of the following simple TeX commands.
- \`\\input{FILE}' the actual file to compile
- \`\\nonstopmode' same as --batch
-
-When invoked as \`texi2pdf' or \`pdftexi2dvi', or given the option --pdf
-or --dvipdf, generate PDF output. Otherwise, generate DVI.
-
-General options:
- -b, --batch no interaction
- -D, --debug turn on shell debugging (set -x)
- -h, --help display this help and exit successfully
- -o, --output=OFILE leave output in OFILE; only one input FILE is allowed
- -q, --quiet no output unless errors (implies --batch)
- -s, --silent same as --quiet
- -v, --version display version information and exit successfully
- -V, --verbose report on what is done
-
-Output format:
- --dvi output a DVI file [default]
- --dvipdf output a PDF file via DVI (using a dvi-to-pdf program)
- --html output an HTML file from LaTeX, using HeVeA
- --info output an Info file from LaTeX, using HeVeA
- -p, --pdf use pdftex or pdflatex for processing
- --ps output a PostScript file via DVI (using dvips)
- --text output a plain text file from LaTeX, using HeVeA
-
-TeX tuning:
- -@ use @input instead of \input for preloaded Texinfo
- -e, -E, --expand force macro expansion using makeinfo
- -I DIR search DIR for Texinfo files
- -l, --language=LANG specify LANG for FILE, either latex or texinfo
- --no-line-error do not pass --file-line-error to TeX
- --shell-escape pass --shell-escape to TeX
- --src-specials pass --src-specials to TeX
- -t, --command=CMD insert CMD in copy of input file
- or --texinfo=CMD multiple values accumulate
- --translate-file=FILE use given charset translation file for TeX
-
-Build modes:
- --build=MODE specify the treatment of auxiliary files [$build_mode]
- --tidy same as --build=tidy
- -c, --clean same as --build=clean
- --build-dir=DIR specify where the tidy compilation is performed;
- implies --tidy;
- defaults to TEXI2DVI_BUILD_DIRECTORY [$build_dir]
- --mostly-clean remove the auxiliary files and directories
- but not the output
- --max-iterations=N don't process files more than N times [$max_iters]
-
-The MODE specifies where the TeX compilation takes place, and, as a
-consequence, how auxiliary files are treated. The build mode
-can also be set using the environment variable TEXI2DVI_BUILD_MODE.
-
-Valid MODEs are:
- \`local' compile in the current directory, leaving all the auxiliary
- files around. This is the traditional TeX use.
- \`tidy' compile in a local *.t2d directory, where the auxiliary files
- are left. Output files are copied back to the original file.
- \`clean' same as \`tidy', but remove the auxiliary directory afterwards.
- Every compilation therefore requires the full cycle.
-
-Using the \`tidy' mode brings several advantages:
- - the current directory is not cluttered with plethora of temporary files.
- - clutter can be even further reduced using --build-dir=dir: all the *.t2d
- directories are stored there.
- - clutter can be reduced to zero using, e.g., --build-dir=/tmp/\$USER.t2d
- or --build-dir=\$HOME/.t2d.
- - the output file is updated after every successful TeX run, for
- sake of concurrent visualization of the output. In a \`local' build
- the viewer stops during the whole TeX run.
- - if the compilation fails, the previous state of the output file
- is preserved.
- - PDF and DVI compilation are kept in separate subdirectories
- preventing any possibility of auxiliary file incompatibility.
-
-On the other hand, because \`tidy' compilation takes place in another
-directory, occasionally TeX won't be able to find some files (e.g., when
-using \\graphicspath): in that case, use -I to specify the additional
-directories to consider.
-
-The values of the BIBER, BIBTEX, DVIPDF, DVIPS, HEVEA, LATEX, MAKEINDEX,
-MAKEINFO, PDFLATEX, PDFTEX, SED, T4HT, TEX, TEX4HT, TEXINDEX, and THUMBPDF_CMD
-environment variables are used to run those commands, if they are set.
-
-Regarding --dvipdf, if DVIPDF is not set in the environment, the
-following programs are looked for (in this order): dvipdfmx dvipdfm
-dvipdf dvi2pdf dvitopdf.
-
-Any CMD strings are added after @setfilename for Texinfo input, or in
-the first line for LaTeX input.
-
-Report bugs to bug-texinfo@gnu.org,
-general questions and discussion to help-texinfo@gnu.org.
-GNU Texinfo home page: <http://www.gnu.org/software/texinfo/>
-General help using GNU software: <http://www.gnu.org/gethelp/>
-EOF
- exit 0
-}
-
-
-# verbose WORD1 WORD2
-# -------------------
-# Report some verbose information.
-verbose ()
-{
- if $verb; then
- echo >&2 "$0: $@"
- fi
-}
-
-
-# version
-# -------
-# Display version info and exit successfully.
-version ()
-{
- cat <<EOF
-texi2dvi (GNU Texinfo 5.2) $rcs_version
-
-Copyright (C) 2014 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
-EOF
- exit 0
-}
-
-
-## ---------------- ##
-## Handling lists. ##
-## ---------------- ##
-
-
-# list_append LIST-NAME ELEM
-# --------------------------
-# Set LIST-NAME to its former contents, with ELEM appended.
-list_append ()
-{
- local la_l="$1"
- shift
- eval set X \$$la_l "$@"
- shift
- eval $la_l=\""$@"\"
-}
-
-
-# list_concat_dirs LIST-NAME DIR-LIST
-# -----------------------------------
-# Append to LIST-NAME all the components (included empty) from
-# the $path_sep separated list DIR-LIST. Make the paths absolute.
-list_concat_dirs ()
-{
- local lcd_list="$1"
- # Empty path components are meaningful to tex. We rewrite them as
- # `EMPTY' so they don't get lost when we split on $path_sep.
- # Hopefully no one will have an actual directory named EMPTY.
- local replace_EMPTY="-e 's/^$path_sep/EMPTY$path_sep/g' \
- -e 's/$path_sep\$/${path_sep}EMPTY/g' \
- -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
- save_IFS=$IFS
- IFS=$path_sep
- set x `echo "$2" | eval $SED $replace_EMPTY`; shift
- IFS=$save_IFS
- local dir
- for dir
- do
- case $dir in
- EMPTY)
- list_append $lcd_list ""
- ;;
- *)
- if test -d $dir; then
- dir=`absolute "$dir"`
- list_append $lcd_list "$dir"
- fi
- ;;
- esac
- done
-}
-
-
-# list_prefix LIST-NAME SEP -> STRING
-# -----------------------------------
-# Return a string that is composed of the LIST-NAME with each item
-# preceded by SEP.
-list_prefix ()
-{
- local lp_p="$2"
- eval set X \$$1
- shift
- local lp_res
- for i
- do
- lp_res="$lp_res \"$lp_p\" \"$i\""
- done
- echo "$lp_res"
-}
-
-# list_infix LIST-NAME SEP -> STRING
-# ----------------------------------
-# Same as list_prefix, but a separator.
-list_infix ()
-{
- eval set X \$$1
- shift
- local la_IFS="$IFS"
- IFS=$path_sep
- echo "$*"
- IFS=$la_IFS
-}
-
-# list_dir_to_abs LIST-NAME
-# -------------------------
-# Convert the list to using only absolute dir names.
-# Currently unused, but should replace absolute_filenames some day.
-list_dir_to_abs ()
-{
- local ld_l="$1"
- eval set X \$$ld_l
- shift
- local ld_res
- for dir
- do
- dir=`absolute "$dir"`
- test -d "$dir" || continue
- ld_res="$ld_res \"$dir\""
- done
- set X $ld_res; shift
- eval $ld_l=\"$@\"
-}
-
-
-## ------------------------------ ##
-## Language auxiliary functions. ##
-## ------------------------------ ##
-
-
-# out_lang_set LANG
-# -----------------
-out_lang_set ()
-{
- case $1 in
- dvi|dvipdf|html|info|pdf|ps|text) out_lang=$1;;
- *) error 1 "invalid output format: $1";;
- esac
-}
-
-
-# out_lang_tex
-# ------------
-# Return the tex output language (DVI or PDF) for $OUT_LANG.
-out_lang_tex ()
-{
- case $out_lang in
- dvi | ps | dvipdf ) echo dvi;;
- pdf ) echo $out_lang;;
- html | info | text ) echo $out_lang;;
- *) error 1 "invalid out_lang: $1";;
- esac
-}
-
-
-# out_lang_ext
-# ------------
-# Return the extension for $OUT_LANG.
-out_lang_ext ()
-{
- case $out_lang in
- dvipdf ) echo pdf;;
- dvi | html | info | pdf | ps | text ) echo $out_lang;;
- *) error 1 "invalid out_lang: $1";;
- esac
-}
-
-
-## ------------------------- ##
-## TeX auxiliary functions. ##
-## ------------------------- ##
-
-# Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
-# Likewise for bibtex and makeindex.
-tex_envvars="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \
-TEXINPUTS TFMFONTS"
-for var in $tex_envvars; do
- eval ${var}_orig=\$$var
- export $var
-done
-
-
-# absolute_filenames TEX-PATH -> TEX-PATH
-# ---------------------------------------
-# Convert relative paths to absolute paths, so we can run in another
-# directory (e.g., in tidy build mode, or during the macro-support
-# detection). Prepend ".".
-absolute_filenames ()
-{
- # Empty path components are meaningful to tex. We rewrite them as
- # `EMPTY' so they don't get lost when we split on $path_sep.
- # Hopefully no one will have an actual directory named EMPTY.
- local replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \
- -e 's/$path_sep\$/${path_sep}EMPTY/g' \
- -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
- local res
- res=`echo "$1" | eval $SED $replace_empty`
- save_IFS=$IFS
- IFS=$path_sep
- set x $res; shift
- res=.
- for dir
- do
- case $dir in
- EMPTY)
- res=$res$path_sep
- ;;
- *)
- if test -d "$dir"; then
- res=$res$path_sep`absolute "$dir"`
- else
- # Even if $dir is not a directory, preserve it in the path.
- # It might contain metacharacters that TeX will expand in
- # turn, e.g., /some/path/{a,b,c}. This will not get the
- # implicit absolutification of the path, but we can't help that.
- res=$res$path_sep$dir
- fi
- ;;
- esac
- done
- echo "$res"
-}
-
-
-# output_base_name FILE
-# ---------------------
-# The name of FILE, possibly renamed to satisfy --output.
-# FILE is local, there is no directory part.
-output_base_name ()
-{
- case $oname in
- '') echo "$1";;
- *) local out_noext
- out_noext=`noext "$oname"`
- local file_ext
- file_ext=`echo "$1" | $SED 's/^.*\.//'`
- echo "$out_noext.$file_ext"
- ;;
- esac
-}
-
-
-# destdir
-# -------
-# Return the name of the directory where the output is expected.
-destdir ()
-{
- case $oname in
- '') echo "$orig_pwd";;
- *) dirname "$oname";;
- esac
-}
-
-
-# move_to_dest FILE...
-# --------------------
-# Move FILE to the place where the user expects it. Truly move it, that
-# is, it must not remain in its build location unless that is also the
-# output location. (Otherwise it might appear as an extra file in make
-# distcheck.)
-#
-# FILE can be the principal output (in which case -o directly applies), or
-# an auxiliary file with the same base name.
-move_to_dest ()
-{
-# echo "move_to_dest $*, tidy=$tidy, oname=$oname"
-
- # If we built in place and have no output name, there is nothing to
- # do, so just return.
- case $tidy:$oname in
- false:) return;;
- esac
-
- local destfile
- local destdir
- local destbase
- local sourcedir
- local sourcebase
-
- for file
- do
- test -f "$file" \
- || error 1 "no such file or directory: $file"
- case $tidy:$oname in
- true:) destdir=$orig_pwd
- destfile=$destdir/$file;;
- true:*) destfile=`output_base_name "$file"`
- destdir=`dirname "$destfile"`;;
- false:*) destfile=$oname
- destdir=`dirname "$destfile"`;;
- esac
-
- # We want to compare the source location and the output location,
- # and if they are different, do the move. But if they are the
- # same, we must preserve the source. Since we can't assume
- # stat(1) or test -ef is available, resort to comparing the
- # directory names, canonicalized with pwd. We can't use cmp -s
- # since the output file might not actually change from run to run;
- # e.g., TeX DVI output is timestamped to only the nearest minute.
- destdir=`cd "$destdir" && pwd`
- destbase=`basename "$destfile"`
-
- sourcedir=`dirname "$file"`
- sourcedir=`cd "$sourcedir" && pwd`
- sourcebase=`basename "$file"`
-
- if test "$sourcedir/$sourcebase" != "$destdir/$destbase"; then
- verbose "Moving $file to $destfile"
- rm -f "$destfile"
- mv "$file" "$destfile"
- fi
- done
-}
-
-
-## --------------------- ##
-## Managing xref files. ##
-## --------------------- ##
-
-# aux_file_p FILE
-# ---------------
-# Return with success if FILE is an aux file.
-aux_file_p ()
-{
- test -f "$1" || return 1
- case $1 in
- *.aux) return 0;;
- *) return 1;;
- esac
-}
-
-# bibaux_file_p FILE
-# ------------------
-# Return with success if FILE is an aux file containing citation
-# requests.
-bibaux_file_p ()
-{
- test -s "$1" || return 1
- if (grep '^\\bibstyle[{]' "$1" \
- && grep '^\\bibdata[{]' "$1" \
- ## The following line is suspicious: fails when there
- ## are citations in sub aux files. We need to be
- ## smarter in this case.
- ## && grep '^\\citation[{]' "$f"
- ) >&6 2>&1;
- then
- return 0
- fi
- return 1
-}
-
-# index_file_p FILE
-# -----------------
-# Return with success if FILE is an index file.
-index_file_p ()
-{
- test -f "$1" || return 1
- case $in_lang:$latex2html:`out_lang_tex`:`$SED '1q' "$1"` in
- # When working with TeX4HT, *.idx are created by LaTeX. They must
- # be processed to produce *.4ix, *.4dx files. The *.4dx file is
- # passed to makeindex to produce the *.ind file. This sequence is
- # handled by run_index, so we are only interested in the *.idx
- # files, which have each "\indexentry" preceded by a
- # "\beforeentry".
- latex:tex4ht:html:"\\beforeentry {"*) return 0;;
-
- # When index.sty is used, there is a space before the brace.
- latex:*:*:"\\indexentry{"*|latex:*:*:"\\indexentry {"*) return 0;;
-
- texinfo:*:*:"\\entry{"*) return 0;;
-
- *) return 1;;
- esac
-}
-
-# xref_file_p FILE
-# ----------------
-# Return with success if FILE is an xref file (indexes, tables and lists).
-xref_file_p ()
-{
- test -f "$1" || return 1
- # If the file is not suitable to be an index or xref file, don't
- # process it. It's suitable if the first character is a
- # backslash or right quote or at, as long as the first line isn't
- # \input texinfo.
- case `$SED '1q' "$1"` in
- "\\input texinfo"*) return 1;;
- [\\''@]*) return 0;;
- *) return 1;;
- esac
-}
-
-
-# generated_files_get FILENAME-NOEXT [PREDICATE-FILTER]
-# -----------------------------------------------------
-# Return the list of files generated by the TeX compilation of FILENAME-NOEXT.
-generated_files_get ()
-{
- local filter=true
- if test -n "$2"; then
- filter=$2
- fi
-
- # Gather the files created by TeX.
- (
- if test -f "$1.log"; then
- $SED -n -e "s,^\\\\openout.* = \`\\(.*\\)'\\.,\\1,p" "$1.log"
- fi
- echo "$1.log"
- ) |
- # Depending on these files, infer outputs from other tools.
- while read file; do
- echo $file
- case $in_lang in
- texinfo)
- # texindex: texinfo.cp -> texinfo.cps
- if index_file_p $file; then
- echo ${file}s
- fi
- ;;
- latex)
- if aux_file_p $file; then
- # bibtex: *.aux -> *.bbl and *.blg.
- echo $file | $SED 's/^\(.*\)\.aux$/\1.bbl/'
- echo $file | $SED 's/^\(.*\)\.aux$/\1.blg/'
- # -recorder: .fls
- echo $file | $SED 's/^\(.*\)\.aux$/\1.fls/'
- fi
- ;;
- esac
- done |
- # Filter existing files matching the criterion.
- #
- # With an input file name containing a space, this produces a
- # "command not found" message (and filtering is ineffective).
- # The situation with a newline is presumably even worse.
- while read file; do
- if $filter "$file"; then
- echo $file
- fi
- done |
- sort |
- # Some files are opened several times, e.g., listings.sty's *.vrb.
- uniq
-}
-
-
-# xref_files_save
-# ---------------
-# Save the xref files.
-xref_files_save ()
-{
- # Save copies of auxiliary files for later comparison.
- xref_files_orig=`generated_files_get "$in_noext" xref_file_p`
- if test -n "$xref_files_orig"; then
- verbose "Backing up xref files: $xref_files_orig"
- # The following line improves `cp $xref_files_orig "$work_bak"'
- # by preserving the directory parts. Think of
- # cp chap1/main.aux chap2/main.aux $work_bak.
- #
- # Users may have, e.g., --keep-old-files. Don't let this interfere.
- # (Don't use unset for the sake of ancient shells.)
- TAR_OPTIONS=; export TAR_OPTIONS
- tar cf - $xref_files_orig | (cd "$work_bak" && tar xf -)
- fi
-}
-
-
-# xref_files_changed
-# ------------------
-# Whether the xref files were changed since the previous run.
-xref_files_changed ()
-{
- # LaTeX (and the package changebar) report in the LOG file if it
- # should be rerun. This is needed for files included from
- # subdirs, since texi2dvi does not try to compare xref files in
- # subdirs. Performing xref files test is still good since LaTeX
- # does not report changes in xref files.
- if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then
- return 0
- fi
- # biblatex report of whether rerunning is needed.
- if grep "biblatex.*(re)run" "$in_noext.log" >&6 2>&1; then
- return 0
- fi
-
- # If old and new lists don't have the same file list,
- # then something has definitely changed.
- xref_files_new=`generated_files_get "$in_noext" xref_file_p`
- verbose "Original xref files = $xref_files_orig"
- verbose "New xref files = $xref_files_new"
- if test "x$xref_files_orig" != "x$xref_files_new"; then
- return 0
- fi
-
- # Compare each file until we find a difference.
- for this_file in $xref_files_new; do
- verbose "Comparing xref file `echo $this_file | $SED 's|\./||g'` ..."
- # cmp -s returns nonzero exit status if files differ.
- if cmp -s "$this_file" "$work_bak/$this_file"; then :; else
- verbose "xref file `echo $this_file | $SED 's|\./||g'` differed ..."
- if $debug; then
- diff -u "$work_bak/$this_file" "$this_file"
- fi
- return 0
- fi
- done
-
- # No change.
- return 1
-}
-
-
-
-## ----------------------- ##
-## Running the TeX suite. ##
-## ----------------------- ##
-
-
-
-# run_tex ()
-# ----------
-# Run TeX as "$tex $in_input", taking care of errors and logs.
-run_tex ()
-{
- case $in_lang:$latex2html:`out_lang_tex` in
- latex:*:dvi|latex:tex4ht:html)
- tex=${LATEX:-latex};;
- latex:*:pdf)
- tex=${PDFLATEX:-pdflatex};;
- texinfo:*:dvi)
- # MetaPost also uses the TEX environment variable. If the user
- # has set TEX=latex for that reason, don't bomb out.
- case $TEX in
- *latex) tex=tex;; # don't bother trying to find etex
- *) tex=$TEX
- esac;;
- texinfo:*:pdf) tex=$PDFTEX;;
-
- *) error 1 "$out_lang not supported for $in_lang";;
- esac
-
- # do the special catcode trick for ~ in filenames only for Texinfo,
- # not LaTeX.
- if test x"$in_lang" = xtexinfo && test $catcode_special = maybe; then
- catcode_special=true
- else
- catcode_special=false
- fi
-
- # Beware of aux files in subdirectories that require the
- # subdirectory to exist.
- case $in_lang:$tidy in
- latex:true)
- $SED -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" |
- sort -u |
- while read d
- do
- ensure_dir "$work_build/$d"
- done
- ;;
- esac
-
- # Note that this will be used via an eval: quote properly.
- local cmd="$tex"
-
- # If possible, make TeX report error locations in GNU format.
- if $line_error; then
- if test "${tex_help:+set}" != set; then
- # Go to a temporary directory to try --help, since old versions that
- # don't accept --help will generate a texput.log.
- tex_help_dir=$t2ddir/tex_help
- ensure_dir "$tex_help_dir"
- tex_help=`cd "$tex_help_dir" >&6 && $tex --help </dev/null 2>&1 || true`
- fi
- # The mk program and perhaps others want to parse TeX's
- # original error messages.
- case $tex_help in
- *file-line-error*) cmd="$cmd --file-line-error";;
- esac
- fi
-
- # Tell TeX about TCX file, if specified.
- test -n "$translate_file" && cmd="$cmd --translate-file=$translate_file"
-
- # Tell TeX to make source specials (for backtracking from output to
- # source, given a sufficiently smart editor), if specified.
- test -n "$src_specials" && cmd="$cmd $src_specials"
-
- # Tell TeX to allow running external executables
- test -n "$shell_escape" && cmd="$cmd $shell_escape"
-
- # Tell TeX to be batch if requested.
- if $batch; then
- # \batchmode does not show terminal output at all, so we don't
- # want that. And even in batch mode, TeX insists on having input
- # from the user. Close its stdin to make it impossible.
- cmd="$cmd </dev/null '${escape}nonstopmode'"
- fi
-
- # we'd like to handle arbitrary input file names, especially
- # foo~bar/a~b.tex, since Debian likes ~ characters.
- if $catcode_special; then
- # $normaltilde is just to reduce line length in this source file.
- # The idea is to define \normaltilde as a catcode other ~ character,
- # then make the active ~ be equivalent to that, instead of the plain
- # TeX tie. Then when the active ~ appears in the filename, it will
- # be expanded to itself, as far as \input will see. (This is the
- # same thing that texinfo.tex does in general, BTW.)
- normaltilde="${escape}catcode126=12 ${escape}def${escape}normaltilde{~}"
- cmd="$cmd '$normaltilde${escape}catcode126=13 ${escape}let~\normaltilde '"
- fi
- # Other special (non-active) characters could be supported by
- # resetting their catcodes to other on the command line and changing
- # texinfo.tex to initialize everything to plain catcodes. Maybe someday.
-
- # append the \input command.
- cmd="$cmd '${escape}input'"
-
- # TeX's \input does not (easily or reliably) support whitespace
- # characters or other special characters in file names. Our intensive
- # use of absolute file names makes this worse: the enclosing directory
- # names may include white spaces. Improve the situation using a
- # symbolic link to the filename in the current directory, in tidy mode
- # only. Do not alter in_input.
- #
- # The filename is almost always tokenized using plain TeX conventions
- # (the exception would be if the user made a texinfo.fmt file). Not
- # all the plain TeX special characters cause trouble, but there's no
- # harm in making the link.
- #
- case $tidy:`func_dirname "$in_input"` in
- true:*["$space$tab$newline\"#\$%\\^_{}~"]*)
- _run_tex_file_name=`basename "$in_input"`
- if test ! -f "$_run_tex_file_name"; then
- # It might not be a file, clear it.
- run rm -f "$_run_tex_file_name"
- run ln -s "$in_input"
- fi
- cmd="$cmd '$_run_tex_file_name'"
- ;;
-
- *)
- cmd="$cmd '$in_input'"
- ;;
- esac
-
- verbose "$0: Running $cmd ..."
- if eval "$cmd" >&5; then
- case $out_lang in
- dvi | pdf ) move_to_dest "$in_noext.$out_lang";;
- esac
- else
- error 1 "$tex exited with bad status, quitting."
- fi
-}
-
-# run_bibtex ()
-# -------------
-# Run bibtex on (or biber) current file.
-# - If its input (AUX) exists.
-# - If some citations are missing (LOG contains `Citation').
-# or the LOG complains of a missing .bbl
-#
-# Don't try to be too smart:
-# 1. Running bibtex only if the bbl file exists and is older than
-# the LaTeX file is wrong, since the document might include files
-# that have changed.
-#
-# 3. Because there can be several AUX (if there are \include's),
-# but a single LOG, looking for missing citations in LOG is
-# easier, though we take the risk of matching false messages.
-run_bibtex ()
-{
- case $in_lang in
- latex) bibtex=${BIBTEX:-bibtex};;
- texinfo) return;;
- esac
-
- # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex.
- # The no .aux && \bibdata test is also for btxmac, in case it was the
- # first run of a bibtex-using document. Otherwise, it's possible that
- # bibtex would never be run.
- if test -r "$in_noext.aux" \
- && test -r "$in_noext.log" \
- && ( (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \
- || grep '.*Undefined citation' "$in_noext.log" \
- || grep 'No file .*\.bbl\.' "$in_noext.log") \
- || (grep 'No \.aux file' "$in_noext.log" \
- && grep '^\\bibdata' "$in_noext.aux") ) \
- >&6 2>&1; \
- then
- bibtex_aux=`generated_files_get "$in_noext" bibaux_file_p`
- for f in $bibtex_aux; do
- run $bibtex "$f"
- done
- fi
-
- # biber(+biblatex) check.
- if test -r "$in_noext.bcf" \
- && grep '</bcf:controlfile>' "$in_noext.bcf" >/dev/null; then
- run ${BIBER:-biber} "$in_noext"
- fi
-}
-
-# run_index ()
-# ------------
-# Run texindex (or makeindex or texindy) on current index files. If
-# they already exist, and after running TeX a first time the index
-# files don't change, then there's no reason to run TeX again. But we
-# won't know that if the index files are out of date or nonexistent.
-run_index ()
-{
- local index_files
- index_files=`generated_files_get $in_noext index_file_p`
- test -n "$index_files" \
- || return 0
-
- : ${MAKEINDEX:=makeindex}
- : ${TEXINDEX:=texindex}
- : ${TEXINDY:=texindy}
-
- local index_file
- local index_noext
- case $in_lang:$latex2html:`out_lang_tex` in
- latex:tex4ht:html)
- for index_file in $index_files
- do
- index_noext=`noext "$index_file"`
- run tex \
- '\def\filename{{'"$index_noext"'}{idx}{4dx}{ind}}
- \input idxmake.4ht'
- run $MAKEINDEX -o $index_noext.ind $index_noext.4dx
- done
- ;;
-
- latex:*)
- if $TEXINDY --version >&6 2>&1; then
- run $TEXINDY $index_files
- else
- run $MAKEINDEX $index_files
- fi
- ;;
-
- texinfo:*)
- run $TEXINDEX $index_files
- ;;
- esac
-}
-
-
-# run_tex4ht ()
-# -------------
-# Run the last two phases of TeX4HT: tex4ht extracts the HTML from the
-# instrumented DVI file, and t4ht converts the figures and installs
-# the files when given -d.
-#
-# Because knowing exactly which files are created is complex (in
-# addition the names are not simple to compute), which makes it
-# difficult to install the output files in a second step, it is much
-# simpler to install directly the output files.
-run_tex4ht ()
-{
- case $in_lang:$latex2html:`out_lang_tex` in
- latex:tex4ht:html)
- : ${TEX4HT:=tex4ht} ${T4HT:=t4ht}
- run "$TEX4HT" "-f/$in_noext"
- # Do not remove the / after the destdir.
- run "$T4HT" "-d`destdir`/" "-f/$in_noext"
- ;;
- esac
-}
-
-
-# run_thumbpdf ()
-# ---------------
-run_thumbpdf ()
-{
- if test `out_lang_tex` = pdf \
- && test -r "$in_noext.log" \
- && grep 'thumbpdf\.sty' "$in_noext.log" >&6 2>&1; \
- then
- thumbpdf=${THUMBPDF_CMD:-thumbpdf}
- thumbcmd="$thumbpdf $in_dir/$in_noext"
- verbose "Running $thumbcmd ..."
- if $thumbcmd >&5; then
- run_tex
- else
- report "$thumbpdf exited with bad status." \
- "Ignoring its output."
- fi
- fi
-}
-
-
-# run_dvipdf FILE.dvi
-# -------------------
-# Convert FILE.dvi to FILE.pdf.
-run_dvipdf ()
-{
- # Find which dvi->pdf program is available.
- if test -z "$dvipdf"; then
- for i in "$DVIPDF" dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf; do
- if findprog $i; then
- dvipdf=$i
- fi
- done
- fi
- # These tools have varying interfaces, some 'input output', others
- # 'input -o output'. They all seem to accept 'input' only,
- # outputting using the expected file name.
- run $dvipdf "$1"
- if test ! -f `echo "$1" | $SED -e 's/\.dvi$/.pdf/'`; then
- error 1 "cannot find output file"
- fi
-}
-
-# run_tex_suite ()
-# ----------------
-# Run the TeX tools until a fix point is reached.
-run_tex_suite ()
-{
- # Move to the working directory.
- if $tidy; then
- verbose "cd $work_build"
- cd "$work_build" || exit 1
- fi
-
- # Count the number of cycles.
- local cycle=0
-
- while :; do
- # check for probably LaTeX loop (e.g. varioref)
- if test $cycle -eq "$max_iters"; then
- error 0 "Maximum of $max_iters cycles exceeded"
- break
- fi
-
- # report progress
- cycle=`expr $cycle + 1`
- verbose "Cycle $cycle for $command_line_filename"
-
- xref_files_save
-
- # We run bibtex first, because it's more likely for the indexes
- # to change after bibtex is run than the reverse, though either
- # would be rare.
- run_bibtex
- run_index
- run_core_conversion
-
- xref_files_changed || break
- done
-
- # If we were using thumbpdf and producing PDF, then run thumbpdf
- # and TeX one last time.
- run_thumbpdf
-
- # If we are using tex4ht, call it.
- run_tex4ht
-
- # Install the result if we didn't already (i.e., if the output is
- # dvipdf or ps).
- case $latex2html:$out_lang in
- *:dvipdf)
- run_dvipdf "$in_noext.`out_lang_tex`"
- move_to_dest "$in_noext.`out_lang_ext`"
- ;;
- *:ps)
- : ${DVIPS:=dvips}
- run $DVIPS -o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`"
- move_to_dest "$in_noext.`out_lang_ext`"
- ;;
- esac
-
- cd_orig
-}
-
-## -------------------------------- ##
-## TeX processing auxiliary tools. ##
-## -------------------------------- ##
-
-
-# A sed script that preprocesses Texinfo sources in order to keep the
-# iftex sections only. We want to remove non-TeX sections, and comment
-# (with `@c _texi2dvi') TeX sections so that makeinfo does not try to
-# parse them. Nevertheless, while commenting TeX sections, don't
-# comment @macro/@end macro so that makeinfo does propagate them.
-# Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough
-# (yet), makeinfo can't parse the TeX commands, so work around with sed.
-#
-# We assume that `@c _texi2dvi' starting a line is not present in the
-# document.
-#
-comment_iftex=\
-'/^@tex/,/^@end tex/{
- s/^/@c _texi2dvi/
-}
-/^@iftex/,/^@end iftex/{
- s/^/@c _texi2dvi/
- /^@c _texi2dvi@macro/,/^@c _texi2dvi@end macro/{
- s/^@c _texi2dvi//
- }
-}
-/^@ifnottex/,/^@end ifnottex/{
- s/^/@c (_texi2dvi)/
-}
-/^@ifinfo/,/^@end ifinfo/{
- /^@node/p
- /^@menu/,/^@end menu/p
- t
- s/^/@c (_texi2dvi)/
-}
-s/^@ifnotinfo/@c _texi2dvi@ifnotinfo/
-s/^@end ifnotinfo/@c _texi2dvi@end ifnotinfo/'
-
-# Uncommenting is simpler: remove any leading `@c texi2dvi'; repeated
-# copies can sneak in via macro invocations.
-uncomment_iftex='s/^@c _texi2dvi\(@c _texi2dvi\)*//'
-
-
-# run_makeinfo ()
-# ---------------
-# Expand macro commands in the original source file using Makeinfo.
-# Always use `end' footnote style, since the `separate' style
-# generates different output (arguably this is a bug in -E). Discard
-# main info output, the user asked to run TeX, not makeinfo.
-run_makeinfo ()
-{
- test $in_lang = texinfo \
- || return 0
-
- # Unless required by the user, makeinfo expansion is wanted only
- # if texinfo.tex is too old.
- if $expand; then
- makeinfo=${MAKEINFO:-makeinfo}
- else
- # Check if texinfo.tex performs macro expansion by looking for
- # its version. The version is a date of the form YEAR-MO-DA.
- # We don't need to use [0-9] to match the digits since anyway
- # the comparison with $txiprereq, a number, will fail with non-digits.
- # Run in a temporary directory to avoid leaving files.
- version_test_dir=$t2ddir/version_test
- ensure_dir "$version_test_dir"
- if (
- cd "$version_test_dir"
- echo '\input texinfo.tex @bye' >txiversion.tex
- # Be sure that if tex wants to fail, it is not interactive:
- # close stdin.
- $TEX txiversion.tex </dev/null >txiversion.out 2>txiversion.err
- ); then :; else
- report "texinfo.tex appears to be broken.
-This may be due to the environment variable TEX set to something
-other than (plain) tex, a corrupt texinfo.tex file, or
-to tex itself simply not working."
- cat "$version_test_dir/txiversion.out"
- cat "$version_test_dir/txiversion.err" >&2
- error 1 "quitting."
- fi
- eval `$SED -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"`
- verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
- if test "$txiprereq" -le "$txiversion" >&6 2>&1; then
- makeinfo=
- else
- makeinfo=${MAKEINFO:-makeinfo}
- fi
- # If TeX is preloaded, offer the user this convenience:
- if test "$txiformat" = Texinfo; then
- escape=@
- fi
- fi
-
- if test -n "$makeinfo"; then
- # in_src: the file with macros expanded.
- # Use the same basename to generate the same aux file names.
- work_src=$workdir/src
- ensure_dir "$work_src"
- in_src=$work_src/$in_base
- local miincludes
- miincludes=`list_prefix includes -I`
- verbose "Macro-expanding $command_line_filename to $in_src ..."
- # eval $makeinfo because it might be defined as something complex
- # (running missing) and then we end up with things like '"-I"',
- # and "-I" (including the quotes) is not an option name. This
- # happens with gettext 0.14.5, at least.
- $SED "$comment_iftex" "$command_line_filename" \
- | eval $makeinfo --footnote-style=end -I "$in_dir" $miincludes \
- -o /dev/null --macro-expand=- \
- | $SED "$uncomment_iftex" >"$in_src"
- # Continue only if everything succeeded.
- if test $? -ne 0 \
- || test ! -r "$in_src"; then
- verbose "Expansion failed, ignored...";
- else
- in_input=$in_src
- fi
- fi
-}
-
-# insert_commands ()
-# ------------------
-# Used most commonly for @finalout, @smallbook, etc.
-insert_commands ()
-{
- if test -n "$textra"; then
- # _xtr. The file with the user's extra commands.
- work_xtr=$workdir/xtr
- in_xtr=$work_xtr/$in_base
- ensure_dir "$work_xtr"
- verbose "Inserting extra commands: $textra"
- local textra_cmd
- case $in_lang in
- latex) textra_cmd=1i;;
- texinfo) textra_cmd='/^@setfilename/a';;
- *) error 1 "internal error, unknown language: $in_lang";;
- esac
- $SED "$textra_cmd\\
-$textra" "$in_input" >"$in_xtr"
- in_input=$in_xtr
- fi
-
- case $in_lang:$latex2html:`out_lang_tex` in
- latex:tex4ht:html)
- # _tex4ht. The file with the added \usepackage{tex4ht}.
- work_tex4ht=$workdir/tex4ht
- in_tex4ht=$work_tex4ht/$in_base
- ensure_dir "$work_tex4ht"
- verbose "Inserting \\usepackage{tex4ht}"
- perl -pe 's<\\documentclass(?:\[.*\])?{.*}>
- <$&\\usepackage[xhtml]{tex4ht}>' \
- "$in_input" >"$in_tex4ht"
- in_input=$in_tex4ht
- ;;
- esac
-}
-
-# compute_language FILENAME
-# -------------------------
-# Return the short string describing the language in which FILENAME
-# is written: `texinfo' or `latex'.
-compute_language ()
-{
- # If the user explicitly specified the language, use that.
- # Otherwise, if the first line is \input texinfo, assume it's texinfo.
- # Otherwise, guess from the file extension.
- if test -n "$set_language"; then
- echo $set_language
- elif $SED 1q "$1" | grep 'input texinfo' >&6; then
- echo texinfo
- else
- # Get the type of the file (latex or texinfo) from the given language
- # we just guessed, or from the file extension if not set yet.
- case $1 in
- *.ltx | *.tex | *.drv | *.dtx) echo latex;;
- *) echo texinfo;;
- esac
- fi
-}
-
-
-# run_hevea (MODE)
-# ----------------
-# Convert to HTML/INFO/TEXT.
-#
-# Don't pass `-noiso' to hevea: it's useless in HTML since anyway the
-# charset is set to latin1, and troublesome in other modes since
-# accented characters loose their accents.
-#
-# Don't pass `-o DEST' to hevea because in that case it leaves all its
-# auxiliary files there too... Too bad, because it means we will need
-# to handle images some day.
-run_hevea ()
-{
- local hevea="${HEVEA:-hevea}"
- local run_hevea="$hevea"
-
- case $1 in
- html) ;;
- text|info) run_hevea="$run_hevea -$1";;
- *) error 1 "run_hevea: invalid argument: $1";;
- esac
-
- # Compiling to the tmp directory enables to preserve a previous
- # successful compilation.
- run_hevea="$run_hevea -fix -O -o '$out_base'"
- run_hevea="$run_hevea `list_prefix includes -I` -I '$orig_pwd' "
- run_hevea="$run_hevea '$in_input'"
-
- if $debug; then
- run_hevea="$run_hevea -v -v"
- fi
-
- verbose "running $run_hevea"
- if eval "$run_hevea" >&5; then
- # hevea leaves trailing white spaces, this is annoying.
- case $1 in text|info)
- perl -pi -e 's/[ \t]+$//g' "$out_base"*;;
- esac
- case $1 in
- html|text) move_to_dest "$out_base";;
- info) # There can be foo.info-1, foo.info-2 etc.
- move_to_dest "$out_base"*;;
- esac
- else
- error 1 "$hevea exited with bad status, quitting."
- fi
-}
-
-
-# run_core_conversion ()
-# ----------------------
-# Run the TeX (or HeVeA).
-run_core_conversion ()
-{
- case $in_lang:$latex2html:`out_lang_tex` in
- *:dvi|*:pdf|latex:tex4ht:html)
- run_tex;;
- latex:*:html|latex:*:text|latex:*:info)
- run_hevea $out_lang;;
- *)
- error 1 "invalid input/output combination: $in_lang/$out_lang";;
- esac
-}
-
-
-# compile ()
-# ----------
-# Run the full compilation chain, from pre-processing to installation
-# of the output at its expected location.
-compile ()
-{
- # Source file might include additional sources.
- # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
- # after all other directories have been turned into absolute paths.)
- # `.' goes first to ensure that any old .aux, .cps,
- # etc. files in ${directory} don't get used in preference to fresher
- # files in `.'. Include orig_pwd in case we are in clean build mode, where
- # we have cd'd to a temp directory.
- common="$orig_pwd$path_sep$in_dir$path_sep"
- #
- # If we have any includes, put those at the end.
- # Keep a final path_sep to get the default (system) TeX directories included.
- txincludes=`list_infix includes $path_sep`
- test -n "$txincludes" && common="$common$txincludes$path_sep"
- #
- for var in $tex_envvars; do
- eval val="\$common\$${var}_orig"
- # Convert relative paths to absolute paths, so we can run in another
- # directory (e.g., in clean build mode, or during the macro-support
- # detection). ".:" is added here.
- val=`absolute_filenames "$val"`
- eval $var="\"$val\""
- export $var
- eval verbose \"$var=\'\$${var}\'\"
- done
-
- # --expand
- run_makeinfo
-
- # --command, --texinfo
- insert_commands
-
- # Run until a fix point is reached.
- run_tex_suite
-}
-
-
-# remove FILES
-# ------------
-remove ()
-{
- verbose "Removing" "$@"
- rm -rf "$@"
-}
-
-
-# mostly_clean
-# ------------
-# Remove auxiliary files and directories. Changes the current directory.
-mostly_clean ()
-{
- cd_orig
- set X "$t2ddir"
- shift
- $tidy || {
- local log="$work_build/$in_noext.log"
- set X ${1+"$@"} "$log" `generated_files_get "$work_build/$in_noext"`
- shift
- }
- remove ${1+"$@"}
-}
-
-
-# cleanup ()
-# ----------
-# Remove what should be removed according to options.
-# Called at the end of each compilation cycle, and at the end of
-# the script. Changes the current directory.
-cleanup ()
-{
- case $build_mode in
- local) cd_orig; remove "$t2ddir";;
- clean) mostly_clean;;
- tidy) ;;
- esac
-}
-
-
-
-## ---------------------- ##
-## Command line parsing. ##
-## ---------------------- ##
-
-# Push a token among the arguments that will be used to notice when we
-# ended options/arguments parsing.
-# Use "set dummy ...; shift" rather than 'set - ..." because on
-# Solaris set - turns off set -x (but keeps set -e).
-# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
-# still expand "$@" to a single argument (the empty string) rather
-# than nothing at all.
-arg_sep="$$--$$"
-set dummy ${1+"$@"} "$arg_sep"; shift
-
-#
-# Parse command line arguments.
-while test x"$1" != x"$arg_sep"; do
-
- # Handle --option=value by splitting apart and putting back on argv.
- case "$1" in
- --*=*)
- opt=`echo "$1" | $SED -e 's/=.*//'`
- val=`echo "$1" | $SED -e 's/[^=]*=//'`
- shift
- set dummy "$opt" "$val" ${1+"$@"}; shift
- ;;
- esac
-
- case "$1" in
- -@ ) escape=@;;
- -~ ) catcode_special=false;;
- # Silently and without documentation accept -b and --b[atch] as synonyms.
- -b | --batch) batch=true;;
- --build) shift; build_mode=$1;;
- --build-dir) shift; build_dir=$1; build_mode=tidy;;
- -c | --clean) build_mode=clean;;
- -D | --debug) debug=true;;
- -e | -E | --expand) expand=true;;
- -h | --help) usage;;
- -I) shift; list_concat_dirs includes "$1";;
- -l | --lang | --language) shift; set_language=$1;;
- --mostly-clean) action=mostly-clean;;
- --no-line-error) line_error=false;;
- --max-iterations) shift; max_iters=$1;;
- -o | --out | --output)
- shift
- # Make it absolute, just in case we also have --clean, or whatever.
- oname=`absolute "$1"`;;
-
- # Output formats.
- -O|--output-format) shift; out_lang_set "$1";;
- --dvi|--dvipdf|--html|--info|--pdf|--ps|--text)
- out_lang_set `echo "x$1" | $SED 's/^x--//'`;;
-
- -p) out_lang_set pdf;;
- -q | -s | --quiet | --silent) quiet=true; batch=true;;
- --src-specials) src_specials=--src-specials;;
- --shell-escape) shell_escape=--shell-escape;;
- --tex4ht) latex2html=tex4ht;;
- -t | --texinfo | --command ) shift; textra="$textra\\
-"`echo "$1" | $SED 's/\\\\/\\\\\\\\/g'`;;
- --translate-file ) shift; translate_file="$1";;
- --tidy) build_mode=tidy;;
- -v | --vers*) version;;
- -V | --verb*) verb=true;;
- --) # What remains are not options.
- shift
- while test x"$1" != x"$arg_sep"; do
- set dummy ${1+"$@"} "$1"; shift
- shift
- done
- break;;
- -*)
- error 1 "Unknown or ambiguous option \`$1'." \
- "Try \`--help' for more information."
- ;;
- *) set dummy ${1+"$@"} "$1"; shift;;
- esac
- shift
-done
-# Pop the token
-shift
-
-# $tidy: compile in a t2d directory.
-# $clean: remove all the aux files.
-case $build_mode in
- local) clean=false; tidy=false;;
- tidy) clean=false; tidy=true;;
- clean) clean=true; tidy=true;;
- *) error 1 "invalid build mode: $build_mode";;
-esac
-
-# Interpret remaining command line args as filenames.
-case $# in
- 0)
- error 2 "Missing file arguments." "Try \`--help' for more information."
- ;;
- 1) ;;
- *)
- if test -n "$oname"; then
- error 2 "Can't use option \`--output' with more than one argument."
- fi
- ;;
-esac
-
-
-# We can't do much without tex.
-#
-if findprog ${TEX:-tex}; then :; else cat <<EOM
-You don't have a working TeX binary (${TEX:-tex}) installed anywhere in
-your PATH, and texi2dvi cannot proceed without one. If you want to use
-this script, you'll need to install TeX (if you don't have it) or change
-your PATH or TEX environment variable (if you do). See the --help
-output for more details.
-
-For information about obtaining TeX, please see http://tug.org/texlive,
-or do a web search for TeX and your operating system or distro.
-EOM
- exit 1
-fi
-
-
-# We want to use etex (or pdftex) if they are available, and the user
-# didn't explicitly specify. We don't check for elatex and pdfelatex
-# because (as of 2003), the LaTeX team has asked that new distributions
-# use etex by default anyway.
-#
-# End up with the TEX and PDFTEX variables set to what we are going to use.
-if test -z "$TEX"; then
- if findprog etex; then TEX=etex; else TEX=tex; fi
-fi
-#
-if test -z "$PDFTEX"; then
- if findprog pdfetex; then PDFTEX=pdfetex; else PDFTEX=pdftex; fi
-fi
-
-
-# File descriptor usage:
-# 0 standard input
-# 1 standard output (--verbose messages)
-# 2 standard error
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 tools output (turned off by --quiet)
-# 6 tracing/debugging (set -x output, etc.)
-
-
-# Main tools' output (TeX, etc.) that TeX users are used to seeing.
-#
-# If quiet, discard, else redirect to the message flow.
-if $quiet; then
- exec 5>/dev/null
-else
- exec 5>&1
-fi
-
-
-# Enable tracing, and auxiliary tools output.
-#
-# This fd should be used where you'd typically use /dev/null to throw
-# output away. But sometimes it is convenient to see that output (e.g.,
-# from a grep) to aid debugging. Especially debugging at distance, via
-# the user.
-#
-if $debug; then
- exec 6>&1
- set -vx
-else
- exec 6>/dev/null
-fi
-
-#
-
-# input_file_name_decode
-# ----------------------
-# Decode COMMAND_LINE_FILENAME, and compute:
-# - COMMAND_LINE_FILENAME clean of TeX commands
-# - IN_DIR
-# The directory to the input file, possibly absolute if needed.
-# - IN_DIR_ABS
-# The absolute directory of the input file.
-# - IN_BASE
-# The input file base name (no directory part).
-# - IN_NOEXT
-# The input file name without extensions (nor directory part).
-# - IN_INPUT
-# Defaults to COMMAND_LINE_FILENAME, but might change if the
-# input is preprocessed. With directory, possibly absolute.
-input_file_name_decode ()
-{
- # See if we are run from within AUC-Tex, in which case we are
- # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'.
- case $command_line_filename in
- *\\nonstopmode*)
- batch=true;;
- esac
- case $command_line_filename in
- *\\input{*}*)
- # Let AUC-TeX error parser deal with line numbers.
- line_error=false
- command_line_filename=`\
- expr X"$command_line_filename" : X'.*input{\([^}]*\)}'`
- ;;
- esac
-
- # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
- # prepend `./' in order to avoid that the tools take it as an option.
- echo "$command_line_filename" | LC_ALL=C $EGREP '^(/|[A-Za-z]:/)' >&6 \
- || command_line_filename="./$command_line_filename"
-
- # See if the file exists. If it doesn't we're in trouble since, even
- # though the user may be able to reenter a valid filename at the tex
- # prompt (assuming they're attending the terminal), this script won't
- # be able to find the right xref files and so forth.
- test -r "$command_line_filename" \
- || error 1 "cannot read $command_line_filename, skipping."
-
- # Get the name of the current directory.
- in_dir=`func_dirname "$command_line_filename"`
- in_dir_abs=`absolute "$in_dir"`
- # In a clean build, we `cd', so get an absolute file name.
- if $tidy; then
- in_dir=$in_dir_abs
- fi
-
- # Strip directory part but leave extension.
- in_base=`basename "$command_line_filename"`
- # Strip extension.
- in_noext=`noext "$in_base"`
-
- # The normalized file name to compile. Must always point to the
- # file to actually compile (in case of recoding, macro-expansion etc.).
- in_input=$in_dir/$in_base
-
-
- # Compute the output file name.
- if test x"$oname" != x; then
- out_name=$oname
- else
- out_name=$in_noext.`out_lang_ext`
- fi
- out_dir=`func_dirname "$out_name"`
- out_dir_abs=`absolute "$out_dir"`
- out_base=`basename "$out_name"`
- out_noext=`noext "$out_base"`
-}
-
-
-## -------------- ##
-## TeXify files. ##
-## -------------- ##
-
-for command_line_filename
-do
- verbose "Processing $command_line_filename ..."
-
- input_file_name_decode
-
- # `texinfo' or `latex'?
- in_lang=`compute_language "$command_line_filename"`
-
- # An auxiliary directory used for all the auxiliary tasks involved
- # in compiling this document.
- case $build_dir in
- '' | . ) t2ddir=$out_noext.t2d ;;
- *) # Avoid collisions between multiple occurrences of the same
- # file, so depend on the output path. Remove leading `./',
- # at least to avoid creating a file starting with `.!', i.e.,
- # an invisible file. The sed expression is fragile if the cwd
- # has active characters. Transform / into ! so that we don't
- # need `mkdir -p'. It might be something to reconsider.
- t2ddir=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" |
- $SED "s,^$orig_pwd/,,;s,^\./,,;s,/,!,g"`
- esac
- # Remove it at exit if clean mode.
- trap "cleanup" 0 1 2 15
-
- ensure_dir "$build_dir" "$t2ddir"
-
- # We will change directory, better work with an absolute path...
- t2ddir=`absolute "$t2ddir"`
- # Sometimes there are incompatibilities between auxiliary files for
- # DVI and PDF. The contents can also change whether we work on PDF
- # and/or DVI. So keep separate spaces for each.
- workdir=$t2ddir/`out_lang_tex`
- ensure_dir "$workdir"
-
- # _build. In a tidy build, where the auxiliary files are output.
- if $tidy; then
- work_build=$workdir/build
- else
- work_build=.
- fi
-
- # _bak. Copies of the previous auxiliary files (another round is
- # run if they differ from the new ones).
- work_bak=$workdir/bak
-
- # Make those directories.
- ensure_dir "$work_build" "$work_bak"
-
- case $action in
- compile)
- # Compile the document.
- compile
- cleanup
- ;;
-
- mostly-clean)
- mostly_clean
- ;;
- esac
-done
-
-verbose "done."
-exit 0 # exit successfully, not however we ended the loop.
diff --git a/readline/doc/texi2html b/readline/doc/texi2html
deleted file mode 100755
index 13b5588..0000000
--- a/readline/doc/texi2html
+++ /dev/null
@@ -1,5428 +0,0 @@
-#! /usr/bin/perl
-'di ';
-'ig 00 ';
-#+##############################################################################
-#
-# texi2html: Program to transform Texinfo documents to HTML
-#
-# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-#-##############################################################################
-
-# This requires perl version 5 or higher
-require 5.0;
-
-#++##############################################################################
-#
-# NOTE FOR DEBUGGING THIS SCRIPT:
-# You can run 'perl texi2html.pl' directly, provided you have
-# the environment variable T2H_HOME set to the directory containing
-# the texi2html.init file
-#
-#--##############################################################################
-
-# CVS version:
-# $Id: texi2html.pl,v 1.55 2000/07/27 14:39:41 obachman Exp $
-
-# Homepage:
-$T2H_HOMEPAGE = <<EOT;
-http://www.mathematik.uni-kl.de/~obachman/Texi2html
-EOT
-
-# Authors:
-$T2H_AUTHORS = <<EOT;
-Written by: Lionel Cons <Lionel.Cons\@cern.ch> (original author)
- Karl Berry <karl\@freefriends.org>
- Olaf Bachmann <obachman\@mathematik.uni-kl.de>
- and many others.
-Maintained by: Olaf Bachmann <obachman\@mathematik.uni-kl.de>
-Send bugs and suggestions to <texi2html\@mathematik.uni-kl.de>
-EOT
-
-# Version: set in configure.in
-$THISVERSION = '1.64';
-$THISPROG = "texi2html $THISVERSION"; # program name and version
-
-# The man page for this program is included at the end of this file and can be
-# viewed using the command 'nroff -man texi2html'.
-
-# Identity:
-
-$T2H_TODAY = &pretty_date; # like "20 September 1993"
-# the eval prevents this from breaking on system which do not have
-# a proper getpwuid implemented
-eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i
-
-#+++############################################################################
-# #
-# Initialization #
-# Pasted content of File $(srcdir)/texi2html.init: Default initializations #
-# #
-#---############################################################################
-
-# leave this within comments, and keep the require statement
-# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
-# exists.
-
-#
-# -*-perl-*-
-######################################################################
-# File: texi2html.init
-#
-# Sets default values for command-line arguments and for various customizable
-# procedures
-#
-# A copy of this file is pasted into the beginning of texi2html by
-# 'make texi2html'
-#
-# Copy this file and make changes to it, if you like.
-# Afterwards, either, load it with command-line option -init_file <your_init_file>
-#
-# $Id: texi2html.init,v 1.34 2000/07/27 14:09:02 obachman Exp $
-
-######################################################################
-# stuff which can also be set by command-line options
-#
-#
-# Note: values set here, overwrite values set by the command-line
-# options before -init_file and might still be overwritten by
-# command-line arguments following the -init_file option
-#
-
-# T2H_OPTIONS is a hash whose keys are the (long) names of valid
-# command-line options and whose values are a hash with the following keys:
-# type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info)
-# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info)
-# verbose ==> short description of option (displayed by -h)
-# noHelp ==> if 1 -> for "not so important options": only print description on -h 1
-# 2 -> for obsolete options: only print description on -h 2
-
-$T2H_DEBUG = 0;
-$T2H_OPTIONS -> {debug} =
-{
- type => '=i',
- linkage => \$main::T2H_DEBUG,
- verbose => 'output HTML with debuging information',
-};
-
-$T2H_DOCTYPE = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
-$T2H_OPTIONS -> {doctype} =
-{
- type => '=s',
- linkage => \$main::T2H_DOCTYPE,
- verbose => 'document type which is output in header of HTML files',
- noHelp => 1
-};
-
-$T2H_CHECK = 0;
-$T2H_OPTIONS -> {check} =
-{
- type => '!',
- linkage => \$main::T2H_CHECK,
- verbose => 'if set, only check files and output all things that may be Texinfo commands',
- noHelp => 1
-};
-
-# -expand
-# if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections
-# else, neither expand @iftex, @tex, nor @ifinfo sections
-$T2H_EXPAND = "info";
-$T2H_OPTIONS -> {expand} =
-{
- type => '=s',
- linkage => \$T2H_EXPAND,
- verbose => 'Expand info|tex|none section of texinfo source',
-};
-
-# - glossary
-#if set, uses section named `Footnotes' for glossary
-$T2H_USE_GLOSSARY = 0;
-T2H_OPTIONS -> {glossary} =
-{
- type => '!',
- linkage => \$T2H_USE_GLOSSARY,
- verbose => "if set, uses section named `Footnotes' for glossary",
- noHelp => 1,
-};
-
-
-# -invisible
-# $T2H_INVISIBLE_MARK is the text used to create invisible destination
-# anchors for index links (you can for instance use the invisible.xbm
-# file shipped with this program). This is a workaround for a known
-# bug of many WWW browsers, including netscape.
-# For me, it works fine without it -- on the contrary: if there, it
-# inserts space between headers and start of text (obachman 3/99)
-$T2H_INVISIBLE_MARK = '';
-# $T2H_INVISIBLE_MARK = '&#160;';
-$T2H_OPTIONS -> {invisible} =
-{
- type => '=s',
- linkage => \$T2H_INVISIBLE_MARK,
- verbose => 'use text in invisble anchot',
- noHelp => 1,
-};
-
-# -iso
-# if set, ISO8879 characters are used for special symbols (like copyright, etc)
-$T2H_USE_ISO = 0;
-$T2H_OPTIONS -> {iso} =
-{
- type => 'iso',
- linkage => \$T2H_USE_ISO,
- verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)',
- noHelp => 1,
-};
-
-# -I
-# list directories where @include files are searched for (besides the
-# directory of the doc file) additional '-I' args add to this list
-@T2H_INCLUDE_DIRS = (".");
-$T2H_OPTIONS -> {I} =
-{
- type => '=s',
- linkage => \@T2H_INCLUDE_DIRS,
- verbose => 'append $s to the @include search path',
-};
-
-# -top_file
-# uses file of this name for top-level file
-# extension is manipulated appropriately, if necessary.
-# If empty, <basename of document>.html is used
-# Typically, you would set this to "index.html".
-$T2H_TOP_FILE = '';
-$T2H_OPTIONS -> {top_file} =
-{
- type => '=s',
- linkage => \$T2H_TOP_FILE,
- verbose => 'use $s as top file, instead of <docname>.html',
-};
-
-
-# -toc_file
-# uses file of this name for table of contents file
-# extension is manipulated appropriately, if necessary.
-# If empty, <basename of document>_toc.html is used
-$T2H_TOC_FILE = '';
-$T2H_OPTIONS -> {toc_file} =
-{
- type => '=s',
- linkage => \$T2H_TOC_FILE,
- verbose => 'use $s as ToC file, instead of <docname>_toc.html',
-};
-
-# -frames
-# if set, output two additional files which use HTML 4.0 "frames".
-$T2H_FRAMES = 0;
-$T2H_OPTIONS -> {frames} =
-{
- type => '!',
- linkage => \$T2H_FRAMES,
- verbose => 'output files which use HTML 4.0 frames (experimental)',
- noHelp => 1,
-};
-
-
-# -menu | -nomenu
-# if set, show the Texinfo menus
-$T2H_SHOW_MENU = 1;
-$T2H_OPTIONS -> {menu} =
-{
- type => '!',
- linkage => \$T2H_SHOW_MENU,
- verbose => 'ouput Texinfo menus',
-};
-
-# -number | -nonumber
-# if set, number sections and show section names and numbers in references
-# and menus
-$T2H_NUMBER_SECTIONS = 1;
-$T2H_OPTIONS -> {number} =
-{
- type => '!',
- linkage => \$T2H_NUMBER_SECTIONS,
- verbose => 'use numbered sections'
-};
-
-# if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu
-# entries, instead of section names
-$T2H_NODE_NAME_IN_MENU = 0;
-
-# if set and menu entry equals menu descr, then do not print menu descr.
-# Likewise, if node name equals entry name, do not print entry name.
-$T2H_AVOID_MENU_REDUNDANCY = 1;
-
-# -split section|chapter|none
-# if set to 'section' (resp. 'chapter') create one html file per (sub)section
-# (resp. chapter) and separate pages for Top, ToC, Overview, Index,
-# Glossary, About.
-# otherwise, create monolithic html file which contains whole document
-#$T2H_SPLIT = 'section';
-$T2H_SPLIT = '';
-$T2H_OPTIONS -> {split} =
-{
- type => '=s',
- linkage => \$T2H_SPLIT,
- verbose => 'split document on section|chapter else no splitting',
-};
-
-# -section_navigation|-no-section_navigation
-# if set, then navigation panels are printed at the beginning of each section
-# and, possibly at the end (depending on whether or not there were more than
-# $T2H_WORDS_IN_PAGE words on page
-# This is most useful if you do not want to have section navigation
-# on -split chapter
-$T2H_SECTION_NAVIGATION = 1;
-$T2H_OPTIONS -> {sec_nav} =
-{
- type => '!',
- linkage => \$T2H_SECTION_NAVIGATION,
- verbose => 'output navigation panels for each section',
-};
-
-# -subdir
-# if set put result files in this directory
-# if not set result files are put into current directory
-#$T2H_SUBDIR = 'html';
-$T2H_SUBDIR = '';
-$T2H_OPTIONS -> {subdir} =
-{
- type => '=s',
- linkage => \$T2H_SUBDIR,
- verbose => 'put HTML files in directory $s, instead of $cwd',
-};
-
-# -short_extn
-# If this is set all HTML file will have extension ".htm" instead of
-# ".html". This is helpful when shipping the document to PC systems.
-$T2H_SHORTEXTN = 0;
-$T2H_OPTIONS -> {short_ext} =
-{
- type => '!',
- linkage => \$T2H_SHORTEXTN,
- verbose => 'use "htm" extension for output HTML files',
-};
-
-
-# -prefix
-# Set the output file prefix, prepended to all .html, .gif and .pl files.
-# By default, this is the basename of the document
-$T2H_PREFIX = '';
-$T2H_OPTIONS -> {prefix} =
-{
- type => '=s',
- linkage => \$T2H_PREFIX,
- verbose => 'use as prefix for output files, instead of <docname>',
-};
-
-# -o filename
-# If set, generate monolithic document output html into $filename
-$T2H_OUT = '';
-$T2H_OPTIONS -> {out_file} =
-{
- type => '=s',
- linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
- verbose => 'if set, all HTML output goes into file $s',
-};
-
-# -short_ref
-#if set cross-references are given without section numbers
-$T2H_SHORT_REF = '';
-$T2H_OPTIONS -> {short_ref} =
-{
- type => '!',
- linkage => \$T2H_SHORT_REF,
- verbose => 'if set, references are without section numbers',
-};
-
-# -idx_sum
-# if value is set, then for each @prinindex $what
-# $docu_name_$what.idx is created which contains lines of the form
-# $key\t$ref sorted alphabetically (case matters)
-$T2H_IDX_SUMMARY = 0;
-$T2H_OPTIONS -> {idx_sum} =
-{
- type => '!',
- linkage => \$T2H_IDX_SUMMARY,
- verbose => 'if set, also output index summary',
- noHelp => 1,
-};
-
-# -verbose
-# if set, chatter about what we are doing
-$T2H_VERBOSE = '';
-$T2H_OPTIONS -> {Verbose} =
-{
- type => '!',
- linkage => \$T2H_VERBOSE,
- verbose => 'print progress info to stdout',
-};
-
-# -lang
-# For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title.
-# To add a new language, supply list of titles (see $T2H_WORDS below).
-# and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02
-# for definitions)
-# Default's to 'en' if not set or no @documentlanguage is specified
-$T2H_LANG = '';
-$T2H_OPTIONS -> {lang} =
-{
- type => '=s',
- linkage => sub {SetDocumentLanguage($_[1])},
- verbose => 'use $s as document language (ISO 639 encoding)',
-};
-
-# -l2h
-# if set, uses latex2html for generation of math content
-$T2H_L2H = '';
-$T2H_OPTIONS -> {l2h} =
-{
- type => '!',
- linkage => \$T2H_L2H,
- verbose => 'if set, uses latex2html for @math and @tex',
-};
-
-######################
-# The following options are only relevant if $T2H_L2H is set
-#
-# -l2h_l2h
-# name/location of latex2html progam
-$T2H_L2H_L2H = "latex2html";
-$T2H_OPTIONS -> {l2h_l2h} =
-{
- type => '=s',
- linkage => \$T2H_L2H_L2H,
- verbose => 'program to use for latex2html translation',
- noHelp => 1,
-};
-
-# -l2h_skip
-# if set, skips actual call to latex2html tries to reuse previously generated
-# content, instead
-$T2H_L2H_SKIP = '';
-$T2H_OPTIONS -> {l2h_skip} =
-{
- type => '!',
- linkage => \$T2H_L2H_SKIP,
- verbose => 'if set, tries to reuse previously latex2html output',
- noHelp => 1,
-};
-
-# -l2h_tmp
-# if set, l2h uses this directory for temporarary files. The path
-# leading to this directory may not contain a dot (i.e., a "."),
-# otherwise, l2h will fail
-$T2H_L2H_TMP = '';
-$T2H_OPTIONS -> {l2h_tmp} =
-{
- type => '=s',
- linkage => \$T2H_L2H_TMP,
- verbose => 'if set, uses $s as temporary latex2html directory',
- noHelp => 1,
-};
-
-# if set, cleans intermediate files (they all have the prefix $doc_l2h_)
-# of l2h
-$T2H_L2H_CLEAN = 1;
-$T2H_OPTIONS -> {l2h_clean} =
-{
- type => '!',
- linkage => \$T2H_L2H_CLEAN,
- verbose => 'if set, do not keep intermediate latex2html files for later reuse',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {D} =
-{
- type => '=s',
- linkage => sub {$main::value{@_[1]} = 1;},
- verbose => 'equivalent to Texinfo "@set $s 1"',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {init_file} =
-{
- type => '=s',
- linkage => \&LoadInitFile,
- verbose => 'load init file $s'
-};
-
-
-##############################################################################
-#
-# The following can only be set in the init file
-#
-##############################################################################
-
-# if set, center @image by default
-# otherwise, do not center by default
-$T2H_CENTER_IMAGE = 1;
-
-# used as identation for block enclosing command @example, etc
-# If not empty, must be enclosed in <td></td>
-$T2H_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
-# same as above, only for @small
-$T2H_SMALL_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
-# font size for @small
-$T2H_SMALL_FONT_SIZE = '-1';
-
-# if non-empty, and no @..heading appeared in Top node, then
-# use this as header for top node/section, otherwise use value of
-# @settitle or @shorttitle (in that order)
-$T2H_TOP_HEADING = '';
-
-# if set, use this chapter for 'Index' button, else
-# use first chapter whose name matches 'index' (case insensitive)
-$T2H_INDEX_CHAPTER = '';
-
-# if set and $T2H_SPLIT is set, then split index pages at the next letter
-# after they have more than that many entries
-$T2H_SPLIT_INDEX = 100;
-
-# if set (e.g., to index.html) replace hrefs to this file
-# (i.e., to index.html) by ./
-$T2H_HREF_DIR_INSTEAD_FILE = '';
-
-########################################################################
-# Language dependencies:
-# To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash
-# To redefine one word, simply do:
-# $T2H_WORDS->{<language>}->{<word>} = 'whatever' in your personal init file.
-#
-$T2H_WORDS_EN =
-{
- # titles of pages
- 'ToC_Title' => 'Table of Contents',
- 'Overview_Title' => 'Short Table of Contents',
- 'Index_Title' => 'Index',
- 'About_Title' => 'About this document',
- 'Footnotes_Title' => 'Footnotes',
- 'See' => 'See',
- 'see' => 'see',
- 'section' => 'section',
-# If necessary, we could extend this as follows:
-# # text for buttons
-# 'Top_Button' => 'Top',
-# 'ToC_Button' => 'Contents',
-# 'Overview_Button' => 'Overview',
-# 'Index_button' => 'Index',
-# 'Back_Button' => 'Back',
-# 'FastBack_Button' => 'FastBack',
-# 'Prev_Button' => 'Prev',
-# 'Up_Button' => 'Up',
-# 'Next_Button' => 'Next',
-# 'Forward_Button' =>'Forward',
-# 'FastWorward_Button' => 'FastForward',
-# 'First_Button' => 'First',
-# 'Last_Button' => 'Last',
-# 'About_Button' => 'About'
-};
-
-$T2H_WORD_DE =
-{
- 'ToC_Title' => 'Inhaltsverzeichniss',
- 'Overview_Title' => 'Kurzes Inhaltsverzeichniss',
- 'Index_Title' => 'Index',
- 'About_Title' => '&Uuml;ber dieses Dokument',
- 'Footnotes_Title' => 'Fu&szlig;noten',
- 'See' => 'Siehe',
- 'see' => 'siehe',
- 'section' => 'Abschnitt',
-};
-
-$T2H_WORD_NL =
-{
- 'ToC_Title' => 'Inhoudsopgave',
- 'Overview_Title' => 'Korte inhoudsopgave',
- 'Index_Title' => 'Index', #Not sure ;-)
- 'About_Title' => 'No translation available!', #No translation available!
- 'Footnotes_Title' => 'No translation available!', #No translation available!
- 'See' => 'Zie',
- 'see' => 'zie',
- 'section' => 'sectie',
-};
-
-$T2H_WORD_ES =
-{
- 'ToC_Title' => '&iacute;ndice General',
- 'Overview_Title' => 'Resumen del Contenido',
- 'Index_Title' => 'Index', #Not sure ;-)
- 'About_Title' => 'No translation available!', #No translation available!
- 'Footnotes_Title' => 'Fu&szlig;noten',
- 'See' => 'V&eacute;ase',
- 'see' => 'v&eacute;ase',
- 'section' => 'secci&oacute;n',
-};
-
-$T2H_WORD_NO =
-{
- 'ToC_Title' => 'Innholdsfortegnelse',
- 'Overview_Title' => 'Kort innholdsfortegnelse',
- 'Index_Title' => 'Indeks', #Not sure ;-)
- 'About_Title' => 'No translation available!', #No translation available!
- 'Footnotes_Title' => 'No translation available!',
- 'See' => 'Se',
- 'see' => 'se',
- 'section' => 'avsnitt',
-};
-
-$T2H_WORD_PT =
-{
- 'ToC_Title' => 'Sum&aacute;rio',
- 'Overview_Title' => 'Breve Sum&aacute;rio',
- 'Index_Title' => '&Iacute;ndice', #Not sure ;-)
- 'About_Title' => 'No translation available!', #No translation available!
- 'Footnotes_Title' => 'No translation available!',
- 'See' => 'Veja',
- 'see' => 'veja',
- 'section' => 'Se&ccedil;&atilde;o',
-};
-
-$T2H_WORDS =
-{
- 'en' => $T2H_WORDS_EN,
- 'de' => $T2H_WORDS_DE,
- 'nl' => $T2H_WORDS_NL,
- 'es' => $T2H_WORDS_ES,
- 'no' => $T2H_WORDS_NO,
- 'pt' => $T2H_WORDS_PT
-};
-
-@MONTH_NAMES_EN =
-(
- 'January', 'February', 'March', 'April', 'May',
- 'June', 'July', 'August', 'September', 'October',
- 'November', 'December'
-);
-
-@MONTH_NAMES_DE =
-(
- 'Januar', 'Februar', 'M&auml;rz', 'April', 'Mai',
- 'Juni', 'Juli', 'August', 'September', 'Oktober',
- 'November', 'Dezember'
-);
-
-@MONTH_NAMES_NL =
-(
- 'Januari', 'Februari', 'Maart', 'April', 'Mei',
- 'Juni', 'Juli', 'Augustus', 'September', 'Oktober',
- 'November', 'December'
-);
-
-@MONTH_NAMES_ES =
-(
- 'enero', 'febrero', 'marzo', 'abril', 'mayo',
- 'junio', 'julio', 'agosto', 'septiembre', 'octubre',
- 'noviembre', 'diciembre'
-);
-
-@MONTH_NAMES_NO =
-(
-
- 'januar', 'februar', 'mars', 'april', 'mai',
- 'juni', 'juli', 'august', 'september', 'oktober',
- 'november', 'desember'
-);
-
-@MONTH_NAMES_PT =
-(
- 'Janeiro', 'Fevereiro', 'Mar&ccedil;o', 'Abril', 'Maio',
- 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro',
- 'Novembro', 'Dezembro'
-);
-
-
-$MONTH_NAMES =
-{
- 'en' => \@MONTH_NAMES_EN,
- 'de' => \@MONTH_NAMES_DE,
- 'es' => \@MONTH_NAMES_ES,
- 'nl' => \@MONTH_NAMES_NL,
- 'no' => \@MONTH_NAMES_NO,
- 'pt' => \@MONTH_NAMES_PT
-};
-########################################################################
-# Control of Page layout:
-# You can make changes of the Page layout at two levels:
-# 1.) For small changes, it is often enough to change the value of
-# some global string/hash/array variables
-# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines,
-# give them another name, and assign them to the respective
-# $T2H_<fnc> variable.
-
-# As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold
-# href, html-name, node-name of
-# This -- current section (resp. html page)
-# Top -- top page ($T2H_TOP_FILE)
-# Contents -- Table of contents
-# Overview -- Short table of contents
-# Index -- Index page
-# About -- page which explain "navigation buttons"
-# First -- first node
-# Last -- last node
-#
-# Whether or not the following hash values are set, depends on the context
-# (all values are w.r.t. 'This' section)
-# Next -- next node of texinfo
-# Prev -- previous node of texinfo
-# Up -- up node of texinfo
-# Forward -- next node in reading order
-# Back -- previous node in reading order
-# FastForward -- if leave node, up and next, else next node
-# FastBackward-- if leave node, up and prev, else prev node
-#
-# Furthermore, the following global variabels are set:
-# $T2H_THISDOC{title} -- title as set by @setttile
-# $T2H_THISDOC{fulltitle} -- full title as set by @title...
-# $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle
-# $T2H_THISDOC{author} -- author as set by @author
-#
-# and pointer to arrays of lines which need to be printed by t2h_print_lines
-# $T2H_OVERVIEW -- lines of short table of contents
-# $T2H_TOC -- lines of table of contents
-# $T2H_TOP -- lines of Top texinfo node
-# $T2H_THIS_SECTION -- lines of 'This' section
-
-#
-# There are the following subs which control the layout:
-#
-$T2H_print_section = \&T2H_DEFAULT_print_section;
-$T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header;
-$T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer;
-$T2H_print_Top = \&T2H_DEFAULT_print_Top;
-$T2H_print_Toc = \&T2H_DEFAULT_print_Toc;
-$T2H_print_Overview = \&T2H_DEFAULT_print_Overview;
-$T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes;
-$T2H_print_About = \&T2H_DEFAULT_print_About;
-$T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header;
-$T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer;
-$T2H_print_misc = \&T2H_DEFAULT_print_misc;
-$T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header;
-$T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer;
-$T2H_print_page_head = \&T2H_DEFAULT_print_page_head;
-$T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot;
-$T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation;
-$T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation;
-$T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img;
-$T2H_print_navigation = \&T2H_DEFAULT_print_navigation;
-$T2H_about_body = \&T2H_DEFAULT_about_body;
-$T2H_print_frame = \&T2H_DEFAULT_print_frame;
-$T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame;
-
-########################################################################
-# Layout for html for every sections
-#
-sub T2H_DEFAULT_print_section
-{
- my $fh = shift;
- local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS;
- &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION;
- my $nw = t2h_print_lines($fh);
- if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION)
- {
- &$T2H_print_foot_navigation($fh, $nw);
- }
- else
- {
- print $fh '<HR SIZE="6">' . "\n";
- }
-}
-
-###################################################################
-# Layout of top-page I recommend that you use @ifnothtml, @ifhtml,
-# @html within the Top texinfo node to specify content of top-level
-# page.
-#
-# If you enclose everything in @ifnothtml, then title, subtitle,
-# author and overview is printed
-# T2H_HREF of Next, Prev, Up, Forward, Back are not defined
-# if $T2H_SPLIT then Top page is in its own html file
-sub T2H_DEFAULT_print_Top_header
-{
- &$T2H_print_page_head(@_) if $T2H_SPLIT;
- t2h_print_label(@_); # this needs to be called, otherwise no label set
- &$T2H_print_head_navigation(@_);
-}
-sub T2H_DEFAULT_print_Top_footer
-{
- &$T2H_print_foot_navigation(@_);
- &$T2H_print_page_foot(@_) if $T2H_SPLIT;
-}
-sub T2H_DEFAULT_print_Top
-{
- my $fh = shift;
-
- # for redefining navigation buttons use:
- # local $T2H_BUTTONS = [...];
- # as it is, 'Top', 'Contents', 'Index', 'About' are printed
- local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
- &$T2H_print_Top_header($fh);
- if ($T2H_THIS_SECTION)
- {
- # if top-level node has content, then print it with extra header
- print $fh "<H1>$T2H_NAME{Top}</H1>"
- unless ($T2H_HAS_TOP_HEADING);
- t2h_print_lines($fh, $T2H_THIS_SECTION)
- }
- else
- {
- # top-level node is fully enclosed in @ifnothtml
- # print fulltitle, subtitle, author, Overview
- print $fh
- "<CENTER>\n<H1>" .
- join("</H1>\n<H1>", split(/\n/, $T2H_THISDOC{fulltitle})) .
- "</H1>\n";
- print $fh "<H2>$T2H_THISDOC{subtitle}</H2>\n" if $T2H_THISDOC{subtitle};
- print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author};
- print $fh <<EOT;
-</CENTER>
-<HR>
-<P></P>
-<H2> Overview: </H2>
-<BLOCKQUOTE>
-EOT
- t2h_print_lines($fh, $T2H_OVERVIEW);
- print $fh "</BLOCKQUOTE>\n";
- }
- &$T2H_print_Top_footer($fh);
-}
-
-###################################################################
-# Layout of Toc, Overview, and Footnotes pages
-# By default, we use "normal" layout
-# T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined
-# use: local $T2H_BUTTONS = [...] to redefine navigation buttons
-sub T2H_DEFAULT_print_Toc
-{
- return &$T2H_print_misc(@_);
-}
-sub T2H_DEFAULT_print_Overview
-{
- return &$T2H_print_misc(@_);
-}
-sub T2H_DEFAULT_print_Footnotes
-{
- return &$T2H_print_misc(@_);
-}
-sub T2H_DEFAULT_print_About
-{
- return &$T2H_print_misc(@_);
-}
-
-sub T2H_DEFAULT_print_misc_header
-{
- &$T2H_print_page_head(@_) if $T2H_SPLIT;
- # this needs to be called, otherwise, no labels are set
- t2h_print_label(@_);
- &$T2H_print_head_navigation(@_);
-}
-sub T2H_DEFAULT_print_misc_footer
-{
- &$T2H_print_foot_navigation(@_);
- &$T2H_print_page_foot(@_) if $T2H_SPLIT;
-}
-sub T2H_DEFAULT_print_misc
-{
- my $fh = shift;
- local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
- &$T2H_print_misc_header($fh);
- print $fh "<H1>$T2H_NAME{This}</H1>\n";
- t2h_print_lines($fh);
- &$T2H_print_misc_footer($fh);
-}
-
-###################################################################
-# chapter_header and chapter_footer are only called if
-# T2H_SPLIT eq 'chapter'
-# chapter_header: after print_page_header, before print_section
-# chapter_footer: after print_section of last section, before print_page_footer
-#
-# If you want to get rid of navigation stuff after each section,
-# redefine print_section such that it does not call print_navigation,
-# and put print_navigation into print_chapter_header
-@T2H_CHAPTER_BUTTONS =
- (
- 'FastBack', 'FastForward', ' ',
- ' ', ' ', ' ', ' ',
- 'Top', 'Contents', 'Index', 'About',
- );
-
-sub T2H_DEFAULT_print_chapter_header
-{
- # nothing to do there, by default
- if (! $T2H_SECTION_NAVIGATION)
- {
- my $fh = shift;
- local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
- &$T2H_print_navigation($fh);
- print $fh "\n<HR SIZE=2>\n";
- }
-}
-
-sub T2H_DEFAULT_print_chapter_footer
-{
- local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
- &$T2H_print_navigation(@_);
-}
-###################################################################
-$T2H_TODAY = &pretty_date; # like "20 September 1993"
-
-sub pretty_date {
- local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
-
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
- $year += ($year < 70) ? 2000 : 1900;
- # obachman: Let's do it as the Americans do
- return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year);
-}
-
-
-###################################################################
-# Layout of standard header and footer
-#
-
-# Set the default body text, inserted between <BODY ... >
-###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
-$T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
-# text inserted after <BODY ...>
-$T2H_AFTER_BODY_OPEN = '';
-#text inserted before </BODY>
-$T2H_PRE_BODY_CLOSE = '';
-# this is used in footer
-$T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER;
-$T2H_ADDRESS .= "on <I>$T2H_TODAY</I>";
-# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff
-# can be used for <style> <script>, <meta> tags
-$T2H_EXTRA_HEAD = '';
-
-sub T2H_DEFAULT_print_page_head
-{
- my $fh = shift;
- my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}";
- print $fh <<EOT;
-<HTML>
-$T2H_DOCTYPE
-<!-- Created on $T2H_TODAY by $THISPROG -->
-<!--
-$T2H_AUTHORS
--->
-<HEAD>
-<TITLE>$longtitle</TITLE>
-
-<META NAME="description" CONTENT="$longtitle">
-<META NAME="keywords" CONTENT="$longtitle">
-<META NAME="resource-type" CONTENT="document">
-<META NAME="distribution" CONTENT="global">
-<META NAME="Generator" CONTENT="$THISPROG">
-$T2H_EXTRA_HEAD
-</HEAD>
-
-<BODY $T2H_BODYTEXT>
-$T2H_AFTER_BODY_OPEN
-EOT
-}
-
-sub T2H_DEFAULT_print_page_foot
-{
- my $fh = shift;
- print $fh <<EOT;
-<BR>
-<FONT SIZE="-1">
-This document was generated
-$T2H_ADDRESS
-using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
-$T2H_PRE_BODY_CLOSE
-</BODY>
-</HTML>
-EOT
-}
-
-###################################################################
-# Layout of navigation panel
-
-# if this is set, then a vertical navigation panel is used
-$T2H_VERTICAL_HEAD_NAVIGATION = 0;
-sub T2H_DEFAULT_print_head_navigation
-{
- my $fh = shift;
- if ($T2H_VERTICAL_HEAD_NAVIGATION)
- {
- print $fh <<EOT;
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
-<TR VALIGN="TOP">
-<TD ALIGN="LEFT">
-EOT
- }
- &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION);
- if ($T2H_VERTICAL_HEAD_NAVIGATION)
- {
- print $fh <<EOT;
-</TD>
-<TD ALIGN="LEFT">
-EOT
- }
- elsif ($T2H_SPLIT eq 'section')
- {
- print $fh "<HR SIZE=1>\n";
- }
-}
-
-# Specifies the minimum page length required before a navigation panel
-# is placed at the bottom of a page (the default is that of latex2html)
-# T2H_THIS_WORDS_IN_PAGE holds number of words of current page
-$T2H_WORDS_IN_PAGE = 300;
-sub T2H_DEFAULT_print_foot_navigation
-{
- my $fh = shift;
- my $nwords = shift;
- if ($T2H_VERTICAL_HEAD_NAVIGATION)
- {
- print $fh <<EOT;
-</TD>
-</TR>
-</TABLE>
-EOT
- }
- print $fh "<HR SIZE=1>\n";
- &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE)
-}
-
-######################################################################
-# navigation panel
-#
-# specify in this array which "buttons" should appear in which order
-# in the navigation panel for sections; use ' ' for empty buttons (space)
-@T2H_SECTION_BUTTONS =
- (
- 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward',
- ' ', ' ', ' ', ' ',
- 'Top', 'Contents', 'Index', 'About',
- );
-
-# buttons for misc stuff
-@T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About');
-
-# insert here name of icon images for buttons
-# Icons are used, if $T2H_ICONS and resp. value are set
-%T2H_ACTIVE_ICONS =
- (
- 'Top', '',
- 'Contents', '',
- 'Overview', '',
- 'Index', '',
- 'Back', '',
- 'FastBack', '',
- 'Prev', '',
- 'Up', '',
- 'Next', '',
- 'Forward', '',
- 'FastForward', '',
- 'About' , '',
- 'First', '',
- 'Last', '',
- ' ', ''
- );
-
-# insert here name of icon images for these, if button is inactive
-%T2H_PASSIVE_ICONS =
- (
- 'Top', '',
- 'Contents', '',
- 'Overview', '',
- 'Index', '',
- 'Back', '',
- 'FastBack', '',
- 'Prev', '',
- 'Up', '',
- 'Next', '',
- 'Forward', '',
- 'FastForward', '',
- 'About', '',
- 'First', '',
- 'Last', '',
- );
-
-# how to create IMG tag
-sub T2H_DEFAULT_button_icon_img
-{
- my $button = shift;
- my $icon = shift;
- my $name = shift;
- return qq{<IMG SRC="$icon" BORDER="0" ALT="$button: $name" ALIGN="MIDDLE">};
-}
-
-# Names of text as alternative for icons
-%T2H_NAVIGATION_TEXT =
- (
- 'Top', 'Top',
- 'Contents', 'Contents',
- 'Overview', 'Overview',
- 'Index', 'Index',
- ' ', ' &nbsp; ',
- 'Back', ' &lt; ',
- 'FastBack', ' &lt;&lt; ',
- 'Prev', 'Prev',
- 'Up', ' Up ',
- 'Next', 'Next',
- 'Forward', ' &gt; ',
- 'FastForward', ' &gt;&gt; ',
- 'About', ' ? ',
- 'First', ' |&lt; ',
- 'Last', ' &gt;| '
- );
-
-sub T2H_DEFAULT_print_navigation
-{
- my $fh = shift;
- my $vertical = shift;
- my $spacing = 1;
- print $fh "<TABLE CELLPADDING=$spacing CELLSPACING=$spacing BORDER=0>\n";
-
- print $fh "<TR>" unless $vertical;
- for $button (@$T2H_BUTTONS)
- {
- print $fh qq{<TR VALIGN="TOP" ALIGN="LEFT">\n} if $vertical;
- print $fh qq{<TD VALIGN="MIDDLE" ALIGN="LEFT">};
-
- if (ref($button) eq 'CODE')
- {
- &$button($fh, $vertical);
- }
- elsif ($button eq ' ')
- { # handle space button
- print $fh
- $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ?
- &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) :
- $T2H_NAVIGATION_TEXT{' '};
- next;
- }
- elsif ($T2H_HREF{$button})
- { # button is active
- print $fh
- $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ?
- t2h_anchor('', $T2H_HREF{$button}, # yes
- &$T2H_button_icon_img($button,
- $T2H_ACTIVE_ICONS{$button},
- $T2H_NAME{$button}))
- : # use text
- "[" .
- t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) .
- "]";
- }
- else
- { # button is passive
- print $fh
- $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ?
- &$T2H_button_icon_img($button,
- $T2H_PASSIVE_ICONS{$button},
- $T2H_NAME{$button}) :
-
- "[" . $T2H_NAVIGATION_TEXT{$button} . "]";
- }
- print $fh "</TD>\n";
- print $fh "</TR>\n" if $vertical;
- }
- print $fh "</TR>" unless $vertical;
- print $fh "</TABLE>\n";
-}
-
-######################################################################
-# Frames: this is from "Richard Y. Kim" <ryk@coho.net>
-# Should be improved to be more conforming to other _print* functions
-
-sub T2H_DEFAULT_print_frame
-{
- my $fh = shift;
- print $fh <<EOT;
-<HTML>
-<HEAD><TITLE>$T2H_THISDOC{title}</TITLE></HEAD>
-<FRAMESET cols="140,*">
- <FRAME name=toc src="$docu_toc_frame_file">
- <FRAME name=main src="$docu_doc">
-</FRAMESET>
-</HTML>
-EOT
-}
-
-sub T2H_DEFAULT_print_toc_frame
-{
- my $fh = shift;
- &$T2H_print_page_head($fh);
- print $fh <<EOT;
-<H2>Content</H2>
-EOT
- print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines;
- print $fh "</BODY></HTML>\n";
-}
-
-######################################################################
-# About page
-#
-
-# T2H_PRE_ABOUT might be a function
-$T2H_PRE_ABOUT = <<EOT;
-This document was generated $T2H_ADDRESS
-using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
-<P></P>
-EOT
-$T2H_AFTER_ABOUT = '';
-
-sub T2H_DEFAULT_about_body
-{
- my $about;
- if (ref($T2H_PRE_ABOUT) eq 'CODE')
- {
- $about = &$T2H_PRE_ABOUT();
- }
- else
- {
- $about = $T2H_PRE_ABOUT;
- }
- $about .= <<EOT;
-The buttons in the navigation panels have the following meaning:
-<P></P>
-<table border = "1">
-<TR>
-<TH> Button </TH>
-<TH> Name </TH>
-<TH> Go to </TH>
-<TH> From 1.2.3 go to</TH>
-</TR>
-EOT
-
- for $button (@T2H_SECTION_BUTTONS)
- {
- next if $button eq ' ' || ref($button) eq 'CODE';
- $about .= <<EOT;
-<TR>
-<TD ALIGN="CENTER">
-EOT
- $about .=
- ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ?
- &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) :
- " [" . $T2H_NAVIGATION_TEXT{$button} . "] ");
- $about .= <<EOT;
-</TD>
-<TD ALIGN="CENTER">
-$button
-</TD>
-<TD>
-$T2H_BUTTONS_GOTO{$button}
-</TD>
-<TD>
-$T2H_BUTTONS_EXAMPLE{$button}
-</TD>
-</TR>
-EOT
- }
-
- $about .= <<EOT;
-</TABLE>
-<P></P>
-where the <STRONG> Example </STRONG> assumes that the current position
-is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
-the following structure:
-<UL>
-<LI> 1. Section One </LI>
-<UL>
-<LI>1.1 Subsection One-One</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.2 Subsection One-Two</LI>
-<UL>
-<LI>1.2.1 Subsubsection One-Two-One
-</LI><LI>1.2.2 Subsubsection One-Two-Two
-</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
-&lt;== Current Position </STRONG>
-</LI><LI>1.2.4 Subsubsection One-Two-Four
-</LI></UL>
-<LI>1.3 Subsection One-Three</LI>
-<UL>
-<LI> ... </LI>
-</UL>
-<LI>1.4 Subsection One-Four</LI>
-</UL>
-</UL>
-$T2H_AFTER_ABOUT
-EOT
- return $about;
-}
-
-
-%T2H_BUTTONS_GOTO =
- (
- 'Top', 'cover (top) of document',
- 'Contents', 'table of contents',
- 'Overview', 'short table of contents',
- 'Index', 'concept index',
- 'Back', 'previous section in reading order',
- 'FastBack', 'previous or up-and-previous section ',
- 'Prev', 'previous section same level',
- 'Up', 'up section',
- 'Next', 'next section same level',
- 'Forward', 'next section in reading order',
- 'FastForward', 'next or up-and-next section',
- 'About' , 'this page',
- 'First', 'first section in reading order',
- 'Last', 'last section in reading order',
- );
-
-%T2H_BUTTONS_EXAMPLE =
-(
- 'Top', ' &nbsp; ',
- 'Contents', ' &nbsp; ',
- 'Overview', ' &nbsp; ',
- 'Index', ' &nbsp; ',
- 'Back', '1.2.2',
- 'FastBack', '1.1',
- 'Prev', '1.2.2',
- 'Up', '1.2',
- 'Next', '1.2.4',
- 'Forward', '1.2.4',
- 'FastForward', '1.3',
- 'About', ' &nbsp; ',
- 'First', '1.',
- 'Last', '1.2.4',
-);
-
-
-######################################################################
-# from here on, its l2h init stuff
-#
-
-## initialization for latex2html as for Singular manual generation
-## obachman 3/99
-
-#
-# Options controlling Titles, File-Names, Tracing and Sectioning
-#
-$TITLE = '';
-
-$SHORTEXTN = 0;
-
-$LONG_TITLES = 0;
-
-$DESTDIR = ''; # should be overwritten by cmd-line argument
-
-$NO_SUBDIR = 0;# should be overwritten by cmd-line argument
-
-$PREFIX = ''; # should be overwritten by cmd-line argument
-
-$AUTO_PREFIX = 0; # this is needed, so that prefix settings are used
-
-$AUTO_LINK = 0;
-
-$SPLIT = 0;
-
-$MAX_LINK_DEPTH = 0;
-
-$TMP = ''; # should be overwritten by cmd-line argument
-
-$DEBUG = 0;
-
-$VERBOSE = 1;
-
-#
-# Options controlling Extensions and Special Features
-#
-$HTML_VERSION = "3.2";
-
-$TEXDEFS = 1; # we absolutely need that
-
-$EXTERNAL_FILE = '';
-
-$SCALABLE_FONTS = 1;
-
-$NO_SIMPLE_MATH = 1;
-
-$LOCAL_ICONS = 1;
-
-$SHORT_INDEX = 0;
-
-$NO_FOOTNODE = 1;
-
-$ADDRESS = '';
-
-$INFO = '';
-
-#
-# Switches controlling Image Generation
-#
-$ASCII_MODE = 0;
-
-$NOLATEX = 0;
-
-$EXTERNAL_IMAGES = 0;
-
-$PS_IMAGES = 0;
-
-$NO_IMAGES = 0;
-
-$IMAGES_ONLY = 0;
-
-$REUSE = 2;
-
-$ANTI_ALIAS = 1;
-
-$ANTI_ALIAS_TEXT = 1;
-
-#
-#Switches controlling Navigation Panels
-#
-$NO_NAVIGATION = 1;
-$ADDRESS = '';
-$INFO = 0; # 0 = do not make a "About this document..." section
-
-#
-#Switches for Linking to other documents
-#
-# actuall -- we don't care
-
-$MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth
-
-$MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth
-
-$NOLATEX = 0; # 1 = do not pass unknown environments to Latex
-
-$EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document
-
-$ASCII_MODE = 0; # 1 = do not use any icons or internal images
-
-# 1 = use links to external postscript images rather than inlined bitmap
-# images.
-$PS_IMAGES = 0;
-$SHOW_SECTION_NUMBERS = 0;
-
-### Other global variables ###############################################
-$CHILDLINE = "";
-
-# This is the line width measured in pixels and it is used to right justify
-# equations and equation arrays;
-$LINE_WIDTH = 500;
-
-# Used in conjunction with AUTO_NAVIGATION
-$WORDS_IN_PAGE = 300;
-
-# Affects ONLY the way accents are processed
-$default_language = 'english';
-
-# The value of this variable determines how many words to use in each
-# title that is added to the navigation panel (see below)
-#
-$WORDS_IN_NAVIGATION_PANEL_TITLES = 0;
-
-# This number will determine the size of the equations, special characters,
-# and anything which will be converted into an inlined image
-# *except* "image generating environments" such as "figure", "table"
-# or "minipage".
-# Effective values are those greater than 0.
-# Sensible values are between 0.1 - 4.
-$MATH_SCALE_FACTOR = 1.5;
-
-# This number will determine the size of
-# image generating environments such as "figure", "table" or "minipage".
-# Effective values are those greater than 0.
-# Sensible values are between 0.1 - 4.
-$FIGURE_SCALE_FACTOR = 1.6;
-
-
-# If both of the following two variables are set then the "Up" button
-# of the navigation panel in the first node/page of a converted document
-# will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set
-# to some text which describes this external link.
-$EXTERNAL_UP_LINK = "";
-$EXTERNAL_UP_TITLE = "";
-
-# If this is set then the resulting HTML will look marginally better if viewed
-# with Netscape.
-$NETSCAPE_HTML = 1;
-
-# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0"
-# Paper sizes has no effect other than in the time it takes to create inlined
-# images and in whether large images can be created at all ie
-# - larger paper sizes *MAY* help with large image problems
-# - smaller paper sizes are quicker to handle
-$PAPERSIZE = "a4";
-
-# Replace "english" with another language in order to tell LaTeX2HTML that you
-# want some generated section titles (eg "Table of Contents" or "References")
-# to appear in a different language. Currently only "english" and "french"
-# is supported but it is very easy to add your own. See the example in the
-# file "latex2html.config"
-$TITLES_LANGUAGE = "english";
-
-1; # This must be the last non-comment line
-
-# End File texi2html.init
-######################################################################
-
-
-require "$ENV{T2H_HOME}/texi2html.init"
- if ($0 =~ /\.pl$/ &&
- -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
-
-#+++############################################################################
-# #
-# Initialization #
-# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing #
-# #
-#---############################################################################
-
-# leave this within comments, and keep the require statement
-# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
-# exists.
-
-#
-package Getopt::MySimple;
-
-# Name:
-# Getopt::MySimple.
-#
-# Documentation:
-# POD-style (incomplete) documentation is in file MySimple.pod
-#
-# Tabs:
-# 4 spaces || die.
-#
-# Author:
-# Ron Savage rpsavage@ozemail.com.au.
-# 1.00 19-Aug-97 Initial version.
-# 1.10 13-Oct-97 Add arrays of switches (eg '=s@').
-# 1.20 3-Dec-97 Add 'Help' on a per-switch basis.
-# 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase.
-# 1.40 10-Nov-98 Change width of help report. Restructure tests.
-# 1-Jul-00 Modifications for Texi2html
-
-# --------------------------------------------------------------------------
-# Locally modified by obachman (Display type instead of env, order by cmp)
-# $Id: MySimple.pm,v 1.1 2000/07/03 08:44:13 obachman Exp $
-
-# use strict;
-# no strict 'refs';
-
-use vars qw(@EXPORT @EXPORT_OK @ISA);
-use vars qw($fieldWidth $opt $VERSION);
-
-use Exporter();
-use Getopt::Long;
-
-@ISA = qw(Exporter);
-@EXPORT = qw();
-@EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}.
-
-# --------------------------------------------------------------------------
-
-$fieldWidth = 20;
-$VERSION = '1.41';
-
-# --------------------------------------------------------------------------
-
-sub byOrder
-{
- my($self) = @_;
-
- return uc($a) cmp (uc($b));
-}
-
-# --------------------------------------------------------------------------
-
-sub dumpOptions
-{
- my($self) = @_;
-
- print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n";
-
- for (sort byOrder keys(%{$self -> {'opt'} }) )
- {
- print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n";
- }
-
- print "\n";
-
-} # End of dumpOptions.
-
-# --------------------------------------------------------------------------
-# Return:
-# 0 -> Error.
-# 1 -> Ok.
-
-sub getOptions
-{
- push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0.
- push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1.
-
- my($self, $default, $helpText, $versionText,
- $helpThenExit, $versionThenExit, $ignoreCase) = @_;
-
- $helpThenExit = 1 unless (defined($helpThenExit));
- $versionThenExit = 1 unless (defined($versionThenExit));
- $ignoreCase = 0 unless (defined($ignoreCase));
-
- $self -> {'default'} = $default;
- $self -> {'helpText'} = $helpText;
- $self -> {'versionText'} = $versionText;
- $Getopt::Long::ignorecase = $ignoreCase;
-
- unless (defined($self -> {'default'}{'help'}))
- {
- $self -> {'default'}{'help'} =
- {
- type => ':i',
- default => '',
- linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;},
- verbose => "print help and exit"
- };
- }
-
- unless (defined($self -> {'default'}{'version'}))
- {
- $self -> {'default'}{'version'} =
- {
- type => '',
- default => '',
- linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;},
- verbose => "print version and exit"
- };
- }
-
- for (keys(%{$self -> {'default'} }) )
- {
- my $type = ${$self -> {'default'} }{$_}{'type'};
- push(@{$self -> {'type'} }, "$_$type");
- $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'}
- if ${$self -> {'default'} }{$_}{'linkage'};
- }
-
- my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} });
-
- return $result unless $result;
-
- for (keys(%{$self -> {'default'} }) )
- {
- if (! defined(${$self -> {'opt'} }{$_})) #{
- {
- ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'};
- }
- }
-
- $result;
-} # End of getOptions.
-
-# --------------------------------------------------------------------------
-
-sub helpOptions
-{
- my($self) = shift;
- my($noHelp) = shift;
- $noHelp = 0 unless $noHelp;
- my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth)
- = (10, 5, 9, 78, 4, 11);
-
- print "$self->{'helpText'}" if ($self -> {'helpText'});
-
- print ' Option', ' ' x ($optwidth - length('Option') -1 ),
- 'Type', ' ' x ($typewidth - length('Type') + 1),
- 'Default', ' ' x ($defaultwidth - length('Default') ),
- "Description\n";
-
- for (sort byOrder keys(%{$self -> {'default'} }) )
- {
- my($line, $help, $option, $val);
- $option = $_;
- next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp;
- $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) .
- "${$self->{'default'} }{$_}{'type'} ".
- ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) ));
-
- $val = ${$self->{'default'} }{$_}{'linkage'};
- if ($val)
- {
- if (ref($val) eq 'SCALAR')
- {
- $val = $$val;
- }
- else
- {
- $val = '';
- }
- }
- else
- {
- $val = ${$self->{'default'} }{$_}{'default'};
- }
- $line .= "$val ";
- $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line));
-
- if (defined(${$self -> {'default'} }{$_}{'verbose'}) &&
- ${$self -> {'default'} }{$_}{'verbose'} ne '')
- {
- $help = "${$self->{'default'} }{$_}{'verbose'}";
- }
- else
- {
- $help = ' ';
- }
- if ((length("$line") + length($help)) < $maxlinewidth)
- {
- print $line , $help, "\n";
- }
- else
- {
- print $line, "\n", ' ' x $valind, $help, "\n";
- }
- for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}}))
- {
- print ' ' x ($valind + 2);
- print $val, ' ', ' ' x ($valwidth - length($val) - 2);
- print ${$self->{'default'}}{$option}{'values'}{$val}, "\n";
- }
- }
-
- print <<EOT;
-Note: 'Options' may be abbreviated. 'Type' specifications mean:
- <none>| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo)
- =s | :s mandatory (or, optional) string argument
- =i | :i mandatory (or, optional) integer argument
-EOT
-} # End of helpOptions.
-
-#-------------------------------------------------------------------
-
-sub new
-{
- my($class) = @_;
- my($self) = {};
- $self -> {'default'} = {};
- $self -> {'helpText'} = '';
- $self -> {'opt'} = {};
- $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}.
- $self -> {'type'} = ();
-
- return bless $self, $class;
-
-} # End of new.
-
-# --------------------------------------------------------------------------
-
-1;
-
-# End MySimple.pm
-
-require "$ENV{T2H_HOME}/MySimple.pm"
- if ($0 =~ /\.pl$/ &&
- -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
-
-package main;
-
-#+++############################################################################
-# #
-# Constants #
-# #
-#---############################################################################
-
-$DEBUG_TOC = 1;
-$DEBUG_INDEX = 2;
-$DEBUG_BIB = 4;
-$DEBUG_GLOSS = 8;
-$DEBUG_DEF = 16;
-$DEBUG_HTML = 32;
-$DEBUG_USER = 64;
-$DEBUG_L2H = 128;
-
-
-$BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference
-$FILERE = '[\/\w.+-]+'; # RE for a file name
-$VARRE = '[^\s\{\}]+'; # RE for a variable name
-$NODERE = '[^,:]+'; # RE for a node name
-$NODESRE = '[^:]+'; # RE for a list of node names
-
-$ERROR = "***"; # prefix for errors
-$WARN = "**"; # prefix for warnings
-
- # program home page
-$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections
-
-$CHAPTEREND = "<!-- End chapter -->\n"; # to know where a chpater ends
-$SECTIONEND = "<!-- End section -->\n"; # to know where section ends
-$TOPEND = "<!-- End top -->\n"; # to know where top ends
-
-
-
-#
-# pre-defined indices
-#
-$index_properties =
-{
- 'c' => { name => 'cp'},
- 'f' => { name => 'fn', code => 1},
- 'v' => { name => 'vr', code => 1},
- 'k' => { name => 'ky', code => 1},
- 'p' => { name => 'pg', code => 1},
- 't' => { name => 'tp', code => 1}
-};
-
-
-%predefined_index = (
- 'cp', 'c',
- 'fn', 'f',
- 'vr', 'v',
- 'ky', 'k',
- 'pg', 'p',
- 'tp', 't',
- );
-
-#
-# valid indices
-#
-%valid_index = (
- 'c', 1,
- 'f', 1,
- 'v', 1,
- 'k', 1,
- 'p', 1,
- 't', 1,
- );
-
-#
-# texinfo section names to level
-#
-%sec2level = (
- 'top', 0,
- 'chapter', 1,
- 'unnumbered', 1,
- 'majorheading', 1,
- 'chapheading', 1,
- 'appendix', 1,
- 'section', 2,
- 'unnumberedsec', 2,
- 'heading', 2,
- 'appendixsec', 2,
- 'appendixsection', 2,
- 'subsection', 3,
- 'unnumberedsubsec', 3,
- 'subheading', 3,
- 'appendixsubsec', 3,
- 'subsubsection', 4,
- 'unnumberedsubsubsec', 4,
- 'subsubheading', 4,
- 'appendixsubsubsec', 4,
- );
-
-#
-# accent map, TeX command to ISO name
-#
-%accent_map = (
- '"', 'uml',
- '~', 'tilde',
- '^', 'circ',
- '`', 'grave',
- '\'', 'acute',
- );
-
-#
-# texinfo "simple things" (@foo) to HTML ones
-#
-%simple_map = (
- # cf. makeinfo.c
- "*", "<BR>", # HTML+
- " ", " ",
- "\t", " ",
- "-", "&#173;", # soft hyphen
- "\n", "\n",
- "|", "",
- 'tab', '<\/TD><TD>',
- # spacing commands
- ":", "",
- "!", "!",
- "?", "?",
- ".", ".",
- "-", "",
- );
-
-#
-# texinfo "things" (@foo{}) to HTML ones
-#
-%things_map = (
- 'TeX', 'TeX',
- 'br', '<P>', # paragraph break
- 'bullet', '*',
- 'copyright', '(C)',
- 'dots', '<small>...<\/small>',
- 'enddots', '<small>....<\/small>',
- 'equiv', '==',
- 'error', 'error-->',
- 'expansion', '==>',
- 'minus', '-',
- 'point', '-!-',
- 'print', '-|',
- 'result', '=>',
- 'today', $T2H_TODAY,
- 'aa', '&aring;',
- 'AA', '&Aring;',
- 'ae', '&aelig;',
- 'oe', '&#156;',
- 'AE', '&AElig;',
- 'OE', '&#140;',
- 'o', '&oslash;',
- 'O', '&Oslash;',
- 'ss', '&szlig;',
- 'l', '\/l',
- 'L', '\/L',
- 'exclamdown', '&iexcl;',
- 'questiondown', '&iquest;',
- 'pounds', '&pound;'
- );
-
-#
-# texinfo styles (@foo{bar}) to HTML ones
-#
-%style_map = (
- 'acronym', '&do_acronym',
- 'asis', '',
- 'b', 'B',
- 'cite', 'CITE',
- 'code', 'CODE',
- 'command', 'CODE',
- 'ctrl', '&do_ctrl', # special case
- 'dfn', 'EM', # DFN tag is illegal in the standard
- 'dmn', '', # useless
- 'email', '&do_email', # insert a clickable email address
- 'emph', 'EM',
- 'env', 'CODE',
- 'file', '"TT', # will put quotes, cf. &apply_style
- 'i', 'I',
- 'kbd', 'KBD',
- 'key', 'KBD',
- 'math', '&do_math',
- 'option', '"SAMP', # will put quotes, cf. &apply_style
- 'r', '', # unsupported
- 'samp', '"SAMP', # will put quotes, cf. &apply_style
- 'sc', '&do_sc', # special case
- 'strong', 'STRONG',
- 't', 'TT',
- 'titlefont', '', # useless
- 'uref', '&do_uref', # insert a clickable URL
- 'url', '&do_url', # insert a clickable URL
- 'var', 'VAR',
- 'w', '', # unsupported
- 'H', '&do_accent',
- 'dotaccent', '&do_accent',
- 'ringaccent','&do_accent',
- 'tieaccent', '&do_accent',
- 'u','&do_accent',
- 'ubaraccent','&do_accent',
- 'udotaccent','&do_accent',
- 'v', '&do_accent',
- ',', '&do_accent',
- 'dotless', '&do_accent'
- );
-
-#
-# texinfo format (@foo/@end foo) to HTML ones
-#
-%format_map = (
- 'quotation', 'BLOCKQUOTE',
- # lists
- 'itemize', 'UL',
- 'enumerate', 'OL',
- # poorly supported
- 'flushleft', 'PRE',
- 'flushright', 'PRE',
- );
-
-#
-# an eval of these $complex_format_map->{what}->[0] yields beginning
-# an eval of these $complex_format_map->{what}->[1] yieleds end
-$complex_format_map =
-{
- example =>
- [
- q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=example><pre>"},
- q{'</pre></td></tr></table>'}
- ],
- smallexample =>
- [
- q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smallexample><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre>"},
- q{'</FONT></pre></td></tr></table>'}
- ],
- display =>
- [
- q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=display><pre " . 'style="font-family: serif">'},
- q{'</pre></td></tr></table>'}
- ],
- smalldisplay =>
- [
- q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smalldisplay><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre " . 'style="font-family: serif">'},
- q{'</pre></FONT></td></tr></table>'}
- ]
-};
-
-$complex_format_map->{lisp} = $complex_format_map->{example};
-$complex_format_map->{smalllisp} = $complex_format_map->{smallexample};
-$complex_format_map->{format} = $complex_format_map->{display};
-$complex_format_map->{smallformat} = $complex_format_map->{smalldisplay};
-
-#
-# texinfo definition shortcuts to real ones
-#
-%def_map = (
- # basic commands
- 'deffn', 0,
- 'defvr', 0,
- 'deftypefn', 0,
- 'deftypevr', 0,
- 'defcv', 0,
- 'defop', 0,
- 'deftp', 0,
- # basic x commands
- 'deffnx', 0,
- 'defvrx', 0,
- 'deftypefnx', 0,
- 'deftypevrx', 0,
- 'defcvx', 0,
- 'defopx', 0,
- 'deftpx', 0,
- # shortcuts
- 'defun', 'deffn Function',
- 'defmac', 'deffn Macro',
- 'defspec', 'deffn {Special Form}',
- 'defvar', 'defvr Variable',
- 'defopt', 'defvr {User Option}',
- 'deftypefun', 'deftypefn Function',
- 'deftypevar', 'deftypevr Variable',
- 'defivar', 'defcv {Instance Variable}',
- 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME
- 'defmethod', 'defop Method',
- 'deftypemethod', 'defop Method', # NEW:FIXME
- # x shortcuts
- 'defunx', 'deffnx Function',
- 'defmacx', 'deffnx Macro',
- 'defspecx', 'deffnx {Special Form}',
- 'defvarx', 'defvrx Variable',
- 'defoptx', 'defvrx {User Option}',
- 'deftypefunx', 'deftypefnx Function',
- 'deftypevarx', 'deftypevrx Variable',
- 'defivarx', 'defcvx {Instance Variable}',
- 'defmethodx', 'defopx Method',
- );
-
-#
-# things to skip
-#
-%to_skip = (
- # comments
- 'c', 1,
- 'comment', 1,
- 'ifnotinfo', 1,
- 'ifnottex', 1,
- 'ifhtml', 1,
- 'end ifhtml', 1,
- 'end ifnotinfo', 1,
- 'end ifnottex', 1,
- # useless
- 'detailmenu', 1,
- 'direntry', 1,
- 'contents', 1,
- 'shortcontents', 1,
- 'summarycontents', 1,
- 'footnotestyle', 1,
- 'end ifclear', 1,
- 'end ifset', 1,
- 'titlepage', 1,
- 'end titlepage', 1,
- # unsupported commands (formatting)
- 'afourpaper', 1,
- 'cropmarks', 1,
- 'finalout', 1,
- 'headings', 1,
- 'sp', 1,
- 'need', 1,
- 'page', 1,
- 'setchapternewpage', 1,
- 'everyheading', 1,
- 'everyfooting', 1,
- 'evenheading', 1,
- 'evenfooting', 1,
- 'oddheading', 1,
- 'oddfooting', 1,
- 'smallbook', 1,
- 'vskip', 1,
- 'filbreak', 1,
- 'paragraphindent', 1,
- # unsupported formats
- 'cartouche', 1,
- 'end cartouche', 1,
- 'group', 1,
- 'end group', 1,
- );
-
-#+++############################################################################
-# #
-# Argument parsing, initialisation #
-# #
-#---############################################################################
-
-#
-# flush stdout and stderr after every write
-#
-select(STDERR);
-$| = 1;
-select(STDOUT);
-$| = 1;
-
-
-%value = (); # hold texinfo variables, see also -D
-$use_bibliography = 1;
-$use_acc = 1;
-
-#
-# called on -init-file
-sub LoadInitFile
-{
- my $init_file = shift;
- # second argument is value of options
- $init_file = shift;
- if (-f $init_file)
- {
- print "# reading initialization file from $init_file\n"
- if ($T2H_VERBOSE);
- require($init_file);
- }
- else
- {
- print "$ERROR Error: can't read init file $int_file\n";
- $init_file = '';
- }
-}
-
-#
-# called on -lang
-sub SetDocumentLanguage
-{
- my $lang = shift;
- if (! exists($T2H_WORDS->{$lang}))
- {
- warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" .
- ($T2H_LANG ? T2H_LANG : "en") . "'\n";
- }
- else
- {
- print "# using '$lang' as document language\n" if ($T2H_VERBOSE);
- $T2H_LANG = $lang;
- }
-}
-
-##
-## obsolete cmd line options
-##
-$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} =
-{
- type => '!',
- linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;},
- verbose => 'obsolete, use -nosec_nav',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {use_acc} =
-{
- type => '!',
- linkage => \$use_acc,
- verbose => 'obsolete',
- noHelp => 2
-};
-$T2H_OBSOLETE_OPTIONS -> {expandinfo} =
-{
- type => '!',
- linkage => sub {$main::T2H_EXPAND = 'info';},
- verbose => 'obsolete, use "-expand info" instead',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {expandtex} =
-{
- type => '!',
- linkage => sub {$main::T2H_EXPAND = 'tex';},
- verbose => 'obsolete, use "-expand tex" instead',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {monolithic} =
-{
- type => '!',
- linkage => sub {$main::T2H_SPLIT = '';},
- verbose => 'obsolete, use "-split no" instead',
- noHelp => 2
-};
-$T2H_OBSOLETE_OPTIONS -> {split_node} =
-{
- type => '!',
- linkage => sub{$main::T2H_SPLIT = 'section';},
- verbose => 'obsolete, use "-split section" instead',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {split_chapter} =
-{
- type => '!',
- linkage => sub{$main::T2H_SPLIT = 'chapter';},
- verbose => 'obsolete, use "-split chapter" instead',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {no_verbose} =
-{
- type => '!',
- linkage => sub {$main::T2H_VERBOSE = 0;},
- verbose => 'obsolete, use -noverbose instead',
- noHelp => 2,
-};
-$T2H_OBSOLETE_OPTIONS -> {output_file} =
-{
- type => '=s',
- linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
- verbose => 'obsolete, use -out_file instead',
- noHelp => 2
-};
-
-$T2H_OBSOLETE_OPTIONS -> {section_navigation} =
-{
- type => '!',
- linkage => \$T2H_SECTION_NAVIGATION,
- verbose => 'obsolete, use -sec_nav instead',
- noHelp => 2,
-};
-
-$T2H_OBSOLETE_OPTIONS -> {verbose} =
-{
- type => '!',
- linkage => \$T2H_VERBOSE,
- verbose => 'obsolete, use -Verbose instead',
- noHelp => 2
-};
-
-# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc
-my $home = $ENV{HOME};
-defined($home) or $home = '';
-foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") {
- if (-f $i) {
- print "# reading initialization file from $i\n"
- if ($T2H_VERBOSE);
- require($i);
- }
-}
-
-
-#+++############################################################################
-# #
-# parse command-line options
-# #
-#---############################################################################
-$T2H_USAGE_TEXT = <<EOT;
-Usage: texi2html [OPTIONS] TEXINFO-FILE
-Translates Texinfo source documentation to HTML.
-EOT
-$T2H_FAILURE_TEXT = <<EOT;
-Try 'texi2html -help' for usage instructions.
-EOT
-$options = new Getopt::MySimple;
-
-# some older version of GetOpt::Long don't have
-# Getopt::Long::Configure("pass_through")
-eval {Getopt::Long::Configure("pass_through");};
-$Configure_failed = $@ && <<EOT;
-**WARNING: Parsing of obsolete command-line options could have failed.
- Consider to use only documented command-line options (run
- 'texi2html -help 2' for a complete list) or upgrade to perl
- version 5.005 or higher.
-EOT
-
-if (! $options->getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
-{
- print $Configure_failed if $Configure_failed;
- die $T2H_FAILURE_TEXT;
-}
-
-if (@ARGV > 1)
-{
- eval {Getopt::Long::Configure("no_pass_through");};
- if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
- {
- print $Configure_failed if $Configure_failed;
- die $T2H_FAILURE_TEXT;
- }
-}
-
-if ($T2H_CHECK) {
- die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0;
- &check;
- exit;
-}
-
-#+++############################################################################
-# #
-# evaluation of cmd line options
-# #
-#---############################################################################
-
-if ($T2H_EXPAND eq 'info')
-{
- $to_skip{'ifinfo'} = 1;
- $to_skip{'end ifinfo'} = 1;
-}
-elsif ($T2H_EXPAND eq 'tex')
-{
- $to_skip{'iftex'} = 1;
- $to_skip{'end iftex'} = 1;
-
-}
-
-$T2H_INVISIBLE_MARK = '<IMG SRC="invisible.xbm">' if $T2H_INVISIBLE_MARK eq 'xbm';
-
-#
-# file name buisness
-#
-die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1;
-$docu = shift(@ARGV);
-if ($docu =~ /.*\//) {
- chop($docu_dir = $&);
- $docu_name = $';
-} else {
- $docu_dir = '.';
- $docu_name = $docu;
-}
-unshift(@T2H_INCLUDE_DIRS, $docu_dir);
-$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document
-$docu_name = $T2H_PREFIX if ($T2H_PREFIX);
-
-# subdir
-if ($T2H_SUBDIR && ! $T2H_OUT)
-{
- $T2H_SUBDIR =~ s|/*$||;
- unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR")
- {
- if ( mkdir($T2H_SUBDIR, oct(755)))
- {
- print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE);
- }
- else
- {
- warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n";
- $T2H_SUBDIR = '';
- }
- }
-}
-
-if ($T2H_SUBDIR && ! $T2H_OUT)
-{
- $docu_rdir = "$T2H_SUBDIR/";
- print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
-}
-else
-{
- if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|)
- {
- $docu_rdir = "$1/";
- print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
- }
- else
- {
- print "# putting result files into current directory \n" if ($T2H_VERBOSE);
- $docu_rdir = '';
- }
-}
-
-# extension
-if ($T2H_SHORTEXTN)
-{
- $docu_ext = "htm";
-}
-else
-{
- $docu_ext = "html";
-}
-if ($T2H_TOP_FILE =~ /\..*$/)
-{
- $T2H_TOP_FILE = $`.".$docu_ext";
-}
-
-# result files
-if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i))
-{
- $T2H_SPLIT = 'section';
-}
-elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i)
-{
- $T2H_SPLIT = 'chapter'
-}
-else
-{
- undef $T2H_SPLIT;
-}
-
-$docu_doc = "$docu_name.$docu_ext"; # document's contents
-$docu_doc_file = "$docu_rdir$docu_doc";
-if ($T2H_SPLIT)
-{
- $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents
- $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc
- $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes
- $docu_about = "${docu_name}_abt.$docu_ext"; # about this document
- $docu_top = $T2H_TOP_FILE || $docu_doc;
-}
-else
-{
- if ($T2H_OUT)
- {
- $docu_doc = $T2H_OUT;
- $docu_doc =~ s|.*/||;
- }
- $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc;
-}
-
-$docu_toc_file = "$docu_rdir$docu_toc";
-$docu_stoc_file = "$docu_rdir$docu_stoc";
-$docu_foot_file = "$docu_rdir$docu_foot";
-$docu_about_file = "$docu_rdir$docu_about";
-$docu_top_file = "$docu_rdir$docu_top";
-
-$docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext";
-$docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext";
-
-#
-# variables
-#
-$value{'html'} = 1; # predefine html (the output format)
-$value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator)
-# _foo: internal to track @foo
-foreach ('_author', '_title', '_subtitle',
- '_settitle', '_setfilename', '_shorttitle') {
- $value{$_} = ''; # prevent -w warnings
-}
-%node2sec = (); # node to section name
-%sec2node = (); # section to node name
-%sec2number = (); # section to number
-%number2sec = (); # number to section
-%idx2node = (); # index keys to node
-%node2href = (); # node to HREF
-%node2next = (); # node to next
-%node2prev = (); # node to prev
-%node2up = (); # node to up
-%bib2href = (); # bibliography reference to HREF
-%gloss2href = (); # glossary term to HREF
-@sections = (); # list of sections
-%tag2pro = (); # protected sections
-
-#
-# initial indexes
-#
-$bib_num = 0;
-$foot_num = 0;
-$gloss_num = 0;
-$idx_num = 0;
-$sec_num = 0;
-$doc_num = 0;
-$html_num = 0;
-
-#
-# can I use ISO8879 characters? (HTML+)
-#
-if ($T2H_USE_ISO) {
- $things_map{'bullet'} = "&bull;";
- $things_map{'copyright'} = "&copy;";
- $things_map{'dots'} = "&hellip;";
- $things_map{'equiv'} = "&equiv;";
- $things_map{'expansion'} = "&rarr;";
- $things_map{'point'} = "&lowast;";
- $things_map{'result'} = "&rArr;";
-}
-
-#
-# read texi2html extensions (if any)
-#
-$extensions = 'texi2html.ext'; # extensions in working directory
-if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
- require($extensions);
-}
-($progdir = $0) =~ s/[^\/]+$//;
-if ($progdir && ($progdir ne './')) {
- $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory
- if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
- require($extensions);
- }
-}
-
-
-print "# reading from $docu\n" if $T2H_VERBOSE;
-
-#########################################################################
-#
-# latex2html stuff
-#
-# latex2html conversions consist of three stages:
-# 1) ToLatex: Put "latex" code into a latex file
-# 2) ToHtml: Use latex2html to generate corresponding html code and images
-# 3) FromHtml: Extract generated code and images from latex2html run
-#
-
-##########################
-# default settings
-#
-
-# defaults for files and names
-
-sub l2h_Init
-{
- local($root) = @_;
-
- return 0 unless ($root);
-
- $l2h_name = "${root}_l2h";
-
- $l2h_latex_file = "$docu_rdir${l2h_name}.tex";
- $l2h_cache_file = "${docu_rdir}l2h_cache.pm";
- $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H);
-
- # destination dir -- generated images are put there, should be the same
- # as dir of enclosing html document --
- $l2h_html_file = "$docu_rdir${l2h_name}.html";
- $l2h_prefix = "${l2h_name}_";
- return 1;
-}
-
-
-##########################
-#
-# First stage: Generation of Latex file
-# Initialize with: l2h_InitToLatex
-# Add content with: l2h_ToLatex($text) --> HTML placeholder comment
-# Finish with: l2h_FinishToLatex
-#
-
-$l2h_latex_preample = <<EOT;
-% This document was automatically generated by the l2h extenstion of texi2html
-% DO NOT EDIT !!!
-\\documentclass{article}
-\\usepackage{html}
-\\begin{document}
-EOT
-
-$l2h_latex_closing = <<EOT;
-\\end{document}
-EOT
-
-# return used latex 1, if l2h could be initalized properly, 0 otherwise
-sub l2h_InitToLatex
-{
- %l2h_to_latex = ();
- unless ($T2H_L2H_SKIP)
- {
- unless (open(L2H_LATEX, ">$l2h_latex_file"))
- {
- warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n";
- return 0;
- }
- print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE);
- print L2H_LATEX $l2h_latex_preample;
- }
- # open database for caching
- l2h_InitCache();
- $l2h_latex_count = 0;
- $l2h_to_latex_count = 0;
- $l2h_cached_count = 0;
- return 1;
-}
-
-# print text (1st arg) into latex file (if not already there), return
-# HTML commentary which can be later on replaced by the latex2html
-# generated text
-sub l2h_ToLatex
-{
- my($text) = @_;
- my($count);
-
- $l2h_to_latex_count++;
- $text =~ s/(\s*)$//;
-
- # try whether we can cache it
- my $cached_text = l2h_FromCache($text);
- if ($cached_text)
- {
- $l2h_cached_count++;
- return $cached_text;
- }
-
- # try whether we have text already on things to do
- unless ($count = $l2h_to_latex{$text})
- {
- $count = $l2h_latex_count;
- $l2h_latex_count++;
- $l2h_to_latex{$text} = $count;
- $l2h_to_latex[$count] = $text;
- unless ($T2H_L2H_SKIP)
- {
- print L2H_LATEX "\\begin{rawhtml}\n";
- print L2H_LATEX "<!-- l2h_begin ${l2h_name} ${count} -->\n";
- print L2H_LATEX "\\end{rawhtml}\n";
-
- print L2H_LATEX "$text\n";
-
- print L2H_LATEX "\\begin{rawhtml}\n";
- print L2H_LATEX "<!-- l2h_end ${l2h_name} ${count} -->\n";
- print L2H_LATEX "\\end{rawhtml}\n";
- }
- }
- return "<!-- l2h_replace ${l2h_name} ${count} -->";
-}
-
-# print closing into latex file and close it
-sub l2h_FinishToLatex
-{
- local ($reused);
-
- $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count;
- unless ($T2H_L2H_SKIP)
- {
- print L2H_LATEX $l2h_latex_closing;
- close(L2H_LATEX);
- }
- print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE);
- unless ($l2h_latex_count)
- {
- l2h_Finish();
- return 0;
- }
- return 1;
-}
-
-###################################
-# Second stage: Use latex2html to generate corresponding html code and images
-#
-# l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]):
-# Call latex2html on $l2h_latex_file
-# Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir
-# Return 1, on success
-# 0, otherwise
-#
-sub l2h_ToHtml
-{
- local($call, $ext, $root, $dotbug);
-
- if ($T2H_L2H_SKIP)
- {
- print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE);
- return 1;
- }
-
- # Check for dot in directory where dvips will work
- if ($T2H_L2H_TMP)
- {
- if ($T2H_L2H_TMP =~ /\./)
- {
- warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n";
- $dotbug = 1;
- }
- }
- else
- {
- if (&getcwd =~ /\./)
- {
- warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n";
- $dotbug = 1;
- }
- }
- # fix it, if necessary and hope that it works
- $T2H_L2H_TMP = "/tmp" if ($dotbug);
-
- $call = $T2H_L2H_L2H;
- # use init file, if specified
- $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file);
- # set output dir
- $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir");
- # use l2h_tmp, if specified
- $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP);
- # options we want to be sure of
- $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link";
- $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file";
-
- print "# l2h: executing '$call'\n" if ($T2H_VERBOSE);
- if (system($call))
- {
- warn "l2h ***Error: '${call}' did not succeed\n";
- return 0;
- }
- else
- {
- print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE);
- return 1;
- }
-}
-
-# this is directly pasted over from latex2html
-sub getcwd {
- local($_) = `pwd`;
-
- die "'pwd' failed (out of memory?)\n"
- unless length;
- chop;
- $_;
-}
-
-
-##########################
-# Third stage: Extract generated contents from latex2html run
-# Initialize with: l2h_InitFromHtml
-# open $l2h_html_file for reading
-# reads in contents into array indexed by numbers
-# return 1, on success -- 0, otherwise
-# Extract Html code with: l2h_FromHtml($text)
-# replaces in $text all previosuly inserted comments by generated html code
-# returns (possibly changed) $text
-# Finish with: l2h_FinishFromHtml
-# closes $l2h_html_dir/$l2h_name.".$docu_ext"
-
-sub l2h_InitFromHtml
-{
- local($h_line, $h_content, $count, %l2h_img);
-
- if (! open(L2H_HTML, "<${l2h_html_file}"))
- {
- print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n";
- return 0;
- }
- print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE);
-
- $l2h_html_count = 0;
-
- while ($h_line = <L2H_HTML>)
- {
- if ($h_line =~ /^<!-- l2h_begin $l2h_name ([0-9]+) -->/)
- {
- $count = $1;
- $h_content = "";
- while ($h_line = <L2H_HTML>)
- {
- if ($h_line =~ /^<!-- l2h_end $l2h_name $count -->/)
- {
- chomp $h_content;
- chomp $h_content;
- $l2h_html_count++;
- $h_content = l2h_ToCache($count, $h_content);
- $l2h_from_html[$count] = $h_content;
- $h_content = '';
- last;
- }
- $h_content = $h_content.$h_line;
- }
- if ($hcontent)
- {
- print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n"
- if ($T2H_VERBOSE);
- close(L2H_HTML);
- return 0;
- }
- }
- }
- print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n"
- if ($T2H_VERBOSE);
-
- close(L2H_HTML);
- return 1;
-}
-
-sub l2h_FromHtml
-{
- local($text) = @_;
- local($done, $to_do, $count);
-
- $to_do = $text;
-
- while ($to_do =~ /([^\000]*)<!-- l2h_replace $l2h_name ([0-9]+) -->([^\000]*)/)
- {
- $to_do = $1;
- $count = $2;
- $done = $3.$done;
-
- $done = "<!-- l2h_end $l2h_name $count -->".$done
- if ($T2H_DEBUG & $DEBUG_L2H);
-
- $done = &l2h_ExtractFromHtml($count) . $done;
-
- $done = "<!-- l2h_begin $l2h_name $count -->".$done
- if ($T2H_DEBUG & $DEBUG_L2H);
- }
- return $to_do.$done;
-}
-
-
-sub l2h_ExtractFromHtml
-{
- local($count) = @_;
-
- return $l2h_from_html[$count] if ($l2h_from_html[$count]);
-
- if ($count >= 0 && $count < $l2h_latex_count)
- {
- # now we are in trouble
- local($l_l2h, $_);
-
- $l2h_extract_error++;
- print "$ERROR l2h: can't extract content $count from html\n"
- if ($T2H_VERBOSE);
- # try simple (ordinary) substition (without l2h)
- $l_l2h = $T2H_L2H;
- $T2H_L2H = 0;
- $_ = $l2h_to_latex{$count};
- $_ = &substitute_style($_);
- &unprotect_texi;
- $_ = "<!-- l2h: ". __LINE__ . " use texi2html -->" . $_
- if ($T2H_DEBUG & $DEBUG_L2H);
- $T2H_L2H = $l_l2h;
- return $_;
- }
- else
- {
- # now we have been incorrectly called
- $l2h_range_error++;
- print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n";
- return "<!-- l2h: ". __LINE__ . " out of range count $count -->"
- if ($T2H_DEBUG & $DEBUG_L2H);
- return "<!-- l2h: out of range count $count -->";
- }
-}
-
-sub l2h_FinishFromHtml
-{
- if ($T2H_VERBOSE)
- {
- if ($l2h_extract_error + $l2h_range_error)
- {
- print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n";
- }
- else
- {
- print "# l2h: finished from html (no errors)\n";
- }
- }
-}
-
-sub l2h_Finish
-{
- l2h_StoreCache();
- if ($T2H_L2H_CLEAN)
- {
- print "# l2h: removing temporary files generated by l2h extension\n"
- if $T2H_VERBOSE;
- while (<"$docu_rdir$l2h_name"*>)
- {
- unlink $_;
- }
- }
- print "# l2h: Finished\n" if $T2H_VERBOSE;
- return 1;
-}
-
-##############################
-# stuff for l2h caching
-#
-
-# I tried doing this with a dbm data base, but it did not store all
-# keys/values. Hence, I did as latex2html does it
-sub l2h_InitCache
-{
- if (-r "$l2h_cache_file")
- {
- my $rdo = do "$l2h_cache_file";
- warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n")
- unless ($rdo);
- }
-}
-
-sub l2h_StoreCache
-{
- return unless $l2h_latex_count;
-
- my ($key, $value);
- open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n";
-
-
- while (($key, $value) = each %l2h_cache)
- {
- # escape stuff
- $key =~ s|/|\\/|g;
- $key =~ s|\\\\/|\\/|g;
- # weird, a \ at the end of the key results in an error
- # maybe this also broke the dbm database stuff
- $key =~ s|\\$|\\\\|;
- $value =~ s/\|/\\\|/g;
- $value =~ s/\\\\\|/\\\|/g;
- $value =~ s|\\\\|\\\\\\\\|g;
- print FH "\n\$l2h_cache_key = q/$key/;\n";
- print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n";
- }
- print FH "1;";
- close(FH);
-}
-
-# return cached html, if it exists for text, and if all pictures
-# are there, as well
-sub l2h_FromCache
-{
- my $text = shift;
- my $cached = $l2h_cache{$text};
- if ($cached)
- {
- while ($cached =~ m/SRC="(.*?)"/g)
- {
- unless (-e "$docu_rdir$1")
- {
- return undef;
- }
- }
- return $cached;
- }
- return undef;
-}
-
-# insert generated html into cache, move away images,
-# return transformed html
-$maximage = 1;
-sub l2h_ToCache
-{
- my $count = shift;
- my $content = shift;
- my @images = ($content =~ /SRC="(.*?)"/g);
- my ($src, $dest);
-
- for $src (@images)
- {
- $dest = $l2h_img{$src};
- unless ($dest)
- {
- my $ext;
- if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext)
- {
- $ext = $1;
- }
- else
- {
- warn "$ERROR: L2h image $src has invalid extension\n";
- next;
- }
- while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;}
- $dest = "${docu_name}_$maximage.$ext";
- system("cp -f $docu_rdir$src $docu_rdir$dest");
- $l2h_img{$src} = $dest;
- unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H);
- }
- $content =~ s/$src/$dest/g;
- }
- $l2h_cache{$l2h_to_latex[$count]} = $content;
- return $content;
-}
-
-
-#+++############################################################################
-# #
-# Pass 1: read source, handle command, variable, simple substitution #
-# #
-#---############################################################################
-
-@lines = (); # whole document
-@toc_lines = (); # table of contents
-@stoc_lines = (); # table of contents
-$curlevel = 0; # current level in TOC
-$node = ''; # current node name
-$node_next = ''; # current node next name
-$node_prev = ''; # current node prev name
-$node_up = ''; # current node up name
-$in_table = 0; # am I inside a table
-$table_type = ''; # type of table ('', 'f', 'v', 'multi')
-@tables = (); # nested table support
-$in_bibliography = 0; # am I inside a bibliography
-$in_glossary = 0; # am I inside a glossary
-$in_top = 0; # am I inside the top node
-$has_top = 0; # did I see a top node?
-$has_top_command = 0; # did I see @top for automatic pointers?
-$in_pre = 0; # am I inside a preformatted section
-$in_list = 0; # am I inside a list
-$in_html = 0; # am I inside an HTML section
-$first_line = 1; # is it the first line
-$dont_html = 0; # don't protect HTML on this line
-$deferred_ref = ''; # deferred reference for indexes
-@html_stack = (); # HTML elements stack
-$html_element = ''; # current HTML element
-&html_reset;
-%macros = (); # macros
-
-# init l2h
-$T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H);
-$T2H_L2H = &l2h_InitToLatex if ($T2H_L2H);
-
-# build code for simple substitutions
-# the maps used (%simple_map and %things_map) MUST be aware of this
-# watch out for regexps, / and escaped characters!
-$subst_code = '';
-foreach (keys(%simple_map)) {
- ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars
- $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n";
-}
-foreach (keys(%things_map)) {
- $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n";
-}
-if ($use_acc) {
- # accentuated characters
- foreach (keys(%accent_map)) {
- if ($_ eq "`") {
- $subst_code .= "s/$;3";
- } elsif ($_ eq "'") {
- $subst_code .= "s/$;4";
- } else {
- $subst_code .= "s/\\\@\\$_";
- }
- $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n";
- }
-}
-eval("sub simple_substitutions { $subst_code }");
-
-&init_input;
-INPUT_LINE: while ($_ = &next_line) {
- #
- # remove \input on the first lines only
- #
- if ($first_line) {
- next if /^\\input/;
- $first_line = 0;
- }
- # non-@ substitutions cf. texinfmt.el
- #
- # parse texinfo tags
- #
- $tag = '';
- $end_tag = '';
- if (/^\s*\@end\s+(\w+)\b/) {
- $end_tag = $1;
- } elsif (/^\s*\@(\w+)\b/) {
- $tag = $1;
- }
- #
- # handle @html / @end html
- #
- if ($in_html) {
- if ($end_tag eq 'html') {
- $in_html = 0;
- } else {
- $tag2pro{$in_html} .= $_;
- }
- next;
- } elsif ($tag eq 'html') {
- $in_html = $PROTECTTAG . ++$html_num;
- push(@lines, $in_html);
- next;
- }
-
- #
- # try to remove inlined comments
- # syntax from tex-mode.el comment-start-skip
- #
- s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/;
-
-# Sometimes I use @c right at the end of a line ( to suppress the line feed )
-# s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/;
-# s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
-# s/(.*)\@c{.*?}(.*)/$1$2/;
-# s/(.*)\@comment{.*?}(.*)/$1$2/;
-# s/^(.*)\@c /$1/;
-# s/^(.*)\@comment /$1/;
-
- #############################################################
- # value substitution before macro expansion, so that
- # it works in macro arguments
- s/\@value{($VARRE)}/$value{$1}/eg;
-
- #############################################################
- # macro substitution
- while (/\@(\w+)/g)
- {
- if (exists($macros->{$1}))
- {
- my $before = $`;
- my $name = $1;
- my $after = $';
- my @args;
- my $args;
- if ($after =~ /^\s*{(.*?[^\\])}(.*)/)
- {
- $args = $1;
- $after = $2;
- }
- elsif (@{$macros->{$name}->{Args}} == 1)
- {
- $args = $after;
- $args =~ s/^\s*//;
- $args =~ s/\s*$//;
- $after = '';
- }
- $args =~ s|\\\\|\\|g;
- $args =~ s|\\{|{|g;
- $args =~ s|\\}|}|g;
- if (@{$macros->{$name}->{Args}} > 1)
- {
- $args =~ s/(^|[^\\]),/$1$;/g ;
- $args =~ s|\\,|,|g;
- @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1);
- }
- else
- {
- $args =~ s|\\,|,|g;
- @args = ($args);
- }
- my $macrobody = $macros->{$name}->{Body};
- for ($i=0; $i<=$#args; $i++)
- {
- $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g;
- }
- $macrobody =~ s|\\\\|\\|g;
- $_ = $before . $macrobody . $after;
- unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_);
- next INPUT_LINE;
- }
- } #
-
-
- #
- # try to skip the line
- #
- if ($end_tag) {
- $in_titlepage = 0 if $end_tag eq 'titlepage';
- next if $to_skip{"end $end_tag"};
- } elsif ($tag) {
- $in_titlepage = 1 if $tag eq 'titlepage';
- next if $to_skip{$tag};
- last if $tag eq 'bye';
- }
- if ($in_top) {
- # parsing the top node
- if ($tag eq 'node' ||
- ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/))
- {
- # no more in top
- $in_top = 0;
- push(@lines, $TOPEND);
- }
- }
- unless ($in_pre) {
- s/``/\"/g;
- s/''/\"/g;
- s/([\w ])---([\w ])/$1--$2/g;
- }
- #
- # analyze the tag
- #
- if ($tag) {
- # skip lines
- &skip_until($tag), next if $tag eq 'ignore';
- &skip_until($tag), next if $tag eq 'ifnothtml';
- if ($tag eq 'ifinfo')
- {
- &skip_until($tag), next unless $T2H_EXPAND eq 'info';
- }
- if ($tag eq 'iftex')
- {
- &skip_until($tag), next unless $T2H_EXPAND eq 'tex';
- }
- if ($tag eq 'tex')
- {
- # add to latex2html file
- if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre)
- {
- # add space to the end -- tex(i2dvi) does this, as well
- push(@lines, &l2h_ToLatex(&string_until($tag) . " "));
- }
- else
- {
- &skip_until($tag);
- }
- next;
- }
- if ($tag eq 'titlepage')
- {
- next;
- }
- # handle special tables
- if ($tag =~ /^(|f|v|multi)table$/) {
- $table_type = $1;
- $tag = 'table';
- }
- # special cases
- if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) {
- $in_top = 1;
- $has_top = 1;
- $has_top_command = 1 if $tag eq 'top';
- @lines = (); # ignore all lines before top (title page garbage)
- next;
- } elsif ($tag eq 'node') {
- if ($in_top)
- {
- $in_top = 0;
- push(@lines, $TOPEND);
- }
- warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
- # request of "Richard Y. Kim" <ryk@ap.com>
- s/^\@node\s+//;
- $_ = &protect_html($_); # if node contains '&' for instance
- ($node, $node_next, $node_prev, $node_up) = split(/,/);
- &normalise_node($node);
- &normalise_node($node_next);
- &normalise_node($node_prev);
- &normalise_node($node_up);
- $node =~ /\"/ ?
- push @lines, &html_debug("<A NAME='$node'></A>\n", __LINE__) :
- push @lines, &html_debug("<A NAME=\"$node\"></A>\n", __LINE__);
- next;
- } elsif ($tag eq 'include') {
- if (/^\@include\s+($FILERE)\s*$/o) {
- $file = LocateIncludeFile($1);
- if ($file && -e $file) {
- &open($file);
- print "# including $file\n" if $T2H_VERBOSE;
- } else {
- warn "$ERROR Can't find $1, skipping";
- }
- } else {
- warn "$ERROR Bad include line: $_";
- }
- next;
- } elsif ($tag eq 'ifclear') {
- if (/^\@ifclear\s+($VARRE)\s*$/o) {
- next unless defined($value{$1});
- &skip_until($tag);
- } else {
- warn "$ERROR Bad ifclear line: $_";
- }
- next;
- } elsif ($tag eq 'ifset') {
- if (/^\@ifset\s+($VARRE)\s*$/o) {
- next if defined($value{$1});
- &skip_until($tag);
- } else {
- warn "$ERROR Bad ifset line: $_";
- }
- next;
- } elsif ($tag eq 'menu') {
- unless ($T2H_SHOW_MENU) {
- &skip_until($tag);
- next;
- }
- &html_push_if($tag);
- push(@lines, &html_debug('', __LINE__));
- } elsif ($format_map{$tag}) {
- $in_pre = 1 if $format_map{$tag} eq 'PRE';
- &html_push_if($format_map{$tag});
- push(@lines, &html_debug('', __LINE__));
- $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ;
-# push(@lines, &debug("<BLOCKQUOTE>\n", __LINE__))
-# if $tag =~ /example/i;
- # sunshine@sunshineco.com: <PRE>bla</PRE> looks better than
- # <PRE>\nbla</PRE> (at least on NeXTstep browser
- push(@lines, &debug("<$format_map{$tag}>" .
- ($in_pre ? '' : "\n"), __LINE__));
- next;
- }
- elsif (exists $complex_format_map->{$tag})
- {
- my $start = eval $complex_format_map->{$tag}->[0];
- if ($@)
- {
- print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@";
- $start = '<pre>'
- }
- $in_pre = 1 if $start =~ /<pre/;
- push(@lines, html_debug($start. ($in_pre ? '' : "\n"), __LINE__));
- next;
- } elsif ($tag eq 'table') {
- # anorland@hem2.passagen.se
- # if (/^\s*\@(|f|v|multi)table\s+\@(\w+)/) {
- if (/^\s*\@(|f|v|multi)table\s+\@(\w+)|(\{[^\}]*\})/) {
- $in_table = $2;
- unshift(@tables, join($;, $table_type, $in_table));
- if ($table_type eq "multi") {
- # don't use borders -- gets confused by empty cells
- push(@lines, &debug("<TABLE>\n", __LINE__));
- &html_push_if('TABLE');
- } else {
- push(@lines, &debug("<DL COMPACT>\n", __LINE__));
- &html_push_if('DL');
- }
- push(@lines, &html_debug('', __LINE__));
- } else {
- warn "$ERROR Bad table line: $_";
- }
- next;
- }
- elsif ($tag eq 'synindex' || $tag eq 'syncodeindex')
- {
- if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/)
- {
- my $from = $1;
- my $to = $2;
- my $prefix_from = IndexName2Prefix($from);
- my $prefix_to = IndexName2Prefix($to);
-
- warn("$ERROR unknown from index name $from ind syn*index line: $_"), next
- unless $prefix_from;
- warn("$ERROR unknown to index name $to ind syn*index line: $_"), next
- unless $prefix_to;
-
- if ($tag eq 'syncodeindex')
- {
- $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1;
- }
- else
- {
- $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1;
- }
- }
- else
- {
- warn "$ERROR Bad syn*index line: $_";
- }
- next;
- }
- elsif ($tag eq 'defindex' || $tag eq 'defcodeindex')
- {
- if (/^\@$tag\s+(\w+)\s*$/)
- {
- my $name = $1;
- $index_properties->{$name}->{name} = $name;
- $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex';
- }
- else
- {
- warn "$ERROR Bad defindex line: $_";
- }
- next;
- }
- elsif (/^\@printindex/)
- {
- push (@lines, "<!--::${section}::-->$_");
- next;
- }
- elsif ($tag eq 'sp') {
- push(@lines, &debug("<P>\n", __LINE__));
- next;
- } elsif ($tag eq 'center') {
- push(@lines, &debug("<center>\n", __LINE__));
- s/\@center//;
- } elsif ($tag eq 'setref') {
- &protect_html; # if setref contains '&' for instance
- if (/^\@$tag\s*{($NODERE)}\s*$/) {
- $setref = $1;
- $setref =~ s/\s+/ /g; # normalize
- $setref =~ s/ $//;
- $node2sec{$setref} = $name;
- $sec2node{$name} = $setref;
- $node2href{$setref} = "$docu_doc#$docid";
- } else {
- warn "$ERROR Bad setref line: $_";
- }
- next;
- } elsif ($tag eq 'lowersections') {
- local ($sec, $level);
- while (($sec, $level) = each %sec2level) {
- $sec2level{$sec} = $level + 1;
- }
- next;
- } elsif ($tag eq 'raisesections') {
- local ($sec, $level);
- while (($sec, $level) = each %sec2level) {
- $sec2level{$sec} = $level - 1;
- }
- next;
- }
- elsif ($tag eq 'macro' || $tag eq 'rmacro')
- {
- if (/^\@$tag\s*(\w+)\s*(.*)/)
- {
- my $name = $1;
- my @args;
- @args = split(/\s*,\s*/ , $1)
- if ($2 =~ /^\s*{(.*)}\s*/);
-
- $macros->{$name}->{Args} = \@args;
- $macros->{$name}->{Body} = '';
- while (($_ = &next_line) && $_ !~ /\@end $tag/)
- {
- $macros->{$name}->{Body} .= $_;
- }
- die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n"
- unless (/\@end $tag/);
- chomp $macros->{$name}->{Body};
- }
- else
- {
- warn "$ERROR: Bad macro defintion $_"
- }
- next;
- }
- elsif ($tag eq 'unmacro')
- {
- delete $macros->{$1} if (/^\@unmacro\s*(\w+)/);
- next;
- }
- elsif ($tag eq 'documentlanguage')
- {
- SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/);
- }
- elsif (defined($def_map{$tag})) {
- if ($def_map{$tag}) {
- s/^\@$tag\s+//;
- $tag = $def_map{$tag};
- $_ = "\@$tag $_";
- $tag =~ s/\s.*//;
- }
- } elsif (defined($user_sub{$tag})) {
- s/^\@$tag\s+//;
- $sub = $user_sub{$tag};
- print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER;
- if (defined(&$sub)) {
- chop($_);
- &$sub($_);
- } else {
- warn "$ERROR Bad user sub for $tag: $sub\n";
- }
- next;
- }
- if (defined($def_map{$tag})) {
- s/^\@$tag\s+//;
- if ($tag =~ /x$/) {
- # extra definition line
- $tag = $`;
- $is_extra = 1;
- } else {
- $is_extra = 0;
- }
- while (/\{([^\{\}]*)\}/) {
- # this is a {} construct
- ($before, $contents, $after) = ($`, $1, $');
- # protect spaces
- $contents =~ s/\s+/$;9/g;
- # restore $_ protecting {}
- $_ = "$before$;7$contents$;8$after";
- }
- @args = split(/\s+/, &protect_html($_));
- foreach (@args) {
- s/$;9/ /g; # unprotect spaces
- s/$;7/\{/g; # ... {
- s/$;8/\}/g; # ... }
- }
- $type = shift(@args);
- $type =~ s/^\{(.*)\}$/$1/;
- print "# def ($tag): {$type} ", join(', ', @args), "\n"
- if $T2H_DEBUG & $DEBUG_DEF;
- $type .= ':'; # it's nicer like this
- my $name = shift(@args);
- $name =~ s/^\{(.*)\}$/$1/;
- if ($is_extra) {
- $_ = &debug("<DT>", __LINE__);
- } else {
- $_ = &debug("<DL>\n<DT>", __LINE__);
- }
- if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') {
- $_ .= "<U>$type</U> <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr'
- || $tag eq 'defcv' || $tag eq 'defop') {
- $ftype = $name;
- $name = shift(@args);
- $name =~ s/^\{(.*)\}$/$1/;
- $_ .= "<U>$type</U> $ftype <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- } else {
- warn "$ERROR Unknown definition type: $tag\n";
- $_ .= "<U>$type</U> <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- }
- $_ .= &debug("\n<DD>", __LINE__);
- $name = &unprotect_html($name);
- if ($tag eq 'deffn' || $tag eq 'deftypefn') {
- EnterIndexEntry('f', $name, $docu_doc, $section, \@lines);
-# unshift(@input_spool, "\@findex $name\n");
- } elsif ($tag eq 'defop') {
- EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines);
-# unshift(@input_spool, "\@findex $name on $ftype\n");
- } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') {
- EnterIndexEntry('v', $name, $docu_doc, $section, \@lines);
-# unshift(@input_spool, "\@vindex $name\n");
- } else {
- EnterIndexEntry('t', $name, $docu_doc, $section, \@lines);
-# unshift(@input_spool, "\@tindex $name\n");
- }
- $dont_html = 1;
- }
- } elsif ($end_tag) {
- if ($format_map{$end_tag}) {
- $in_pre = 0 if $format_map{$end_tag} eq 'PRE';
- $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ;
- &html_pop_if('P');
- &html_pop_if('LI');
- &html_pop_if();
- push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__));
- push(@lines, &html_debug('', __LINE__));
- }
- elsif (exists $complex_format_map->{$end_tag})
- {
- my $end = eval $complex_format_map->{$end_tag}->[1];
- if ($@)
- {
- print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@";
- $end = '</pre>'
- }
- $in_pre = 0 if $end =~ m|</pre>|;
- push(@lines, html_debug($end, __LINE__));
- } elsif ($end_tag =~ /^(|f|v|multi)table$/) {
- unless (@tables) {
- warn "$ERROR \@end $end_tag without \@*table\n";
- next;
- }
- &html_pop_if('P');
- ($table_type, $in_table) = split($;, shift(@tables));
- unless ($1 eq $table_type) {
- warn "$ERROR \@end $end_tag without matching \@$end_tag\n";
- next;
- }
- if ($table_type eq "multi") {
- push(@lines, "</TR></TABLE>\n");
- &html_pop_if('TR');
- } else {
- push(@lines, "</DL>\n");
- &html_pop_if('DD');
- }
- &html_pop_if();
- if (@tables) {
- ($table_type, $in_table) = split($;, $tables[0]);
- } else {
- $in_table = 0;
- }
- } elsif (defined($def_map{$end_tag})) {
- push(@lines, &debug("</DL>\n", __LINE__));
- } elsif ($end_tag eq 'menu') {
- &html_pop_if();
- push(@lines, $_); # must keep it for pass 2
- }
- next;
- }
- #############################################################
- # anchor insertion
- while (/\@anchor\s*\{(.*?)\}/)
- {
- $_ = $`.$';
- my $anchor = $1;
- $anchor = &normalise_node($anchor);
- push @lines, &html_debug("<A NAME=\"$anchor\"></A>\n");
- $node2href{$anchor} = "$docu_doc#$anchor";
- next INPUT_LINE if $_ =~ /^\s*$/;
- }
-
- #############################################################
- # index entry generation, after value substitutions
- if (/^\@(\w+?)index\s+/)
- {
- EnterIndexEntry($1, $', $docu_doc, $section, \@lines);
- next;
- }
- #
- # protect texi and HTML things
- &protect_texi;
- $_ = &protect_html($_) unless $dont_html;
- $dont_html = 0;
- # substitution (unsupported things)
- s/^\@exdent\s+//g;
- s/\@noindent\s+//g;
- s/\@refill\s+//g;
- # other substitutions
- &simple_substitutions;
- s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4
- #
- # analyze the tag again
- #
- if ($tag) {
- if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
- if (/^\@$tag\s+(.+)$/) {
- $name = $1;
- $name = &normalise_node($name);
- $level = $sec2level{$tag};
- # check for index
- $first_index_chapter = $node
- if ($level == 1 && !$first_index_chapter &&
- $name =~ /index/i);
- if ($in_top && /heading/){
- $T2H_HAS_TOP_HEADING = 1;
- $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
- &html_push_if('body');
- print "# top heading, section $name, level $level\n"
- if $T2H_DEBUG & $DEBUG_TOC;
- }
- else
- {
- unless (/^\@\w*heading/)
- {
- unless (/^\@unnumbered/)
- {
- my $number = &update_sec_num($tag, $level);
- $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS;
- $sec2number{$name} = $number;
- $number2sec{$number} = $name;
- }
- if (defined($toplevel))
- {
- push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND);
- }
- else
- {
- # first time we see a "section"
- unless ($level == 1)
- {
- warn "$WARN The first section found is not of level 1: $_";
- }
- $toplevel = $level;
- }
- push(@sections, $name);
- next_doc() if ($T2H_SPLIT eq 'section' ||
- $T2H_SPLIT && $level == $toplevel);
- }
- $sec_num++;
- $docid = "SEC$sec_num";
- $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num");
- # check biblio and glossary
- $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
- $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
- # check node
- if ($node)
- {
- warn "$ERROR Duplicate node found: $node\n"
- if ($node2sec{$node});
- }
- else
- {
- $name .= ' ' while ($node2sec{$name});
- $node = $name;
- }
- $name .= ' ' while ($sec2node{$name});
- $section = $name;
- $node2sec{$node} = $name;
- $sec2node{$name} = $node;
- $node2href{$node} = "$docu_doc#$docid";
- $node2next{$node} = $node_next;
- $node2prev{$node} = $node_prev;
- $node2up{$node} = $node_up;
- print "# node $node, section $name, level $level\n"
- if $T2H_DEBUG & $DEBUG_TOC;
-
- $node = '';
- $node_next = '';
- $node_prev = '';
- $node_next = '';
- if ($tocid)
- {
- # update TOC
- while ($level > $curlevel) {
- $curlevel++;
- push(@toc_lines, "<UL>\n");
- }
- while ($level < $curlevel) {
- $curlevel--;
- push(@toc_lines, "</UL>\n");
- }
- $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1);
- $_ = &substitute_style($_);
- push(@stoc_lines, "$_<BR>\n") if ($level == 1);
- if ($T2H_NUMBER_SECTIONS)
- {
- push(@toc_lines, $_ . "<BR>\n")
- }
- else
- {
- push(@toc_lines, "<LI>" . $_ ."</LI>");
- }
- }
- else
- {
- push(@lines, &html_debug("<A NAME=\"$docid\"></A>\n",
- __LINE__));
- }
- # update DOC
- push(@lines, &html_debug('', __LINE__));
- &html_reset;
- $_ = "<H$level> $name </H$level>\n<!--docid::${docid}::-->\n";
- $_ = &debug($_, __LINE__);
- push(@lines, &html_debug('', __LINE__));
- }
- # update DOC
- foreach $line (split(/\n+/, $_)) {
- push(@lines, "$line\n");
- }
- next;
- } else {
- warn "$ERROR Bad section line: $_";
- }
- } else {
- # track variables
- $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o;
- delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o;
- # store things
- $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/;
- $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/;
- $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/;
- $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/;
- $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/;
- $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/;
-
- # list item
- if (/^\s*\@itemx?\s+/) {
- $what = $';
- $what =~ s/\s+$//;
- if ($in_bibliography && $use_bibliography) {
- if ($what =~ /^$BIBRE$/o) {
- $id = 'BIB' . ++$bib_num;
- $bib2href{$what} = "$docu_doc#$id";
- print "# found bibliography for '$what' id $id\n"
- if $T2H_DEBUG & $DEBUG_BIB;
- $what = &t2h_anchor($id, '', $what);
- }
- } elsif ($in_glossary && $T2H_USE_GLOSSARY) {
- $id = 'GLOSS' . ++$gloss_num;
- $entry = $what;
- $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
- $gloss2href{$entry} = "$docu_doc#$id";
- print "# found glossary for '$entry' id $id\n"
- if $T2H_DEBUG & $DEBUG_GLOSS;
- $what = &t2h_anchor($id, '', $what);
- }
- elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v'))
- {
- EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines);
- }
- &html_pop_if('P');
- if ($html_element eq 'DL' || $html_element eq 'DD') {
- if ($things_map{$in_table} && !$what) {
- # special case to allow @table @bullet for instance
- push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__));
- } else {
- push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__));
- }
- push(@lines, "<DD>");
- &html_push('DD') unless $html_element eq 'DD';
- if ($table_type) { # add also an index
- unshift(@input_spool, "\@${table_type}index $what\n");
- }
- } elsif ($html_element eq 'TABLE') {
- push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__));
- &html_push('TR');
- } elsif ($html_element eq 'TR') {
- push(@lines, &debug("</TR>\n", __LINE__));
- push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__));
- } else {
- push(@lines, &debug("<LI>$what\n", __LINE__));
- &html_push('LI') unless $html_element eq 'LI';
- }
- push(@lines, &html_debug('', __LINE__));
- if ($deferred_ref) {
- push(@lines, &debug("$deferred_ref\n", __LINE__));
- $deferred_ref = '';
- }
- next;
- } elsif (/^\@tab\s+(.*)$/) {
- push(@lines, "<TD>$1</TD>\n");
- next;
- }
- }
- }
- # paragraph separator
- if ($_ eq "\n" && ! $in_pre) {
- next if $#lines >= 0 && $lines[$#lines] eq "\n";
- if ($html_element eq 'P') {
- push (@lines, &debug("</P><P>\n", __LINE__));
- }
-# else
-# {
-# push(@lines, "<P></P>\n");
-# $_ = &debug("<P></P>\n", __LINE__);
-# }
- elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI')
- {
- &html_push('P');
- push(@lines, &debug("<P>\n", __LINE__));
- }
- }
- # otherwise
- push(@lines, $_) unless $in_titlepage;
- push(@lines, &debug("</center>\n", __LINE__)) if ($tag eq 'center');
-}
-
-# finish TOC
-$level = 0;
-while ($level < $curlevel) {
- $curlevel--;
- push(@toc_lines, "</UL>\n");
-}
-
-print "# end of pass 1\n" if $T2H_VERBOSE;
-
-SetDocumentLanguage('en') unless ($T2H_LANG);
-#+++############################################################################
-# #
-# Stuff related to Index generation #
-# #
-#---############################################################################
-
-sub EnterIndexEntry
-{
- my $prefix = shift;
- my $key = shift;
- my $docu_doc = shift;
- my $section = shift;
- my $lines = shift;
- local $_;
-
- warn "$ERROR Undefined index command: $_", next
- unless (exists ($index_properties->{$prefix}));
- $key =~ s/\s+$//;
- $_ = $key;
- &protect_texi;
- $key = $_;
- $_ = &protect_html($_);
- my $html_key = substitute_style($_);
- my $id;
- $key = remove_style($key);
- $key = remove_things($key);
- $_ = $key;
- &unprotect_texi;
- $key = $_;
- while (exists $index->{$prefix}->{$key}) {$key .= ' '};
- if ($lines->[$#lines] =~ /^<!--docid::(.+)::-->$/)
- {
- $id = $1;
- }
- else
- {
- $id = 'IDX' . ++$idx_num;
- push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre));
- }
- $index->{$prefix}->{$key}->{html_key} = $html_key;
- $index->{$prefix}->{$key}->{section} = $section;
- $index->{$prefix}->{$key}->{href} = "$docu_doc#$id";
- print "# found ${prefix}index for '$key' with id $id\n"
- if $T2H_DEBUG & $DEBUG_INDEX;
-}
-
-sub IndexName2Prefix
-{
- my $name = shift;
- my $prefix;
-
- for $prefix (keys %$index_properties)
- {
- return $prefix if ($index_properties->{$prefix}->{name} eq $name);
- }
- return undef;
-}
-
-sub GetIndexEntries
-{
- my $normal = shift;
- my $code = shift;
- my ($entries, $prefix, $key) = ({});
-
- for $prefix (keys %$normal)
- {
- for $key (keys %{$index->{$prefix}})
- {
- $entries->{$key} = {%{$index->{$prefix}->{$key}}};
- }
- }
-
- if (defined($code))
- {
- for $prefix (keys %$code)
- {
- unless (exists $normal->{$keys})
- {
- for $key (keys %{$index->{$prefix}})
- {
- $entries->{$key} = {%{$index->{$prefix}->{$key}}};
- $entries->{$key}->{html_key} = "<CODE>$entries->{$key}->{html_key}</CODE>";
- }
- }
- }
- }
- return $entries;
-}
-
-sub byAlpha
-{
- if ($a =~ /^[A-Za-z]/)
- {
- if ($b =~ /^[A-Za-z]/)
- {
- return lc($a) cmp lc($b);
- }
- else
- {
- return 1;
- }
- }
- elsif ($b =~ /^[A-Za-z]/)
- {
- return -1;
- }
- else
- {
- return lc($a) cmp lc($b);
- }
-}
-
-sub GetIndexPages
-{
- my $entries = shift;
- my (@Letters, $key);
- my ($EntriesByLetter, $Pages, $page) = ({}, [], {});
- my @keys = sort byAlpha keys %$entries;
-
- for $key (@keys)
- {
- push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key};
- }
- @Letters = sort byAlpha keys %$EntriesByLetter;
-
- $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT);
-
- unless ($T2H_SPLIT_INDEX)
- {
- $page->{First} = $Letters[0];
- $page->{Last} = $Letters[$#Letters];
- $page->{Letters} = \@Letters;
- $page->{EntriesByLetter} = $EntriesByLetter;
- push @$Pages, $page;
- return $Pages;
- }
-
- if ($T2H_SPLIT_INDEX =~ /^\d+$/)
- {
- my $i = 0;
- my ($prev_letter, $letter);
- $page->{First} = $Letters[0];
- for $letter (@Letters)
- {
- if ($i > $T2H_SPLIT_INDEX)
- {
- $page->{Last} = $prev_letter;
- push @$Pages, {%$page};
- $page->{Letters} = [];
- $page->{EntriesByLetter} = {};
- $page->{First} = $letter;
- $i=0;
- }
- push @{$page->{Letters}}, $letter;
- $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}];
- $i += scalar(@{$EntriesByLetter->{$letter}});
- $prev_letter = $letter;
- }
- $page->{Last} = $Letters[$#Letters];
- push @$Pages, {%$page};
- }
- return $Pages;
-}
-
-sub GetIndexSummary
-{
- my $first_page = shift;
- my $Pages = shift;
- my $name = shift;
- my ($page, $letter, $summary, $i, $l1, $l2, $l);
-
- $i = 0;
- $summary = '<table><tr><th valign=top>Jump to: &nbsp; </th><td>';
-
- for $page ($first_page, @$Pages)
- {
- for $letter (@{$page->{Letters}})
- {
- $l = t2h_anchor('', "$page->{href}#${name}_$letter", "<b>$letter</b>",
- 0, 'style="text-decoration:none"') . "\n &nbsp; \n";
-
- if ($letter =~ /^[A-Za-z]/)
- {
- $l2 .= $l;
- }
- else
- {
- $l1 .= $l;
- }
- }
- }
- $summary .= $l1 . "<BR>\n" if ($l1);
- $summary .= $l2 . '</td></tr></table><br>';
- return $summary;
-}
-
-sub PrintIndexPage
-{
- my $lines = shift;
- my $summary = shift;
- my $page = shift;
- my $name = shift;
-
- push @$lines, $summary;
-
- push @$lines , <<EOT;
-<P></P>
-<TABLE border=0>
-<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
-<TR><TD COLSPAN=3> <HR></TD></TR>
-EOT
-
- for $letter (@{$page->{Letters}})
- {
- push @$lines, "<TR><TH><A NAME=\"${name}_$letter\"></A>$letter</TH><TD></TD><TD></TD></TR>\n";
- for $entry (@{$page->{EntriesByLetter}->{$letter}})
- {
- push @$lines,
- "<TR><TD></TD><TD valign=top>" .
- t2h_anchor('', $entry->{href}, $entry->{html_key}) .
- "</TD><TD valign=top>" .
- t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) .
- "</TD></TR>\n";
- }
- push @$lines, "<TR><TD COLSPAN=3> <HR></TD></TR>\n";
- }
- push @$lines, "</TABLE><P></P>";
- push @$lines, $summary;
-}
-
-sub PrintIndex
-{
- my $lines = shift;
- my $name = shift;
- my $section = shift;
- $section = 'Top' unless $section;
- my $prefix = IndexName2Prefix($name);
-
- warn ("$ERROR printindex: bad index name: $name"), return
- unless $prefix;
-
- if ($index_properties->{$prefix}->{code})
- {
- $index_properties->{$prefix}->{from_code}->{$prefix} = 1;
- }
- else
- {
- $index_properties->{$prefix}->{from}->{$prefix}= 1;
- }
-
- my $Entries = GetIndexEntries($index_properties->{$prefix}->{from},
- $index_properties->{$prefix}->{from_code});
- return unless %$Entries;
-
- if ($T2H_IDX_SUMMARY)
- {
- my $key;
- open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx")
- || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n";
- print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE;
-
- for $key (sort keys %$Entries)
- {
- print FHIDX "$key\t$Entries->{$key}->{href}\n";
- }
- }
-
- my $Pages = GetIndexPages($Entries);
- my $page;
- my $first_page = shift @$Pages;
- my $sec_name = $section;
- # remove section number
- $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./;
-
- ($first_page->{href} = sec_href($section)) =~ s/\#.*$//;
- # Update tree structure of document
- if (@$Pages)
- {
- my $sec;
- my @after;
-
- while (@sections && $sections[$#sections] ne $section)
- {
- unshift @after, pop @sections;
- }
-
- for $page (@$Pages)
- {
- my $node = ($page->{First} ne $page->{Last} ?
- "$sec_name: $page->{First} -- $page->{Last}" :
- "$sec_name: $page->{First}");
- push @sections, $node;
- $node2sec{$node} = $node;
- $sec2node{$node} = $node;
- $node2up{$node} = $section;
- $page->{href} = next_doc();
- $page->{name} = $node;
- $node2href{$node} = $page->{href};
- if ($prev_node)
- {
- $node2next{$prev_node} = $node;
- $node2prev{$node} = $prev_node;
- }
- $prev_node = $node;
- }
- push @sections, @after;
- }
-
- my $summary = GetIndexSummary($first_page, $Pages, $name);
- PrintIndexPage($lines, $summary, $first_page, $name);
- for $page (@$Pages)
- {
- push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
- push @$lines, "<H2 ALIGN=\"Left\">$page->{name}</H2>\n";
- PrintIndexPage($lines, $summary, $page, $name);
- }
-}
-
-
-#+++############################################################################
-# #
-# Pass 2/3: handle style, menu, index, cross-reference #
-# #
-#---############################################################################
-
-@lines2 = (); # whole document (2nd pass)
-@lines3 = (); # whole document (3rd pass)
-$in_menu = 0; # am I inside a menu
-
-while (@lines) {
- $_ = shift(@lines);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@lines2, $_);
- next;
- }
- #
- # menu
- #
- if (/^\@menu\b/)
- {
- $in_menu = 1;
- $in_menu_listing = 1;
- push(@lines2, &debug("<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> \n", __LINE__));
- next;
- }
- if (/^\@end\s+menu\b/)
- {
- if ($in_menu_listing)
- {
- push(@lines2, &debug("</TABLE></BLOCKQUOTE>\n", __LINE__));
- }
- else
- {
- push(@lines2, &debug("</BLOCKQUOTE>\n", __LINE__));
- }
- $in_menu = 0;
- $in_menu_listing = 0;
- next;
- }
- if ($in_menu)
- {
- my ($node, $name, $descr);
- if (/^\*\s+($NODERE)::/o)
- {
- $node = $1;
- $descr = $';
- }
- elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/)
- {
- $name = $1;
- $node = $2;
- $descr = $';
- }
- elsif (/^\*/)
- {
- warn "$ERROR Bad menu line: $_";
- }
- else
- {
- if ($in_menu_listing)
- {
- $in_menu_listing = 0;
- push(@lines2, &debug("</TABLE>\n", __LINE__));
- }
- # should be like verbatim -- preseve spaces, etc
- s/ /\&nbsp;/g;
- $_ .= "<br>\n";
- push(@lines2, $_);
- }
- if ($node)
- {
- if (! $in_menu_listing)
- {
- $in_menu_listing = 1;
- push(@lines2, &debug("<TABLE BORDER=0 CELLSPACING=0>\n", __LINE__));
- }
- # look for continuation
- while ($lines[0] =~ /^\s+\w+/)
- {
- $descr .= shift(@lines);
- }
- &menu_entry($node, $name, $descr);
- }
- next;
- }
- #
- # printindex
- #
- PrintIndex(\@lines2, $2, $1), next
- if (/^<!--::(.*)::-->\@printindex\s+(\w+)/);
- #
- # simple style substitutions
- #
- $_ = &substitute_style($_);
- #
- # xref
- #
- while (/\@(x|px|info|)ref{([^{}]+)(}?)/) {
- # note: Texinfo may accept other characters
- ($type, $nodes, $full) = ($1, $2, $3);
- ($before, $after) = ($`, $');
- if (! $full && $after) {
- warn "$ERROR Bad xref (no ending } on line): $_";
- $_ = "$before$;0${type}ref\{$nodes$after";
- next; # while xref
- }
- if ($type eq 'x') {
- $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} ";
- } elsif ($type eq 'px') {
- $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} ";
- } elsif ($type eq 'info') {
- $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info";
- } else {
- $type = '';
- }
- unless ($full) {
- $next = shift(@lines);
- $next = &substitute_style($next);
- chop($nodes); # remove final newline
- if ($next =~ /\}/) { # split on 2 lines
- $nodes .= " $`";
- $after = $';
- } else {
- $nodes .= " $next";
- $next = shift(@lines);
- $next = &substitute_style($next);
- chop($nodes);
- if ($next =~ /\}/) { # split on 3 lines
- $nodes .= " $`";
- $after = $';
- } else {
- warn "$ERROR Bad xref (no ending }): $_";
- $_ = "$before$;0xref\{$nodes$after";
- unshift(@lines, $next);
- next; # while xref
- }
- }
- }
- $nodes =~ s/\s+/ /g; # remove useless spaces
- @args = split(/\s*,\s*/, $nodes);
- $node = $args[0]; # the node is always the first arg
- $node = &normalise_node($node);
- $sec = $args[2] || $args[1] || $node2sec{$node};
- $href = $node2href{$node};
- if (@args == 5) { # reference to another manual
- $sec = $args[2] || $node;
- $man = $args[4] || $args[3];
- $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after";
- } elsif ($type =~ /Info/) { # inforef
- warn "$ERROR Wrong number of arguments: $_" unless @args == 3;
- ($nn, $_, $in) = @args;
- $_ = "${before}${type} file `$in', node `$nn'$after";
- } elsif ($sec && $href && ! $T2H_SHORT_REF) {
- $_ = "${before}${type}";
- $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type};
- $_ .= &t2h_anchor('', $href, $sec) . $after;
- }
- elsif ($href)
- {
- $_ = "${before}${type} " .
- &t2h_anchor('', $href, $args[2] || $args[1] || $node) .
- $after;
- }
- else {
- warn "$ERROR Undefined node ($node): $_";
- $_ = "$before$;0xref{$nodes}$after";
- }
- }
-
- # replace images
- s[\@image\s*{(.+?)}]
- {
- my @args = split (/\s*,\s*/, $1);
- my $base = $args[0];
- my $image =
- LocateIncludeFile("$base.png") ||
- LocateIncludeFile("$base.jpg") ||
- LocateIncludeFile("$base.gif");
- warn "$ERROR no image file for $base: $_" unless ($image && -e $image);
- "<IMG SRC=\"$image\" ALT=\"$base\">";
- ($T2H_CENTER_IMAGE ?
- "<CENTER><IMG SRC=\"$image\" ALT=\"$base\"></CENTER>" :
- "<IMG SRC=\"$image\" ALT=\"$base\">");
- }eg;
-
- #
- # try to guess bibliography references or glossary terms
- #
- unless (/^<H\d><A NAME=\"SEC\d/) {
- if ($use_bibliography) {
- $done = '';
- while (/$BIBRE/o) {
- ($pre, $what, $post) = ($`, $&, $');
- $href = $bib2href{$what};
- if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &t2h_anchor('', $href, $what);
- } else {
- $done .= "$pre$what";
- }
- $_ = $post;
- }
- $_ = $done . $_;
- }
- if ($T2H_USE_GLOSSARY) {
- $done = '';
- while (/\b\w+\b/) {
- ($pre, $what, $post) = ($`, $&, $');
- $entry = $what;
- $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
- $href = $gloss2href{$entry};
- if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &t2h_anchor('', $href, $what);
- } else {
- $done .= "$pre$what";
- }
- $_ = $post;
- }
- $_ = $done . $_;
- }
- }
- # otherwise
- push(@lines2, $_);
-}
-print "# end of pass 2\n" if $T2H_VERBOSE;
-
-#
-# split style substitutions
-#
-while (@lines2) {
- $_ = shift(@lines2);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@lines3, $_);
- next;
- }
- #
- # split style substitutions
- #
- $old = '';
- while ($old ne $_) {
- $old = $_;
- if (/\@(\w+)\{/) {
- ($before, $style, $after) = ($`, $1, $');
- if (defined($style_map{$style})) {
- $_ = $after;
- $text = '';
- $after = '';
- $failed = 1;
- while (@lines2) {
- if (/\}/) {
- $text .= $`;
- $after = $';
- $failed = 0;
- last;
- } else {
- $text .= $_;
- $_ = shift(@lines2);
- }
- }
- if ($failed) {
- die "* Bad syntax (\@$style) after: $before\n";
- } else {
- $text = &apply_style($style, $text);
- $_ = "$before$text$after";
- }
- }
- }
- }
- # otherwise
- push(@lines3, $_);
-}
-print "# end of pass 3\n" if $T2H_VERBOSE;
-
-#+++############################################################################
-# #
-# Pass 4: foot notes, final cleanup #
-# #
-#---############################################################################
-
-@foot_lines = (); # footnotes
-@doc_lines = (); # final document
-$end_of_para = 0; # true if last line is <P>
-
-while (@lines3) {
- $_ = shift(@lines3);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@doc_lines, $_);
- $end_of_para = 0;
- next;
- }
- #
- # footnotes
- #
- while (/\@footnote([^\{\s]+)\{/) {
- ($before, $d, $after) = ($`, $1, $');
- $_ = $after;
- $text = '';
- $after = '';
- $failed = 1;
- while (@lines3) {
- if (/\}/) {
- $text .= $`;
- $after = $';
- $failed = 0;
- last;
- } else {
- $text .= $_;
- $_ = shift(@lines3);
- }
- }
- if ($failed) {
- die "* Bad syntax (\@footnote) after: $before\n";
- } else {
- $foot_num++;
- $docid = "DOCF$foot_num";
- $footid = "FOOT$foot_num";
- $foot = "($foot_num)";
- push(@foot_lines, "<H3>" . &t2h_anchor($footid, "$d#$docid", $foot) . "</H3>\n");
- $text = "<P>$text" unless $text =~ /^\s*<P>/;
- push(@foot_lines, "$text\n");
- $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after;
- }
- }
- #
- # remove unnecessary <P>
- #
- if (/^\s*<P>\s*$/) {
- next if $end_of_para++;
- } else {
- $end_of_para = 0;
- }
- # otherwise
- push(@doc_lines, $_);
-}
-
-print "# end of pass 4\n" if $T2H_VERBOSE;
-
-#+++############################################################################
-# #
-# Pass 5: print things #
-# #
-#---############################################################################
-
-$T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H);
-$T2H_L2H = &l2h_ToHtml if ($T2H_L2H);
-$T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H);
-
-# fix node2up, node2prev, node2next, if desired
-if ($has_top_command)
-{
- for $section (keys %sec2number)
- {
- $node = $sec2node{$section};
- $node2up{$node} = Sec2UpNode($section) unless $node2up{$node};
- $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node};
- $node2next{$node} = Sec2NextNode($section) unless $node2next{$node};
- }
-}
-
-# prepare %T2H_THISDOC
-$T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
-$T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle};
-$T2H_THISDOC{author} = $value{'_author'};
-$T2H_THISDOC{subtitle} = $value{'_subtitle'};
-$T2H_THISDOC{shorttitle} = $value{'_shorttitle'};
-for $key (keys %T2H_THISDOC)
-{
- $_ = &substitute_style($T2H_THISDOC{$key});
- &unprotect_texi;
- s/\s*$//;
- $T2H_THISDOC{$key} = $_;
-}
-
-# if no sections, then simply print document as is
-unless (@sections)
-{
- print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE;
- open(FILE, "> $docu_top_file")
- || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
-
- &$T2H_print_page_head(\*FILE);
- $T2H_THIS_SECTION = \@doc_lines;
- t2h_print_lines(\*FILE);
- &$T2H_print_foot_navigation(\*FILE);
- &$T2H_print_page_foot(\*FILE);
- close(FILE);
- goto Finish;
-}
-
-# initialize $T2H_HREF, $T2H_NAME
-%T2H_HREF =
- (
- 'First' , sec_href($sections[0]),
- 'Last', sec_href($sections[$#sections]),
- 'About', $docu_about. '#SEC_About',
- );
-
-# prepare TOC, OVERVIEW, TOP
-$T2H_TOC = \@toc_lines;
-$T2H_OVERVIEW = \@stoc_lines;
-if ($has_top)
-{
- while (1)
- {
- $_ = shift @doc_lines;
- last if /$TOPEND/;
- push @$T2H_TOP, $_;
- }
- $T2H_HREF{'Top'} = $docu_top . '#SEC_Top';
-}
-else
-{
- $T2H_HREF{'Top'} = $T2H_HREF{First};
-}
-
-$node2href{Top} = $T2H_HREF{Top};
-$T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines;
-$T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines;
-
-# settle on index
-if ($T2H_INDEX_CHAPTER)
-{
- $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)};
- warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n"
- unless $T2H_HREF{Index};
-}
-if (! $T2H_HREF{Index} && $first_index_chapter)
-{
- $T2H_INDEX_CHAPTER = $first_index_chapter;
- $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER};
-}
-
-print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n"
- if ($T2H_VERBOSE && $T2H_HREF{Index});
-
-%T2H_NAME =
- (
- 'First', clean_name($sec2node{$sections[0]}),
- 'Last', clean_name($sec2node{$sections[$#sections]}),
- 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'},
- 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'},
- 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'},
- 'Index' , clean_name($T2H_INDEX_CHAPTER),
- 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}),
- );
-
-#############################################################################
-# print frame and frame toc file
-#
-if ( $T2H_FRAMES )
-{
- open(FILE, "> $docu_frame_file")
- || die "$ERROR: Can't open $docu_frame_file for writing: $!\n";
- print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
- &$T2H_print_frame(\*FILE);
- close(FILE);
-
- open(FILE, "> $docu_toc_frame_file")
- || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n";
- print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
- &$T2H_print_toc_frame(\*FILE);
- close(FILE);
-}
-
-
-#############################################################################
-# print Top
-#
-open(FILE, "> $docu_top_file")
- || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
-&$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT);
-
-if ($has_top)
-{
- print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE;
- $T2H_THIS_SECTION = $T2H_TOP;
- $T2H_HREF{This} = $T2H_HREF{Top};
- $T2H_NAME{This} = $T2H_NAME{Top};
- &$T2H_print_Top(\*FILE);
-}
-
-close(FILE) if $T2H_SPLIT;
-
-#############################################################################
-# Print sections
-#
-$T2H_NODE{Forward} = $sec2node{$sections[0]};
-$T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]});
-$T2H_HREF{Forward} = sec_href($sections[0]);
-$T2H_NODE{This} = 'Top';
-$T2H_NAME{This} = $T2H_NAME{Top};
-$T2H_HREF{This} = $T2H_HREF{Top};
-if ($T2H_SPLIT)
-{
- print "# writing " . scalar(@sections) .
- " sections in $docu_rdir$docu_name"."_[1..$doc_num]"
- if $T2H_VERBOSE;
- $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
- undef $FH;
- $doc_num = 0;
-}
-else
-{
- print "# writing " . scalar(@sections) . " sections in $docu_top_file ..."
- if $T2H_VERBOSE;
- $FH = \*FILE;
- $previous = '';
-}
-
-$counter = 0;
-# loop through sections
-while ($section = shift(@sections))
-{
- if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND))
- {
- if ($FH)
- {
- #close previous page
- &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
- &$T2H_print_page_foot($FH);
- close($FH);
- undef $FH;
- }
- }
- $T2H_NAME{Back} = $T2H_NAME{This};
- $T2H_HREF{Back} = $T2H_HREF{This};
- $T2H_NODE{Back} = $T2H_NODE{This};
- $T2H_NAME{This} = $T2H_NAME{Forward};
- $T2H_HREF{This} = $T2H_HREF{Forward};
- $T2H_NODE{This} = $T2H_NODE{Forward};
- if ($sections[0])
- {
- $T2H_NODE{Forward} = $sec2node{$sections[0]};
- $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward});
- $T2H_HREF{Forward} = sec_href($sections[0]);
- }
- else
- {
- undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward};
- }
-
- $node = $node2up{$T2H_NODE{This}};
- $T2H_HREF{Up} = $node2href{$node};
- if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up})
- {
- $T2H_NAME{Up} = $T2H_NAME{Top};
- $T2H_HREF{Up} = $T2H_HREF{Top};
- $T2H_NODE{Up} = 'Up';
- }
- else
- {
- $T2H_NAME{Up} = &clean_name($node);
- $T2H_NODE{Up} = $node;
- }
-
- $node = $T2H_NODE{This};
- $node = $node2prev{$node};
- $T2H_NAME{Prev} = &clean_name($node);
- $T2H_HREF{Prev} = $node2href{$node};
- $T2H_NODE{Prev} = $node;
-
- $node = $T2H_NODE{This};
- if ($node2up{$node} && $node2up{$node} ne 'Top'&&
- ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node}))
- {
- $node = $node2up{$node};
- while ($node && $node ne $node2up{$node} && ! $node2prev{$node})
- {
- $node = $node2up{$node};
- }
- $node = $node2prev{$node}
- unless $node2up{$node} eq 'Top' || ! $node2up{$node};
- }
- else
- {
- $node = $node2prev{$node};
- }
- $T2H_NAME{FastBack} = &clean_name($node);
- $T2H_HREF{FastBack} = $node2href{$node};
- $T2H_NODE{FastBack} = $node;
-
- $node = $T2H_NODE{This};
- $node = $node2next{$node};
- $T2H_NAME{Next} = &clean_name($node);
- $T2H_HREF{Next} = $node2href{$node};
- $T2H_NODE{Next} = $node;
-
- $node = $T2H_NODE{This};
- if ($node2up{$node} && $node2up{$node} ne 'Top'&&
- ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node}))
- {
- $node = $node2up{$node};
- while ($node && $node ne $node2up{$node} && ! $node2next{$node})
- {
- $node = $node2up{$node};
- }
- }
- $node = $node2next{$node};
- $T2H_NAME{FastForward} = &clean_name($node);
- $T2H_HREF{FastForward} = $node2href{$node};
- $T2H_NODE{FastForward} = $node;
-
- if (! defined($FH))
- {
- my $file = $T2H_HREF{This};
- $file =~ s/\#.*$//;
- open(FILE, "> $docu_rdir$file") ||
- die "$ERROR: Can't open $docu_rdir$file for writing: $!\n";
- $FH = \*FILE;
- &$T2H_print_page_head($FH);
- t2h_print_label($FH);
- &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter';
- }
- else
- {
- t2h_print_label($FH);
- }
-
- $T2H_THIS_SECTION = [];
- while (@doc_lines) {
- $_ = shift(@doc_lines);
- last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND);
- push(@$T2H_THIS_SECTION, $_);
- }
- $previous = $_;
- &$T2H_print_section($FH);
-
- if ($T2H_VERBOSE)
- {
- $counter++;
- print "." if $counter =~ /00$/;
- }
-}
-if ($T2H_SPLIT)
-{
- &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
- &$T2H_print_page_foot($FH);
- close($FH);
-}
-print "\n" if $T2H_VERBOSE;
-
-#############################################################################
-# Print ToC, Overview, Footnotes
-#
-undef $T2H_HREF{Prev};
-undef $T2H_HREF{Next};
-undef $T2H_HREF{Back};
-undef $T2H_HREF{Forward};
-undef $T2H_HREF{Up};
-
-if (@foot_lines)
-{
- print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE;
- open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n"
- if $T2H_SPLIT;
- $T2H_HREF{This} = $docu_foot;
- $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'};
- $T2H_THIS_SECTION = \@foot_lines;
- &$T2H_print_Footnotes(\*FILE);
- close(FILE) if $T2H_SPLIT;
-}
-
-if (@toc_lines)
-{
- print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE;
- open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n"
- if $T2H_SPLIT;
- $T2H_HREF{This} = $T2H_HREF{Contents};
- $T2H_NAME{This} = $T2H_NAME{Contents};
- $T2H_THIS_SECTION = \@toc_lines;
- &$T2H_print_Toc(\*FILE);
- close(FILE) if $T2H_SPLIT;
-}
-
-if (@stoc_lines)
-{
- print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE;
- open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n"
- if $T2H_SPLIT;
-
- $T2H_HREF{This} = $T2H_HREF{Overview};
- $T2H_NAME{This} = $T2H_NAME{Overview};
- $T2H_THIS_SECTION = \@stoc_lines;
- unshift @$T2H_THIS_SECTION, "<BLOCKQUOTE>\n";
- push @$T2H_THIS_SECTION, "\n</BLOCKQUOTE>\n";
- &$T2H_print_Overview(\*FILE);
- close(FILE) if $T2H_SPLIT;
-}
-
-if ($about_body = &$T2H_about_body())
-{
- print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE;
- open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n"
- if $T2H_SPLIT;
-
- $T2H_HREF{This} = $T2H_HREF{About};
- $T2H_NAME{This} = $T2H_NAME{About};
- $T2H_THIS_SECTION = [$about_body];
- &$T2H_print_About(\*FILE);
- close(FILE) if $T2H_SPLIT;
-}
-
-unless ($T2H_SPLIT)
-{
- &$T2H_print_page_foot(\*FILE);
- close (FILE);
-}
-
-Finish:
-&l2h_FinishFromHtml if ($T2H_L2H);
-&l2h_Finish if($T2H_L2H);
-print "# that's all folks\n" if $T2H_VERBOSE;
-
-exit(0);
-
-#+++############################################################################
-# #
-# Low level functions #
-# #
-#---############################################################################
-
-sub LocateIncludeFile
-{
- my $file = shift;
- my $dir;
-
- return $file if (-e $file && -r $file);
- foreach $dir (@T2H_INCLUDE_DIRS)
- {
- return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file");
- }
- return undef;
-}
-
-sub clean_name
-{
- local ($_);
- $_ = &remove_style($_[0]);
- &unprotect_texi;
- return $_;
-}
-
-sub update_sec_num {
- local($name, $level) = @_;
- my $ret;
-
- $level--; # here we start at 0
- if ($name =~ /^appendix/ || defined(@appendix_sec_num)) {
- # appendix style
- if (defined(@appendix_sec_num)) {
- &incr_sec_num($level, @appendix_sec_num);
- } else {
- @appendix_sec_num = ('A', 0, 0, 0);
- }
- $ret = join('.', @appendix_sec_num[0..$level]);
- } else {
- # normal style
- if (defined(@normal_sec_num))
- {
- &incr_sec_num($level, @normal_sec_num);
- }
- else
- {
- @normal_sec_num = (1, 0, 0, 0);
- }
- $ret = join('.', @normal_sec_num[0..$level]);
- }
-
- $ret .= "." if $level == 0;
- return $ret;
-}
-
-sub incr_sec_num {
- local($level, $l);
- $level = shift(@_);
- $_[$level]++;
- foreach $l ($level+1 .. 3) {
- $_[$l] = 0;
- }
-}
-
-sub Sec2UpNode
-{
- my $sec = shift;
- my $num = $sec2number{$sec};
-
- return '' unless $num;
- return 'Top' unless $num =~ /\.\d+/;
- $num =~ s/\.[^\.]*$//;
- $num = $num . '.' unless $num =~ /\./;
- return $sec2node{$number2sec{$num}};
-}
-
-sub Sec2PrevNode
-{
- my $sec = shift;
- my $num = $sec2number{$sec};
- my ($i, $post);
-
- if ($num =~ /(\w+)(\.$|$)/)
- {
- $num = $`;
- $i = $1;
- $post = $2;
- if ($i eq 'A')
- {
- $i = $normal_sec_num[0];
- }
- elsif ($i ne '1')
- {
- # unfortunately, -- operator is not magical
- $i = chr(ord($i) + 1);
- }
- else
- {
- return '';
- }
- return $sec2node{$number2sec{$num . $i . $post}}
- }
- return '';
-}
-
-sub Sec2NextNode
-{
- my $sec = shift;
- my $num = $sec2number{$sec};
- my $i;
-
- if ($num =~ /(\w+)(\.$|$)/)
- {
- $num = $`;
- $i = $1;
- $post = $2;
- if ($post eq '.' && $i eq $normal_sec_num[0])
- {
- $i = 'A';
- }
- else
- {
- $i++;
- }
- return $sec2node{$number2sec{$num . $i . $post}}
- }
- return '';
-}
-
-sub check {
- local($_, %seen, %context, $before, $match, $after);
-
- while (<>) {
- if (/\@(\*|\.|\:|\@|\{|\})/) {
- $seen{$&}++;
- $context{$&} .= "> $_" if $T2H_VERBOSE;
- $_ = "$`XX$'";
- redo;
- }
- if (/\@(\w+)/) {
- ($before, $match, $after) = ($`, $&, $');
- if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address
- $seen{'e-mail address'}++;
- $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE;
- } else {
- $seen{$match}++;
- $context{$match} .= "> $_" if $T2H_VERBOSE;
- }
- $match =~ s/^\@/X/;
- $_ = "$before$match$after";
- redo;
- }
- }
-
- foreach (sort(keys(%seen))) {
- if ($T2H_VERBOSE) {
- print "$_\n";
- print $context{$_};
- } else {
- print "$_ ($seen{$_})\n";
- }
- }
-}
-
-sub open {
- local($name) = @_;
-
- ++$fh_name;
- if (open($fh_name, $name)) {
- unshift(@fhs, $fh_name);
- } else {
- warn "$ERROR Can't read file $name: $!\n";
- }
-}
-
-sub init_input {
- @fhs = (); # hold the file handles to read
- @input_spool = (); # spooled lines to read
- $fh_name = 'FH000';
- &open($docu);
-}
-
-sub next_line {
- local($fh, $line);
-
- if (@input_spool) {
- $line = shift(@input_spool);
- return($line);
- }
- while (@fhs) {
- $fh = $fhs[0];
- $line = <$fh>;
- return($line) if $line;
- close($fh);
- shift(@fhs);
- }
- return(undef);
-}
-
-# used in pass 1, use &next_line
-sub skip_until {
- local($tag) = @_;
- local($_);
-
- while ($_ = &next_line) {
- return if /^\@end\s+$tag\s*$/;
- }
- die "* Failed to find '$tag' after: " . $lines[$#lines];
-}
-
-# used in pass 1 for l2h use &next_line
-sub string_until {
- local($tag) = @_;
- local($_, $string);
-
- while ($_ = &next_line) {
- return $string if /^\@end\s+$tag\s*$/;
-# $_ =~ s/hbox/mbox/g;
- $string = $string.$_;
- }
- die "* Failed to find '$tag' after: " . $lines[$#lines];
-}
-
-#
-# HTML stacking to have a better HTML output
-#
-
-sub html_reset {
- @html_stack = ('html');
- $html_element = 'body';
-}
-
-sub html_push {
- local($what) = @_;
- push(@html_stack, $html_element);
- $html_element = $what;
-}
-
-sub html_push_if {
- local($what) = @_;
- push(@html_stack, $html_element)
- if ($html_element && $html_element ne 'P');
- $html_element = $what;
-}
-
-sub html_pop {
- $html_element = pop(@html_stack);
-}
-
-sub html_pop_if {
- local($elt);
-
- if (@_) {
- foreach $elt (@_) {
- if ($elt eq $html_element) {
- $html_element = pop(@html_stack) if @html_stack;
- last;
- }
- }
- } else {
- $html_element = pop(@html_stack) if @html_stack;
- }
-}
-
-sub html_debug {
- local($what, $line) = @_;
- if ($T2H_DEBUG & $DEBUG_HTML)
- {
- $what = "\n" unless $what;
- return("<!-- $line @html_stack, $html_element -->$what")
- }
- return($what);
-}
-
-# to debug the output...
-sub debug {
- local($what, $line) = @_;
- return("<!-- $line -->$what")
- if $T2H_DEBUG & $DEBUG_HTML;
- return($what);
-}
-
-sub SimpleTexi2Html
-{
- local $_ = $_[0];
- &protect_texi;
- &protect_html;
- $_ = substitute_style($_);
- $_[0] = $_;
-}
-
-sub normalise_node {
- local $_ = $_[0];
- s/\s+/ /g;
- s/ $//;
- s/^ //;
- &protect_texi;
- &protect_html;
- $_ = substitute_style($_);
- $_[0] = $_;
-}
-
-sub menu_entry
-{
- my ($node, $name, $descr) = @_;
- my ($href, $entry);
-
- &normalise_node($node);
- $href = $node2href{$node};
- if ($href)
- {
- $descr =~ s/^\s+//;
- $descr =~ s/\s*$//;
- $descr = SimpleTexi2Html($descr);
- if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node})
- {
- $entry = $node2sec{$node};
- $name = '';
- }
- else
- {
- &normalise_node($name);
- $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY)
- ? "$name : $node" : $node);
- }
-
- if ($T2H_AVOID_MENU_REDUNDANCY && $descr)
- {
- my $clean_entry = $entry;
- $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /);
- $clean_entry =~ s/[^\w]//g;
- my $clean_descr = $descr;
- $clean_descr =~ s/[^\w]//g;
- $descr = '' if ($clean_entry eq $clean_descr)
- }
- push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' .
- &t2h_anchor('', $href, $entry) .
- '</TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">' .
- $descr .
- "</TD></TR>\n", __LINE__));
- }
- elsif ($node =~ /^\(.*\)\w+/)
- {
- push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' .
- $entry .
- '</TD><TD ALIGN="left" VALIGN="TOP">' . $descr .
- "</TD></TR>\n", __LINE__))
- }
- else
- {
- warn "$ERROR Undefined node of menu_entry ($node): $_";
- }
-}
-
-sub do_ctrl { "^$_[0]" }
-
-sub do_email {
- local($addr, $text) = split(/,\s*/, $_[0]);
-
- $text = $addr unless $text;
- &t2h_anchor('', "mailto:$addr", $text);
-}
-
-sub do_sc
-{
- # l2h does this much better
- return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H);
- return "\U$_[0]\E";
-}
-
-sub do_math
-{
- return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H);
- return "<EM>".$text."</EM>";
-}
-
-sub do_uref {
- local($url, $text, $only_text) = split(/,\s*/, $_[0]);
-
- $text = $only_text if $only_text;
- $text = $url unless $text;
- &t2h_anchor('', $url, $text);
-}
-
-sub do_url { &t2h_anchor('', $_[0], $_[0]) }
-
-sub do_acronym
-{
- return '<FONT SIZE="-1">' . $_[0] . '</FONT>';
-}
-
-sub do_accent
-{
- return "&$_[0]acute;" if $_[1] eq 'H';
- return "$_[0]." if $_[1] eq 'dotaccent';
- return "$_[0]*" if $_[1] eq 'ringaccent';
- return "$_[0]".'[' if $_[1] eq 'tieaccent';
- return "$_[0]".'(' if $_[1] eq 'u';
- return "$_[0]_" if $_[1] eq 'ubaraccent';
- return ".$_[0]" if $_[1] eq 'udotaccent';
- return "$_[0]&lt;" if $_[1] eq 'v';
- return "&$_[0]cedil;" if $_[1] eq ',';
- return "$_[0]" if $_[1] eq 'dotless';
- return undef;
-}
-
-sub apply_style {
- local($texi_style, $text) = @_;
- local($style);
-
- $style = $style_map{$texi_style};
- if (defined($style)) { # known style
- if ($style =~ /^\"/) { # add quotes
- $style = $';
- $text = "\`$text\'";
- }
- if ($style =~ /^\&/) { # custom
- $style = $';
- $text = &$style($text, $texi_style);
- } elsif ($style) { # good style
- $text = "<$style>$text</$style>";
- } else { # no style
- }
- } else { # unknown style
- $text = undef;
- }
- return($text);
-}
-
-# remove Texinfo styles
-sub remove_style {
- local($_) = @_;
- 1 while(s/\@\w+{([^\{\}]+)}/$1/g);
- return($_);
-}
-
-sub remove_things
-{
- local ($_) = @_;
- s|\@(\w+)\{\}|$1|g;
- return $_;
-}
-
-sub substitute_style {
- local($_) = @_;
- local($changed, $done, $style, $text);
-
- &simple_substitutions;
- $changed = 1;
- while ($changed) {
- $changed = 0;
- $done = '';
- while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) {
- $text = &apply_style($1, $2);
- if ($text) {
- $_ = "$`$text$'";
- $changed = 1;
- } else {
- $done .= "$`\@$1";
- $_ = "{$2}$'";
- }
- }
- $_ = $done . $_;
- }
- return($_);
-}
-
-sub t2h_anchor {
- local($name, $href, $text, $newline, $extra_attribs) = @_;
- local($result);
-
- $result = "<A";
- $result .= " NAME=\"$name\"" if $name;
- if ($href)
- {
- $href =~ s|^$T2H_HREF_DIR_INSTEAD_FILE|./|
- if ($T2H_HREF_DIR_INSTEAD_FILE);
- $result .= ($href =~ /\"/ ? " HREF='$href'" : " HREF=\"$href\"");
- }
- $result .= " $extra_attribs" if $extra_attribs;
- $result .= ">$text</A>";
- $result .= "\n" if $newline;
- return($result);
-}
-
-sub pretty_date {
- local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
-
- @MoY = ('January', 'February', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December');
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
- $year += ($year < 70) ? 2000 : 1900;
- # obachman: Let's do it as the Americans do
- return("$MoY[$mon], $mday $year");
-}
-
-sub doc_href {
- local($num) = @_;
-
- return("${docu_name}_$num.$docu_ext");
-}
-
-sub sec_href
-{
- return $node2href{$sec2node{$_[0]}};
-}
-
-sub next_doc {
- $docu_doc = &doc_href(++$doc_num);
-}
-
-sub t2h_print_lines {
- my ($fh, $lines) = @_;
- local($_);
- $lines = $T2H_THIS_SECTION unless $lines;
- my $cnt = 0;
- for (@$lines)
- {
- $_ = l2h_FromHtml($_) if ($T2H_L2H);
- if (/^$PROTECTTAG/o) {
- $_ = $tag2pro{$_};
- } else {
- &unprotect_texi;
- }
- print $fh $_;
- $cnt += split(/\W*\s+\W*/);
- }
- return $cnt;
-}
-
-sub protect_texi {
- # protect @ { } ` '
- s/\@\@/$;0/go;
- s/\@\{/$;1/go;
- s/\@\}/$;2/go;
- s/\@\`/$;3/go;
- s/\@\'/$;4/go;
-}
-
-sub protect_html {
- local($what) = @_;
- # protect & < >
- $what =~ s/\&/\&\#38;/g;
- $what =~ s/\</\&\#60;/g;
- $what =~ s/\>/\&\#62;/g;
- # restore anything in quotes
- # this fixes my problem where I had:
- # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted &#60; in my ALT text ??
- # maybe byte stuffing or some other technique should be used.
- $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g;
- $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g;
- $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g;
- # but recognize some HTML things
- $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A>
- $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+>
- $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+>
- return($what);
-}
-
-sub unprotect_texi {
- s/$;0/\@/go;
- s/$;1/\{/go;
- s/$;2/\}/go;
- s/$;3/\`/go;
- s/$;4/\'/go;
-}
-
-sub Unprotect_texi
-{
- local $_ = shift;
- &unprotect_texi;
- return($_);
-}
-
-sub unprotect_html {
- local($what) = @_;
- $what =~ s/\&\#38;/\&/g;
- $what =~ s/\&\#60;/\</g;
- $what =~ s/\&\#62;/\>/g;
- return($what);
-}
-
-sub t2h_print_label
-{
- my $fh = shift;
- my $href = shift || $T2H_HREF{This};
- $href =~ s/.*#(.*)$/$1/;
- print $fh qq{<A NAME="$href"></A>\n};
-}
-
-##############################################################################
-
- # These next few lines are legal in both Perl and nroff.
-
-.00 ; # finish .ig
-
-'di \" finish diversion--previous line must be blank
-.nr nl 0-1 \" fake up transition to first page again
-.nr % 0 \" start at page 1
-'; __END__ ############# From here on it's a standard manual page ############
-.so /usr/local/man/man1/texi2html.1
diff --git a/readline/doc/version.texi b/readline/doc/version.texi
deleted file mode 100644
index 576c35c..0000000
--- a/readline/doc/version.texi
+++ /dev/null
@@ -1,10 +0,0 @@
-@ignore
-Copyright (C) 1988-2018 Free Software Foundation, Inc.
-@end ignore
-
-@set EDITION 8.0
-@set VERSION 8.0
-@set UPDATED 30 November 2018
-@set UPDATED-MONTH November 2018
-
-@set LASTCHANGE Fri Nov 30 22:50:53 EST 2018