Previous: Adding Output Formats, Up: Overview of Texinfo [Contents][Index]
Richard M. Stallman invented the Texinfo format, wrote the initial
processors, and created Edition 1.0 of this manual. Robert J.
Chassell greatly revised and extended the manual, starting with
Edition 1.1. Brian Fox was responsible for the standalone Texinfo
distribution until version 3.8, and originally wrote the standalone
makeinfo
and info
programs. Karl Berry
continued maintenance from Texinfo 3.8 (manual edition 2.22), and Gavin
Smith has continued maintenance since Texinfo 6.0.
Our thanks go out to all who helped improve this work, particularly the indefatigable Eli Zaretskii and Andreas Schwab, who have provided patches beyond counting. François Pinard and David D. Zuhn, tirelessly recorded and reported mistakes and obscurities. Zack Weinberg did the impossible by implementing the macro syntax in texinfo.tex. Thanks to Melissa Weisshaus for her frequent reviews of nearly similar editions. Dozens of others have contributed patches and suggestions, they are gratefully acknowledged in the ChangeLog file. Our mistakes are our own.
In the 1970’s at CMU, Brian Reid developed a program and format named
Scribe to mark up documents for printing. It used the @
character to introduce commands, as Texinfo does. Much more
consequentially, it strove to describe document contents rather than
formatting, an idea wholeheartedly adopted by Texinfo.
Meanwhile, people at MIT developed another, not too dissimilar format called Bolio. This then was converted to using TeX as its typesetting language: BoTeX. The earliest BoTeX version seems to have been 0.02 on October 31, 1984.
BoTeX could only be used as a markup language for documents to be printed, not for online documents. Richard Stallman (RMS) worked on both Bolio and BoTeX. He also developed a nifty on-line help format called Info, and then combined BoTeX and Info to create Texinfo, a mark up language for text that is intended to be read both online and as printed hard copy.
Moving forward, the original translator to create Info was written
(primarily by RMS and Bob Chassell) in Emacs Lisp, namely the
texinfo-format-buffer
and other functions. In the early 1990s,
Brian Fox reimplemented the conversion program in C, now called
makeinfo
.
In 2012, the C makeinfo
was itself replaced by a Perl
implementation generically called texi2any
. This version
supports the same level of output customization as
texi2html
, an independent program originally written by
Lionel Cons, later with substantial work by many others. The many
additional features needed to make texi2html
a replacement
for makeinfo
were implemented by Patrice Dumas. The first
never-released version of texi2any
was based on the
texi2html
code.
That implementation, however, was abandoned in favor of the current
program (also written by Patrice Dumas), which parses the Texinfo
input into a tree for processing. It inherited the design of
customization and other features from texi2html
(for more
on texi2html
compatibility, see texi2html
: Ancestor of texi2any
).
However, texi2any
is a full reimplementation: it constructs
a tree-based representation of the input document for all back-ends
to work from.
The new Perl program is much slower than the old C program. The speed
gap has partially closed since first release, but it may not ever be
entirely comparable. So why did we switch? In short, we intend and
hope that the present program will be much easier than the previous C
implementation of makeinfo
to extend to different output
styles, back-end output formats, and all other customizations.
In more detail:
texi2html
for years. Thus, in effect two independent
implementations of the Texinfo language had developed, and keeping
them in sync was not simple. Adding the HTML customization possible
in texi2html
to a C program would have been an
enormous effort.
makeinfo
, it
would have been tantamount to rewriting the entire program. In Perl,
much of that comes essentially for free.
makeinfo
code had become
convoluted to the point where adding a new back-end was quite complex,
requiring complex interactions with existing back-ends. In contrast,
our Perl implementation provides a clean tree-based representation for
all back-ends to work from. People have requested numerous different
back-ends (LaTeX, the latest (X)HTML, …), and they will now
be much more feasible to implement. Which leads to the last item:
texi2any
is intended to be a reference implementation
that defines parts of the language not fully specified by the manual.
Without such a reference, alternative implementations would be very
likely to have subtle, or not-so-subtle, differences in behavior,
and thus Texinfo documents would become dependent on the processor.
It is also important to have consistent command-line options for
all processors. Extensive tests of the language and processor were
developed at the same time as texi2any
; we encourage anyone
thinking of writing a program to parse Texinfo input to make use of
these tests.
With the release of texi2any
as the reference
implementation, development of both the C implementation of
makeinfo
and texi2html
has been halted. Going
forward, we ask authors of Texinfo documents to use only
texi2any
.
Previous: Adding Output Formats, Up: Overview of Texinfo [Contents][Index]