home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / text / AttributedString.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.5 KB  |  405 lines

  1. package java.text;
  2.  
  3. import java.util.AbstractCollection;
  4. import java.util.HashSet;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import java.util.Vector;
  8.  
  9. public class AttributedString {
  10.    private static final int ARRAY_SIZE_INCREMENT = 10;
  11.    String text;
  12.    int runArraySize;
  13.    int runCount;
  14.    int[] runStarts;
  15.    Vector[] runAttributes;
  16.    Vector[] runAttributeValues;
  17.  
  18.    public AttributedString(String var1) {
  19.       if (var1 == null) {
  20.          throw new NullPointerException();
  21.       } else {
  22.          this.text = var1;
  23.       }
  24.    }
  25.  
  26.    public AttributedString(String var1, Map var2) {
  27.       if (var1 != null && var2 != null) {
  28.          this.text = var1;
  29.          if (var1.length() == 0) {
  30.             if (!var2.isEmpty()) {
  31.                throw new IllegalArgumentException("Can't add attribute to 0-length text");
  32.             }
  33.          } else {
  34.             int var3 = var2.size();
  35.             if (var3 > 0) {
  36.                this.createRunAttributeDataVectors();
  37.                Vector var4 = new Vector(var3);
  38.                Vector var5 = new Vector(var3);
  39.                this.runAttributes[0] = var4;
  40.                this.runAttributeValues[0] = var5;
  41.  
  42.                for(Map.Entry var7 : var2.entrySet()) {
  43.                   var4.addElement(var7.getKey());
  44.                   var5.addElement(var7.getValue());
  45.                }
  46.             }
  47.  
  48.          }
  49.       } else {
  50.          throw new NullPointerException();
  51.       }
  52.    }
  53.  
  54.    public AttributedString(AttributedCharacterIterator var1) {
  55.       this(var1, var1.getBeginIndex(), var1.getEndIndex(), (AttributedCharacterIterator.Attribute[])null);
  56.    }
  57.  
  58.    public AttributedString(AttributedCharacterIterator var1, int var2, int var3) {
  59.       this(var1, var2, var3, (AttributedCharacterIterator.Attribute[])null);
  60.    }
  61.  
  62.    public AttributedString(AttributedCharacterIterator var1, int var2, int var3, AttributedCharacterIterator.Attribute[] var4) {
  63.       if (var1 == null) {
  64.          throw new NullPointerException();
  65.       } else {
  66.          int var5 = var1.getBeginIndex();
  67.          int var6 = var1.getEndIndex();
  68.          if (var2 >= var5 && var3 <= var6 && var2 <= var3) {
  69.             StringBuffer var7 = new StringBuffer();
  70.             var1.setIndex(var2);
  71.  
  72.             for(char var8 = var1.current(); var1.getIndex() < var3; var8 = var1.next()) {
  73.                var7.append(var8);
  74.             }
  75.  
  76.             this.text = var7.toString();
  77.             if (var2 != var3) {
  78.                HashSet var9 = new HashSet();
  79.                if (var4 == null) {
  80.                   ((AbstractCollection)var9).addAll(var1.getAllAttributeKeys());
  81.                } else {
  82.                   for(int var10 = 0; var10 < var4.length; ++var10) {
  83.                      var9.add(var4[var10]);
  84.                   }
  85.  
  86.                   ((AbstractCollection)var9).retainAll(var1.getAllAttributeKeys());
  87.                }
  88.  
  89.                if (!var9.isEmpty()) {
  90.                   for(AttributedCharacterIterator.Attribute var11 : var9) {
  91.                      var1.setIndex(var5);
  92.  
  93.                      int var13;
  94.                      for(; var1.getIndex() < var3; var1.setIndex(var13)) {
  95.                         int var12 = var1.getRunStart(var11);
  96.                         var13 = var1.getRunLimit(var11);
  97.                         Object var14 = var1.getAttribute(var11);
  98.                         if (var14 != null) {
  99.                            if (var14 instanceof Annotation) {
  100.                               if (var12 >= var2 && var13 <= var3) {
  101.                                  this.addAttribute(var11, var14, var12 - var2, var13 - var2);
  102.                               } else if (var13 > var3) {
  103.                                  break;
  104.                               }
  105.                            } else {
  106.                               if (var12 >= var3) {
  107.                                  break;
  108.                               }
  109.  
  110.                               if (var13 > var2) {
  111.                                  if (var12 < var2) {
  112.                                     var12 = var2;
  113.                                  }
  114.  
  115.                                  if (var13 > var3) {
  116.                                     var13 = var3;
  117.                                  }
  118.  
  119.                                  if (var12 != var13) {
  120.                                     this.addAttribute(var11, var14, var12 - var2, var13 - var2);
  121.                                  }
  122.                               }
  123.                            }
  124.                         }
  125.                      }
  126.                   }
  127.  
  128.                }
  129.             }
  130.          } else {
  131.             throw new IllegalArgumentException("Invalid substring range");
  132.          }
  133.       }
  134.    }
  135.  
  136.    public void addAttribute(AttributedCharacterIterator.Attribute var1, Object var2) {
  137.       if (var1 == null) {
  138.          throw new NullPointerException();
  139.       } else {
  140.          int var3 = this.length();
  141.          if (var3 == 0) {
  142.             throw new IllegalArgumentException("Can't add attribute to 0-length text");
  143.          } else {
  144.             this.addAttributeImpl(var1, var2, 0, var3);
  145.          }
  146.       }
  147.    }
  148.  
  149.    public void addAttribute(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
  150.       if (var1 == null) {
  151.          throw new NullPointerException();
  152.       } else if (var3 >= 0 && var4 <= this.length() && var3 < var4) {
  153.          this.addAttributeImpl(var1, var2, var3, var4);
  154.       } else {
  155.          throw new IllegalArgumentException("Invalid substring range");
  156.       }
  157.    }
  158.  
  159.    public void addAttributes(Map var1, int var2, int var3) {
  160.       if (var1 == null) {
  161.          throw new NullPointerException();
  162.       } else if (var2 >= 0 && var3 <= this.length() && var2 <= var3) {
  163.          if (var2 == var3) {
  164.             if (!var1.isEmpty()) {
  165.                throw new IllegalArgumentException("Can't add attribute to 0-length text");
  166.             }
  167.          } else {
  168.             if (this.runCount == 0) {
  169.                this.createRunAttributeDataVectors();
  170.             }
  171.  
  172.             int var4 = this.ensureRunBreak(var2);
  173.             int var5 = this.ensureRunBreak(var3);
  174.  
  175.             for(Map.Entry var7 : var1.entrySet()) {
  176.                this.addAttributeRunData((AttributedCharacterIterator.Attribute)var7.getKey(), var7.getValue(), var4, var5);
  177.             }
  178.  
  179.          }
  180.       } else {
  181.          throw new IllegalArgumentException("Invalid substring range");
  182.       }
  183.    }
  184.  
  185.    private synchronized void addAttributeImpl(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
  186.       if (this.runCount == 0) {
  187.          this.createRunAttributeDataVectors();
  188.       }
  189.  
  190.       int var5 = this.ensureRunBreak(var3);
  191.       int var6 = this.ensureRunBreak(var4);
  192.       this.addAttributeRunData(var1, var2, var5, var6);
  193.    }
  194.  
  195.    private final void createRunAttributeDataVectors() {
  196.       int[] var1 = new int[10];
  197.       Vector[] var2 = new Vector[10];
  198.       Vector[] var3 = new Vector[10];
  199.       this.runStarts = var1;
  200.       this.runAttributes = var2;
  201.       this.runAttributeValues = var3;
  202.       this.runArraySize = 10;
  203.       this.runCount = 1;
  204.    }
  205.  
  206.    private final int ensureRunBreak(int var1) {
  207.       if (var1 == this.length()) {
  208.          return this.runCount;
  209.       } else {
  210.          int var2;
  211.          for(var2 = 0; var2 < this.runCount && this.runStarts[var2] < var1; ++var2) {
  212.          }
  213.  
  214.          if (var2 < this.runCount && this.runStarts[var2] == var1) {
  215.             return var2;
  216.          } else {
  217.             if (this.runCount == this.runArraySize) {
  218.                int var3 = this.runArraySize + 10;
  219.                int[] var4 = new int[var3];
  220.                Vector[] var5 = new Vector[var3];
  221.                Vector[] var6 = new Vector[var3];
  222.  
  223.                for(int var7 = 0; var7 < this.runArraySize; ++var7) {
  224.                   var4[var7] = this.runStarts[var7];
  225.                   var5[var7] = this.runAttributes[var7];
  226.                   var6[var7] = this.runAttributeValues[var7];
  227.                }
  228.  
  229.                this.runStarts = var4;
  230.                this.runAttributes = var5;
  231.                this.runAttributeValues = var6;
  232.                this.runArraySize = var3;
  233.             }
  234.  
  235.             Vector var8 = null;
  236.             Vector var9 = null;
  237.             Vector var10 = this.runAttributes[var2 - 1];
  238.             Vector var11 = this.runAttributeValues[var2 - 1];
  239.             if (var10 != null) {
  240.                var8 = (Vector)var10.clone();
  241.             }
  242.  
  243.             if (var11 != null) {
  244.                var9 = (Vector)var11.clone();
  245.             }
  246.  
  247.             ++this.runCount;
  248.  
  249.             for(int var12 = this.runCount - 1; var12 > var2; --var12) {
  250.                this.runStarts[var12] = this.runStarts[var12 - 1];
  251.                this.runAttributes[var12] = this.runAttributes[var12 - 1];
  252.                this.runAttributeValues[var12] = this.runAttributeValues[var12 - 1];
  253.             }
  254.  
  255.             this.runStarts[var2] = var1;
  256.             this.runAttributes[var2] = var8;
  257.             this.runAttributeValues[var2] = var9;
  258.             return var2;
  259.          }
  260.       }
  261.    }
  262.  
  263.    private void addAttributeRunData(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
  264.       for(int var5 = var3; var5 < var4; ++var5) {
  265.          int var6 = -1;
  266.          if (this.runAttributes[var5] == null) {
  267.             Vector var7 = new Vector();
  268.             Vector var8 = new Vector();
  269.             this.runAttributes[var5] = var7;
  270.             this.runAttributeValues[var5] = var8;
  271.          } else {
  272.             var6 = this.runAttributes[var5].indexOf(var1);
  273.          }
  274.  
  275.          if (var6 == -1) {
  276.             int var10 = this.runAttributes[var5].size();
  277.             this.runAttributes[var5].addElement(var1);
  278.  
  279.             try {
  280.                this.runAttributeValues[var5].addElement(var2);
  281.             } catch (Exception var9) {
  282.                this.runAttributes[var5].setSize(var10);
  283.                this.runAttributeValues[var5].setSize(var10);
  284.             }
  285.          } else {
  286.             this.runAttributeValues[var5].set(var6, var2);
  287.          }
  288.       }
  289.  
  290.    }
  291.  
  292.    public AttributedCharacterIterator getIterator() {
  293.       return this.getIterator((AttributedCharacterIterator.Attribute[])null, 0, this.length());
  294.    }
  295.  
  296.    public AttributedCharacterIterator getIterator(AttributedCharacterIterator.Attribute[] var1) {
  297.       return this.getIterator(var1, 0, this.length());
  298.    }
  299.  
  300.    public AttributedCharacterIterator getIterator(AttributedCharacterIterator.Attribute[] var1, int var2, int var3) {
  301.       return new AttributedStringIterator(this, var1, var2, var3);
  302.    }
  303.  
  304.    private int length() {
  305.       return this.text.length();
  306.    }
  307.  
  308.    private char charAt(int var1) {
  309.       return this.text.charAt(var1);
  310.    }
  311.  
  312.    private synchronized Object getAttribute(AttributedCharacterIterator.Attribute var1, int var2) {
  313.       Vector var3 = this.runAttributes[var2];
  314.       Vector var4 = this.runAttributeValues[var2];
  315.       if (var3 == null) {
  316.          return null;
  317.       } else {
  318.          int var5 = var3.indexOf(var1);
  319.          return var5 != -1 ? var4.elementAt(var5) : null;
  320.       }
  321.    }
  322.  
  323.    private Object getAttributeCheckRange(AttributedCharacterIterator.Attribute var1, int var2, int var3, int var4) {
  324.       Object var5 = this.getAttribute(var1, var2);
  325.       if (var5 instanceof Annotation) {
  326.          if (var3 > 0) {
  327.             int var6 = var2;
  328.  
  329.             int var7;
  330.             for(var7 = this.runStarts[var2]; var7 >= var3 && valuesMatch(var5, this.getAttribute(var1, var6 - 1)); var7 = this.runStarts[var6]) {
  331.                --var6;
  332.             }
  333.  
  334.             if (var7 < var3) {
  335.                return null;
  336.             }
  337.          }
  338.  
  339.          int var9 = this.length();
  340.          if (var4 < var9) {
  341.             int var10 = var2;
  342.  
  343.             int var8;
  344.             for(var8 = var2 < this.runCount - 1 ? this.runStarts[var2 + 1] : var9; var8 <= var4 && valuesMatch(var5, this.getAttribute(var1, var10 + 1)); var8 = var10 < this.runCount - 1 ? this.runStarts[var10 + 1] : var9) {
  345.                ++var10;
  346.             }
  347.  
  348.             if (var8 > var4) {
  349.                return null;
  350.             }
  351.          }
  352.       }
  353.  
  354.       return var5;
  355.    }
  356.  
  357.    private boolean attributeValuesMatch(Set var1, int var2, int var3) {
  358.       for(AttributedCharacterIterator.Attribute var5 : var1) {
  359.          if (!valuesMatch(this.getAttribute(var5, var2), this.getAttribute(var5, var3))) {
  360.             return false;
  361.          }
  362.       }
  363.  
  364.       return true;
  365.    }
  366.  
  367.    private static final boolean valuesMatch(Object var0, Object var1) {
  368.       if (var0 == null) {
  369.          return var1 == null;
  370.       } else {
  371.          return var0.equals(var1);
  372.       }
  373.    }
  374.  
  375.    // $FF: synthetic method
  376.    static int access$000(AttributedString var0) {
  377.       return var0.length();
  378.    }
  379.  
  380.    // $FF: synthetic method
  381.    static char access$100(AttributedString var0, int var1) {
  382.       return var0.charAt(var1);
  383.    }
  384.  
  385.    // $FF: synthetic method
  386.    static Object access$200(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2) {
  387.       return var0.getAttribute(var1, var2);
  388.    }
  389.  
  390.    // $FF: synthetic method
  391.    static boolean access$300(Object var0, Object var1) {
  392.       return valuesMatch(var0, var1);
  393.    }
  394.  
  395.    // $FF: synthetic method
  396.    static boolean access$400(AttributedString var0, Set var1, int var2, int var3) {
  397.       return var0.attributeValuesMatch(var1, var2, var3);
  398.    }
  399.  
  400.    // $FF: synthetic method
  401.    static Object access$500(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2, int var3, int var4) {
  402.       return var0.getAttributeCheckRange(var1, var2, var3, var4);
  403.    }
  404. }
  405.