//
// 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!
//
package com.stevesoft.pat;

import java.util.*;

/**
 * The Bracket is a form of the Or class, implements the pattern element [ ].
 */
class Bracket extends Or
{
  boolean neg;

  Bracket(boolean n)
  {
    neg = n;
  }

  String leftForm()
  {
    if (neg)
    {
      return "[^";
    }
    else
    {
      return "[";
    }
  }

  String rightForm()
  {
    return "]";
  }

  String sepForm()
  {
    return "";
  }

  public int matchInternal(int pos, Pthings pt)
  {
    if (pos >= pt.src.length())
    {
      return -1;
    }
    int r = super.matchInternal(pos, pt);
    if ((neg && r < 0) || (!neg && r >= 0))
    {
      return nextMatch(pos + 1, pt);
    }
    return -1;
  }

  public patInt minChars()
  {
    return new patInt(1);
  }

  public patInt maxChars()
  {
    return new patInt(1);
  }

  public Or addOr(Pattern p)
  {
    pv = null;
    v.addElement(p);
    p.setParent(null);
    return this;
  }

  public Pattern clone1(Hashtable h)
  {
    Bracket b = new Bracket(neg);
    b.v = new Vector();
    for (int i = 0; i < v.size(); i++)
    {
      b.v.addElement(((Pattern) v.elementAt(i)).clone1(h));
    }
    return b;
  }
};
