home *** CD-ROM | disk | FTP | other *** search
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.Checkbox;
- import java.awt.CheckboxGroup;
- import java.awt.Choice;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Event;
- import java.awt.FlowLayout;
- import java.awt.Font;
- import java.awt.Frame;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.GridLayout;
- import java.awt.Label;
- import java.awt.Panel;
- import java.awt.TextArea;
- import java.awt.TextField;
- import java.awt.Window;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.ItemEvent;
- import java.awt.event.ItemListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.event.WindowEvent;
- import java.awt.event.WindowListener;
- import java.text.Collator;
- import java.text.ParseException;
- import java.text.RuleBasedCollator;
- import java.util.EventObject;
- import java.util.Locale;
- import java.util.Vector;
-
- class CollateFrame extends Frame implements WindowListener, ActionListener, ItemListener, KeyListener {
- private static StringBuffer oneChar = new StringBuffer(7);
- private static final String zeros = "0000";
- private static final String creditString = "v1.1a7, Demo";
- private static final String copyrightString = "";
- private static final String copyrightString2 = "";
- private static int MAX_COLLATIONS = 12;
- private int untitledIndex = 1;
- private static final int FIELD_COLUMNS = 45;
- private static final Font editFont = new Font("TimesRoman", 0, 18);
- private static final Font ruleFont = new Font("TimesRoman", 1, 14);
- private static final boolean DEBUG = false;
- private TextArea textentry = new TextArea(10, 10);
- private TextArea ruleEntry = new TextArea(10, 20);
- private Vector textList = new Vector(15, 10);
- private Choice localeChoice;
- private static final String no_decomposition = "None";
- private static final String canonical_decomposition = "Canonical";
- private static final String full_decomposition = "Full";
- private Choice decompChoice;
- private static final String tertiary = "Tertiary - a vs. A";
- private static final String secondary = "Secondary - a vs. à";
- private static final String primary = "Primary - a vs. b";
- private Choice strengthChoice;
- private Locale theLocale;
- private Collator theCollation;
- private Locale[] locales;
- private Collator[] collations;
- private String[] ruleStrings;
- private Label errorMsg = new Label("", 0);
- CheckboxGroup checkboxes;
- Checkbox sortAscending;
- Checkbox sortDescending;
- Checkbox noSort;
- Button collateRulesButton;
- TextField collationName;
- private DemoApplet applet;
-
- public CollateFrame(DemoApplet var1) {
- super("Collate Demo");
- this.applet = var1;
- ((Window)this).addWindowListener(this);
- this.init();
- this.start();
- }
-
- public boolean action(Event var1, Object var2) {
- return false;
- }
-
- public void init() {
- this.theLocale = Locale.US;
- this.theCollation = Collator.getInstance(this.theLocale);
- this.buildGUI();
- }
-
- public void start() {
- }
-
- public void itemStateChanged(ItemEvent var1) {
- this.errorText("");
- if (((EventObject)var1).getSource() == this.sortAscending) {
- this.handleSort(true, false);
- } else if (((EventObject)var1).getSource() == this.sortDescending) {
- this.handleSort(false, true);
- } else if (((EventObject)var1).getSource() == this.localeChoice) {
- this.handleLocale();
- this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
- } else if (((EventObject)var1).getSource() == this.decompChoice) {
- this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
- } else {
- if (((EventObject)var1).getSource() == this.strengthChoice) {
- this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
- }
-
- }
- }
-
- public void keyPressed(KeyEvent var1) {
- if (((EventObject)var1).getSource() == this.textentry) {
- this.checkboxes.setSelectedCheckbox(this.noSort);
- }
-
- }
-
- public void keyReleased(KeyEvent var1) {
- }
-
- public void keyTyped(KeyEvent var1) {
- }
-
- public void actionPerformed(ActionEvent var1) {
- if (((EventObject)var1).getSource() == this.collateRulesButton) {
- this.errorText("");
- this.collateRulesButton.setLabel("setting");
- this.handleSetRules();
- this.collateRulesButton.setLabel("Set Rules");
- this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
- }
-
- }
-
- public void windowClosed(WindowEvent var1) {
- }
-
- public void windowDeiconified(WindowEvent var1) {
- }
-
- public void windowIconified(WindowEvent var1) {
- }
-
- public void windowActivated(WindowEvent var1) {
- }
-
- public void windowDeactivated(WindowEvent var1) {
- }
-
- public void windowOpened(WindowEvent var1) {
- }
-
- public void windowClosing(WindowEvent var1) {
- ((Component)this).setVisible(false);
- ((Frame)this).dispose();
- if (this.applet != null) {
- this.applet.demoClosed();
- } else {
- System.exit(0);
- }
- }
-
- public boolean handleSort(boolean var1, boolean var2) {
- if (var1 == var2) {
- return true;
- } else {
- int var3 = var1 ? -1 : 1;
- this.InitializeListVector();
- String var7 = this.strengthChoice.getSelectedItem();
- if (var7.equals("Tertiary - a vs. A")) {
- this.theCollation.setStrength(2);
- } else if (var7.equals("Secondary - a vs. à")) {
- this.theCollation.setStrength(1);
- } else {
- this.theCollation.setStrength(0);
- }
-
- int var8 = this.decompChoice.getSelectedIndex();
- if (var8 == 0) {
- this.theCollation.setDecomposition(0);
- } else if (var8 == 1) {
- this.theCollation.setDecomposition(1);
- } else {
- this.theCollation.setDecomposition(2);
- }
-
- int var9 = this.textList.size();
-
- for(int var10 = 1; var10 < var9; ++var10) {
- String var5 = (String)this.textList.elementAt(var10);
-
- for(int var11 = 0; var11 < var10; ++var11) {
- String var4 = (String)this.textList.elementAt(var11);
- byte var6 = (byte)this.theCollation.compare(var5, var4);
- if (var6 == var3) {
- this.textList.removeElementAt(var10);
- this.textList.insertElementAt(var5, var11);
- break;
- }
- }
- }
-
- this.resetTextArea();
- return true;
- }
- }
-
- public boolean handleLocale() {
- int var1 = this.localeChoice.getSelectedIndex();
- this.theCollation = this.collations[var1];
- String var2 = this.ruleStrings[var1];
- if (var2 != null) {
- this.ruleEntry.setText(this.createUnicodeString(((RuleBasedCollator)this.theCollation).getRules()));
- } else {
- this.ruleEntry.setText("");
- }
-
- return true;
- }
-
- public void handleSetRules() {
- int var1 = this.localeChoice.getSelectedIndex();
- String var2 = this.ruleEntry.getText();
- if (!var2.equals(this.ruleStrings[var1]) && this.theCollation instanceof RuleBasedCollator) {
- int var3 = 0;
-
- try {
- String var4 = this.collationName.getText();
-
- for(int var5 = 0; var5 < this.localeChoice.getItemCount(); ++var5) {
- if (var4.equals(this.localeChoice.getItem(var5))) {
- this.theCollation = new RuleBasedCollator(this.convertStringToRules(var2));
- this.collations[var5] = this.theCollation;
- var3 = var5;
- break;
- }
- }
-
- if (var3 == 0) {
- if (var4.startsWith("custom-")) {
- ++this.untitledIndex;
- }
-
- if (this.localeChoice.getItemCount() >= MAX_COLLATIONS) {
- throw new ParseException("Max # exceeded!Please replace an existing one.", 0);
- }
-
- var3 = this.localeChoice.getItemCount();
- this.theCollation = new RuleBasedCollator(this.convertStringToRules(var2));
- this.collations[var3] = this.theCollation;
- this.localeChoice.addItem(var4);
- }
-
- this.localeChoice.select(var3);
- this.ruleStrings[var3] = var2;
- this.ruleEntry.setText(this.createUnicodeString(((RuleBasedCollator)this.theCollation).getRules()));
- if (this.localeChoice.getItemCount() < MAX_COLLATIONS) {
- this.collationName.setText("custom-" + this.untitledIndex);
- return;
- }
- } catch (ParseException var6) {
- this.collateRulesButton.setLabel("Set Rules");
- this.errorText(((Throwable)var6).getMessage());
- return;
- }
- }
-
- }
-
- public void loadCollationTables() {
- MAX_COLLATIONS = this.locales.length + 10;
- this.collations = new Collator[MAX_COLLATIONS];
- this.ruleStrings = new String[MAX_COLLATIONS];
-
- for(int var1 = 0; var1 < this.locales.length; ++var1) {
- Locale var2 = this.locales[var1];
- Collator var3 = null;
-
- int var4;
- for(var4 = 0; var4 < var1; ++var4) {
- if (var2.getLanguage() == this.locales[var4].getLanguage()) {
- var3 = this.collations[var4];
- break;
- }
- }
-
- if (var3 == null) {
- this.collations[var1] = Collator.getInstance(var2);
- if (this.collations[var1] instanceof RuleBasedCollator) {
- String var5 = ((RuleBasedCollator)this.collations[var1]).getRules();
- this.ruleStrings[var1] = this.createUnicodeString(var5);
- }
- } else {
- this.collations[var1] = var3;
- this.ruleStrings[var1] = this.ruleStrings[var4];
- }
- }
-
- }
-
- Panel makePanel(Component var1, Component var2) {
- Panel var3 = new Panel();
- GridBagLayout var4 = new GridBagLayout();
- GridBagConstraints var5 = new GridBagConstraints();
- ((Container)var3).setLayout(var4);
- var5.anchor = 18;
- var5.gridwidth = 0;
- var4.setConstraints(var1, var5);
- var5.gridheight = 0;
- var4.setConstraints(var2, var5);
- ((Container)var3).add(var1);
- ((Container)var3).add(var2);
- return var3;
- }
-
- void addWithFont(Container var1, Component var2, Font var3) {
- if (var3 != null) {
- var2.setFont(var3);
- }
-
- var1.add(var2);
- }
-
- void buildGUI() {
- ((Component)this).setBackground(Color.white);
- ((Container)this).setLayout(new BorderLayout());
- Label var1 = new Label("Collate Demo", 1);
- ((Component)var1).setFont(Utility.titleFont);
- Label var2 = new Label("v1.1a7, Demo", 1);
- ((Component)var2).setFont(Utility.creditFont);
- Panel var3 = new Panel();
- ((Container)var3).add(var1);
- ((Container)var3).add(var2);
- Utility.fixGrid(var3, 1);
- ((Container)this).add("North", var3);
- this.checkboxes = new CheckboxGroup();
- this.sortAscending = new Checkbox("Sort Ascending", this.checkboxes, false);
- this.sortAscending.addItemListener(this);
- this.sortAscending.setFont(Utility.choiceFont);
- this.sortAscending.setSize(100, 20);
- this.sortDescending = new Checkbox("Sort Descending", this.checkboxes, false);
- this.sortDescending.addItemListener(this);
- this.sortDescending.setSize(100, 20);
- this.sortDescending.setFont(Utility.choiceFont);
- this.noSort = new Checkbox("Not Sorted", this.checkboxes, true);
- this.noSort.setFont(Utility.choiceFont);
- this.noSort.setSize(100, 20);
- Panel var4 = new Panel();
- ((Container)var4).setLayout(new GridLayout(3, 1, 0, 0));
- ((Container)var4).add(this.sortAscending);
- ((Container)var4).add(this.sortDescending);
- ((Container)var4).add(this.noSort);
- new Locale("", "", "");
- Label var5 = new Label("Locale: ");
- ((Component)var5).setFont(Utility.choiceFont);
- this.localeChoice = new Choice();
- this.localeChoice.addItemListener(this);
- this.locales = Utility.getG7Locales();
- Object var6 = null;
- Locale var18 = Locale.getDefault();
- int var7 = 0;
-
- for(int var8 = 0; var8 < this.locales.length; ++var8) {
- if (this.locales[var8].getCountry().length() > 0) {
- this.localeChoice.addItem(this.locales[var8].getDisplayName());
- if (this.locales[var8].equals(var18)) {
- var7 = var8;
- }
- }
- }
-
- this.localeChoice.setFont(Utility.choiceFont);
- this.loadCollationTables();
- this.localeChoice.select(var7);
- Panel var9 = new Panel();
- ((Container)var9).setLayout(new FlowLayout(0, 0, 0));
- ((Container)var9).add(this.localeChoice);
- Label var10 = new Label("Decomposition Mode:");
- ((Component)var10).setFont(Utility.labelFont);
- this.decompChoice = new Choice();
- this.decompChoice.addItemListener(this);
- this.decompChoice.addItem("None");
- this.decompChoice.addItem("Canonical");
- this.decompChoice.addItem("Full");
- this.decompChoice.select("Canonical");
- this.decompChoice.setFont(Utility.choiceFont);
- Panel var11 = new Panel();
- ((Container)var11).setLayout(new FlowLayout(0, 0, 0));
- ((Container)var11).add(this.decompChoice);
- Label var12 = new Label("Strength:");
- ((Component)var12).setFont(Utility.labelFont);
- this.strengthChoice = new Choice();
- this.strengthChoice.addItemListener(this);
- this.strengthChoice.addItem("Tertiary - a vs. A");
- this.strengthChoice.addItem("Secondary - a vs. à");
- this.strengthChoice.addItem("Primary - a vs. b");
- this.strengthChoice.setFont(Utility.choiceFont);
- Panel var13 = new Panel();
- ((Container)var13).setLayout(new FlowLayout(0, 0, 0));
- ((Container)var13).add(this.strengthChoice);
- Panel var14 = new Panel();
- ((Container)var14).add(var4);
- ((Container)var14).add(new Label(" "));
- ((Container)var14).add(var5);
- ((Container)var14).add(var9);
- ((Container)var14).add(var10);
- ((Container)var14).add(var11);
- ((Container)var14).add(var12);
- ((Container)var14).add(var13);
- Utility.fixGrid(var14, 1);
- this.textentry.addKeyListener(this);
- this.textentry.setFont(editFont);
- this.textentry.setText("black-birds\nPat\npéché\npêche\npécher\npêcher\nTod\nTöne\nTofu\nblackbirds\nTon\nPAT\nblackbird\nblack-bird\npat\n");
- Panel var15 = new Panel();
- new Panel();
- if (this.theCollation instanceof RuleBasedCollator) {
- String var16 = ((RuleBasedCollator)this.theCollation).getRules();
- this.ruleEntry.setFont(ruleFont);
- this.ruleEntry.setText(this.createUnicodeString(var16));
- }
-
- ((Container)var15).add(new Label("Collator Rules", 0));
- ((Container)var15).add(this.ruleEntry);
- this.collateRulesButton = new Button("Set Rules");
- this.collateRulesButton.addActionListener(this);
- this.collationName = new TextField(10);
- this.collationName.setText("custom-" + this.untitledIndex);
- ((Container)var15).add(this.collateRulesButton);
- ((Container)var15).add(new Label("Collator Name", 0));
- ((Container)var15).add(this.collationName);
- Utility.fixGrid(var15, 1);
- Panel var19 = new Panel();
- ((Container)var19).add(this.textentry);
- ((Container)var19).add(var14);
- ((Container)var19).add(var15);
- this.errorMsg.setFont(Utility.labelFont);
- ((Container)var19).add(this.errorMsg);
- Utility.fixGrid(var19, 3);
- ((Container)this).add("Center", var19);
- Panel var17 = new Panel();
- ((Container)var17).setLayout(new GridLayout(2, 1, 0, 0));
- this.addWithFont(var17, new Label("", 0), Utility.creditFont);
- this.addWithFont(var17, new Label("", 0), Utility.creditFont);
- Utility.fixGrid(var17, 1);
- ((Container)this).add("South", var17);
- }
-
- private void InitializeListVector() {
- this.textList.removeAllElements();
- String var1 = this.textentry.getText();
- char[] var2 = var1.toCharArray();
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- var2[var3] = (char)(var2[var3] & 255);
- }
-
- var1 = new String(var2);
- int var5 = 0;
-
- for(int var6 = 0; var6 < var1.length(); ++var6) {
- char var7 = var1.charAt(var6);
- if (var7 == '\n' || var7 == '\r') {
- if (var6 > var5) {
- String var4 = var1.substring(var5, var6);
- this.textList.addElement(var4);
- }
-
- var5 = var6 + 1;
- }
- }
-
- if (var5 < var1.length()) {
- String var9 = var1.substring(var5, var1.length());
- this.textList.addElement(var9);
- }
-
- }
-
- private void resetTextArea() {
- String var1 = new String();
-
- int var2;
- for(var2 = 0; var2 < this.textList.size() - 1; ++var2) {
- var1 = var1.concat((String)this.textList.elementAt(var2));
- var1 = var1.concat("\n");
- }
-
- var1 = var1.concat((String)this.textList.elementAt(var2));
- this.textentry.setText(var1);
- this.textList.removeAllElements();
- }
-
- private void errorText(String var1) {
- if (!var1.equals(this.errorMsg.getText())) {
- this.errorMsg.setText(var1);
- this.errorMsg.setSize(300, 50);
- }
-
- }
-
- private String makeDisplayString(char var1) {
- oneChar.setLength(0);
- if (var1 >= ' ' && (var1 <= '}' || var1 >= 160) && var1 <= 255) {
- oneChar.append(var1);
- } else {
- String var2 = Integer.toString(var1, 16).toUpperCase();
- oneChar.append(var2);
- if (var2.length() < 4) {
- oneChar.append("0000".substring(0, 4 - var2.length()));
- }
- }
-
- return oneChar.toString();
- }
-
- private String createUnicodeString(String var1) {
- StringBuffer var2 = new StringBuffer(var1.length());
- int var3 = 0;
-
- for(int var4 = 0; var4 < var1.length(); ++var4) {
- char var5 = var1.charAt(var4);
- switch (var5) {
- case '\n':
- break;
- case '&':
- case '<':
- var2.append('\n');
- var2.append(var5);
- var2.append(' ');
- var3 = 0;
- var3 += 2;
- break;
- case '\'':
- int var6 = 0;
- var2.append(var5);
- ++var4;
- var5 = var1.charAt(var4);
-
- for(; var5 != '\'' && var4 < var1.length() - 1; var5 = var1.charAt(var4)) {
- String var7 = this.makeDisplayString(var5);
- ++var6;
- ++var4;
- if (var7.length() > 1) {
- var2.append("\\u");
- var2.append(var7);
- var3 += 6;
- } else {
- var2.append(var7);
- ++var3;
- }
- }
-
- if (var6 == 0) {
- var2.append('\'');
- ++var6;
- ++var4;
- var5 = var1.charAt(var4);
- }
-
- var2.append(var5);
- var3 += var6;
- break;
- case ',':
- var2.append(' ');
- var2.append(var5);
- var3 += 2;
- break;
- case ';':
- case '=':
- if (var3 > 15) {
- var2.append('\n');
- var3 = 0;
- }
-
- var2.append(' ');
- var2.append(var5);
- var3 += 2;
- break;
- default:
- String var10 = this.makeDisplayString(var5);
- if (var10.length() > 1) {
- var2.append("\\u");
- var2.append(var10);
- var3 += 6;
- } else {
- var2.append(var10);
- ++var3;
- }
- }
- }
-
- return var2.toString();
- }
-
- private String convertStringToRules(String var1) {
- StringBuffer var2 = new StringBuffer(var1.length());
-
- for(int var3 = 0; var3 < var1.length(); ++var3) {
- char var4 = (char)(var1.charAt(var3) & 255);
- switch (var4) {
- case '\n':
- break;
- case '\'':
- if (var3 + 6 < var1.length() && var1.charAt(var3 + 2) == 'u') {
- String var6 = var1.substring(var3 + 3, var3 + 7);
- if (var6.equals("005c")) {
- var2.append("'\\u005c'");
- } else {
- var2.append((char)Integer.parseInt(var6, 16));
- }
-
- var3 += 7;
- } else {
- var2.append(var4);
- }
- break;
- case '\\':
- if (var3 + 5 < var1.length() && var1.charAt(var3 + 1) == 'u') {
- String var5 = var1.substring(var3 + 2, var3 + 6);
- var2.append((char)Integer.parseInt(var5, 16));
- var3 += 6;
- } else {
- var2.append(var4);
- }
- break;
- default:
- var2.append(var4);
- }
- }
-
- return var2.toString();
- }
- }
-