home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / misc / RegexpPool.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.4 KB  |  187 lines

  1. package sun.misc;
  2.  
  3. import java.io.PrintStream;
  4.  
  5. public class RegexpPool {
  6.    private RegexpNode prefixMachine = new RegexpNode();
  7.    private RegexpNode suffixMachine = new RegexpNode();
  8.    private static final int BIG = Integer.MAX_VALUE;
  9.    private int lastDepth = Integer.MAX_VALUE;
  10.  
  11.    public void add(String var1, Object var2) throws REException {
  12.       this.add(var1, var2, false);
  13.    }
  14.  
  15.    public void replace(String var1, Object var2) {
  16.       try {
  17.          this.add(var1, var2, true);
  18.       } catch (Exception var4) {
  19.       }
  20.  
  21.    }
  22.  
  23.    public Object delete(String var1) {
  24.       Object var2 = null;
  25.       RegexpNode var3 = this.prefixMachine;
  26.       RegexpNode var4 = var3;
  27.       int var5 = var1.length() - 1;
  28.       boolean var7 = true;
  29.       if (!var1.startsWith("*") || !var1.endsWith("*")) {
  30.          ++var5;
  31.       }
  32.  
  33.       if (var5 <= 0) {
  34.          return null;
  35.       } else {
  36.          for(int var6 = 0; var3 != null; ++var6) {
  37.             if (var3.result != null && var3.depth < Integer.MAX_VALUE && (!var3.exact || var6 == var5)) {
  38.                var4 = var3;
  39.             }
  40.  
  41.             if (var6 >= var5) {
  42.                break;
  43.             }
  44.  
  45.             var3 = var3.find(var1.charAt(var6));
  46.          }
  47.  
  48.          var3 = this.suffixMachine;
  49.          int var9 = var5;
  50.  
  51.          while(true) {
  52.             --var9;
  53.             if (var9 < 0 || var3 == null) {
  54.                if (var7) {
  55.                   if (var1.equals(var4.re)) {
  56.                      var2 = var4.result;
  57.                      var4.result = null;
  58.                   }
  59.                } else if (var1.equals(var4.re)) {
  60.                   var2 = var4.result;
  61.                   var4.result = null;
  62.                }
  63.  
  64.                return var2;
  65.             }
  66.  
  67.             if (var3.result != null && var3.depth < Integer.MAX_VALUE) {
  68.                var7 = false;
  69.                var4 = var3;
  70.             }
  71.  
  72.             var3 = var3.find(var1.charAt(var9));
  73.          }
  74.       }
  75.    }
  76.  
  77.    public Object match(String var1) {
  78.       return this.matchAfter(var1, Integer.MAX_VALUE);
  79.    }
  80.  
  81.    public Object matchNext(String var1) {
  82.       return this.matchAfter(var1, this.lastDepth);
  83.    }
  84.  
  85.    private void add(String var1, Object var2, boolean var3) throws REException {
  86.       int var4 = var1.length();
  87.       RegexpNode var5;
  88.       if (var1.charAt(0) == '*') {
  89.          for(var5 = this.suffixMachine; var4 > 1; var5 = var5.add(var1.charAt(var4))) {
  90.             --var4;
  91.          }
  92.       } else {
  93.          boolean var6 = false;
  94.          if (var1.charAt(var4 - 1) == '*') {
  95.             --var4;
  96.          } else {
  97.             var6 = true;
  98.          }
  99.  
  100.          var5 = this.prefixMachine;
  101.  
  102.          for(int var7 = 0; var7 < var4; ++var7) {
  103.             var5 = var5.add(var1.charAt(var7));
  104.          }
  105.  
  106.          var5.exact = var6;
  107.       }
  108.  
  109.       if (var5.result != null && !var3) {
  110.          throw new REException(var1 + " is a duplicate");
  111.       } else {
  112.          var5.re = var1;
  113.          var5.result = var2;
  114.       }
  115.    }
  116.  
  117.    private Object matchAfter(String var1, int var2) {
  118.       RegexpNode var3 = this.prefixMachine;
  119.       RegexpNode var4 = var3;
  120.       int var5 = 0;
  121.       int var6 = 0;
  122.       int var7 = var1.length();
  123.       if (var7 <= 0) {
  124.          return null;
  125.       } else {
  126.          for(int var8 = 0; var3 != null; ++var8) {
  127.             if (var3.result != null && var3.depth < var2 && (!var3.exact || var8 == var7)) {
  128.                this.lastDepth = var3.depth;
  129.                var4 = var3;
  130.                var5 = var8;
  131.                var6 = var7;
  132.             }
  133.  
  134.             if (var8 >= var7) {
  135.                break;
  136.             }
  137.  
  138.             var3 = var3.find(var1.charAt(var8));
  139.          }
  140.  
  141.          var3 = this.suffixMachine;
  142.          int var11 = var7;
  143.  
  144.          while(true) {
  145.             --var11;
  146.             if (var11 < 0 || var3 == null) {
  147.                Object var9 = var4.result;
  148.                if (var9 != null && var9 instanceof RegexpTarget) {
  149.                   var9 = ((RegexpTarget)var9).found(var1.substring(var5, var6));
  150.                }
  151.  
  152.                return var9;
  153.             }
  154.  
  155.             if (var3.result != null && var3.depth < var2) {
  156.                this.lastDepth = var3.depth;
  157.                var4 = var3;
  158.                var5 = 0;
  159.                var6 = var11 + 1;
  160.             }
  161.  
  162.             var3 = var3.find(var1.charAt(var11));
  163.          }
  164.       }
  165.    }
  166.  
  167.    public void reset() {
  168.       this.lastDepth = Integer.MAX_VALUE;
  169.    }
  170.  
  171.    public void print(PrintStream var1) {
  172.       var1.print("Regexp pool:\n");
  173.       if (this.suffixMachine.firstchild != null) {
  174.          var1.print(" Suffix machine: ");
  175.          this.suffixMachine.firstchild.print(var1);
  176.          var1.print("\n");
  177.       }
  178.  
  179.       if (this.prefixMachine.firstchild != null) {
  180.          var1.print(" Prefix machine: ");
  181.          this.prefixMachine.firstchild.print(var1);
  182.          var1.print("\n");
  183.       }
  184.  
  185.    }
  186. }
  187.