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