DEFINITION Fonts; (* portable *)

(*
The Module Fonts implement the Oberon font manager. Fonts are collections 
of characters, each character being a pattern and and metric data.
*)
 IMPORT Objects, Display;

 CONST
  substitute = -1; font = 0; metric = 1; (* Font types. *)

 TYPE
  Char = POINTER TO CharDesc;
  Font = POINTER TO FontDesc;
  CharDesc = RECORD ( Objects.ObjDesc )  (* The objects in a font library.
*)
   dx, x, y, w, h: INTEGER; (* Character width, pattern offset (x, y),
pattern size (w, h). *)
   pat: Display.Pattern (* Character raster data. *)
  END;

  FontDesc = RECORD ( Objects.LibDesc ) 
   type: SHORTINT; (* Substitute, font, or metric. *)
   height, minX, maxX, minY, maxY: INTEGER (* Font height, extremal values
of characters in font. *)
  END;

 VAR 
  FontId: CHAR; (* Initial character of font files (.Fnt). *)
  Default: Font; (* Default system screen font (typically Oberon10.Scn.Fnt).
*)

(* Return the character and data of ch in a font. *)
 PROCEDURE GetChar (F: Font; ch: CHAR; VAR dx, x, y, w, h: INTEGER; VAR pat: Display.Pattern);

(* Load and cache a font. *)
 PROCEDURE This (name: ARRAY OF CHAR): Font;
END Fonts.