/* * Base class of pretty objects * * Copyright 2000 Andy Gill * * $Revision: 1.1 $ * $Date: 2000/09/15 16:14:17 $ */ import java.util.*; /** * @version 0.1 * @author Andy Gill */ public abstract class Pretty { public static final int NORMAL = 0; // others public static final int SUGAR = 1; // ( ... ) { ... } public static final int CONS = 2; // :, Cons, Foo public static final int PRIM = 3; // 1, 1.0, (), etc public static final int UNEVAL = 4; // public int enterId; public int nodeId; public static final Pretty nest(PrettyStep ps,int i,Pretty p) { return new PrettyNest(i,p); } public static final Pretty group(PrettyStep ps,Pretty p) { return new PrettyGroup(p); } public static final Pretty newline() { return new PrettyNL(PrettyNL.ALWAYS_NEWLINE); } public static final Pretty sep(PrettyStep ps) { return new PrettyNL(ps,PrettyNL.SEP); } public static final Pretty brk() { return new PrettyNL(PrettyNL.BRK); } public static final Pretty text(PrettyStep ps,String text,int prop) { return new PrettyText(ps,text,prop); } // Version of text that does not take up space public static final Pretty shadow(int b,int d,String text,int prop) { return new PrettyShadow(b,d,text,prop); } public static final Pretty many(PrettyStep ps,Vector many) { return new PrettyMany(many); } public static final Pretty many(PrettyStep ps,Pretty p1,Pretty p2) { Vector many = new Vector(); many.addElement(p1); many.addElement(p2); return new PrettyMany(many); } public static final Pretty many(PrettyStep ps, Pretty p1,Pretty p2,Pretty p3) { Vector many = new Vector(); many.addElement(p1); many.addElement(p2); many.addElement(p3); return new PrettyMany(many); } public static final PrettyMany nil() { return new PrettyMany(new Vector()); } public static Pretty paren(PrettyStep ps,boolean needParen,Pretty p) { if (needParen) { PrettyMany p2 = Pretty.nil(); p2._text(ps,"(",Pretty.SUGAR); p2.add(p); p2._brk(); p2._text(ps,")",Pretty.SUGAR); return Pretty.group(ps,Pretty.nest(ps,0,p2)); } else { return Pretty.group(ps,p); } } public void best(int maxColumn,PrettyDisplay pd) { PrettyCommand start = new PrettyCommand(this,0,false); PrettyContext pc = new PrettyContext(maxColumn,start); PrettyCommand next = pc.getNextCommand(); while(next != null) { next.render(pc); next = pc.getNextCommand(); } pc.setWidgets(pd); } public abstract void render(int indent,boolean flatten,PrettyContext pc); }