public virtual object Perform (Context cx, IScriptable scope, IScriptable thisObj, object [] args, RegExpActions actionType) { GlobData data = new GlobData (); data.mode = actionType; switch ( (RegExpActions)actionType) { case EcmaScript.NET.RegExpActions.Match: { object rval; data.optarg = 1; rval = matchOrReplace (cx, scope, thisObj, args, this, data, false); return data.arrayobj == null ? rval : data.arrayobj; } case EcmaScript.NET.RegExpActions.Search: data.optarg = 1; return matchOrReplace (cx, scope, thisObj, args, this, data, false); case EcmaScript.NET.RegExpActions.Replace: { object arg1 = args.Length < 2 ? Undefined.Value : args [1]; string repstr = null; IFunction lambda = null; if (arg1 is IFunction) { lambda = (IFunction)arg1; } else { repstr = ScriptConvert.ToString (arg1); } data.optarg = 2; data.lambda = lambda; data.repstr = repstr; data.dollar = repstr == null ? -1 : repstr.IndexOf ((char)'$'); data.charBuf = null; data.leftIndex = 0; object val = matchOrReplace (cx, scope, thisObj, args, this, data, true); SubString rc = this.rightContext; if (data.charBuf == null) { if (data.global || val == null || !val.Equals (true)) { /* Didn't match even once. */ return data.str; } SubString lc = this.leftContext; replace_glob (data, cx, scope, this, lc.index, lc.length); } data.charBuf.Append (rc.charArray, rc.index, rc.length); return data.charBuf.ToString (); } default: throw Context.CodeBug (); } }
public virtual object Perform(Context cx, IScriptable scope, IScriptable thisObj, object [] args, RegExpActions actionType) { GlobData data = new GlobData(); data.mode = actionType; switch ((RegExpActions)actionType) { case EcmaScript.NET.RegExpActions.Match: { object rval; data.optarg = 1; rval = matchOrReplace(cx, scope, thisObj, args, this, data, false); return(data.arrayobj == null ? rval : data.arrayobj); } case EcmaScript.NET.RegExpActions.Search: data.optarg = 1; return(matchOrReplace(cx, scope, thisObj, args, this, data, false)); case EcmaScript.NET.RegExpActions.Replace: { object arg1 = args.Length < 2 ? Undefined.Value : args [1]; string repstr = null; IFunction lambda = null; if (arg1 is IFunction) { lambda = (IFunction)arg1; } else { repstr = ScriptConvert.ToString(arg1); } data.optarg = 2; data.lambda = lambda; data.repstr = repstr; data.dollar = repstr == null ? -1 : repstr.IndexOf((char)'$'); data.charBuf = null; data.leftIndex = 0; object val = matchOrReplace(cx, scope, thisObj, args, this, data, true); SubString rc = this.rightContext; if (data.charBuf == null) { if (data.global || val == null || !val.Equals(true)) { /* Didn't match even once. */ return(data.str); } SubString lc = this.leftContext; replace_glob(data, cx, scope, this, lc.index, lc.length); } data.charBuf.Append(rc.charArray, rc.index, rc.length); return(data.charBuf.ToString()); } default: throw Context.CodeBug(); } }