Lout (software)

Last updated
Lout
Developer(s) Jeffrey H. Kingston
Stable release
3.41 / June 2023
Written in C
Operating system Linux, MS-Windows, POSIX compliant systems
Type Text formatting
License GPL
Website savannah.nongnu.org/projects/lout

Lout is a batch document formatting system [1] invented by Jeffrey H. Kingston. It reads a high-level description of a document similar in style to LaTeX and produces a PostScript file which can be printed on most printers. Plain text and PDF output are also available. The term Lout primarily designates a document formatting programming language, while the (only) implementation of the language (by Jeffrey H. Kingston) is sometimes referred to as Basser Lout. Basser Lout is free software, distributed under the terms of the GNU General Public License.

Lout copies some of its formatting algorithms from TeX but is intended to be much easier to program due to the use of high-level functional programming language, instead of a macro language.

While a typical installation of LaTeX, together with TeX binaries takes from 50 to 300 MB, Lout is about 1 MB. This is mainly due to fewer packages and tools, but might also be attributed to a C implementation instead of macro language source code. [2]

Lout comes with an easy-to-read user guide, and the basics can be learned in a couple of hours. It includes packages for creating tables, charts, equations, and diagrams, everything in one package "out of the box". Lout is useful for creating reports and books and gives very precise control over typesetting.

Document formatting with Lout

While the core of the Lout programming language provides only low-level operations, similar to that of TeX, the packages that come with Basser Lout provide a complete high-level markup language that users may use directly to produce documents, in a way that is similar to LaTeX.

A very simple Lout document may look like this:

 # This is a comment.    # Use the `doc' document class and its default style.  @SysInclude { doc }    @Document    @InitialFont { Times Base 10p }  //    # Beginning of document contents.  @Text @Begin    @PP  This is a paragraph.  One can easily embed @B { bold } or  @I { italic } text.  One can also easily change the style of  text, such as { Helvetica Base } @Font { changing the font  being used }.    @BeginSections  @Section @Title { The First Section }  @Begin    @PP  This is the content of a section.    @End @Section  @EndSections    @End @Text  # End of the document.

Different document types are available: doc, report, book, but also slides (for overhead transparencies) and illustration (for stand-alone illustrations). Customizing a document style is usually relatively easy, even to the non-programmer.

Programming language features

The Lout programming language is similar to other functional languages. The core programming language consists of less than 30 primitive operators. [3] Some features make it particularly close to Haskell, notably the fact that Lout expressions are lazily evaluated. Lout also provides constructs needed for the implementation of document formatting that are not commonly found in other programming languages, such as galleys. [4] Unlike most other functional programming languages, Lout does not provide, for instance, first-class functions.

Security issues

In 2019 Common Vulnerabilities and Exposures listed two buffer overflow issues in Lout 3.40, which can be exploited if untrusted documents are processed. [5] [6] Debian removed Lout in October 2020 due to these issues not having been patched; [7] [8] the package had had no maintainer since 2013. [9] In June 2023, Kingston published a slightly reformatted Lout 3.41, still subject to those buffer overflows. At least one unofficial fork of Lout has been created to patch the buffer overflows. [10]

Related Research Articles

<span class="mw-page-title-main">Literate programming</span> A programming approach of software development

Literate programming is a programming paradigm introduced in 1984 by Donald Knuth in which a computer program is given as an explanation of how it works in a natural language, such as English, interspersed (embedded) with snippets of macros and traditional source code, from which compilable source code can be generated. The approach is used in scientific computing and in data science routinely for reproducible research and open access purposes. Literate programming tools are used by millions of programmers today.

<span class="mw-page-title-main">LaTeX</span> Document preparation software system

LaTeX is a software system for typesetting documents. LaTeX markup describes the content and layout of the document, as opposed to the formatted text found in WYSIWYG word processors like Microsoft Word, LibreOffice Writer and Apple Pages. The writer uses markup tagging conventions to define the general structure of a document, to stylise text throughout a document, and to add citations and cross-references. A TeX distribution such as TeX Live or MiKTeX is used to produce an output file suitable for printing or digital distribution.

<span class="mw-page-title-main">Markup language</span> Modern system for annotating a document

A markuplanguage is a text-encoding system which specifies the structure and formatting of a document and potentially the relationship between its parts. Markup can control the display of a document or enrich its content to facilitate automated processing.

TeX, stylized within the system as TeX, is a typesetting system which was designed and written by computer scientist and Stanford University professor Donald Knuth and first released in 1978. TeX is a popular means of typesetting complex mathematical formulae; it has been noted as one of the most sophisticated digital typographical systems.

<span class="mw-page-title-main">Text editor</span> Computer software used to edit plain text documents

A text editor is a type of computer program that edits plain text. Such programs are sometimes known as "notepad" software. Text editors are provided with operating systems and software development packages, and can be used to change files such as configuration files, documentation files and programming language source code.

troff, short for "typesetter roff", is the major component of a document processing system developed by Bell Labs for the Unix operating system. troff and the related nroff were both developed from the original roff.

<span class="mw-page-title-main">Ghostscript</span> Interpreter for the PostScript language

Ghostscript is a suite of software based on an interpreter for Adobe Systems' PostScript and Portable Document Format (PDF) page description languages. Its main purposes are the rasterization or rendering of such page description language files, for the display or printing of document pages, and the conversion between PostScript and PDF files.

man page Unix software documentation

A man page is a form of software documentation usually found on a Unix or Unix-like operating system. Topics covered include computer programs, formal standards and conventions, and even abstract concepts. A user may invoke a man page by issuing the man command.

<span class="mw-page-title-main">GNU TeXmacs</span> Open-source word processor

GNU TeXmacs is a scientific word processor and typesetting component of the GNU Project. It originated as a variant of GNU Emacs with TeX functionalities, though it shares no code with those programs, while using TeX fonts. It is written and maintained by Joris van der Hoeven and a group of developers. The program produces structured documents with a WYSIWYG user interface. New document styles can be created by the user. The editor provides high-quality typesetting algorithms and TeX and other fonts for publishing professional looking documents.

<span class="mw-page-title-main">Typesetting</span> Composition of text by means of arranging physical types or digital equivalents

Typesetting is the composition of text for publication, display, or distribution by means of arranging physical type in mechanical systems or glyphs in digital systems representing characters. Stored types are retrieved and ordered according to a language's orthography for visual display. Typesetting requires one or more fonts. One significant effect of typesetting was that authorship of works could be spotted more easily, making it difficult for copiers who have not gained permission.

<span class="mw-page-title-main">Device independent file format</span> Typesetting file format

The device independent file format (DVI) is the output file format of the TeX typesetting program, designed by David R. Fuchs and implemented by Donald E. Knuth in 1982. Unlike the TeX markup files used to generate them, DVI files are not intended to be human-readable; they consist of binary data describing the visual layout of a document in a manner not reliant on any specific image format, display hardware or printer. DVI files are typically used as input to a second program which translates DVI files to graphical data. For example, most TeX software packages include a program for previewing DVI files on a user's computer display; this program is a driver. Drivers are also used to convert from DVI to popular page description languages and for printing.

<span class="mw-page-title-main">BibTeX</span> Reference management software for formatting lists of references

BibTeX is both a bibliographic flat-file database file format and a software program for processing these files to produce lists of references (citations). The BibTeX file format is a widely used standard with broad support by reference management software.

This article provides basic comparisons for notable text editors. More feature details for text editors are available from the Category of text editor features and from the individual products' articles. This article may not be up-to-date or necessarily all-inclusive.

<span class="mw-page-title-main">AUCTeX</span>

AUCTeX is an extensible package for writing and formatting TeX files in Emacs and XEmacs.

<span class="mw-page-title-main">KWallet</span> Password manager

KDE Wallet Manager (KWallet) is free and open-source password management software written in C++ for UNIX-style operating systems. KDE Wallet Manager runs on a Linux-based OS and Its main feature is storing encrypted passwords in KDE Wallets. The main feature of KDE wallet manager (KWallet) is to collect user's credentials such as passwords or IDs and encrypt them through Blowfish symmetric block cipher algorithm or GNU Privacy Guard encryption.

<span class="mw-page-title-main">GNU Emacs</span> GNU version of the Emacs text editor

GNU Emacs is a free software text editor. It was created by GNU Project founder Richard Stallman, based on the Emacs editor developed for Unix operating systems. GNU Emacs has been a central component of the GNU project and a flagship project of the free software movement. Its tag line is "the extensible self-documenting text editor."

The computer program pdfTeX is an extension of Knuth's typesetting program TeX, and was originally written and developed into a publicly usable product by Hàn Thế Thành as a part of the work for his PhD thesis at the Faculty of Informatics, Masaryk University, Brno, Czech Republic. The idea of making this extension to TeX was conceived during the early 1990s, when Jiří Zlatuška and Phil Taylor discussed some developmental ideas with Donald Knuth at Stanford University. Knuth later met Hàn Thế Thành in Brno during his visit to the Faculty of Informatics to receive an honorary doctorate from Masaryk University.

Emacs, originally named EMACS, is a family of text editors that are characterized by their extensibility. The manual for the most widely used variant, GNU Emacs, describes it as "the extensible, customizable, self-documenting, real-time display editor". Development of the first Emacs began in the mid-1970s, and work on GNU Emacs, directly descended from the original, is ongoing; its latest version is 29.2, released January 2024.

<span class="mw-page-title-main">Org-mode</span> Open source mode for GNU Emacs

Org Mode is a mode for document editing, formatting, and organizing within the free software text editor GNU Emacs and its derivatives, designed for notes, planning, and authoring. The name is used to encompass plain text files that include simple marks to indicate levels of a hierarchy, and an editor with functions that can read the markup and manipulate hierarchy elements.

References

  1. Jeffrey H. Kingston (2023). "The Lout Document Formatting System" . Retrieved 2023-12-19.
  2. Lout Downloads
  3. Jeffrey H. Kingston (September 1993). "The Design and Implementation of the Lout Document Formatting Language". Software: Practice and Experience. 23 (9): 1001–1041. CiteSeerX   10.1.1.45.9433 . doi:10.1002/spe.4380230906. S2CID   22952199.
  4. Wolfram Kahl (January 1999). "Beyond Pretty-Printing: Galley Concepts in Document Formatting Combinators". Practical Aspects of Declarative Languages: First International Workshop.
  5. "NVD - CVE-2019-19917".
  6. "NVD - CVE-2019-19918".
  7. Debian Lout bug: security issues
  8. Debian Lout: package removal
  9. Debian Lout bug: maintainer gone
  10. "William" (2022-11-01). "william8000/lout (version 3.42.2)". GitHub . Retrieved 2023-12-19.