JezK
Edit File: History.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- This manual is for GNU Texinfo (version 6.8, 8 June 2021), a documentation system that can produce both online information and a printed manual from a single source using semantic markup. Copyright (C) 1988, 1990-1993, 1995-1999, 2001-2021 Free Software Foundation, Inc. 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, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". --> <title>History (GNU Texinfo 6.8)</title> <meta name="description" content="History (GNU Texinfo 6.8)"> <meta name="keywords" content="History (GNU Texinfo 6.8)"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <meta name="Generator" content="texi2any"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link href="index.html" rel="start" title="Top"> <link href="Command-and-Variable-Index.html" rel="index" title="Command and Variable Index"> <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> <link href="Overview.html" rel="up" title="Overview"> <link href="Adding-Output-Formats.html" rel="prev" title="Adding Output Formats"> <style type="text/css"> <!-- a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em} a.summary-letter {text-decoration: none} blockquote.indentedblock {margin-right: 0em} div.display {margin-left: 3.2em} div.example {margin-left: 3.2em} kbd {font-style: oblique} pre.display {font-family: inherit} pre.format {font-family: inherit} pre.menu-comment {font-family: serif} pre.menu-preformatted {font-family: serif} span.nolinebreak {white-space: nowrap} span.roman {font-family: initial; font-weight: normal} span.sansserif {font-family: sans-serif; font-weight: normal} span:hover a.copiable-anchor {visibility: visible} ul.no-bullet {list-style: none} --> </style> </head> <body lang="en"> <div class="section" id="History"> <div class="header"> <p> Previous: <a href="Adding-Output-Formats.html" accesskey="p" rel="prev">Adding Output Formats</a>, Up: <a href="Overview.html" accesskey="u" rel="up">Overview of Texinfo</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html" title="Index" rel="index">Index</a>]</p> </div> <hr> <span id="History-1"></span><h3 class="section">1.6 History</h3> <span id="index-Stallman_002c-Richard-M_002e"></span> <span id="index-Chassell_002c-Robert-J_002e"></span> <span id="index-Fox_002c-Brian"></span> <span id="index-Berry_002c-Karl"></span> <span id="index-Smith_002c-Gavin"></span> <p>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 <code>makeinfo</code> and <code>info</code> programs. Karl Berry continued maintenance from Texinfo 3.8 (manual edition 2.22), and Gavin Smith has continued maintenance since Texinfo 6.0. </p> <span id="index-Pinard_002c-Francois"></span> <span id="index-Schwab_002c-Andreas"></span> <span id="index-Weinberg_002c-Zack"></span> <span id="index-Weisshaus_002c-Melissa"></span> <span id="index-Zaretskii_002c-Eli"></span> <span id="index-Zuhn_002c-David-D_002e"></span> <p>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 <samp>texinfo.tex</samp>. 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 <samp>ChangeLog</samp> file. Our mistakes are our own. </p> <span id="index-History-of-Texinfo"></span> <span id="index-Texinfo-history"></span> <span id="Beginnings"></span><h4 class="subheading">Beginnings</h4> <span id="index-Scribe"></span> <span id="index-Reid_002c-Brian"></span> <p>In the 1970’s at CMU, Brian Reid developed a program and format named Scribe to mark up documents for printing. It used the <code>@</code> 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. </p> <span id="index-Bolio"></span> <span id="index-BoTeX"></span> <p>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. </p> <p>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. </p> <p>Moving forward, the original translator to create Info was written (primarily by RMS and Bob Chassell) in Emacs Lisp, namely the <code>texinfo-format-buffer</code> and other functions. In the early 1990s, Brian Fox reimplemented the conversion program in C, now called <code>makeinfo</code>. </p> <span id="Reimplementing-in-Perl"></span><h4 class="subheading">Reimplementing in Perl</h4> <span id="index-Cons_002c-Lionel"></span> <span id="index-Dumas_002c-Patrice"></span> <p>In 2012, the C <code>makeinfo</code> was itself replaced by a Perl implementation generically called <code>texi2any</code>. This version supports the same level of output customization as <code>texi2html</code>, an independent program originally written by Lionel Cons, later with substantial work by many others. The many additional features needed to make <code>texi2html</code> a replacement for <code>makeinfo</code> were implemented by Patrice Dumas. The first never-released version of <code>texi2any</code> was based on the <code>texi2html</code> code. </p> <span id="index-Tree-representation-of-documents"></span> <span id="index-Syntax-tree-representation-of-documents"></span> <span id="index-Abstract-syntax-tree-representation-of-documents"></span> <p>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 <code>texi2html</code> (for more on <code>texi2html</code> compatibility, see <a href="texi2html.html"><code>texi2html</code>: Ancestor of <code>texi2any</code></a>). However, <code>texi2any</code> is a full reimplementation: it constructs a tree-based representation of the input document for all back-ends to work from. </p> <p>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 <code>makeinfo</code> to extend to different output styles, back-end output formats, and all other customizations. In more detail: </p> <ul> <li> HTML customization. Many GNU and other free software packages had been happily using the HTML customization features in <code>texi2html</code> 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 <code>texi2html</code> to a C program would have been an enormous effort. </li><li> Unicode, and multilingual support generally, especially of east Asian languages. Although of course it’s perfectly plausible to write such support in C, in the particular case of <code>makeinfo</code>, it would have been tantamount to rewriting the entire program. In Perl, much of that comes essentially for free. </li><li> Additional back-ends. The <code>makeinfo</code> 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: </li><li> Making contributions easier. In general, due to the cleaner structure, the Perl program should be considerably easier than the C for anyone to read and contribute to, with the resulting obvious benefits. </li></ul> <span id="index-texi2any_002c-as-reference-implementation"></span> <span id="index-Reference-implementation"></span> <span id="index-Implementation_002c-texi2any-as-reference"></span> <span id="index-Texinfo-language-tests"></span> <span id="index-Tests_002c-of-Texinfo-language"></span> <span id="Reference-Implementation"></span><p><code>texi2any</code> 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 <code>texi2any</code>; we encourage anyone thinking of writing a program to parse Texinfo input to make use of these tests. </p> <span id="index-Future-of-Texinfo-implementations"></span> <p>With the release of <code>texi2any</code> as the reference implementation, development of both the C implementation of <code>makeinfo</code> and <code>texi2html</code> has been halted. Going forward, we ask authors of Texinfo documents to use only <code>texi2any</code>. </p> </div> <hr> <div class="header"> <p> Previous: <a href="Adding-Output-Formats.html">Adding Output Formats</a>, Up: <a href="Overview.html">Overview of Texinfo</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html" title="Index" rel="index">Index</a>]</p> </div> </body> </html>