001    /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 *
002     *
003     * !!!MODIFIED BY DMITRI PLOTNIKOV - DO NOT REGENERATE!!!
004     */
005    package org.apache.commons.jxpath.ri.parser;
006    
007    public class TokenMgrError extends Error
008    {
009       /*
010        * Ordinals for various reasons why an Error of this type can be thrown.
011        */
012    
013       /**
014        * Lexical error occured.
015        */
016       static final int LEXICAL_ERROR = 0;
017    
018       /**
019        * An attempt wass made to create a second instance of a static token manager.
020        */
021       static final int STATIC_LEXER_ERROR = 1;
022    
023       /**
024        * Tried to change to an invalid lexical state.
025        */
026       static final int INVALID_LEXICAL_STATE = 2;
027    
028       /**
029        * Detected (and bailed out of) an infinite loop in the token manager.
030        */
031       static final int LOOP_DETECTED = 3;
032    
033       /**
034        * Indicates the reason why the exception is thrown. It will have
035        * one of the above 4 values.
036        */
037       int errorCode;
038    
039       /**
040        * Replaces unprintable characters by their espaced (or unicode escaped)
041        * equivalents in the given string
042        */
043       public static final String addEscapes(String str) {
044          StringBuffer retval = new StringBuffer();
045          char ch;
046          for (int i = 0; i < str.length(); i++) {
047            switch (str.charAt(i))
048            {
049               case 0 :
050                  continue;
051               case '\b':
052                  retval.append("\\b");
053                  continue;
054               case '\t':
055                  retval.append("\\t");
056                  continue;
057               case '\n':
058                  retval.append("\\n");
059                  continue;
060               case '\f':
061                  retval.append("\\f");
062                  continue;
063               case '\r':
064                  retval.append("\\r");
065                  continue;
066               case '\"':
067                  retval.append("\\\"");
068                  continue;
069               case '\'':
070                  retval.append("\\\'");
071                  continue;
072               case '\\':
073                  retval.append("\\\\");
074                  continue;
075               default:
076                  if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
077                     String s = "0000" + Integer.toString(ch, 16);
078                     retval.append("\\u" + s.substring(s.length() - 4, s.length()));
079                  } else {
080                     retval.append(ch);
081                  }
082                  continue;
083            }
084          }
085          return retval.toString();
086       }
087    
088       /**
089        * Returns a detailed message for the Error when it is thrown by the
090        * token manager to indicate a lexical error.
091        * Parameters :
092        *    EOFSeen     : indicates if EOF caused the lexicl error
093        *    curLexState : lexical state in which this error occured
094        *    errorLine   : line number when the error occured
095        *    errorColumn : column number when the error occured
096        *    errorAfter  : prefix that was seen before this error occured
097        *    curchar     : the offending character
098        * Note: You can customize the lexical error message by modifying this method.
099        */
100       protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
101          return("Lexical error at line " +
102               errorLine + ", column " +
103               errorColumn + ".  Encountered: " +
104               (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
105               "after : \"" + addEscapes(errorAfter) + "\"");
106       }
107    
108       /**
109        * You can also modify the body of this method to customize your error messages.
110        * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
111        * of end-users concern, so you can return something like :
112        *
113        *     "Internal Error : Please file a bug report .... "
114        *
115        * from this method for such cases in the release version of your parser.
116        */
117       public String getMessage() {
118          return super.getMessage();
119       }
120    
121       /*
122        * Constructors of various flavors follow.
123        */
124    
125       public TokenMgrError() {
126       }
127    
128       public TokenMgrError(String message, int reason) {
129          super(message);
130          errorCode = reason;
131       }
132    
133       public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
134          this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
135    
136          // ADDED BY ME FROM THIS POINT TO THE EOF - DMITRI PLOTNIKOV
137          position = errorColumn - 1;
138          character = curChar;
139       }
140    
141    
142       private int position;
143       private char character;
144    
145    
146       public int getPosition(){
147        return position;
148       }
149    
150       public char getCharacter(){
151        return character;
152       }
153    }