import demeter.*;
class PrintVisitor extends UniversalVisitor implements Cloneable {
  protected int indent;
  public int get_indent() { return indent; }
  public void set_indent(int new_indent)
    { indent = new_indent; }
  protected boolean needSpace;
  public boolean get_needSpace() { return needSpace; }
  public void set_needSpace(boolean new_needSpace)
    { needSpace = new_needSpace; }
  PrintVisitor() { super(); }
  public PrintVisitor(int indent, boolean needSpace) {
    super();
    set_indent(indent);
    set_needSpace(needSpace);
  }

    private void space() {
      if (needSpace) out.print(" ");
      needSpace = false;
    }
    private java.io.PrintWriter out = new java.io.PrintWriter(System.out, true);
    java.io.PrintWriter get_out() { return out; }
    void set_out(java.io.PrintWriter new_out)
      { out = new_out; }
    PrintVisitor(java.io.PrintWriter out) {
      set_out(out);
    }
    PrintVisitor(java.io.PrintStream out) {
      set_out(new java.io.PrintWriter(out));
    }
    public void before_personname(Person source, Ident dest) {
    out.print("[");
    needSpace = false;
    space();
    out.print("person");
    needSpace = true;
    space();
    out.print(source.get_personname());
    needSpace = true;
  }
  public void before_spouse(Person source, Person dest) {
    space();
    out.print("spouse");
    needSpace = true;
  }
  public void before_siblings(Person source, Person_NList dest) {
    space();
    out.print("siblings");
    needSpace = true;
  }
  public void after(Person host) {
    out.print("]");
    needSpace = false;
  }
  public void before_indent(PrintVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  public void before_needSpace(PrintVisitor source, boolean dest) {
    space();
    out.print(source.get_needSpace());
    needSpace = true;
  }
  public void before_is_equal(EqualVisitor source, boolean dest) {
    space();
    out.print(source.get_is_equal());
    needSpace = true;
  }
  public void before_indent(DisplayVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  public void before_indent(TraceVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
  }
  void universal_trv0_aft(UniversalVisitor _v_) {
    super.universal_trv0_aft(_v_);
  }
  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
}

