View Javadoc
1   /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 0.7pre2 */
2   
3   /**
4    * Redistribution and use of this software and associated documentation
5    * ("Software"), with or without modification, are permitted provided
6    * that the following conditions are met:
7    *
8    * 1. Redistributions of source code must retain copyright
9    *    statements and notices.  Redistributions must also contain a
10   *    copy of this document.
11   *
12   * 2. Redistributions in binary form must reproduce the
13   *    above copyright notice, this list of conditions and the
14   *    following disclaimer in the documentation and/or other
15   *    materials provided with the distribution.
16   *
17   * 3. The name "Exolab" must not be used to endorse or promote
18   *    products derived from this Software without prior written
19   *    permission of Intalio, Inc.  For written permission,
20   *    please contact info@exolab.org.
21   *
22   * 4. Products derived from this Software may not be called "Exolab"
23   *    nor may "Exolab" appear in their names without prior written
24   *    permission of Intalio, Inc. Exolab is a registered
25   *    trademark of Intalio, Inc.
26   *
27   * 5. Due credit should be given to the Exolab Project
28   *    (http://www.exolab.org/).
29   *
30   * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
31   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
32   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
33   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
34   * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
35   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
37   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41   * OF THE POSSIBILITY OF SUCH DAMAGE.
42   *
43   * Copyright 2000 (C) Intalio Inc. All Rights Reserved.
44   *
45   * $Id$
46   */
47  
48  package org.exolab.castor.xml.dtd.parser;
49  
50  /**
51   * This Error is occurs if the Token Manager is unable to form next token
52   * and pass it to the parser.
53   * @author Generated automatically by <b>JavaCC</b>
54   * @version Version 0.7pre2
55   */
56  public class TokenMgrError extends Error {
57      /** SerialVersionUID */
58      private static final long serialVersionUID = 5390945290273323564L;
59  
60      /*
61       * Ordinals for various reasons why an Error of this type can be thrown.
62       */
63  
64     /**
65      * Lexical error occured.
66      */
67     static final int LEXICAL_ERROR = 0;
68  
69     /**
70      * An attempt wass made to create a second instance of a static token manager.
71      */
72     static final int STATIC_LEXER_ERROR = 1;
73  
74     /**
75      * Tried to change to an invalid lexical state.
76      */
77     static final int INVALID_LEXICAL_STATE = 2;
78  
79     /**
80      * Detected (and bailed out of) an infinite loop in the token manager.
81      */
82     static final int LOOP_DETECTED = 3;
83  
84     /**
85      * Indicates the reason why the exception is thrown. It will have
86      * one of the above 4 values.
87      */
88     int errorCode;
89  
90     /**
91      * Replaces unprintable characters by their espaced (or unicode escaped)
92      * equivalents in the given string
93      */
94     protected static final String addEscapes(String str) {
95        StringBuffer retval = new StringBuffer();
96        char ch;
97        for (int i = 0; i < str.length(); i++) {
98          switch (str.charAt(i))
99          {
100            case 0 :
101               continue;
102            case '\b':
103               retval.append("\\b");
104               continue;
105            case '\t':
106               retval.append("\\t");
107               continue;
108            case '\n':
109               retval.append("\\n");
110               continue;
111            case '\f':
112               retval.append("\\f");
113               continue;
114            case '\r':
115               retval.append("\\r");
116               continue;
117            case '\"':
118               retval.append("\\\"");
119               continue;
120            case '\'':
121               retval.append("\\\'");
122               continue;
123            case '\\':
124               retval.append("\\\\");
125               continue;
126            default:
127               if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
128                  String s = "0000" + Integer.toString(ch, 16);
129                  retval.append("\\u" + s.substring(s.length() - 4, s.length()));
130               } else {
131                  retval.append(ch);
132               }
133               continue;
134         }
135       }
136       return retval.toString();
137    }
138 
139    /**
140     * Returns a detailed message for the Error when it is thrown by the
141     * token manager to indicate a lexical error.
142     * Parameters :
143     *    EOFSeen     : indicates if EOF caused the lexicl error
144     *    curLexState : lexical state in which this error occured
145     *    errorLine   : line number when the error occured
146     *    errorColumn : column number when the error occured
147     *    errorAfter  : prefix that was seen before this error occured
148     *    curchar     : the offending character
149     * Note: You can customize the lexical error message by modifying this method.
150     */
151    private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
152       return("Lexical error at line " +
153            errorLine + ", column " +
154            errorColumn + ".  Encountered: " +
155            (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
156            "after : \"" + addEscapes(errorAfter) + "\"");
157    }
158 
159    /**
160     * You can also modify the body of this method to customize your error messages.
161     * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
162     * of end-users concern, so you can return something like :
163     *
164     *     "Internal Error : Please file a bug report .... "
165     *
166     * from this method for such cases in the release version of your parser.
167     */
168    public String getMessage() {
169       return super.getMessage();
170    }
171 
172    /*
173     * Constructors of various flavors follow.
174     */
175 
176    public TokenMgrError() {
177    }
178 
179    public TokenMgrError(String message, int reason) {
180       super(message);
181       errorCode = reason;
182    }
183 
184    public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
185       this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
186    }
187 }