home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- 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;
-
- AttributedString(AttributedCharacterIterator[] var1) {
- if (var1 == null) {
- throw new NullPointerException("Iterators must not be null");
- } else {
- if (var1.length == 0) {
- this.text = "";
- } else {
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- this.appendContents(var2, var1[var3]);
- }
-
- this.text = var2.toString();
- if (this.text.length() > 0) {
- int var11 = 0;
- Map var4 = null;
-
- for(int var5 = 0; var5 < var1.length; ++var5) {
- AttributedCharacterIterator var6 = var1[var5];
- int var7 = var6.getBeginIndex();
- int var8 = var6.getEndIndex();
-
- for(int var9 = var7; var9 < var8; var9 = var6.getRunLimit()) {
- var6.setIndex(var9);
- Map var10 = var6.getAttributes();
- if (mapsDiffer(var4, var10)) {
- this.setAttributes(var10, var9 - var7 + var11);
- }
-
- var4 = var10;
- }
-
- var11 += var8 - var7;
- }
- }
- }
-
- }
- }
-
- public AttributedString(String var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- this.text = var1;
- }
- }
-
- public AttributedString(String var1, Map<? extends AttributedCharacterIterator.Attribute, ?> 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 var14 = new HashSet();
- if (var4 == null) {
- var14.addAll(var1.getAllAttributeKeys());
- } else {
- for(int var9 = 0; var9 < var4.length; ++var9) {
- var14.add(var4[var9]);
- }
-
- var14.retainAll(var1.getAllAttributeKeys());
- }
-
- if (!var14.isEmpty()) {
- for(AttributedCharacterIterator.Attribute var10 : var14) {
- var1.setIndex(var5);
-
- int var12;
- for(; var1.getIndex() < var3; var1.setIndex(var12)) {
- int var11 = var1.getRunStart(var10);
- var12 = var1.getRunLimit(var10);
- Object var13 = var1.getAttribute(var10);
- if (var13 != null) {
- if (var13 instanceof Annotation) {
- if (var11 >= var2 && var12 <= var3) {
- this.addAttribute(var10, var13, var11 - var2, var12 - var2);
- } else if (var12 > var3) {
- break;
- }
- } else {
- if (var11 >= var3) {
- break;
- }
-
- if (var12 > var2) {
- if (var11 < var2) {
- var11 = var2;
- }
-
- if (var12 > var3) {
- var12 = var3;
- }
-
- if (var11 != var12) {
- this.addAttribute(var10, var13, var11 - var2, var12 - 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<? extends AttributedCharacterIterator.Attribute, ?> 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) {
- return this.ensureRunBreak(var1, true);
- }
-
- private final int ensureRunBreak(int var1, boolean var2) {
- if (var1 == this.length()) {
- return this.runCount;
- } else {
- int var3;
- for(var3 = 0; var3 < this.runCount && this.runStarts[var3] < var1; ++var3) {
- }
-
- if (var3 < this.runCount && this.runStarts[var3] == var1) {
- return var3;
- } else {
- if (this.runCount == this.runArraySize) {
- int var4 = this.runArraySize + 10;
- int[] var5 = new int[var4];
- Vector[] var6 = new Vector[var4];
- Vector[] var7 = new Vector[var4];
-
- for(int var8 = 0; var8 < this.runArraySize; ++var8) {
- var5[var8] = this.runStarts[var8];
- var6[var8] = this.runAttributes[var8];
- var7[var8] = this.runAttributeValues[var8];
- }
-
- this.runStarts = var5;
- this.runAttributes = var6;
- this.runAttributeValues = var7;
- this.runArraySize = var4;
- }
-
- Vector var9 = null;
- Vector var10 = null;
- if (var2) {
- Vector var11 = this.runAttributes[var3 - 1];
- Vector var13 = this.runAttributeValues[var3 - 1];
- if (var11 != null) {
- var9 = (Vector)var11.clone();
- }
-
- if (var13 != null) {
- var10 = (Vector)var13.clone();
- }
- }
-
- ++this.runCount;
-
- for(int var12 = this.runCount - 1; var12 > var3; --var12) {
- this.runStarts[var12] = this.runStarts[var12 - 1];
- this.runAttributes[var12] = this.runAttributes[var12 - 1];
- this.runAttributeValues[var12] = this.runAttributeValues[var12 - 1];
- }
-
- this.runStarts[var3] = var1;
- this.runAttributes[var3] = var9;
- this.runAttributeValues[var3] = var10;
- return var3;
- }
- }
- }
-
- 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);
- }
-
- 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);
- }
- }
-
- private final void appendContents(StringBuffer var1, CharacterIterator var2) {
- int var3 = var2.getBeginIndex();
- int var4 = var2.getEndIndex();
-
- while(var3 < var4) {
- var2.setIndex(var3++);
- var1.append(var2.current());
- }
-
- }
-
- private void setAttributes(Map var1, int var2) {
- if (this.runCount == 0) {
- this.createRunAttributeDataVectors();
- }
-
- int var3 = this.ensureRunBreak(var2, false);
- int var4;
- if (var1 != null && (var4 = var1.size()) > 0) {
- Vector var5 = new Vector(var4);
- Vector var6 = new Vector(var4);
-
- for(Map.Entry var8 : var1.entrySet()) {
- var5.add(var8.getKey());
- var6.add(var8.getValue());
- }
-
- this.runAttributes[var3] = var5;
- this.runAttributeValues[var3] = var6;
- }
-
- }
-
- private static boolean mapsDiffer(Map var0, Map var1) {
- if (var0 != null) {
- return !var0.equals(var1);
- } else {
- return var1 != null && var1.size() > 0;
- }
- }
-
- // $FF: synthetic method
- static char access$000(AttributedString var0, int var1) {
- return var0.charAt(var1);
- }
-
- // $FF: synthetic method
- static Object access$100(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2) {
- return var0.getAttribute(var1, var2);
- }
-
- // $FF: synthetic method
- static boolean access$200(Object var0, Object var1) {
- return valuesMatch(var0, var1);
- }
-
- // $FF: synthetic method
- static boolean access$300(AttributedString var0, Set var1, int var2, int var3) {
- return var0.attributeValuesMatch(var1, var2, var3);
- }
-
- // $FF: synthetic method
- static Object access$400(AttributedString var0, AttributedCharacterIterator.Attribute var1, int var2, int var3, int var4) {
- return var0.getAttributeCheckRange(var1, var2, var3, var4);
- }
- }
-