1d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */ 2d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen/* 3d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Copyright 2004 the mime4j project 4d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * 5d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Licensed under the Apache License, Version 2.0 (the "License"); 6d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * you may not use this file except in compliance with the License. 7d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * You may obtain a copy of the License at 8d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * 9d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * http://www.apache.org/licenses/LICENSE-2.0 10d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * 11d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Unless required by applicable law or agreed to in writing, software 12d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * distributed under the License is distributed on an "AS IS" BASIS, 13d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * See the License for the specific language governing permissions and 15d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * limitations under the License. 16d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 17d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chenpackage org.apache.james.mime4j.field.address.parser; 18d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 19d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chenpublic class TokenMgrError extends Error 20d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen{ 21d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /* 22d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Ordinals for various reasons why an Error of this type can be thrown. 23d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 24d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 25d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 26d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Lexical error occured. 27d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 28d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen static final int LEXICAL_ERROR = 0; 29d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 30d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 31d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * An attempt wass made to create a second instance of a static token manager. 32d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 33d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen static final int STATIC_LEXER_ERROR = 1; 34d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 35d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 36d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Tried to change to an invalid lexical state. 37d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 38d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen static final int INVALID_LEXICAL_STATE = 2; 39d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 40d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 41d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Detected (and bailed out of) an infinite loop in the token manager. 42d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 43d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen static final int LOOP_DETECTED = 3; 44d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 45d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 46d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Indicates the reason why the exception is thrown. It will have 47d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * one of the above 4 values. 48d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 49d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen int errorCode; 50d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 51d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 52d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Replaces unprintable characters by their espaced (or unicode escaped) 53d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * equivalents in the given string 54d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 55d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen protected static final String addEscapes(String str) { 56d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen StringBuffer retval = new StringBuffer(); 57d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen char ch; 58d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen for (int i = 0; i < str.length(); i++) { 59d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen switch (str.charAt(i)) 60d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen { 61d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case 0 : 62d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 63d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\b': 64d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\b"); 65d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 66d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\t': 67d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\t"); 68d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 69d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\n': 70d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\n"); 71d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 72d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\f': 73d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\f"); 74d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 75d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\r': 76d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\r"); 77d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 78d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\"': 79d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\\""); 80d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 81d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\'': 82d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\\'"); 83d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 84d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen case '\\': 85d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\\\"); 86d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 87d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen default: 88d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 89d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen String s = "0000" + Integer.toString(ch, 16); 90d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append("\\u" + s.substring(s.length() - 4, s.length())); 91d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } else { 92d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen retval.append(ch); 93d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 94d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen continue; 95d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 96d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 97d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen return retval.toString(); 98d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 99d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 100d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 101d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Returns a detailed message for the Error when it is thrown by the 102d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * token manager to indicate a lexical error. 103d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Parameters : 104d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * EOFSeen : indicates if EOF caused the lexicl error 105d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * curLexState : lexical state in which this error occured 106d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * errorLine : line number when the error occured 107d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * errorColumn : column number when the error occured 108d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * errorAfter : prefix that was seen before this error occured 109d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * curchar : the offending character 110d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Note: You can customize the lexical error message by modifying this method. 111d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 112d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { 113d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen return("Lexical error at line " + 114d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen errorLine + ", column " + 115d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen errorColumn + ". Encountered: " + 116d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + 117d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen "after : \"" + addEscapes(errorAfter) + "\""); 118d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 119d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 120d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /** 121d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * You can also modify the body of this method to customize your error messages. 122d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not 123d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * of end-users concern, so you can return something like : 124d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * 125d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * "Internal Error : Please file a bug report .... " 126d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * 127d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * from this method for such cases in the release version of your parser. 128d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 129d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen public String getMessage() { 130d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen return super.getMessage(); 131d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 132d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 133d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen /* 134d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen * Constructors of various flavors follow. 135d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen */ 136d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 137d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen public TokenMgrError() { 138d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 139d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 140d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen public TokenMgrError(String message, int reason) { 141d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen super(message); 142d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen errorCode = reason; 143d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 144d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen 145d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { 146d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); 147d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen } 148d186a38568ddec7efcba054ccc2fe8ed9b8945fcNancy Chen} 149