protected void RelativePathPattern()
              throws javax.xml.transform.TransformerException
  {

    // Caller will have consumed any '/' or '//' preceding the
    // RelativePathPattern, so let StepPattern know it can't begin with a '/'
    boolean trailingSlashConsumed = StepPattern(false);

    while (tokenIs('/'))
    {
      nextToken();

      // StepPattern() may consume first slash of pair in "a//b" while
      // processing StepPattern "a".  On next iteration, let StepPattern know
      // that happened, so it doesn't match ill-formed patterns like "a///b".
      trailingSlashConsumed = StepPattern(!trailingSlashConsumed);
    }
  }
protected void RelativePathPattern ( ) throws javax . xml . transform . TransformerException { boolean trailingSlashConsumed = StepPattern ( false ) ; while ( tokenIs ( '/' ) ) { nextToken ( ) ; trailingSlashConsumed = StepPattern ( ! trailingSlashConsumed ) ; } }
RelativePathPattern  ::=  StepPattern
| RelativePathPattern '/' StepPattern
| RelativePathPattern '//' StepPattern

@throws javax.xml.transform.TransformerException