private boolean scanExpr(SymbolTable symbolTable,Tokens tokens,String data,int currentOffset,int endOffset) throws XNIException {
  int ch;
  int nameOffset;
  String nameHandle=null;
  while (true) {
    if (currentOffset == endOffset) {
      break;
    }
    ch=data.charAt(currentOffset);
    byte chartype=(ch >= 0x80) ? CHARTYPE_NONASCII : fASCIICharMap[ch];
switch (chartype) {
case CHARTYPE_SLASH:
      if (++currentOffset == endOffset) {
        return false;
      }
    addToken(tokens,Tokens.XPTRTOKEN_ELEM_CHILD);
  ch=data.charAt(currentOffset);
int child=0;
while (ch >= '0' && ch <= '9') {
child=(child * 10) + (ch - '0');
if (++currentOffset == endOffset) {
  break;
}
ch=data.charAt(currentOffset);
}
if (child == 0) {
reportError("InvalidChildSequenceCharacter",new Object[]{new Character((char)ch)});
return false;
}
tokens.addToken(child);
break;
case CHARTYPE_DIGIT:
case CHARTYPE_LETTER:
case CHARTYPE_MINUS:
case CHARTYPE_NONASCII:
case CHARTYPE_OTHER:
case CHARTYPE_PERIOD:
case CHARTYPE_UNDERSCORE:
nameOffset=currentOffset;
currentOffset=scanNCName(data,endOffset,currentOffset);
if (currentOffset == nameOffset) {
reportError("InvalidNCNameInElementSchemeData",new Object[]{data});
return false;
}
if (currentOffset < endOffset) {
ch=data.charAt(currentOffset);
}
 else {
ch=-1;
}
nameHandle=symbolTable.addSymbol(data.substring(nameOffset,currentOffset));
addToken(tokens,Tokens.XPTRTOKEN_ELEM_NCNAME);
tokens.addToken(nameHandle);
break;
}
}
return true;
}

private boolean scanExpr ( SymbolTable symbolTable , Tokens tokens , String data , int currentOffset , int endOffset ) throws XNIException { int ch ; int nameOffset ; String nameHandle = null ; while ( true ) { if ( currentOffset == endOffset ) { break ; } ch = data . charAt ( currentOffset ) ; byte chartype = ( ch >= 0x80 ) ? CHARTYPE_NONASCII : fASCIICharMap [ ch ] ; switch ( chartype ) { case CHARTYPE_SLASH : if ( ++ currentOffset == endOffset ) { return false ; } addToken ( tokens , Tokens . XPTRTOKEN_ELEM_CHILD ) ; ch = data . charAt ( currentOffset ) ; int child = 0 ; while ( ch >= '0' && ch <= '9' ) { child = ( child * 10 ) + ( ch - '0' ) ; if ( ++ currentOffset == endOffset ) { break ; } ch = data . charAt ( currentOffset ) ; } if ( child == 0 ) { reportError ( "InvalidChildSequenceCharacter" , new Object [ ] { new Character ( ( char ) ch ) } ) ; return false ; } tokens . addToken ( child ) ; break ; case CHARTYPE_DIGIT : case CHARTYPE_LETTER : case CHARTYPE_MINUS : case CHARTYPE_NONASCII : case CHARTYPE_OTHER : case CHARTYPE_PERIOD : case CHARTYPE_UNDERSCORE : nameOffset = currentOffset ; currentOffset = scanNCName ( data , endOffset , currentOffset ) ; if ( currentOffset == nameOffset ) { reportError ( "InvalidNCNameInElementSchemeData" , new Object [ ] { data } ) ; return false ; } if ( currentOffset < endOffset ) { ch = data . charAt ( currentOffset ) ; } else { ch = - 1 ; } nameHandle = symbolTable . addSymbol ( data . substring ( nameOffset , currentOffset ) ) ; addToken ( tokens , Tokens . XPTRTOKEN_ELEM_NCNAME ) ; tokens . addToken ( nameHandle ) ; break ; } } return true ; }
scans the xpointer expression
