001:/*
002: * Copyright (c) 2007, intarsys consulting GmbH
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * - Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * - Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * - Neither the name of intarsys nor the names of its contributors may be used
015: * to endorse or promote products derived from this software without specific
016: * prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028: * POSSIBILITY OF SUCH DAMAGE.
029: */
030:/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
031:package de.intarsys.pdf.postscript;
032:
033:public class TokenMgrError extends Error {
034: /*
035: * Ordinals for various reasons why an Error of this type can be thrown.
036: */
037:
038: /**
039: * Tried to change to an invalid lexical state.
040: */
041: static final int INVALID_LEXICAL_STATE = 2;
042:
043: /**
044: * Lexical error occured.
045: */
046: static final int LEXICAL_ERROR = 0;
047:
048: /**
049: * Detected (and bailed out of) an infinite loop in the token manager.
050: */
051: static final int LOOP_DETECTED = 3;
052:
053: /**
054: * An attempt wass made to create a second instance of a static token
055: * manager.
056: */
057: static final int STATIC_LEXER_ERROR = 1;
058:
059: /**
060: * Replaces unprintable characters by their espaced (or unicode escaped)
061: * equivalents in the given string
062: */
063: protected static final String addEscapes(String str) {
064: StringBuilder retval = new StringBuilder();
065: char ch;
066: for (int i = 0; i < str.length(); i++) {
067: switch (str.charAt(i)) {
068: case 0:
069: continue;
070: case '\b':
071: retval.append("\\b");
072: continue;
073: case '\t':
074: retval.append("\\t");
075: continue;
076: case '\n':
077: retval.append("\\n");
078: continue;
079: case '\f':
080: retval.append("\\f");
081: continue;
082: case '\r':
083: retval.append("\\r");
084: continue;
085: case '\"':
086: retval.append("\\\"");
087: continue;
088: case '\'':
089: retval.append("\\\'");
090: continue;
091: case '\\':
092: retval.append("\\\\");
093: continue;
094: default:
095: if (((ch = str.charAt(i)) < 0x20) || (ch > 0x7e)) {
096: String s = "0000" + Integer.toString(ch, 16);
097: retval.append("\\u"
098: + s.substring(s.length() - 4, s.length()));
099: } else {
100: retval.append(ch);
101: }
102: continue;
103: }
104: }
105: return retval.toString();
106: }
107:
108: /**
109: * Returns a detailed message for the Error when it is thrown by the token
110: * manager to indicate a lexical error. Parameters : EOFSeen : indicates if
111: * EOF caused the lexicl error curLexState : lexical state in which this
112: * error occured errorLine : line number when the error occured errorColumn :
113: * column number when the error occured errorAfter : prefix that was seen
114: * before this error occured curchar : the offending character Note: You can
115: * customize the lexical error message by modifying this method.
116: */
117: protected static String LexicalError(boolean EOFSeen, int lexState,
118: int errorLine, int errorColumn, String errorAfter, char curChar) {
119: return ("Lexical error at line "
120: + errorLine
121: + ", column "
122: + errorColumn
123: + ". Encountered: "
124: + (EOFSeen ? "<EOF> " : (("\""
125: + addEscapes(String.valueOf(curChar)) + "\"")
126: + " (" + (int) curChar + "), ")) + "after : \""
127: + addEscapes(errorAfter) + "\"");
128: }
129:
130: /**
131: * Indicates the reason why the exception is thrown. It will have one of the
132: * above 4 values.
133: */
134: int errorCode;
135:
136: public TokenMgrError() {
137: }
138:
139: /*
140: * Constructors of various flavors follow.
141: */
142: public TokenMgrError(boolean EOFSeen, int lexState, int errorLine,
143: int errorColumn, String errorAfter, char curChar, int reason) {
144: this (LexicalError(EOFSeen, lexState, errorLine, errorColumn,
145: errorAfter, curChar), reason);
146: }
147:
148: public TokenMgrError(String message, int reason) {
149: super (message);
150: errorCode = reason;
151: }
152:
153: /**
154: * You can also modify the body of this method to customize your error
155: * messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE
156: * are not of end-users concern, so you can return something like :
157: *
158: * "Internal Error : Please file a bug report .... "
159: *
160: * from this method for such cases in the release version of your parser.
161: */
162: public String getMessage() {
163: return super.getMessage();
164: }
165:}
|