⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 headertokenizer.java

📁 封装了SQL、Socket、WAP、MIME等功能的通用组件
💻 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 + -