home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / TokenMgrError.java < prev    next >
Text File  |  1998-02-26  |  4KB  |  134 lines

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