/*
 * Created on 15.08.2004
 *
 * Print a trie. Works with ITreReader.
 */
package commons.collections.trie;


import java.io.PrintStream;


/**
 * @author kst
 */
public class ITriePrinter implements ITrieReader
{

   ITrie       trie        = null;

   boolean     emptyOutput = true;

   PrintStream out         = null;


   public ITriePrinter (ITrie trie)
   {
      this.trie = trie;
   }


   public void println ()
   {
      out = System.out;
      trie.registerTrieReader(this);
      trie.traverseTrie();
   }


   /**
    * Callback method for reading a trie. ITriePrinter must firstly register a
    * ITrieReader. The ITrieReader Implementation (i.e. this method) consumes a
    * char. Return true to continue reading.
    */
   public boolean nextSign (char sign, int depth)
   {
      if (emptyOutput)
      {
         for (int i = 0; i < depth + 1; i++)
         {
            out.print(" ");
         }
      }
      out.print(sign);
      emptyOutput = false;
      //System.out.print(depth+1);
      return true;
   }


   public boolean lastSign (char sign, int depth)
   {
      if (emptyOutput)
      {
         for (int i = 0; i < depth + 1; i++)
         {
            out.print(" ");
         }
      }
      out.print(sign);
      out.print("\n");
      //System.out.print(depth+1);
      emptyOutput = true;
      return true;
   }

   /**
    * nur transducer
    */
   public boolean lastSign (char sign, String output, int depth)
   {
      if (emptyOutput)
      {
         for (int i = 0; i < depth + 1; i++)
         {
            out.print(" ");
         }
      }
      out.print(sign);
      out.print(" -> ");
      out.print(output);
      out.print("\n");
      //System.out.print(depth+1);
      emptyOutput = true;
      return true;
   }
}