📄 headertokenizer.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: HeaderTokenizer.java
package org.lazybug.mime;
// Referenced classes of package javax.mail.internet:
// ParseException
public class HeaderTokenizer
{
public static class Token
{
private int type;
private String value;
public static final int ATOM = -1;
public static final int QUOTEDSTRING = -2;
public static final int COMMENT = -3;
public static final int EOF = -4;
public int getType()
{
return type;
}
public String getValue()
{
return value;
}
public Token(int i, String s)
{
type = i;
value = s;
}
}
private String string;
private boolean skipComments;
private String delimiters;
private int currentPos;
private int maxPos;
private int nextPos;
private int peekPos;
public static final String RFC822 = "()<>@,;:\\\"\t .[]";
public static final String MIME = "()<>@,;:\\\"\t []/?=";
private static final Token EOFToken = new Token(-4, null);
public HeaderTokenizer(String s, String s1, boolean flag)
{
string = s != null ? s : "";
skipComments = flag;
delimiters = s1;
currentPos = nextPos = peekPos = 0;
maxPos = string.length();
}
public HeaderTokenizer(String s, String s1)
{
this(s, s1, true);
}
public HeaderTokenizer(String s)
{
this(s, "()<>@,;:\\\"\t .[]");
}
public Token next()
throws ParseException
{
currentPos = nextPos;
Token token = getNext();
nextPos = peekPos = currentPos;
return token;
}
public Token peek()
throws ParseException
{
currentPos = peekPos;
Token token = getNext();
peekPos = currentPos;
return token;
}
public String getRemainder()
{
return string.substring(nextPos);
}
private Token getNext()
throws ParseException
{
if(currentPos >= maxPos)
return EOFToken;
if(skipWhiteSpace() == -4)
return EOFToken;
boolean flag = false;
char c;
for(c = string.charAt(currentPos); c == '('; c = string.charAt(currentPos))
{
int i = ++currentPos;
int l;
for(l = 1; l > 0 && currentPos < maxPos; currentPos++)
{
c = string.charAt(currentPos);
if(c == '\\')
{
currentPos++;
flag = true;
} else
if(c == '\r')
flag = true;
else
if(c == '(')
l++;
else
if(c == ')')
l--;
}
if(l != 0)
throw new ParseException("Unbalanced comments");
if(!skipComments)
{
String s1;
if(flag)
s1 = filterToken(string, i, currentPos - 1);
else
s1 = string.substring(i, currentPos - 1);
return new Token(-3, s1);
}
if(skipWhiteSpace() == -4)
return EOFToken;
}
if(c == '"')
{
int j = ++currentPos;
for(; currentPos < maxPos; currentPos++)
{
c = string.charAt(currentPos);
if(c == '\\')
{
currentPos++;
flag = true;
} else
if(c == '\r')
flag = true;
else
if(c == '"')
{
currentPos++;
String s;
if(flag)
s = filterToken(string, j, currentPos - 1);
else
s = string.substring(j, currentPos - 1);
return new Token(-2, s);
}
}
throw new ParseException("Unbalanced quoted string");
}
if(c < ' ' || c >= '\177' || delimiters.indexOf(c) >= 0)
{
currentPos++;
char ac[] = new char[1];
ac[0] = c;
return new Token(c, new String(ac));
}
int k = currentPos;
for(; currentPos < maxPos; currentPos++)
{
char c1 = string.charAt(currentPos);
if(c1 < ' ' || c1 >= '\177' || c1 == '(' || c1 == ' ' || c1 == '"' || delimiters.indexOf(c1) >= 0)
break;
}
return new Token(-1, string.substring(k, currentPos));
}
private int skipWhiteSpace()
{
for(; currentPos < maxPos; currentPos++)
{
char c;
if((c = string.charAt(currentPos)) != ' ' && c != '\t' && c != '\r' && c != '\n')
return currentPos;
}
return -4;
}
private static String filterToken(String s, int i, int j)
{
StringBuffer stringbuffer = new StringBuffer();
boolean flag = false;
boolean flag1 = false;
for(int k = i; k < j; k++)
{
char c = s.charAt(k);
if(c == '\n' && flag1)
{
flag1 = false;
} else
{
flag1 = false;
if(!flag)
{
if(c == '\\')
flag = true;
else
if(c == '\r')
flag1 = true;
else
stringbuffer.append(c);
} else
{
stringbuffer.append(c);
flag = false;
}
}
}
return stringbuffer.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -