home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.util.Vector;
-
- class ReplaceData extends GlobData {
- Function lambda;
- char[] repstr;
- int dollar = -1;
- char[] charArray;
- int length;
- int index;
- int leftIndex;
-
- void doReplace(RegExpStatics var1, char[] var2, int var3) {
- int var4 = 0;
- char[] var5 = this.repstr;
- int var6 = this.dollar;
- int var7 = var4;
- if (var6 != -1) {
- label22:
- while(true) {
- int var8 = var6 - var4;
- System.arraycopy(this.repstr, var4, var2, var3, var8);
- var3 += var8;
- var4 = var6;
- int[] var9 = new int[1];
- SubString var10 = interpretDollar(var1, var5, var6, var7, var9);
- if (var10 != null) {
- var8 = var10.length;
- System.arraycopy(var10.charArray, var10.index, var2, var3, var8);
- var3 += var8;
- var4 = var6 + var9[0];
- }
-
- ++var6;
-
- while(true) {
- if (var6 >= var2.length) {
- break label22;
- }
-
- if (var2[var6++] == '$') {
- break;
- }
- }
- }
- }
-
- System.arraycopy(this.repstr, var4, var2, var3, this.repstr.length - var4);
- }
-
- int findReplen(RegExpStatics var1) throws JavaScriptException {
- if (this.lambda == null) {
- int var9 = this.repstr.length;
- if (this.dollar == -1) {
- return var9;
- } else {
- byte var10 = 0;
-
- for(int var11 = this.dollar; var11 < this.repstr.length; ++var11) {
- char var12 = this.repstr[var11];
- if (var12 == '$') {
- int[] var13 = new int[1];
- SubString var15 = interpretDollar(var1, this.repstr, var11, var10, var13);
- if (var15 != null) {
- var9 += var15.length - var13[0];
- }
- }
- }
-
- return var9;
- }
- } else {
- Context var2 = Context.getContext();
- RegExpStatics var3 = var2.getRegExpStatics();
- Vector var4 = var3.parens;
- int var5 = var4.size();
- Object[] var6 = new Object[var5 + 3];
- var6[0] = var3.lastMatch.toString();
-
- for(int var7 = 0; var7 < var5; ++var7) {
- SubString var8 = (SubString)var4.elementAt(var7);
- var6[var7 + 1] = var8.toString();
- }
-
- var6[var5 + 1] = new Integer(var3.leftContext.length);
- var6[var5 + 2] = super.str;
- Scriptable var14 = this.lambda.getParentScope();
- Object var16 = this.lambda.call(var2, var14, var14, var6);
- this.repstr = ScriptRuntime.toString(var16).toCharArray();
- return this.repstr.length;
- }
- }
-
- static SubString interpretDollar(RegExpStatics var0, char[] var1, int var2, int var3, int[] var4) {
- if (var1[var2] != '$') {
- throw new RuntimeException();
- } else if (var2 > var3 && var1[var2 - 1] == '\\') {
- return null;
- } else {
- char var7 = var1[var2 + 1];
- if (!NativeRegExp.isDigit(var7)) {
- var4[0] = 2;
- switch (var7) {
- case '&':
- return var0.lastMatch;
- case '\'':
- return var0.rightContext;
- case '+':
- return var0.lastParen;
- case '`':
- Context var10 = Context.getContext();
- if (var10.getLanguageVersion() == 120) {
- var0.leftContext.index = 0;
- var0.leftContext.length = var0.lastMatch.index;
- }
-
- return var0.leftContext;
- default:
- return null;
- }
- } else if (var7 == '0') {
- return null;
- } else {
- int var8 = 0;
- char[] var5 = var1;
- int var6 = var2;
-
- while(true) {
- ++var6;
- if (var6 >= var5.length || !NativeRegExp.isDigit(var7 = var5[var6])) {
- break;
- }
-
- int var9 = 10 * var8 + NativeRegExp.unDigit(var7);
- if (var9 < var8) {
- break;
- }
-
- var8 = var9;
- }
-
- --var8;
- var4[0] = var6 - var2;
- return var0.getParenSubString(var8);
- }
- }
- }
-
- void doGlobal(Function var1, int var2) throws JavaScriptException {
- Context var4 = Context.getContext();
- RegExpStatics var5 = var4.getRegExpStatics();
- SubString var6 = var5.leftContext;
- char[] var7 = var6.charArray;
- int var8 = this.leftIndex;
- int var9 = var5.lastMatch.index - var8;
- this.leftIndex = var5.lastMatch.index + var5.lastMatch.length;
- int var10 = this.findReplen(var5);
- int var11 = var9 + var10;
- char[] var12;
- if (this.charArray != null) {
- var12 = new char[this.length + var11];
- System.arraycopy(this.charArray, 0, var12, 0, this.length);
- } else {
- var12 = new char[var11];
- }
-
- this.charArray = var12;
- this.length += var11;
- int var13 = this.index;
- this.index += var11;
- System.arraycopy(var7, var8, var12, var13, var9);
- var13 += var9;
- this.doReplace(var5, var12, var13);
- }
- }
-