package //
// This software is now distributed according to
// the Lesser Gnu Public License.  Please see
// http://www.gnu.org/copyleft/lesser.txt for
// the details.
//    -- Happy Computing!
//
com.stevesoft.pat;

/**
 * A tool that is used to make the \E, \U, \L, and \Q elements of a
 * substitution.
 */
public class StringBufferLike implements BasicStringBufferLike
{
  BasicStringBufferLike sbl;

  public StringBufferLike(BasicStringBufferLike sbl)
  {
    this.sbl = sbl;
  }

  char mode = 'E', altMode = ' ';

  public StringLike toStringLike()
  {
    return sbl.toStringLike();
  }

  public String toString()
  {
    return sbl.toString();
  }

  public void append(char c)
  {

    switch (mode)
    {
    case 'u':
      mode = altMode;
      altMode = ' ';
    case 'U':
      sbl.append(CaseMgr.toUpperCase(c));
      break;
    case 'l':
      mode = altMode;
      altMode = ' ';
    case 'L':
      sbl.append(CaseMgr.toLowerCase(c));
      break;
    case 'Q':
      if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
              || (c >= '0' && c <= '9'))
      {
        ;
      }
      else
      {
        sbl.append('\\');
      }
    default:
      sbl.append(c);
      break;
    }
  }

  public void append(String s)
  {
    for (int i = 0; i < s.length(); i++)
    {
      append(s.charAt(i));
    }
  }

  public void setMode(char c)
  {
    if (c == 'u' || c == 'l')
    {
      if (altMode == ' ')
      {
        altMode = mode;
      }
    }
    mode = c;
  }

  public Object unwrap()
  {
    return sbl.unwrap();
  }
}
