1.6 History

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. Karl Berry continued maintenance from Texinfo 3.8 (manual edition 2.22), and Gavin Smith has continued maintenance since Texinfo 6.0.

Beginnings

Richard Stallman included an on-line, hypertext help system called Info in the original implementation of Emacs (in 1975/6). Stallman had been inspired after seeing a presentation a couple of years earlier on the “NLS” hypertext system of Douglas Engelbart.

In another development, 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 format called Bolio. Richard Stallman (RMS) worked on converting Bolio to use TeX as its typesetting language, resulting in 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. RMS 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.

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, as well as the standalone info program.

Reimplementing in Perl

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:

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.