14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */ 24fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/* 34fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Copyright 2004 the mime4j project 44fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 54fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Licensed under the Apache License, Version 2.0 (the "License"); 64fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * you may not use this file except in compliance with the License. 74fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * You may obtain a copy of the License at 84fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 94fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * http://www.apache.org/licenses/LICENSE-2.0 104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Unless required by applicable law or agreed to in writing, software 124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * See the License for the specific language governing permissions and 154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * limitations under the License. 164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.james.mime4j.field.contenttype.parser; 184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/** 204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This exception is thrown when parse errors are encountered. 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * You can explicitly create objects of this exception type by 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * calling the method generateParseException in the generated 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * parser. 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * You can modify this class to customize your error reporting 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * mechanisms so long as you retain the public fields. 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class ParseException extends Exception { 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This constructor is used by the method "generateParseException" 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * in the generated parser. Calling this constructor generates 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * a new object of this type with the fields "currentToken", 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "expectedTokenSequences", and "tokenImage" set. The boolean 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * flag "specialConstructor" is also set to true to indicate that 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this constructor was used to create this object. 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This constructor calls its super class with the empty string 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * to force the "toString" method of parent class "Throwable" to 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * print the error message in the form: 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * ParseException: <result of getMessage> 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public ParseException(Token currentTokenVal, 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira int[][] expectedTokenSequencesVal, 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira String[] tokenImageVal 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira ) 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira super(""); 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira specialConstructor = true; 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira currentToken = currentTokenVal; 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira expectedTokenSequences = expectedTokenSequencesVal; 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira tokenImage = tokenImageVal; 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The following constructors are for use by you for whatever 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * purpose you can think of. Constructing the exception in this 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * manner makes the exception behave in the normal way - i.e., as 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * documented in the class "Throwable". The fields "errorToken", 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "expectedTokenSequences", and "tokenImage" do not contain 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * relevant information. The JavaCC generated code does not use 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * these constructors. 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public ParseException() { 654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira super(); 664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira specialConstructor = false; 674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public ParseException(String message) { 704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira super(message); 714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira specialConstructor = false; 724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This variable determines which constructor was used to create 764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this object and thereby affects the semantics of the 774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "getMessage" method (see below). 784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected boolean specialConstructor; 804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This is the last token that has been consumed successfully. If 834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this object has been created due to a parse error, the token 844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * followng this token will (therefore) be the first error token. 854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public Token currentToken; 874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Each entry in this array is an array of integers. Each array 904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * of integers represents a sequence of tokens (by their ordinal 914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * values) that is expected at this point of the parse. 924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int[][] expectedTokenSequences; 944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This is a reference to the "tokenImage" array of the generated 974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * parser within which the parse error occurred. This array is 984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * defined in the generated ...Constants interface. 994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public String[] tokenImage; 1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This method has the standard behavior when this object has been 1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * created using the standard constructors. Otherwise, it uses 1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "currentToken" and "expectedTokenSequences" to generate a parse 1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * error message and returns it. If this object has been created 1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * due to a parse error, and you do not catch it (it gets thrown 1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * from the parser), then this method is called during the printing 1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * of the final stack trace, and hence the correct error message 1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * gets displayed. 1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public String getMessage() { 1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (!specialConstructor) { 1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return super.getMessage(); 1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira StringBuffer expected = new StringBuffer(); 1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira int maxSize = 0; 1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < expectedTokenSequences.length; i++) { 1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (maxSize < expectedTokenSequences[i].length) { 1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira maxSize = expectedTokenSequences[i].length; 1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int j = 0; j < expectedTokenSequences[i].length; j++) { 1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" "); 1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { 1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira expected.append("..."); 1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira expected.append(eol).append(" "); 1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira String retval = "Encountered \""; 1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira Token tok = currentToken.next; 1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < maxSize; i++) { 1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (i != 0) retval += " "; 1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (tok.kind == 0) { 1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += tokenImage[0]; 1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira break; 1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += add_escapes(tok.image); 1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira tok = tok.next; 1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; 1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += "." + eol; 1434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (expectedTokenSequences.length == 1) { 1444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += "Was expecting:" + eol + " "; 1454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } else { 1464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += "Was expecting one of:" + eol + " "; 1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval += expected.toString(); 1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return retval; 1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The end of line string for this machine. 1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected String eol = System.getProperty("line.separator", "\n"); 1564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Used to convert raw characters to their escaped version 1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * when these raw version cannot be used as part of an ASCII 1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * string literal. 1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira protected String add_escapes(String str) { 1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira StringBuffer retval = new StringBuffer(); 1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira char ch; 1654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < str.length(); i++) { 1664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira switch (str.charAt(i)) 1674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira { 1684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case 0 : 1694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\b': 1714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\b"); 1724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\t': 1744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\t"); 1754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\n': 1774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\n"); 1784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\f': 1804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\f"); 1814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\r': 1834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\r"); 1844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\"': 1864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\\""); 1874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\'': 1894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\\'"); 1904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira case '\\': 1924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\\\"); 1934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 1944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira default: 1954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 1964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira String s = "0000" + Integer.toString(ch, 16); 1974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append("\\u" + s.substring(s.length() - 4, s.length())); 1984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } else { 1994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira retval.append(ch); 2004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira continue; 2024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return retval.toString(); 2054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 2064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 2074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 208