//
// 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.*;

/**
 * Implements the (?&lt;number) Pattern, where number is an integer telling us
 * how far to back up in the Pattern. Not in perl 5. It also allows
 * (?&gt;number).
 */
class Backup extends Pattern
{
  int bk;

  Backup(int ii)
  {
    bk = ii;
  }

  public String toString()
  {
    return "(?" + (bk < 0 ? ">" + (-bk) : "<" + bk) + ")" + nextString();
  }

  public int matchInternal(int pos, Pthings pt)
  {
    if (pos < bk)
    {
      return -1;
    }
    return nextMatch(pos - bk, pt);
  }

  public patInt minChars()
  {
    return new patInt(-bk);
  }

  public patInt maxChars()
  {
    return new patInt(-bk);
  }

  public Pattern clone1(Hashtable h)
  {
    return new Backup(bk);
  }
};
