1 2 package com.micronova.util.cc.mime; 3 4 import java.io.*; 5 import java.util.*; 6 import com.micronova.util.*; 7 8 public class Parser implements ParserConstants { 9 public final static String TYPE = "type"; 10 public final static String SUBTYPE = "subtype"; 11 public final static String PARAMETER = "parameter"; 12 13 public static NestedMap parse(String string) 14 { 15 try 16 { 17 Parser parser = new Parser(new StringReader(string)); 18 19 return parser.parse(new NestedMap()); 20 } 21 catch (Exception e) 22 { 23 e.printStackTrace(); 24 25 return null; 26 } 27 } 28 29 public static void main(String arg[]) 30 { 31 try 32 { 33 System.out.println("parsed:" + parse(arg[0])); 34 } 35 catch (Exception e) 36 { 37 e.printStackTrace(); 38 } 39 } 40 41 final public NestedMap parse(NestedMap map) throws ParseException { 42 String parameterName; 43 44 NestedMap parameter = (NestedMap)map.get(PARAMETER); 45 46 if (parameter == null) 47 { 48 parameter = new NestedMap(); 49 map.put(PARAMETER, parameter); 50 } 51 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 52 case WHITESPACE: 53 jj_consume_token(WHITESPACE); 54 break; 55 default: 56 ; 57 } 58 jj_consume_token(MIMETOKEN); 59 map.put(TYPE, token.image.toLowerCase()); 60 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 61 case WHITESPACE: 62 jj_consume_token(WHITESPACE); 63 break; 64 default: 65 ; 66 } 67 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 68 case TYPESEPARATOR: 69 jj_consume_token(TYPESEPARATOR); 70 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 71 case WHITESPACE: 72 jj_consume_token(WHITESPACE); 73 break; 74 default: 75 ; 76 } 77 jj_consume_token(MIMETOKEN); 78 map.put(SUBTYPE, token.image.toLowerCase()); 79 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 80 case WHITESPACE: 81 jj_consume_token(WHITESPACE); 82 break; 83 default: 84 ; 85 } 86 break; 87 default: 88 ; 89 } 90 label_1: 91 while (true) { 92 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 93 case SEMICOLON: 94 ; 95 break; 96 default: 97 break label_1; 98 } 99 jj_consume_token(SEMICOLON); 100 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 101 case WHITESPACE: 102 jj_consume_token(WHITESPACE); 103 break; 104 default: 105 ; 106 } 107 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 108 case MIMETOKEN: 109 jj_consume_token(MIMETOKEN); 110 parameterName = token.image.toLowerCase(); 111 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 112 case WHITESPACE: 113 jj_consume_token(WHITESPACE); 114 break; 115 default: 116 ; 117 } 118 jj_consume_token(EQUAL); 119 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 120 case WHITESPACE: 121 jj_consume_token(WHITESPACE); 122 break; 123 default: 124 ; 125 } 126 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 127 case MIMETOKEN: 128 jj_consume_token(MIMETOKEN); 129 break; 130 case QUOTED: 131 jj_consume_token(QUOTED); 132 break; 133 default: 134 jj_consume_token(-1); 135 throw new ParseException(); 136 } 137 parameter.put(parameterName, token.image); 138 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 139 case WHITESPACE: 140 jj_consume_token(WHITESPACE); 141 break; 142 default: 143 ; 144 } 145 break; 146 default: 147 ; 148 } 149 } 150 jj_consume_token(0); 151 {if (true) return map;} 152 throw new Error ("Missing return statement in function"); 153 } 154 155 public ParserTokenManager token_source; 156 SimpleCharStream jj_input_stream; 157 public Token token, jj_nt; 158 private int jj_ntk; 159 160 public Parser(java.io.InputStream stream) { 161 jj_input_stream = new SimpleCharStream(stream, 1, 1); 162 token_source = new ParserTokenManager(jj_input_stream); 163 token = new Token(); 164 jj_ntk = -1; 165 } 166 167 public void ReInit(java.io.InputStream stream) { 168 jj_input_stream.ReInit(stream, 1, 1); 169 token_source.ReInit(jj_input_stream); 170 token = new Token(); 171 jj_ntk = -1; 172 } 173 174 public Parser(java.io.Reader stream) { 175 jj_input_stream = new SimpleCharStream(stream, 1, 1); 176 token_source = new ParserTokenManager(jj_input_stream); 177 token = new Token(); 178 jj_ntk = -1; 179 } 180 181 public void ReInit(java.io.Reader stream) { 182 jj_input_stream.ReInit(stream, 1, 1); 183 token_source.ReInit(jj_input_stream); 184 token = new Token(); 185 jj_ntk = -1; 186 } 187 188 public Parser(ParserTokenManager tm) { 189 token_source = tm; 190 token = new Token(); 191 jj_ntk = -1; 192 } 193 194 public void ReInit(ParserTokenManager tm) { 195 token_source = tm; 196 token = new Token(); 197 jj_ntk = -1; 198 } 199 200 final private Token jj_consume_token(int kind) throws ParseException { 201 Token oldToken; 202 if ((oldToken = token).next != null) token = token.next; 203 else token = token.next = token_source.getNextToken(); 204 jj_ntk = -1; 205 if (token.kind == kind) { 206 return token; 207 } 208 token = oldToken; 209 throw generateParseException(); 210 } 211 212 final public Token getNextToken() { 213 if (token.next != null) token = token.next; 214 else token = token.next = token_source.getNextToken(); 215 jj_ntk = -1; 216 return token; 217 } 218 219 final public Token getToken(int index) { 220 Token t = token; 221 for (int i = 0; i < index; i++) { 222 if (t.next != null) t = t.next; 223 else t = t.next = token_source.getNextToken(); 224 } 225 return t; 226 } 227 228 final private int jj_ntk() { 229 if ((jj_nt=token.next) == null) 230 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 231 else 232 return (jj_ntk = jj_nt.kind); 233 } 234 235 public ParseException generateParseException() { 236 Token errortok = token.next; 237 int line = errortok.beginLine, column = errortok.beginColumn; 238 String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image; 239 return new ParseException("Parse error at line " + line + ", column " + column + ". Encountered: " + mess); 240 } 241 242 final public void enable_tracing() { 243 } 244 245 final public void disable_tracing() { 246 } 247 248 } 249 | Popular Tags |