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

📄 nativestring.java

📁 這是一個javascript 的 interpreter是了解 web browser的好材料
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Rhino code, released * May 6, 1999. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1997-1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): *   Tom Beauvais *   Norris Boyd *   Mike McCabe * * Alternatively, the contents of this file may be used under the terms of * the GNU General Public License Version 2 or later (the "GPL"), in which * case the provisions of the GPL are applicable instead of those above. If * you wish to allow use of your version of this file only under the terms of * the GPL and not to allow others to use your version of this file under the * MPL, indicate your decision by deleting the provisions above and replacing * them with the notice and other provisions required by the GPL. If you do * not delete the provisions above, a recipient may use your version of this * file under either the MPL or the GPL. * * ***** END LICENSE BLOCK ***** */package org.mozilla.javascript;import java.text.Collator;/** * This class implements the String native object. * * See ECMA 15.5. * * String methods for dealing with regular expressions are * ported directly from C. Latest port is from version 1.40.12.19 * in the JSFUN13_BRANCH. * * @author Mike McCabe * @author Norris Boyd */final class NativeString extends IdScriptableObject{    static final long serialVersionUID = 920268368584188687L;    private static final Object STRING_TAG = new Object();    static void init(Scriptable scope, boolean sealed)    {        NativeString obj = new NativeString("");        obj.exportAsJSClass(MAX_PROTOTYPE_ID, scope, sealed);    }    private NativeString(String s) {        string = s;    }    public String getClassName() {        return "String";    }    private static final int        Id_length                    =  1,        MAX_INSTANCE_ID              =  1;    protected int getMaxInstanceId()    {        return MAX_INSTANCE_ID;    }    protected int findInstanceIdInfo(String s)    {        if (s.equals("length")) {            return instanceIdInfo(DONTENUM | READONLY | PERMANENT, Id_length);        }        return super.findInstanceIdInfo(s);    }    protected String getInstanceIdName(int id)    {        if (id == Id_length) { return "length"; }        return super.getInstanceIdName(id);    }    protected Object getInstanceIdValue(int id)    {        if (id == Id_length) {            return ScriptRuntime.wrapInt(string.length());        }        return super.getInstanceIdValue(id);    }    protected void fillConstructorProperties(IdFunctionObject ctor)    {        addIdFunctionProperty(ctor, STRING_TAG, ConstructorId_fromCharCode,                "fromCharCode", 1);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_charAt, "charAt", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_charCodeAt, "charCodeAt", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_indexOf, "indexOf", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_lastIndexOf, "lastIndexOf", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_split, "split", 3);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_substring, "substring", 3);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_toLowerCase, "toLowerCase", 1);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_toUpperCase, "toUpperCase", 1);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_substr, "substr", 3);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_concat, "concat", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_slice, "slice", 3);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_equalsIgnoreCase, "equalsIgnoreCase", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_match, "match", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_search, "search", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_replace, "replace", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_localeCompare, "localeCompare", 2);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_toLocaleLowerCase, "toLocaleLowerCase", 1);        addIdFunctionProperty(ctor, STRING_TAG,                ConstructorId_fromCharCode, "fromCharCode", 1);        super.fillConstructorProperties(ctor);    }    protected void initPrototypeId(int id)    {        String s;        int arity;        switch (id) {          case Id_constructor:       arity=1; s="constructor";       break;          case Id_toString:          arity=0; s="toString";          break;          case Id_toSource:          arity=0; s="toSource";          break;          case Id_valueOf:           arity=0; s="valueOf";           break;          case Id_charAt:            arity=1; s="charAt";            break;          case Id_charCodeAt:        arity=1; s="charCodeAt";        break;          case Id_indexOf:           arity=1; s="indexOf";           break;          case Id_lastIndexOf:       arity=1; s="lastIndexOf";       break;          case Id_split:             arity=2; s="split";             break;          case Id_substring:         arity=2; s="substring";         break;          case Id_toLowerCase:       arity=0; s="toLowerCase";       break;          case Id_toUpperCase:       arity=0; s="toUpperCase";       break;          case Id_substr:            arity=2; s="substr";            break;          case Id_concat:            arity=1; s="concat";            break;          case Id_slice:             arity=2; s="slice";             break;          case Id_bold:              arity=0; s="bold";              break;          case Id_italics:           arity=0; s="italics";           break;          case Id_fixed:             arity=0; s="fixed";             break;          case Id_strike:            arity=0; s="strike";            break;          case Id_small:             arity=0; s="small";             break;          case Id_big:               arity=0; s="big";               break;          case Id_blink:             arity=0; s="blink";             break;          case Id_sup:               arity=0; s="sup";               break;          case Id_sub:               arity=0; s="sub";               break;          case Id_fontsize:          arity=0; s="fontsize";          break;          case Id_fontcolor:         arity=0; s="fontcolor";         break;          case Id_link:              arity=0; s="link";              break;          case Id_anchor:            arity=0; s="anchor";            break;          case Id_equals:            arity=1; s="equals";            break;          case Id_equalsIgnoreCase:  arity=1; s="equalsIgnoreCase";  break;          case Id_match:             arity=1; s="match";             break;          case Id_search:            arity=1; s="search";            break;          case Id_replace:           arity=1; s="replace";           break;          case Id_localeCompare:     arity=1; s="localeCompare";     break;          case Id_toLocaleLowerCase: arity=0; s="toLocaleLowerCase"; break;          case Id_toLocaleUpperCase: arity=0; s="toLocaleUpperCase"; break;          default: throw new IllegalArgumentException(String.valueOf(id));        }        initPrototypeMethod(STRING_TAG, id, s, arity);    }    public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,                             Scriptable thisObj, Object[] args)    {        if (!f.hasTag(STRING_TAG)) {            return super.execIdCall(f, cx, scope, thisObj, args);        }        int id = f.methodId();      again:        for(;;) {            switch (id) {              case ConstructorId_charAt:              case ConstructorId_charCodeAt:              case ConstructorId_indexOf:              case ConstructorId_lastIndexOf:              case ConstructorId_split:              case ConstructorId_substring:              case ConstructorId_toLowerCase:              case ConstructorId_toUpperCase:              case ConstructorId_substr:              case ConstructorId_concat:              case ConstructorId_slice:              case ConstructorId_equalsIgnoreCase:              case ConstructorId_match:              case ConstructorId_search:              case ConstructorId_replace:              case ConstructorId_localeCompare:              case ConstructorId_toLocaleLowerCase: {                thisObj = ScriptRuntime.toObject(scope,                        ScriptRuntime.toString(args[0]));                Object[] newArgs = new Object[args.length-1];                for (int i=0; i < newArgs.length; i++)                    newArgs[i] = args[i+1];                args = newArgs;                id = -id;                continue again;              }                  case ConstructorId_fromCharCode: {                int N = args.length;                if (N < 1)                    return "";                StringBuffer sb = new StringBuffer(N);                for (int i = 0; i != N; ++i) {                    sb.append(ScriptRuntime.toUint16(args[i]));                }                return sb.toString();              }                  case Id_constructor: {                String s = (args.length >= 1)                    ? ScriptRuntime.toString(args[0]) : "";                if (thisObj == null) {                    // new String(val) creates a new String object.                    return new NativeString(s);                }                // String(val) converts val to a string value.                return s;              }                  case Id_toString:              case Id_valueOf:                // ECMA 15.5.4.2: 'the toString function is not generic.                return realThis(thisObj, f).string;                  case Id_toSource: {                String s = realThis(thisObj, f).string;                return "(new String(\""+ScriptRuntime.escapeString(s)+"\"))";              }                  case Id_charAt:              case Id_charCodeAt: {                 // See ECMA 15.5.4.[4,5]                String target = ScriptRuntime.toString(thisObj);                double pos = ScriptRuntime.toInteger(args, 0);                if (pos < 0 || pos >= target.length()) {                    if (id == Id_charAt) return "";                    else return ScriptRuntime.NaNobj;                }                char c = target.charAt((int)pos);                if (id == Id_charAt) return String.valueOf(c);                else return ScriptRuntime.wrapInt(c);              }                  case Id_indexOf:                return ScriptRuntime.wrapInt(js_indexOf(                    ScriptRuntime.toString(thisObj), args));                  case Id_lastIndexOf:                return ScriptRuntime.wrapInt(js_lastIndexOf(                    ScriptRuntime.toString(thisObj), args));                  case Id_split:                return js_split(cx, scope, ScriptRuntime.toString(thisObj),                        args);                  case Id_substring:                return js_substring(cx, ScriptRuntime.toString(thisObj), args);                  case Id_toLowerCase:                // See ECMA 15.5.4.11                return ScriptRuntime.toString(thisObj).toLowerCase();                  case Id_toUpperCase:                // See ECMA 15.5.4.12                return ScriptRuntime.toString(thisObj).toUpperCase();                  case Id_substr:                return js_substr(ScriptRuntime.toString(thisObj), args);                  case Id_concat:                return js_concat(ScriptRuntime.toString(thisObj), args);                  case Id_slice:                return js_slice(ScriptRuntime.toString(thisObj), args);                  case Id_bold:                return tagify(thisObj, "b", null, null);                  case Id_italics:                return tagify(thisObj, "i", null, null);                  case Id_fixed:                return tagify(thisObj, "tt", null, null);                  case Id_strike:                return tagify(thisObj, "strike", null, null);                  case Id_small:                return tagify(thisObj, "small", null, null);                  case Id_big:                return tagify(thisObj, "big", null, null);

⌨️ 快捷键说明

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