INTERFACETypes for PostScript font name and metric dataPSFont ;
IMPORT TextRefTbl, JunoRect, JunoValue; TYPE Data = REF RECORD fontTbl: TextRefTbl.T; metricTbl: TextRefTbl.T; END; (* "fontTbl" maps PostScript font names concatenated with the size of the font to information on the corresponding X font, of type "XInfo" below. "metricTbl" maps PostScript font names (without point sizes) to that font's metric data, of type "Metric" below. *) XInfo = REF RECORD name: TEXT; ptSize: JunoValue.Real; END; (* An "XInfo" record constains information for a font face at a particular font size. If "x: XInfo", then "x.name" is the full name of the X font, and "x.ptSize" is the point size of the corresponding PostScript font that will cause capital letters in the screen (X) and printer (PostScript) versions of the font to have roughly the same height. *) BBox = JunoRect.T; (* font bounding box *) Code = [0..255]; CharMapped = ARRAY Code OF BOOLEAN; (* character data valid? *) CharWidth = ARRAY Code OF JunoValue.Real; (* array of char widths *) CharBBox = ARRAY Code OF REF BBox; (* array of char bboxes *) Metric = REF RECORD bbox: BBox; mapped := CharMapped{ FALSE, .. }; width: CharWidth; charBB: CharBBox; END; (* All fields of a "PSFont.Metric" are for a 1 pt font. Therefore, they must be scaled by the size of the current font before they are used. "bbox" is the bounding box of the font: if all characters in the font are rendered at the same origin point, it is the smallest rectangle containing them in the coordinate system whose origin is the origin point, and whose coordinate axes increase to the right in the "x" direction and up in the "y" direction. "mapped[i]" indicates whether or not metric data for character "i" are valid. If "mapped[i] = FALSE", then no metric data was specified for character "i", and the values of "width[i]" and "charBB[i]" are undefined. "width[i]" is the width of the character with code "i", that is, the amount the reference point should be advanced when this character is rendered. "charBB[i]" is the bounding box for the character with code "i". The bounding box is the smallest rectangle enclosing the ink for the character when it is rendered with its reference point at the origin. If the bounding box is empty (i.e., if rendering character "i" requires no ink), then "charBB[i] = NIL". *) END PSFont.