home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / netscape / javascript / ReplaceData.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  3.2 KB  |  177 lines

  1. package com.netscape.javascript;
  2.  
  3. import java.util.Vector;
  4.  
  5. class ReplaceData extends GlobData {
  6.    Function lambda;
  7.    char[] repstr;
  8.    int dollar = -1;
  9.    char[] charArray;
  10.    int length;
  11.    int index;
  12.    int leftIndex;
  13.  
  14.    void doReplace(RegExpStatics var1, char[] var2, int var3) {
  15.       int var4 = 0;
  16.       char[] var5 = this.repstr;
  17.       int var6 = this.dollar;
  18.       int var7 = var4;
  19.       if (var6 != -1) {
  20.          label22:
  21.          while(true) {
  22.             int var8 = var6 - var4;
  23.             System.arraycopy(this.repstr, var4, var2, var3, var8);
  24.             var3 += var8;
  25.             var4 = var6;
  26.             int[] var9 = new int[1];
  27.             SubString var10 = interpretDollar(var1, var5, var6, var7, var9);
  28.             if (var10 != null) {
  29.                var8 = var10.length;
  30.                System.arraycopy(var10.charArray, var10.index, var2, var3, var8);
  31.                var3 += var8;
  32.                var4 = var6 + var9[0];
  33.             }
  34.  
  35.             ++var6;
  36.  
  37.             while(true) {
  38.                if (var6 >= var2.length) {
  39.                   break label22;
  40.                }
  41.  
  42.                if (var2[var6++] == '$') {
  43.                   break;
  44.                }
  45.             }
  46.          }
  47.       }
  48.  
  49.       System.arraycopy(this.repstr, var4, var2, var3, this.repstr.length - var4);
  50.    }
  51.  
  52.    int findReplen(RegExpStatics var1) throws JavaScriptException {
  53.       if (this.lambda == null) {
  54.          int var9 = this.repstr.length;
  55.          if (this.dollar == -1) {
  56.             return var9;
  57.          } else {
  58.             byte var10 = 0;
  59.  
  60.             for(int var11 = this.dollar; var11 < this.repstr.length; ++var11) {
  61.                char var12 = this.repstr[var11];
  62.                if (var12 == '$') {
  63.                   int[] var13 = new int[1];
  64.                   SubString var15 = interpretDollar(var1, this.repstr, var11, var10, var13);
  65.                   if (var15 != null) {
  66.                      var9 += var15.length - var13[0];
  67.                   }
  68.                }
  69.             }
  70.  
  71.             return var9;
  72.          }
  73.       } else {
  74.          Context var2 = Context.getContext();
  75.          RegExpStatics var3 = var2.getRegExpStatics();
  76.          Vector var4 = var3.parens;
  77.          int var5 = var4.size();
  78.          Object[] var6 = new Object[var5 + 3];
  79.          var6[0] = var3.lastMatch.toString();
  80.  
  81.          for(int var7 = 0; var7 < var5; ++var7) {
  82.             SubString var8 = (SubString)var4.elementAt(var7);
  83.             var6[var7 + 1] = var8.toString();
  84.          }
  85.  
  86.          var6[var5 + 1] = new Integer(var3.leftContext.length);
  87.          var6[var5 + 2] = super.str;
  88.          Scriptable var14 = this.lambda.getParentScope();
  89.          Object var16 = this.lambda.call(var2, var14, var14, var6);
  90.          this.repstr = ScriptRuntime.toString(var16).toCharArray();
  91.          return this.repstr.length;
  92.       }
  93.    }
  94.  
  95.    static SubString interpretDollar(RegExpStatics var0, char[] var1, int var2, int var3, int[] var4) {
  96.       if (var1[var2] != '$') {
  97.          throw new RuntimeException();
  98.       } else if (var2 > var3 && var1[var2 - 1] == '\\') {
  99.          return null;
  100.       } else {
  101.          char var7 = var1[var2 + 1];
  102.          if (!NativeRegExp.isDigit(var7)) {
  103.             var4[0] = 2;
  104.             switch (var7) {
  105.                case '&':
  106.                   return var0.lastMatch;
  107.                case '\'':
  108.                   return var0.rightContext;
  109.                case '+':
  110.                   return var0.lastParen;
  111.                case '`':
  112.                   Context var10 = Context.getContext();
  113.                   if (var10.getLanguageVersion() == 120) {
  114.                      var0.leftContext.index = 0;
  115.                      var0.leftContext.length = var0.lastMatch.index;
  116.                   }
  117.  
  118.                   return var0.leftContext;
  119.                default:
  120.                   return null;
  121.             }
  122.          } else if (var7 == '0') {
  123.             return null;
  124.          } else {
  125.             int var8 = 0;
  126.             char[] var5 = var1;
  127.             int var6 = var2;
  128.  
  129.             while(true) {
  130.                ++var6;
  131.                if (var6 >= var5.length || !NativeRegExp.isDigit(var7 = var5[var6])) {
  132.                   break;
  133.                }
  134.  
  135.                int var9 = 10 * var8 + NativeRegExp.unDigit(var7);
  136.                if (var9 < var8) {
  137.                   break;
  138.                }
  139.  
  140.                var8 = var9;
  141.             }
  142.  
  143.             --var8;
  144.             var4[0] = var6 - var2;
  145.             return var0.getParenSubString(var8);
  146.          }
  147.       }
  148.    }
  149.  
  150.    void doGlobal(Function var1, int var2) throws JavaScriptException {
  151.       Context var4 = Context.getContext();
  152.       RegExpStatics var5 = var4.getRegExpStatics();
  153.       SubString var6 = var5.leftContext;
  154.       char[] var7 = var6.charArray;
  155.       int var8 = this.leftIndex;
  156.       int var9 = var5.lastMatch.index - var8;
  157.       this.leftIndex = var5.lastMatch.index + var5.lastMatch.length;
  158.       int var10 = this.findReplen(var5);
  159.       int var11 = var9 + var10;
  160.       char[] var12;
  161.       if (this.charArray != null) {
  162.          var12 = new char[this.length + var11];
  163.          System.arraycopy(this.charArray, 0, var12, 0, this.length);
  164.       } else {
  165.          var12 = new char[var11];
  166.       }
  167.  
  168.       this.charArray = var12;
  169.       this.length += var11;
  170.       int var13 = this.index;
  171.       this.index += var11;
  172.       System.arraycopy(var7, var8, var12, var13, var9);
  173.       var13 += var9;
  174.       this.doReplace(var5, var12, var13);
  175.    }
  176. }
  177.