home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.util.Vector;
-
- final class MergeCollation {
- Vector patterns = new Vector();
- PatternEntry lastEntry;
- private byte[] statusArray = new byte[8192];
- private PatternEntry saveEntry;
- private int lastIndex = -1;
- private Vector extList;
- private final byte BITARRAYMASK = 1;
- private final int BYTEPOWER = 3;
- private final int BYTEMASK = 7;
-
- public MergeCollation(String var1) throws ParseException {
- for(int var2 = 0; var2 < this.statusArray.length; ++var2) {
- this.statusArray[var2] = 0;
- }
-
- this.setPattern(var1);
- }
-
- public String getPattern() {
- return this.getPattern(true);
- }
-
- public String getPattern(boolean var1) {
- StringBuffer var2 = new StringBuffer();
- Object var3 = null;
-
- int var4;
- for(var4 = 0; var4 < this.patterns.size(); ++var4) {
- PatternEntry var5 = (PatternEntry)this.patterns.elementAt(var4);
- if (var5.extension.length() != 0) {
- if (this.extList == null) {
- this.extList = new Vector();
- }
-
- this.extList.insertElementAt(var5, this.extList.size());
- } else {
- if (this.extList != null) {
- PatternEntry var6 = this.findLastWithNoExtension(var4 - 1);
-
- for(int var7 = this.extList.size() - 1; var7 >= 0; --var7) {
- PatternEntry var8 = (PatternEntry)this.extList.elementAt(var7);
- var8.addToBuffer(var2, false, var1, var6);
- }
-
- this.extList = null;
- }
-
- var5.addToBuffer(var2, false, var1, (PatternEntry)null);
- }
- }
-
- if (this.extList != null) {
- PatternEntry var10 = this.findLastWithNoExtension(var4 - 1);
-
- for(int var11 = this.extList.size() - 1; var11 >= 0; --var11) {
- PatternEntry var9 = (PatternEntry)this.extList.elementAt(var11);
- var9.addToBuffer(var2, false, var1, var10);
- }
-
- this.extList = null;
- }
-
- return var2.toString();
- }
-
- public String emitPattern() {
- return this.emitPattern(true);
- }
-
- public String emitPattern(boolean var1) {
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 0; var3 < this.patterns.size(); ++var3) {
- PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
- if (var4 != null) {
- var4.addToBuffer(var2, true, var1, (PatternEntry)null);
- }
- }
-
- return var2.toString();
- }
-
- public void setPattern(String var1) throws ParseException {
- this.patterns.removeAllElements();
- this.addPattern(var1);
- }
-
- public void addPattern(String var1) throws ParseException {
- if (var1 != null) {
- int var2 = 0;
-
- while(true) {
- PatternEntry var3 = new PatternEntry();
- var2 = var3.getNextEntry(var1, var2);
- if (var2 < 0) {
- return;
- }
-
- this.fixEntry(var3);
- }
- }
- }
-
- public int getCount() {
- return this.patterns.size();
- }
-
- public PatternEntry getItemAt(int var1) {
- return (PatternEntry)this.patterns.elementAt(var1);
- }
-
- private final PatternEntry findLastWithNoExtension(int var1) {
- --var1;
-
- while(var1 >= 0) {
- PatternEntry var2 = (PatternEntry)this.patterns.elementAt(var1);
- if (var2.extension.length() == 0) {
- return var2;
- }
-
- --var1;
- }
-
- return null;
- }
-
- private final void fixEntry(PatternEntry var1) throws ParseException {
- boolean var2 = true;
- if (var1.strength != -2) {
- int var3 = -1;
- boolean var4 = false;
- byte var5 = 0;
- byte var6 = 0;
- if (var1.chars.length() != 1) {
- var3 = this.patterns.indexOf(var1);
- if (var3 != -1) {
- this.patterns.removeElementAt(var3);
- }
- } else {
- var3 = var1.chars.charAt(0) >> 3;
- var5 = this.statusArray[var3];
- var6 = (byte)(1 << (var1.chars.charAt(0) & 7));
- if (var5 != 0 && (var5 & var6) != 0) {
- var3 = -1;
- boolean var7 = false;
-
- for(int var10 = this.patterns.size() - 1; var10 >= 0; --var10) {
- PatternEntry var8 = (PatternEntry)this.patterns.elementAt(var10);
- if (var8 != null && var8.chars.equals(var1.chars)) {
- var3 = var10;
- break;
- }
- }
-
- if (var3 != -1) {
- this.patterns.removeElementAt(var3);
- } else {
- System.out.println("FAILED SEARCH FOR value " + var1.chars);
- }
-
- this.lastIndex = this.patterns.indexOf(this.lastEntry);
- } else {
- var4 = true;
- }
- }
-
- StringBuffer var11 = new StringBuffer();
- this.lastIndex = this.findLastEntry(this.lastEntry, var11);
- if (var4) {
- this.statusArray[var3] = (byte)(var5 | var6);
- }
-
- if (var11.length() != 0) {
- var1.extension = var11 + var1.extension;
- if (this.lastIndex != this.patterns.size()) {
- this.lastEntry = this.saveEntry;
- var2 = false;
- }
- }
-
- if (this.lastIndex == this.patterns.size()) {
- this.patterns.addElement(var1);
- this.saveEntry = var1;
- } else {
- this.patterns.insertElementAt(var1, this.lastIndex);
- this.lastEntry = this.saveEntry;
- }
- }
-
- if (var2) {
- this.lastEntry = var1;
- } else {
- this.lastIndex = this.patterns.indexOf(this.lastEntry);
- }
- }
-
- private final int findLastEntry(PatternEntry var1, StringBuffer var2) throws ParseException {
- if (var1 == null) {
- return 0;
- } else if (var1.strength != -2) {
- int var5 = -1;
- if (var1.chars.length() == 1) {
- int var6 = var1.chars.charAt(0) >> 3;
- if ((this.statusArray[var6] & 1 << (var1.chars.charAt(0) & 7)) != 0) {
- var5 = this.lastIndex;
- }
- } else {
- var5 = this.patterns.indexOf(var1);
- }
-
- if (var5 == -1) {
- throw new ParseException("couldn't find last entry: " + var1, var5);
- } else {
- return var5 + 1;
- }
- } else {
- int var3;
- for(var3 = this.patterns.size() - 1; var3 >= 0; --var3) {
- PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
- if (var4.chars.regionMatches(0, var1.chars, 0, var4.chars.length())) {
- var2.append(var1.chars.substring(var4.chars.length(), var1.chars.length()));
- break;
- }
- }
-
- if (var3 == -1) {
- throw new ParseException("couldn't find: " + var1, var3);
- } else {
- return var3 + 1;
- }
- }
- }
- }
-