1.1 Style definitions
Let’s look at the traditional way styling is done for specific programs.
Browsers, when they render HTML, use CSS styling.
The older approach to user-customizable text styling is that the user
associates patterns with escape sequences in an environment variable or a
command-line argument. This is the approach used, for example, by the
GNU ‘ls’ program in combination with the ‘dircolors’ program.
The processing is distributed across several steps:
- There is default style definition that is hard-coded in the
‘dircolors’ program. The user can also define their own definitions
in a file such as ~/.dir_colors. This style definition contains
explicit terminal escape sequences; thus, it can only be used with
consoles and terminal emulators, and each style definition applies only
to a certain class of mostly-compatible terminal emulators.
dircolors program, when invoked, translates such a style
definition to a sequence of shell statements that sets an environment
- The shell executes these statements, and thus sets the environment
- The program looks at the environment variable and emits the listed escape
In contrast, this library implements styling as follows:
- There is a default style definition in a CSS file that is part of the
same package as the stylable program. The user can also define their own
definitions in a CSS file, and set an environment environment variable to
point to it.
- The program looks at the environment variable, parses the CSS file,
translates the styling specifications to the form that is appropriate for
the output device (escape sequences for terminal emulators, inline CSS
<span> elements for HTML output), and emits it.
Thus, with GNU libtextstyle, the styling has the following properties:
- It is easier for the user to define their own styling, because the file
format is standardized and supported by numerous syntax aware editors.
- A styling file does not depend on the particular output device. An HTML
output and a black-on-white terminal emulator can use the same styling
file. A white-on-black (or even green-on-black) terminal emulator will
need different styling, though.
- It is simpler: There is no need for a program that converts the style
specification from one format to another.