TFM is very thorough in the checks it performs while reading TFM data, to the point that it could probably be used as a validation tool. Every compliance problem detected will be signalled with a warning or an error, depending on the seriousness of the problem (in fact, only two compliance conditions are warnings currently; all others being errors). At the same time, TFM also tries to offer a way out of problematic situations (in the form of restarts, currently non-interactive), when it sounds reasonable. This means that it is almost always possible to load a font, however broken it may be.
When loading a file, a restart named
cancel-loading is always
active. If invoked,
load-font will just abort and return
Otherwise, the available restarts depend on the dynamic context and the
particular condition being signalled. The graph on the next page depicts
the conditions / restarts ontology related to compliance problems. Green boxes denote warnings, red ones denote errors, and blue
ellipses denote restarts. By following a branch from left to right in
this graph, you get an idea of which restarts are available when a
specific condition is signalled. They are ordered by decreasing
proximity to the signalling code (or, to put it differently, by
increasing level of abstraction). The conditions in this graph are
described precisely in Exported conditions in The TFM Reference Manual. The restarts, on
the other hand, are not, but their names should be self-explanatory.
Note that a branch in this graph does not necessarily correspond to a
specific code path in the library. Different code paths may have
different restarts with the same name when it makes sense, but eponymous
restarts are “merged” into a single node in the graph.
One particular case deserves some additional bits of information though.
You will notice the existence of both an
error, and an
Remember that these do not concern user-provided design sizes, which may
only trigger a type error (see Erroneous Usage). In the default
invalid-design-size error is signalled when a TFM file
is not compliant. If, however, you have call
load-font with an
:design-size, you are effectively overriding the
original value, which will not be used. In that case, only a warning
is signalled: the
invalid-original-design-size warning. Finally,
please consider that leaving that warning alone means that an invalid
original design size will be kept around in the font, so if you plan on
using it later on, you’re looking for trouble.