ktoklib/src/FmtTable.m3


 Copyright (c) 2000 California Institute of Technology 
 All rights reserved. See the file COPYRIGHT for a full description. 
 $Id: FmtTable.m3,v 1.2 2001-09-19 15:03:34 wagner Exp $ 

MODULE FmtTable;
IMPORT Text;
IMPORT TextWr, Fmt;
IMPORT Wr, Thread;
<* FATAL Wr.Failure, Thread.Alerted *>

REVEAL
  T = Public BRANDED OBJECT
    wr: Wr.T;
    lineLen: INTEGER;
    lmargin: TEXT;
  OVERRIDES
    init := Init;
    putText := PutText;
    putInt := PutInt;
    toText := ToText;
  END;

PROCEDURE Init(self: T; lmargin: TEXT := "    "): T =
  BEGIN
    self.wr := TextWr.New();
    self.lineLen := 0;
    self.lmargin := lmargin;
    Wr.PutText(self.wr, self.lmargin);
    RETURN self;
  END Init;

PROCEDURE PutText(self: T; t: TEXT) =
  VAR
    len := Text.Length(t);
  BEGIN
    IF self.lineLen + len > 71 THEN
      self.lineLen := 0;
      Wr.PutText(self.wr, ",\n" & self.lmargin);
    END;
    IF self.lineLen # 0 THEN
      Wr.PutText(self.wr, ", ");
      INC(self.lineLen, 2);
    END;
    Wr.PutText(self.wr, t);
    INC(self.lineLen, len);
  END PutText;

PROCEDURE PutInt(self: T; i: INTEGER) =
  BEGIN
    self.putText(Fmt.Int(i));
  END PutInt;

PROCEDURE ToText(self: T): TEXT =
  BEGIN
    RETURN TextWr.ToText(self.wr);
  END ToText;

BEGIN
END FmtTable.