UnifiedFontsDoc.tioga
Last edited by Michael Plass, July 22, 1983 12:04 pm
The Cedar interface UnifiedFonts.mesa provides a device independent way of specifing fonts to be used with the Cedar Imager. The client interface should be fairly self-explanatory. The purpose of this document is to describe the format of the font directory file, which describes all the fonts that are available in a particular environment.
In the current implementation, there is a file called Default.fontDir that lives on each local disk. A more automatic way of getting the most recent information, while still providing for local modification, may someday be available.
The job of the font directory file is to provide a mapping from the font name—transformation—device type triple to the names of the font description files appropriate to the particular devices. This sounds like a good database application, but this mechanism is devised to work without any fancy database system, as long as the list of available fonts does not become too gargantuan.
In order to allow common parts of the font directory to be easily factored out, the font directory file format consists of a sequence of commands that specify parameters, interspersed with commands that define new entries in the font table. The easiest way to see how this works is by example:
DEVICE: Ideal
SIZE: ANY
ROTATION: ANY
FONTNAME: Xerox/NS/Times/italic/body
CODESCHEME: XeroxText.codeScheme
METRICS: TFM [Indigo]<Tioga>tfm>TimesRoman.tfm
GRAPHICS: SD [Indigo]<Pressfonts>TimesRoman-MIR.sd
DEFINEFONT;
ROTATION: 0
DEVICE: Spruce
GRAPHICS: PRESS []
SIZE: 5bp +- 1/2 bp DEFINEFONT;
SIZE: 6bp +- .5 bp DEFINEFONT;
SIZE: 6bp + 1bp - .5bp DEFINEFONT;
DEVICE: Press
SIZE: 5bp +- .1bp DEFINEFONT;
SIZE: 6bp +- .1bp DEFINEFONT;
SIZE: 7bp +- .2bp DEFINEFONT;
SIZE: ANY ROTATION: ANY DEFINEFONT;
DEVICE: Screen
ROTATION: 0
METRICS: STRIKE [Indigo]Tioga>StrikeFonts>TimesRoman8I.strike
GRAPHICS: STRIKE [Indigo]Tioga>StrikeFonts>TimesRoman8I.strike
SIZE: 8pt +- 1pt DEFINEFONT;
METRICS: STRIKE [Indigo]Tioga>StrikeFonts>TimesRoman12I.strike
GRAPHICS: STRIKE [Indigo]Tioga>StrikeFonts>TimesRoman12I.strike
SIZE: 12pt +- 2pt DEFINEFONT;
What this says is essentially the following: If the user asks for the font Xerox/NS/Times/italic/body, and the device is Ideal (e.g., CedarGraphics or Interpress), get the metric information from [Indigo]<Tioga>tfm>TimesRoman.tfm and the graphics from [Indigo]<Pressfonts>TimesRoman-MIR.sd. If the device is a Spruce printer, and the rotation is zero, and the size is close to 5, 6, or 7 "big points" (i.e., 72-per-inch points), use the family name and face specified in the TFM file. Alternatively, if the device is a full Press printer, it is ok to substitute the 5, 6, or 7 point raster fonts if the size is very close and the rotation is zero; otherwise use the spline outline representation. Finally, if what is wanted is a font optimized to look good on the screen, use either [Indigo]<Tioga>StrikeFonts>TimesRoman8I.strike or [Indigo]<Tioga>StrikeFonts>TimesRoman12I.strike, depending on whether the size is close to 8 or 12 points.
Ground rules for parsing:
Case does not matter.
Tokens are delimited by spaces, commas or semicolons.
Rotations are counterclockwise, and in degrees.
Units for size are millimeters(mm), centimeters(cm), inches(in), big points(bp, 72/in), or printer's points(pt, 72.27/in).
ANY is a wildcard for SIZE and ROTATION.
If an error is encountered while parsing the font directory, a message is appended to UnifiedFonts.errorLog, the screen is flashed, and a default font is provided. If no matching font is found, the same thing happens, except the screen is not blinked.