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

📄 nativeglobal.java

📁 主要的怎么样结合java 和 javascript!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * method, which used to be part of the browser imbedding.  Blame     * for the strange constant names should be directed there.     */    private Object js_escape(Object[] args) {        final int            URL_XALPHAS = 1,            URL_XPALPHAS = 2,            URL_PATH = 4;        String s = ScriptRuntime.toString(args, 0);        int mask = URL_XALPHAS | URL_XPALPHAS | URL_PATH;        if (args.length > 1) { // the 'mask' argument.  Non-ECMA.            double d = ScriptRuntime.toNumber(args[1]);            if (d != d || ((mask = (int) d) != d) ||                0 != (mask & ~(URL_XALPHAS | URL_XPALPHAS | URL_PATH)))            {                throw Context.reportRuntimeError0("msg.bad.esc.mask");            }        }        StringBuffer sb = null;        for (int k = 0, L = s.length(); k != L; ++k) {            int c = s.charAt(k);            if (mask != 0                && ((c >= '0' && c <= '9')                    || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')                    || c == '@' || c == '*' || c == '_' || c == '-' || c == '.'                    || (0 != (mask & URL_PATH) && (c == '/' || c == '+'))))            {                if (sb != null) {                    sb.append((char)c);                }            } else {                if (sb == null) {                    sb = new StringBuffer(L + 3);                    sb.append(s);                    sb.setLength(k);                }                int hexSize;                if (c < 256) {                    if (c == ' ' && mask == URL_XPALPHAS) {                        sb.append('+');                        continue;                    }                    sb.append('%');                    hexSize = 2;                } else {                    sb.append('%');                    sb.append('u');                    hexSize = 4;                }                // append hexadecimal form of c left-padded with 0                for (int shift = (hexSize - 1) * 4; shift >= 0; shift -= 4) {                    int digit = 0xf & (c >> shift);                    int hc = (digit < 10) ? '0' + digit : 'A' - 10 + digit;                    sb.append((char)hc);                }            }        }        return (sb == null) ? s : sb.toString();    }    /**     * The global unescape method, as per ECMA-262 15.1.2.5.     */    private Object js_unescape(Object[] args)    {        String s = ScriptRuntime.toString(args, 0);        int firstEscapePos = s.indexOf('%');        if (firstEscapePos >= 0) {            int L = s.length();            char[] buf = s.toCharArray();            int destination = firstEscapePos;            for (int k = firstEscapePos; k != L;) {                char c = buf[k];                ++k;                if (c == '%' && k != L) {                    int end, start;                    if (buf[k] == 'u') {                        start = k + 1;                        end = k + 5;                    } else {                        start = k;                        end = k + 2;                    }                    if (end <= L) {                        int x = 0;                        for (int i = start; i != end; ++i) {                            x = Kit.xDigitToInt(buf[i], x);                        }                        if (x >= 0) {                            c = (char)x;                            k = end;                        }                    }                }                buf[destination] = c;                ++destination;            }            s = new String(buf, 0, destination);        }        return s;    }    private Object js_eval(Context cx, Scriptable scope, Object[] args)    {        String m = ScriptRuntime.getMessage1("msg.cant.call.indirect", "eval");        throw NativeGlobal.constructError(cx, "EvalError", m, scope);    }    static boolean isEvalFunction(Object functionObj)    {        if (functionObj instanceof IdFunctionObject) {            IdFunctionObject function = (IdFunctionObject)functionObj;            if (function.hasTag(FTAG) && function.methodId() == Id_eval) {                return true;            }        }        return false;    }    /**     * @deprecated Use {@link ScriptRuntime#constructError(String,String)}     * instead.     */    public static EcmaError constructError(Context cx,                                           String error,                                           String message,                                           Scriptable scope)    {        return ScriptRuntime.constructError(error, message);    }    /**     * @deprecated Use     * {@link ScriptRuntime#constructError(String,String,String,int,int,String)}     * instead.     */    public static EcmaError constructError(Context cx,                                           String error,                                           String message,                                           Scriptable scope,                                           String sourceName,                                           int lineNumber,                                           int columnNumber,                                           String lineSource)    {        return ScriptRuntime.constructError(error, message,                                            sourceName, lineNumber,                                            lineSource, columnNumber);    }    /*    *   ECMA 3, 15.1.3 URI Handling Function Properties    *    *   The following are implementations of the algorithms    *   given in the ECMA specification for the hidden functions    *   'Encode' and 'Decode'.    */    private static String encode(String str, boolean fullUri) {        byte[] utf8buf = null;        StringBuffer sb = null;        for (int k = 0, length = str.length(); k != length; ++k) {            char C = str.charAt(k);            if (encodeUnescaped(C, fullUri)) {                if (sb != null) {                    sb.append(C);                }            } else {                if (sb == null) {                    sb = new StringBuffer(length + 3);                    sb.append(str);                    sb.setLength(k);                    utf8buf = new byte[6];                }                if (0xDC00 <= C && C <= 0xDFFF) {                    throw Context.reportRuntimeError0("msg.bad.uri");                }                int V;                if (C < 0xD800 || 0xDBFF < C) {                    V = C;                } else {                    k++;                    if (k == length) {                        throw Context.reportRuntimeError0("msg.bad.uri");                    }                    char C2 = str.charAt(k);                    if (!(0xDC00 <= C2 && C2 <= 0xDFFF)) {                        throw Context.reportRuntimeError0("msg.bad.uri");                    }                    V = ((C - 0xD800) << 10) + (C2 - 0xDC00) + 0x10000;                }                int L = oneUcs4ToUtf8Char(utf8buf, V);                for (int j = 0; j < L; j++) {                    int d = 0xff & utf8buf[j];                    sb.append('%');                    sb.append(toHexChar(d >>> 4));                    sb.append(toHexChar(d & 0xf));                }            }        }        return (sb == null) ? str : sb.toString();    }    private static char toHexChar(int i) {        if (i >> 4 != 0) Kit.codeBug();        return (char)((i < 10) ? i + '0' : i - 10 + 'a');    }    private static int unHex(char c) {        if ('A' <= c && c <= 'F') {            return c - 'A' + 10;        } else if ('a' <= c && c <= 'f') {            return c - 'a' + 10;        } else if ('0' <= c && c <= '9') {            return c - '0';        } else {            return -1;        }    }    private static int unHex(char c1, char c2) {        int i1 = unHex(c1);        int i2 = unHex(c2);        if (i1 >= 0 && i2 >= 0) {            return (i1 << 4) | i2;        }        return -1;    }    private static String decode(String str, boolean fullUri) {        char[] buf = null;        int bufTop = 0;        for (int k = 0, length = str.length(); k != length;) {            char C = str.charAt(k);            if (C != '%') {                if (buf != null) {                    buf[bufTop++] = C;                }                ++k;            } else {                if (buf == null) {                    // decode always compress so result can not be bigger then                    // str.length()                    buf = new char[length];                    str.getChars(0, k, buf, 0);                    bufTop = k;                }                int start = k;                if (k + 3 > length)                    throw Context.reportRuntimeError0("msg.bad.uri");                int B = unHex(str.charAt(k + 1), str.charAt(k + 2));                if (B < 0) throw Context.reportRuntimeError0("msg.bad.uri");                k += 3;                if ((B & 0x80) == 0) {                    C = (char)B;                } else {                    // Decode UTF-8 sequence into ucs4Char and encode it into                    // UTF-16                    int utf8Tail, ucs4Char, minUcs4Char;                    if ((B & 0xC0) == 0x80) {                        // First  UTF-8 should be ouside 0x80..0xBF                        throw Context.reportRuntimeError0("msg.bad.uri");                    } else if ((B & 0x20) == 0) {                        utf8Tail = 1; ucs4Char = B & 0x1F;                        minUcs4Char = 0x80;                    } else if ((B & 0x10) == 0) {                        utf8Tail = 2; ucs4Char = B & 0x0F;                        minUcs4Char = 0x800;                    } else if ((B & 0x08) == 0) {                        utf8Tail = 3; ucs4Char = B & 0x07;                        minUcs4Char = 0x10000;                    } else if ((B & 0x04) == 0) {                        utf8Tail = 4; ucs4Char = B & 0x03;                        minUcs4Char = 0x200000;                    } else if ((B & 0x02) == 0) {                        utf8Tail = 5; ucs4Char = B & 0x01;                        minUcs4Char = 0x4000000;                    } else {                        // First UTF-8 can not be 0xFF or 0xFE                        throw Context.reportRuntimeError0("msg.bad.uri");                    }                    if (k + 3 * utf8Tail > length)                        throw Context.reportRuntimeError0("msg.bad.uri");                    for (int j = 0; j != utf8Tail; j++) {                        if (str.charAt(k) != '%')                            throw Context.reportRuntimeError0("msg.bad.uri");                        B = unHex(str.charAt(k + 1), str.charAt(k + 2));                        if (B < 0 || (B & 0xC0) != 0x80)                            throw Context.reportRuntimeError0("msg.bad.uri");                        ucs4Char = (ucs4Char << 6) | (B & 0x3F);                        k += 3;                    }                    // Check for overlongs and other should-not-present codes                    if (ucs4Char < minUcs4Char                        || ucs4Char == 0xFFFE || ucs4Char == 0xFFFF)                    {                        ucs4Char = 0xFFFD;                    }                    if (ucs4Char >= 0x10000) {                        ucs4Char -= 0x10000;                        if (ucs4Char > 0xFFFFF)                            throw Context.reportRuntimeError0("msg.bad.uri");                        char H = (char)((ucs4Char >>> 10) + 0xD800);                        C = (char)((ucs4Char & 0x3FF) + 0xDC00);                        buf[bufTop++] = H;                    } else {                        C = (char)ucs4Char;                    }                }                if (fullUri && URI_DECODE_RESERVED.indexOf(C) >= 0) {                    for (int x = start; x != k; x++) {                        buf[bufTop++] = str.charAt(x);                    }                } else {                    buf[bufTop++] = C;                }            }        }        return (buf == null) ? str : new String(buf, 0, bufTop);    }    private static boolean encodeUnescaped(char c, boolean fullUri) {        if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')            || ('0' <= c && c <= '9'))        {            return true;        }        if ("-_.!~*'()".indexOf(c) >= 0)            return true;        if (fullUri) {            return URI_DECODE_RESERVED.indexOf(c) >= 0;        }        return false;    }    private static final String URI_DECODE_RESERVED = ";/?:@&=+$,#";    /* Convert one UCS-4 char and write it into a UTF-8 buffer, which must be    * at least 6 bytes long.  Return the number of UTF-8 bytes of data written.    */    private static int oneUcs4ToUtf8Char(byte[] utf8Buffer, int ucs4Char) {        int utf8Length = 1;        //JS_ASSERT(ucs4Char <= 0x7FFFFFFF);        if ((ucs4Char & ~0x7F) == 0)            utf8Buffer[0] = (byte)ucs4Char;        else {            int i;            int a = ucs4Char >>> 11;            utf8Length = 2;            while (a != 0) {                a >>>= 5;                utf8Length++;            }            i = utf8Length;            while (--i > 0) {                utf8Buffer[i] = (byte)((ucs4Char & 0x3F) | 0x80);                ucs4Char >>>= 6;            }            utf8Buffer[0] = (byte)(0x100 - (1 << (8-utf8Length)) + ucs4Char);        }        return utf8Length;    }    private static final Object FTAG = new Object();    private static final int        Id_decodeURI           =  1,        Id_decodeURIComponent  =  2,        Id_encodeURI           =  3,        Id_encodeURIComponent  =  4,        Id_escape              =  5,        Id_eval                =  6,        Id_isFinite            =  7,        Id_isNaN               =  8,        Id_isXMLName           =  9,        Id_parseFloat          = 10,        Id_parseInt            = 11,        Id_unescape            = 12,        Id_uneval              = 13,        LAST_SCOPE_FUNCTION_ID = 13,        Id_new_CommonError     = 14;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -