001    /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 0.7pre2 */
002    
003    /*
004     * Cobertura - http://cobertura.sourceforge.net/
005     *
006     * This file was taken from JavaNCSS
007     * http://www.kclee.com/clemens/java/javancss/
008     * Copyright (C) 2000 Chr. Clemens Lee <clemens a.t kclee d.o.t com>
009     *
010     * Cobertura is free software; you can redistribute it and/or modify
011     * it under the terms of the GNU General Public License as published
012     * by the Free Software Foundation; either version 2 of the License,
013     * or (at your option) any later version.
014     *
015     * Cobertura is distributed in the hope that it will be useful, but
016     * WITHOUT ANY WARRANTY; without even the implied warranty of
017     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
018     * General Public License for more details.
019     *
020     * You should have received a copy of the GNU General Public License
021     * along with Cobertura; if not, write to the Free Software
022     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
023     * USA
024     */
025    
026    package net.sourceforge.cobertura.javancss;
027    
028    class TokenMgrError extends Error
029    {
030    
031            private static final long serialVersionUID = 0L;
032    
033            /*
034             * Ordinals for various reasons why an Error of this type can be thrown.
035             */
036    
037            /**
038             * Lexical error occured.
039             */
040            static final int LEXICAL_ERROR = 0;
041    
042            /**
043             * An attempt wass made to create a second instance of a static token manager.
044             */
045            static final int STATIC_LEXER_ERROR = 1;
046    
047            /**
048             * Tried to change to an invalid lexical state.
049             */
050            static final int INVALID_LEXICAL_STATE = 2;
051    
052            /**
053             * Detected (and bailed out of) an infinite loop in the token manager.
054             */
055            static final int LOOP_DETECTED = 3;
056    
057            /**
058             * Indicates the reason why the exception is thrown. It will have
059             * one of the above 4 values.
060             */
061            int errorCode;
062    
063            /**
064             * Replaces unprintable characters by their espaced (or unicode escaped)
065             * equivalents in the given string
066             */
067            static final String addEscapes(String str)
068            {
069                    StringBuffer retval = new StringBuffer();
070                    char ch;
071                    for (int i = 0; i < str.length(); i++)
072                    {
073                            switch (str.charAt(i))
074                            {
075                                    case 0:
076                                            continue;
077                                    case '\b':
078                                            retval.append("\\b");
079                                            continue;
080                                    case '\t':
081                                            retval.append("\\t");
082                                            continue;
083                                    case '\n':
084                                            retval.append("\\n");
085                                            continue;
086                                    case '\f':
087                                            retval.append("\\f");
088                                            continue;
089                                    case '\r':
090                                            retval.append("\\r");
091                                            continue;
092                                    case '\"':
093                                            retval.append("\\\"");
094                                            continue;
095                                    case '\'':
096                                            retval.append("\\\'");
097                                            continue;
098                                    case '\\':
099                                            retval.append("\\\\");
100                                            continue;
101                                    default:
102                                            if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e)
103                                            {
104                                                    String s = "0000" + Integer.toString(ch, 16);
105                                                    retval.append("\\u" + s.substring(s.length() - 4, s.length()));
106                                            }
107                                            else
108                                            {
109                                                    retval.append(ch);
110                                            }
111                                            continue;
112                            }
113                    }
114                    return retval.toString();
115            }
116    
117            /**
118             * Returns a detailed message for the Error when it is thrown by the
119             * token manager to indicate a lexical error.
120             * Parameters : 
121             *    EOFSeen     : indicates if EOF caused the lexicl error
122             *    curLexState : lexical state in which this error occured
123             *    errorLine   : line number when the error occured
124             *    errorColumn : column number when the error occured
125             *    errorAfter  : prefix that was seen before this error occured
126             *    curchar     : the offending character
127             * Note: You can customize the lexical error message by modifying this method.
128             */
129            private static final String LexicalError(boolean EOFSeen, int errorLine, int errorColumn,
130                            String errorAfter, char curChar)
131            {
132                    return ("Lexical error at line "
133                                    + errorLine
134                                    + ", column "
135                                    + errorColumn
136                                    + ".  Encountered: "
137                                    + (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " ("
138                                                    + (int)curChar + "), ") + "after : \"" + addEscapes(errorAfter) + "\"");
139            }
140    
141            /**
142             * You can also modify the body of this method to customize your error messages.
143             * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
144             * of end-users concern, so you can return something like : 
145             *
146             *     "Internal Error : Please file a bug report .... "
147             *
148             * from this method for such cases in the release version of your parser.
149             */
150            public String getMessage()
151            {
152                    return super.getMessage();
153            }
154    
155            /*
156             * Constructors of various flavors follow.
157             */
158    
159            TokenMgrError()
160            {
161            }
162    
163            TokenMgrError(String message, int reason)
164            {
165                    super(message);
166                    errorCode = reason;
167            }
168    
169            TokenMgrError(boolean EOFSeen, int errorLine, int errorColumn, String errorAfter, char curChar,
170                            int reason)
171            {
172                    this(LexicalError(EOFSeen, errorLine, errorColumn, errorAfter, curChar), reason);
173            }
174    }