texi2any: A Texinfo Reference Implementation
Above, we called
texi2any “the” translator for Texinfo
instead of just “a” translator, even though (of course) it’s
technically and legally possible for other implementations to be
written. The reason is that alternative implementations are very
likely to have subtle, or not-so-subtle, differences in behavior, and
thus Texinfo documents would become dependent on the processor.
Therefore, it is important to have a reference implementation that
defines parts of the language not fully specified by the manual (often
intentionally so). It is equally important to have consistent
command-line options and other behavior for all processors.
For this reason, the once-independent
texi2html Perl Texinfo
processor was made compatible with the C implementation of
makeinfo, to avoid continuing with two different
implementations (see History). The current implementation,
texi2any, serves as the reference implementation. It
inherited the design of customization and other features from
texi2html (for more on
texi2any is a full
reimplementation: it constructs a tree-based representation of the
input document for all back-ends to work from.
Extensive tests of the language were developed at the same time as
texi2any; we plead with anyone thinking of writing a program
to parse Texinfo input to at least make use of these tests.
texi2html wrapper script (see
provides a very simple example of calling
texi2any from a
shell script; it’s in util/texi2html in the Texinfo sources.
texi-elements-by-size is an example
Perl script using the
Texinfo::Parser module interface; it’s
also in the util source directory. (Its functionality may also
be useful to authors; see texi-elements-by-size.)
With the release of
texi2any as the reference
implementation, development of both the C implementation of
texi2html has been halted. Going
forward, we ask authors of Texinfo documents to use only