| This file discusses issues related to HTML being used alongside or |
| instead of Info as a documentation format. As this has been discussed |
| for many years without much progress being made, it was thought helpful |
| to create a file like this to collect all the issues in one place. Then, |
| we could avoid having the same discussions over and over again. Anybody |
| raising the question could be referred to this file so they could be |
| aware of the current situation. |
| |
| |
| * Why? |
| |
| (Excerpt from mail to bug-texinfo@gnu.org in April 2019). |
| |
| > Documentation for GNU packages and others is often installed in the |
| > Info format, a plain text format. Using a plaintext based format for |
| > documentation does not take advantage of bitmapped displays that have |
| > been available for decades. It does not allow styling of text or |
| > reflowing of text. Much information is lost in the conversion from |
| > Texinfo to Info and any attempt in, for example, Emacs to re-add this |
| > information is unreliable. |
| > |
| > Nonetheless, Info viewers have continued to have advantages over web |
| > browsers. They are fast, and have features for searching the manual |
| > with index lookup. They allow the use of keyboard commands. |
| |
| Links to these discussions: |
| https://lists.gnu.org/archive/html/bug-texinfo/2019-04/msg00001.html |
| https://lists.gnu.org/archive/html/bug-texinfo/2019-10/msg00010.html |
| https://lists.gnu.org/archive/html/bug-texinfo/2019-11/msg00003.html |
| |
| Image support would be another advantage of HTML. |
| |
| An earlier document on this issue, from Per Bothner in 2016: |
| |
| http://per.bothner.com/blog/2016/texinfo-roadmap/ |
| |
| |
| * Coordinate with other projects |
| |
| It's hard to make progress on this due to the need to coordinate with |
| different projects. It's a chicken-and-egg problem: an HTML Info |
| program could not be released until people had documentation installed |
| where the program could read it, but people are also not motivated |
| to install documentation in a place that no program would use it. |
| |
| Changes could be needed in other projects |
| |
| - Distributions (Guix, Debian...) - Install HTML documentation |
| - Automake - rules for generating and installing HTML documentation |
| - Emacs - Info mode |
| - GNOME/other desktop environments - see if work on webkitgtk-info |
| or other could be integrated into other help systems like yelp |
| or DevHelp. |
| - there was some discussion (December 2024) at |
| https://gitlab.gnome.org/GNOME/yelp/-/issues/220 (although that |
| issue tracker is often inaccessible due to their anti-bot measures). |
| |
| A possible first step is to encourage installation of Texinfo-derived |
| HTML documentation and add support to whatever programs people use |
| to read locally-installed documentation on their systems. (Better |
| support for indices and search paths could be added later.) |
| |
| So that these Info features could be added later, installed HTML |
| manuals should be installed in standardised locations and contain |
| needed information. There should be some degree of stability in |
| the HTML produced by texi2any to allow such features and the Texinfo |
| project should agree and document what this stability entails (e.g. |
| inter-manual links, identifying index nodes). |
| |
| |
| * Location of locally installed HTML files |
| |
| The location of files is needed for users to find a manual by name |
| and to follow cross-references between manuals. |
| |
| The GNU coding standards specify a 'docdir' directory for a package. For |
| example, '/usr/local/share/doc/YOURPKG'. It would be natural to install |
| Texinfo HTML documentation under '/usr/local/share/doc/YOURPKG/html'. |
| |
| However, manual names are distinct from package names. For example, |
| "emacs" would be the package name for many manuals ("tramp", |
| "org", "calc", etc.). Hence, a user might not find the tramp |
| manual under /usr/local/share/doc/tramp/html but somewhere under |
| /usr/local/share/doc/emacs. |
| |
| We propose that HTML manuals should be sought in a directory named |
| datadir/texinfo/html/MANUAL or datadir/texinfo/html/MANUAL_html, where |
| datadir is as defined in the GNU Coding Standards. (For example, |
| datadir could take the values "/usr/share" or "/usr/local/share".) |
| |
| $XDG_DATA_DIRS/texinfo/html should also be checked where |
| XDG_DATA_DIRS is as defined in the "XDG Base Directory Specification" |
| (https://specifications.freedesktop.org/basedir-spec/latest/). |
| |
| Users or distributions would install manuals by copying/symlinking the |
| manuals to this location. (The /usr/share/texinfo/html directory is akin |
| to the /usr/share/info/dir file in the Info system.) For example, |
| HTML manuals could be symlinked from locations under /usr/share/doc to |
| be accessed by manual name under /use/share/texinfo/html in a standard |
| format. |
| |
| Debian alse has some guidance on where HTML documentation could |
| be installed, specifying /usr/share/doc/PACKAGE or /usr/share/doc/PACKAGE-doc |
| as installation directories: |
| |
| https://www.debian.org/doc/debian-policy/ch-docs.html#additional-documentation |
| |
| File locations on Debian are not completely consistent; e.g. the |
| make manual is under /usr/share/doc/make-doc/make.html, while gdb |
| is under /usr/share/doc/gdb-doc/html/gdb. |
| |
| |
| * Getting names of manuals from links |
| |
| It was also an issue as to how to get the manual name from a link from |
| one Texinfo manual to another Texinfo manual. |
| |
| In recent Texinfo releases, links to other manuals are annotated with the |
| "data-manual" attribute. This solves the problem of getting the manual |
| name. |
| |
| Texinfo manuals are put on the web with a variety of URL formats and |
| it is not possible to reliably get a manual name from a URL or even |
| to tell if a URL is to a Texinfo manual or to some other webpapge. It's |
| unlikely we could persuade everybody to change their URL formats to |
| be something a browser could parse reliably to get the manual name. Here |
| are some examples of URL's and the manual names: |
| |
| https://www.gnu.org/software/trans-coord/manual/cvs/html_node/ - "cvs" |
| https://gmplib.org/manual/ - "gmp" |
| http://lilypond.org/doc/v2.22/Documentation/internals/ - "lilypond-internals" |
| https://gcc.gnu.org/onlinedocs/gfortran/ - "gfortran" |
| |
| Prior to this, we mooted the idea of outputting links in HTML documents |
| differently if they were to be installed locally rather than put on the web. |
| For example, link to "../auth/index.html" instead of |
| "https://www.gnu.org/software/emacs/manual/html_node/auth/index.html". With |
| the right installation standards, this would have allowed inter-manual |
| links to work in regular web browsers (although only for a single |
| installation location). |
| |
| |
| * Where to store non-English manuals |
| |
| Possibly in a subdirectory named with the language code |
| |
| |
| * Requirements |
| |
| Simply using the system web browser to access HTML manuals is not |
| a full Info replacement. The following features would be missing: |
| |
| - Search in the document's indices should be allowed. |
| |
| - There should also be facility for handling intermanual-links and searching |
| a path for manuals installed in multiple locations on a system. |
| |
| |
| * Browser software |
| |
| There have been two browsing systems developed specially for reading |
| the texi2any HTML output: |
| |
| - info.js |
| - webkitgtk-info |
| |
| info.js has acquired a small number of users and is fairly |
| feature-complete. |
| |
| (However, the current Texinfo developers (as of July 2025) have little |
| capacity to push forward development (or adoption) of either system.) |
| |
| On info.js: |
| |
| > In attempt to bring some of the benefits of the Info viewers to HTML |
| > documentation in web browsers, in 2017, as part of Google Summer of |
| > Code, Matthieu Lirzin worked on a JavaScript interface that works with |
| > the HTML that texi2any produces. His work is substantially complete. |
| > ...All the important keyboard commands that work in the Info viewers are |
| > implemented, including index lookup. |
| |
| This system is contained within the 'info.js' file (under js/ in |
| the Texinfo sources), and is added to texi2any HTML output with |
| the INFO_JS_DIR variable. |
| |
| However, this system is only fully appropriate for online manuals, |
| not for locally installed manuals. The reason for this is that it only |
| handles one manual at a time and does not handle searching for a manual. |
| |
| On webkitgtk-info: |
| |
| Another system has been developed using the embedded WebKitGTK browser, |
| under the 'infog' directory in the Texinfo sources. |
| |
| Video demo https://www.gnu.org/software/texinfo/video/demo.webm |
| (from November 2019) |
| |
| From a private email (October 2020): |
| > The main problem with the two embedded HTML renderers we used (we also |
| > developed a program with QtWebEngine in this branch: |
| > https://git.savannah.gnu.org/cgit/texinfo.git/log/?h=qt-info) is their |
| > segmented architecture, and the difficulty of getting information in and |
| > out of them. As web browsers and websites are so complicated and |
| > unreliable, they make the code which processes and renders the HTML pages |
| > run in a separate process, so if the renderer crashes or freezes, some |
| > recovery action can be taken. |
| > |
| > Most of the complexity and code in both programs was to work around |
| > this, creating and using communications channels between the two halves |
| > of the program. If the process displaying the UI wants access to data |
| > from within the HTML page that the rendering process has displayed, |
| > for example, HTML elements for index entries in a page, so that |
| > index entries can be listed in some widget, then it can't simply |
| > access those data structures in the address space of the process: |
| > it has to create, send and receive messages over some channel. |
| > |
| > WebKitGTK had an API to access DOM elements in the renderer thread, |
| > but this API was deprecated in favour of injected JavaScript (I never |
| > worked out how to use this so am not sure if it is possible to achieve |
| > the same results). Hence a two-part architecture would have to be |
| > replaced with a three-part architecture: instead of |
| > |
| > UI process<--->Browser process |
| > |
| > there would be |
| > |
| > UI process<--->Browser process (native code)<-->Browser process (Javascript) |
| > |
| > (The QtWebEngine program had a similar architecture except it was |
| > even worse, with a message-passing system between JavaScript code |
| > running in different contexts.) |
| |
| (Since that email was written some use has been made of injected |
| JavaScript.) |
| |
| Use of datadir and XDG directories as described above is (as of July 2025) |
| incomplete, but would be straighforward to add. |
| |
| Currently infog only supports "split" installed HTML manuals |
| (meaning a collection of smaller HTML files rather than one large HTML file). |
| |
| |
| |
| |