home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.util.AbstractCollection;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- import java.util.Vector;
-
- public class AttributedString {
- private static final int ARRAY_SIZE_INCREMENT = 10;
- String text;
- int runArraySize;
- int runCount;
- int[] runStarts;
- Vector[] runAttributes;
- Vector[] runAttributeValues;
-
- public AttributedString(String var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- this.text = var1;
- }
- }
-
- public AttributedString(String var1, Map var2) {
- if (var1 != null && var2 != null) {
- this.text = var1;
- if (var1.length() == 0) {
- if (!var2.isEmpty()) {
- throw new IllegalArgumentException("Can't add attribute to 0-length text");
- }
- } else {
- int var3 = var2.size();
- if (var3 > 0) {
- this.createRunAttributeDataVectors();
- Vector var4 = new Vector(var3);
- Vector var5 = new Vector(var3);
- this.runAttributes[0] = var4;
- this.runAttributeValues[0] = var5;
-
- for(Map.Entry var7 : var2.entrySet()) {
- var4.addElement(var7.getKey());
- var5.addElement(var7.getValue());
- }
- }
-
- }
- } else {
- throw new NullPointerException();
- }
- }
-
- public AttributedString(AttributedCharacterIterator var1) {
- this(var1, var1.getBeginIndex(), var1.getEndIndex(), (AttributedCharacterIterator.Attribute[])null);
- }
-
- public AttributedString(AttributedCharacterIterator var1, int var2, int var3) {
- this(var1, var2, var3, (AttributedCharacterIterator.Attribute[])null);
- }
-
- public AttributedString(AttributedCharacterIterator var1, int var2, int var3, AttributedCharacterIterator.Attribute[] var4) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- int var5 = var1.getBeginIndex();
- int var6 = var1.getEndIndex();
- if (var2 >= var5 && var3 <= var6 && var2 <= var3) {
- StringBuffer var7 = new StringBuffer();
- var1.setIndex(var2);
-
- for(char var8 = var1.current(); var1.getIndex() < var3; var8 = var1.next()) {
- var7.append(var8);
- }
-
- this.text = var7.toString();
- if (var2 != var3) {
- HashSet var9 = new HashSet();
- if (var4 == null) {
- ((AbstractCollection)var9).addAll(var1.getAllAttributeKeys());
- } else {
- for(int var10 = 0; var10 < var4.length; ++var10) {
- var9.add(var4[var10]);
- }
-
- ((AbstractCollection)var9).retainAll(var1.getAllAttributeKeys());
- }
-
- if (!var9.isEmpty()) {
- for(AttributedCharacterIterator.Attribute var11 : var9) {
- var1.setIndex(var5);
-
- int var13;
- for(; var1.getIndex() < var3; var1.setIndex(var13)) {
- int var12 = var1.getRunStart(var11);
- var13 = var1.getRunLimit(var11);
- Object var14 = var1.getAttribute(var11);
- if (var14 != null) {
- if (var14 instanceof Annotation) {
- if (var12 >= var2 && var13 <= var3) {
- this.addAttribute(var11, var14, var12 - var2, var13 - var2);
- } else if (var13 > var3) {
- break;
- }
- } else {
- if (var12 >= var3) {
- break;
- }
-
- if (var13 > var2) {
- if (var12 < var2) {
- var12 = var2;
- }
-
- if (var13 > var3) {
- var13 = var3;
- }
-
- if (var12 != var13) {
- this.addAttribute(var11, var14, var12 - var2, var13 - var2);
- }
- }
- }
- }
- }
- }
-
- }
- }
- } else {
- throw new IllegalArgumentException("Invalid substring range");
- }
- }
- }
-
- public void addAttribute(AttributedCharacterIterator.Attribute var1, Object var2) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- int var3 = this.length();
- if (var3 == 0) {
- throw new IllegalArgumentException("Can't add attribute to 0-length text");
- } else {
- this.addAttributeImpl(var1, var2, 0, var3);
- }
- }
- }
-
- public void addAttribute(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
- if (var1 == null) {
- throw new NullPointerException();
- } else if (var3 >= 0 && var4 <= this.length() && var3 < var4) {
- this.addAttributeImpl(var1, var2, var3, var4);
- } else {
- throw new IllegalArgumentException("Invalid substring range");
- }
- }
-
- public void addAttributes(Map var1, int var2, int var3) {
- if (var1 == null) {
- throw new NullPointerException();
- } else if (var2 >= 0 && var3 <= this.length() && var2 <= var3) {
- if (var2 == var3) {
- if (!var1.isEmpty()) {
- throw new IllegalArgumentException("Can't add attribute to 0-length text");
- }
- } else {
- if (this.runCount == 0) {
- this.createRunAttributeDataVectors();
- }
-
- int var4 = this.ensureRunBreak(var2);
- int var5 = this.ensureRunBreak(var3);
-
- for(Map.Entry var7 : var1.entrySet()) {
- this.addAttributeRunData((AttributedCharacterIterator.Attribute)var7.getKey(), var7.getValue(), var4, var5);
- }
-
- }
- } else {
- throw new IllegalArgumentException("Invalid substring range");
- }
- }
-
- private synchronized void addAttributeImpl(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
- if (this.runCount == 0) {
- this.createRunAttributeDataVectors();
- }
-
- int var5 = this.ensureRunBreak(var3);
- int var6 = this.ensureRunBreak(var4);
- this.addAttributeRunData(var1, var2, var5, var6);
- }
-
- private final void createRunAttributeDataVectors() {
- int[] var1 = new int[10];
- Vector[] var2 = new Vector[10];
- Vector[] var3 = new Vector[10];
- this.runStarts = var1;
- this.runAttributes = var2;
- this.runAttributeValues = var3;
- this.runArraySize = 10;
- this.runCount = 1;
- }
-
- private final int ensureRunBreak(int var1) {
- if (var1 == this.length()) {
- return this.runCount;
- } else {
- int var2;
- for(var2 = 0; var2 < this.runCount && this.runStarts[var2] < var1; ++var2) {
- }
-
- if (var2 < this.runCount && this.runStarts[var2] == var1) {
- return var2;
- } else {
- if (this.runCount == this.runArraySize) {
- int var3 = this.runArraySize + 10;
- int[] var4 = new int[var3];
- Vector[] var5 = new Vector[var3];
- Vector[] var6 = new Vector[var3];
-
- for(int var7 = 0; var7 < this.runArraySize; ++var7) {
- var4[var7] = this.runStarts[var7];
- var5[var7] = this.runAttributes[var7];
- var6[var7] = this.runAttributeValues[var7];
- }
-
- this.runStarts = var4;
- this.runAttributes = var5;
- this.runAttributeValues = var6;
- this.runArraySize = var3;
- }
-
- Vector var8 = null;
- Vector var9 = null;
- Vector var10 = this.runAttributes[var2 - 1];
- Vector var11 = this.runAttributeValues[var2 - 1];
- if (var10 != null) {
- var8 = (Vector)var10.clone();
- }
-
- if (var11 != null) {
- var9 = (Vector)var11.clone();
- }
-
- ++this.runCount;
-
- for(int var12 = this.runCount - 1; var12 > var2; --var12) {
- this.runStarts[var12] = this.runStarts[var12 - 1];
- this.runAttributes[var12] = this.runAttributes[var12 - 1];
- this.runAttributeValues[var12] = this.runAttributeValues[var12 - 1];
- }
-
- this.runStarts[var2] = var1;
- this.runAttributes[var2] = var8;
- this.runAttributeValues[var2] = var9;
- return var2;
- }
- }
- }
-
- private void addAttributeRunData(AttributedCharacterIterator.Attribute var1, Object var2, int var3, int var4) {
- for(int var5 = var3; var5 < var4; ++var5) {
- int var6 = -1;
- if (this.runAttributes[var5] == null) {
- Vector var7 = new Vector();
- Vector var8 = new Vector();
- this.runAttributes[var5] = var7;
- this.runAttributeValues[var5] = var8;
- } else {
- var6 = this.runAttributes[var5].indexOf(var1);
- }
-
- if (var6 == -1) {
- int var10 = this.runAttributes[var5].size();
- this.runAttributes[var5].addElement(var1);
-
- try {
- this.runAttributeValues[var5].addElement(var2);
- } catch (Exception var9) {
- this.runAttributes[var5].setSize(var10);
- this.runAttributeValues[var5].setSize(var10);
- }
- } else {
- this.runAttributeValues[var5].set(var6, var2);
- }
- }
-
- }
-
- public AttributedCharacterIterator getIterator() {
- return this.getIterator((AttributedCharacterIterator.Attribute[])null, 0, this.length());
- }
-
- public AttributedCharacterIterator getIterator(AttributedCharacterIterator.Attribute[] var1) {
- return this.getIterator(var1, 0, this.length());
- }
-
- public AttributedCharacterIterator getIterator(AttributedCharacterIterator.Attribute[] var1, int var2, int var3) {
- return new AttributedStringIterator(this, var1, var2, var3);
- }
-
- private int length() {
- return this.text.length();
- }
-
- private char charAt(int var1) {
- return this.text.charAt(var1);
- }
-
- private synchronized Object getAttribute(AttributedCharacterIterator.Attribute var1, int var2) {
- Vector var3 = this.runAttributes[var2];
- Vector var4 = this.runAttributeValues[var2];
- if (var3 == null) {
- return null;
- } else {
- int var5 = var3.indexOf(var1);
- return var5 != -1 ? var4.elementAt(var5) : null;
- }
- }
-
- private Object getAttributeCheckRange(AttributedCharacterIterator.Attribute var1, int var2, int var3, int var4) {
- Object var5 = this.getAttribute(var1, var2);
- if (var5 instanceof Annotation) {
- if (var3 > 0) {
- int var6 = var2;
-
- int var7;
- for(var7 = this.runStarts[var2]; var7 >= var3 && valuesMatch(var5, this.getAttribute(var1, var6 - 1)); var7 = this.runStarts[var6]) {
- --var6;
- }
-
- if (var7 < var3) {
- return null;
- }
- }
-
- int var9 = this.length();
- if (var4 < var9) {
- int var10 = var2;
-
- int var8;
- 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) {
- ++var10;
- }
-
- if (var8 > var4) {
- return null;
- }
- }
- }
-
- return var5;
- }
-
- private boolean attributeValuesMatch(Set var1, int var2, int var3) {
- for(AttributedCharacterIterator.Attribute var5 : var1) {
- if (!valuesMatch(this.getAttribute(var5, var2), this.getAttribute(var5, var3))) {
- return false;
- }
- }
-
- return true;
- }
-
- private static final boolean valuesMatch(Object var0, Object var1) {
- if (var0 == null) {
- return var1 == null;
- } else {
- return var0.equals(var1);
- }
- }
-
- // $FF: synthetic method
- static int access$000(AttributedString var0) {
- return var0.length();
- }
-
- // $FF: synthetic method
- static char access$100(AttributedString var0, int var1) {
- return var0.charAt(var1);
- }
-
- // $FF: synthetic method
- static Object access$200(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2) {
- return var0.getAttribute(var1, var2);
- }
-
- // $FF: synthetic method
- static boolean access$300(Object var0, Object var1) {
- return valuesMatch(var0, var1);
- }
-
- // $FF: synthetic method
- static boolean access$400(AttributedString var0, Set var1, int var2, int var3) {
- return var0.attributeValuesMatch(var1, var2, var3);
- }
-
- // $FF: synthetic method
- static Object access$500(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2, int var3, int var4) {
- return var0.getAttributeCheckRange(var1, var2, var3, var4);
- }
- }
-