home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / CollateFrame.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-03-13  |  13.1 KB  |  637 lines

  1. import java.awt.BorderLayout;
  2. import java.awt.Button;
  3. import java.awt.Checkbox;
  4. import java.awt.CheckboxGroup;
  5. import java.awt.Choice;
  6. import java.awt.Color;
  7. import java.awt.Component;
  8. import java.awt.Container;
  9. import java.awt.Event;
  10. import java.awt.FlowLayout;
  11. import java.awt.Font;
  12. import java.awt.Frame;
  13. import java.awt.GridBagConstraints;
  14. import java.awt.GridBagLayout;
  15. import java.awt.GridLayout;
  16. import java.awt.Label;
  17. import java.awt.Panel;
  18. import java.awt.TextArea;
  19. import java.awt.TextField;
  20. import java.awt.Window;
  21. import java.awt.event.ActionEvent;
  22. import java.awt.event.ActionListener;
  23. import java.awt.event.ItemEvent;
  24. import java.awt.event.ItemListener;
  25. import java.awt.event.KeyEvent;
  26. import java.awt.event.KeyListener;
  27. import java.awt.event.WindowEvent;
  28. import java.awt.event.WindowListener;
  29. import java.text.Collator;
  30. import java.text.ParseException;
  31. import java.text.RuleBasedCollator;
  32. import java.util.EventObject;
  33. import java.util.Locale;
  34. import java.util.Vector;
  35.  
  36. class CollateFrame extends Frame implements WindowListener, ActionListener, ItemListener, KeyListener {
  37.    private static StringBuffer oneChar = new StringBuffer(7);
  38.    private static final String zeros = "0000";
  39.    private static final String creditString = "v1.1a7, Demo";
  40.    private static final String copyrightString = "";
  41.    private static final String copyrightString2 = "";
  42.    private static int MAX_COLLATIONS = 12;
  43.    private int untitledIndex = 1;
  44.    private static final int FIELD_COLUMNS = 45;
  45.    private static final Font editFont = new Font("TimesRoman", 0, 18);
  46.    private static final Font ruleFont = new Font("TimesRoman", 1, 14);
  47.    private static final boolean DEBUG = false;
  48.    private TextArea textentry = new TextArea(10, 10);
  49.    private TextArea ruleEntry = new TextArea(10, 20);
  50.    private Vector textList = new Vector(15, 10);
  51.    private Choice localeChoice;
  52.    private static final String no_decomposition = "None";
  53.    private static final String canonical_decomposition = "Canonical";
  54.    private static final String full_decomposition = "Full";
  55.    private Choice decompChoice;
  56.    private static final String tertiary = "Tertiary - a vs. A";
  57.    private static final String secondary = "Secondary - a vs. ├á";
  58.    private static final String primary = "Primary - a vs. b";
  59.    private Choice strengthChoice;
  60.    private Locale theLocale;
  61.    private Collator theCollation;
  62.    private Locale[] locales;
  63.    private Collator[] collations;
  64.    private String[] ruleStrings;
  65.    private Label errorMsg = new Label("", 0);
  66.    CheckboxGroup checkboxes;
  67.    Checkbox sortAscending;
  68.    Checkbox sortDescending;
  69.    Checkbox noSort;
  70.    Button collateRulesButton;
  71.    TextField collationName;
  72.    private DemoApplet applet;
  73.  
  74.    public CollateFrame(DemoApplet var1) {
  75.       super("Collate Demo");
  76.       this.applet = var1;
  77.       ((Window)this).addWindowListener(this);
  78.       this.init();
  79.       this.start();
  80.    }
  81.  
  82.    public boolean action(Event var1, Object var2) {
  83.       return false;
  84.    }
  85.  
  86.    public void init() {
  87.       this.theLocale = Locale.US;
  88.       this.theCollation = Collator.getInstance(this.theLocale);
  89.       this.buildGUI();
  90.    }
  91.  
  92.    public void start() {
  93.    }
  94.  
  95.    public void itemStateChanged(ItemEvent var1) {
  96.       this.errorText("");
  97.       if (((EventObject)var1).getSource() == this.sortAscending) {
  98.          this.handleSort(true, false);
  99.       } else if (((EventObject)var1).getSource() == this.sortDescending) {
  100.          this.handleSort(false, true);
  101.       } else if (((EventObject)var1).getSource() == this.localeChoice) {
  102.          this.handleLocale();
  103.          this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
  104.       } else if (((EventObject)var1).getSource() == this.decompChoice) {
  105.          this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
  106.       } else {
  107.          if (((EventObject)var1).getSource() == this.strengthChoice) {
  108.             this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
  109.          }
  110.  
  111.       }
  112.    }
  113.  
  114.    public void keyPressed(KeyEvent var1) {
  115.       if (((EventObject)var1).getSource() == this.textentry) {
  116.          this.checkboxes.setSelectedCheckbox(this.noSort);
  117.       }
  118.  
  119.    }
  120.  
  121.    public void keyReleased(KeyEvent var1) {
  122.    }
  123.  
  124.    public void keyTyped(KeyEvent var1) {
  125.    }
  126.  
  127.    public void actionPerformed(ActionEvent var1) {
  128.       if (((EventObject)var1).getSource() == this.collateRulesButton) {
  129.          this.errorText("");
  130.          this.collateRulesButton.setLabel("setting");
  131.          this.handleSetRules();
  132.          this.collateRulesButton.setLabel("Set Rules");
  133.          this.handleSort(this.sortAscending.getState(), this.sortDescending.getState());
  134.       }
  135.  
  136.    }
  137.  
  138.    public void windowClosed(WindowEvent var1) {
  139.    }
  140.  
  141.    public void windowDeiconified(WindowEvent var1) {
  142.    }
  143.  
  144.    public void windowIconified(WindowEvent var1) {
  145.    }
  146.  
  147.    public void windowActivated(WindowEvent var1) {
  148.    }
  149.  
  150.    public void windowDeactivated(WindowEvent var1) {
  151.    }
  152.  
  153.    public void windowOpened(WindowEvent var1) {
  154.    }
  155.  
  156.    public void windowClosing(WindowEvent var1) {
  157.       ((Component)this).setVisible(false);
  158.       ((Frame)this).dispose();
  159.       if (this.applet != null) {
  160.          this.applet.demoClosed();
  161.       } else {
  162.          System.exit(0);
  163.       }
  164.    }
  165.  
  166.    public boolean handleSort(boolean var1, boolean var2) {
  167.       if (var1 == var2) {
  168.          return true;
  169.       } else {
  170.          int var3 = var1 ? -1 : 1;
  171.          this.InitializeListVector();
  172.          String var7 = this.strengthChoice.getSelectedItem();
  173.          if (var7.equals("Tertiary - a vs. A")) {
  174.             this.theCollation.setStrength(2);
  175.          } else if (var7.equals("Secondary - a vs. ├á")) {
  176.             this.theCollation.setStrength(1);
  177.          } else {
  178.             this.theCollation.setStrength(0);
  179.          }
  180.  
  181.          int var8 = this.decompChoice.getSelectedIndex();
  182.          if (var8 == 0) {
  183.             this.theCollation.setDecomposition(0);
  184.          } else if (var8 == 1) {
  185.             this.theCollation.setDecomposition(1);
  186.          } else {
  187.             this.theCollation.setDecomposition(2);
  188.          }
  189.  
  190.          int var9 = this.textList.size();
  191.  
  192.          for(int var10 = 1; var10 < var9; ++var10) {
  193.             String var5 = (String)this.textList.elementAt(var10);
  194.  
  195.             for(int var11 = 0; var11 < var10; ++var11) {
  196.                String var4 = (String)this.textList.elementAt(var11);
  197.                byte var6 = (byte)this.theCollation.compare(var5, var4);
  198.                if (var6 == var3) {
  199.                   this.textList.removeElementAt(var10);
  200.                   this.textList.insertElementAt(var5, var11);
  201.                   break;
  202.                }
  203.             }
  204.          }
  205.  
  206.          this.resetTextArea();
  207.          return true;
  208.       }
  209.    }
  210.  
  211.    public boolean handleLocale() {
  212.       int var1 = this.localeChoice.getSelectedIndex();
  213.       this.theCollation = this.collations[var1];
  214.       String var2 = this.ruleStrings[var1];
  215.       if (var2 != null) {
  216.          this.ruleEntry.setText(this.createUnicodeString(((RuleBasedCollator)this.theCollation).getRules()));
  217.       } else {
  218.          this.ruleEntry.setText("");
  219.       }
  220.  
  221.       return true;
  222.    }
  223.  
  224.    public void handleSetRules() {
  225.       int var1 = this.localeChoice.getSelectedIndex();
  226.       String var2 = this.ruleEntry.getText();
  227.       if (!var2.equals(this.ruleStrings[var1]) && this.theCollation instanceof RuleBasedCollator) {
  228.          int var3 = 0;
  229.  
  230.          try {
  231.             String var4 = this.collationName.getText();
  232.  
  233.             for(int var5 = 0; var5 < this.localeChoice.getItemCount(); ++var5) {
  234.                if (var4.equals(this.localeChoice.getItem(var5))) {
  235.                   this.theCollation = new RuleBasedCollator(this.convertStringToRules(var2));
  236.                   this.collations[var5] = this.theCollation;
  237.                   var3 = var5;
  238.                   break;
  239.                }
  240.             }
  241.  
  242.             if (var3 == 0) {
  243.                if (var4.startsWith("custom-")) {
  244.                   ++this.untitledIndex;
  245.                }
  246.  
  247.                if (this.localeChoice.getItemCount() >= MAX_COLLATIONS) {
  248.                   throw new ParseException("Max # exceeded!Please replace an existing one.", 0);
  249.                }
  250.  
  251.                var3 = this.localeChoice.getItemCount();
  252.                this.theCollation = new RuleBasedCollator(this.convertStringToRules(var2));
  253.                this.collations[var3] = this.theCollation;
  254.                this.localeChoice.addItem(var4);
  255.             }
  256.  
  257.             this.localeChoice.select(var3);
  258.             this.ruleStrings[var3] = var2;
  259.             this.ruleEntry.setText(this.createUnicodeString(((RuleBasedCollator)this.theCollation).getRules()));
  260.             if (this.localeChoice.getItemCount() < MAX_COLLATIONS) {
  261.                this.collationName.setText("custom-" + this.untitledIndex);
  262.                return;
  263.             }
  264.          } catch (ParseException var6) {
  265.             this.collateRulesButton.setLabel("Set Rules");
  266.             this.errorText(((Throwable)var6).getMessage());
  267.             return;
  268.          }
  269.       }
  270.  
  271.    }
  272.  
  273.    public void loadCollationTables() {
  274.       MAX_COLLATIONS = this.locales.length + 10;
  275.       this.collations = new Collator[MAX_COLLATIONS];
  276.       this.ruleStrings = new String[MAX_COLLATIONS];
  277.  
  278.       for(int var1 = 0; var1 < this.locales.length; ++var1) {
  279.          Locale var2 = this.locales[var1];
  280.          Collator var3 = null;
  281.  
  282.          int var4;
  283.          for(var4 = 0; var4 < var1; ++var4) {
  284.             if (var2.getLanguage() == this.locales[var4].getLanguage()) {
  285.                var3 = this.collations[var4];
  286.                break;
  287.             }
  288.          }
  289.  
  290.          if (var3 == null) {
  291.             this.collations[var1] = Collator.getInstance(var2);
  292.             if (this.collations[var1] instanceof RuleBasedCollator) {
  293.                String var5 = ((RuleBasedCollator)this.collations[var1]).getRules();
  294.                this.ruleStrings[var1] = this.createUnicodeString(var5);
  295.             }
  296.          } else {
  297.             this.collations[var1] = var3;
  298.             this.ruleStrings[var1] = this.ruleStrings[var4];
  299.          }
  300.       }
  301.  
  302.    }
  303.  
  304.    Panel makePanel(Component var1, Component var2) {
  305.       Panel var3 = new Panel();
  306.       GridBagLayout var4 = new GridBagLayout();
  307.       GridBagConstraints var5 = new GridBagConstraints();
  308.       ((Container)var3).setLayout(var4);
  309.       var5.anchor = 18;
  310.       var5.gridwidth = 0;
  311.       var4.setConstraints(var1, var5);
  312.       var5.gridheight = 0;
  313.       var4.setConstraints(var2, var5);
  314.       ((Container)var3).add(var1);
  315.       ((Container)var3).add(var2);
  316.       return var3;
  317.    }
  318.  
  319.    void addWithFont(Container var1, Component var2, Font var3) {
  320.       if (var3 != null) {
  321.          var2.setFont(var3);
  322.       }
  323.  
  324.       var1.add(var2);
  325.    }
  326.  
  327.    void buildGUI() {
  328.       ((Component)this).setBackground(Color.white);
  329.       ((Container)this).setLayout(new BorderLayout());
  330.       Label var1 = new Label("Collate Demo", 1);
  331.       ((Component)var1).setFont(Utility.titleFont);
  332.       Label var2 = new Label("v1.1a7, Demo", 1);
  333.       ((Component)var2).setFont(Utility.creditFont);
  334.       Panel var3 = new Panel();
  335.       ((Container)var3).add(var1);
  336.       ((Container)var3).add(var2);
  337.       Utility.fixGrid(var3, 1);
  338.       ((Container)this).add("North", var3);
  339.       this.checkboxes = new CheckboxGroup();
  340.       this.sortAscending = new Checkbox("Sort Ascending", this.checkboxes, false);
  341.       this.sortAscending.addItemListener(this);
  342.       this.sortAscending.setFont(Utility.choiceFont);
  343.       this.sortAscending.setSize(100, 20);
  344.       this.sortDescending = new Checkbox("Sort Descending", this.checkboxes, false);
  345.       this.sortDescending.addItemListener(this);
  346.       this.sortDescending.setSize(100, 20);
  347.       this.sortDescending.setFont(Utility.choiceFont);
  348.       this.noSort = new Checkbox("Not Sorted", this.checkboxes, true);
  349.       this.noSort.setFont(Utility.choiceFont);
  350.       this.noSort.setSize(100, 20);
  351.       Panel var4 = new Panel();
  352.       ((Container)var4).setLayout(new GridLayout(3, 1, 0, 0));
  353.       ((Container)var4).add(this.sortAscending);
  354.       ((Container)var4).add(this.sortDescending);
  355.       ((Container)var4).add(this.noSort);
  356.       new Locale("", "", "");
  357.       Label var5 = new Label("Locale:   ");
  358.       ((Component)var5).setFont(Utility.choiceFont);
  359.       this.localeChoice = new Choice();
  360.       this.localeChoice.addItemListener(this);
  361.       this.locales = Utility.getG7Locales();
  362.       Object var6 = null;
  363.       Locale var18 = Locale.getDefault();
  364.       int var7 = 0;
  365.  
  366.       for(int var8 = 0; var8 < this.locales.length; ++var8) {
  367.          if (this.locales[var8].getCountry().length() > 0) {
  368.             this.localeChoice.addItem(this.locales[var8].getDisplayName());
  369.             if (this.locales[var8].equals(var18)) {
  370.                var7 = var8;
  371.             }
  372.          }
  373.       }
  374.  
  375.       this.localeChoice.setFont(Utility.choiceFont);
  376.       this.loadCollationTables();
  377.       this.localeChoice.select(var7);
  378.       Panel var9 = new Panel();
  379.       ((Container)var9).setLayout(new FlowLayout(0, 0, 0));
  380.       ((Container)var9).add(this.localeChoice);
  381.       Label var10 = new Label("Decomposition Mode:");
  382.       ((Component)var10).setFont(Utility.labelFont);
  383.       this.decompChoice = new Choice();
  384.       this.decompChoice.addItemListener(this);
  385.       this.decompChoice.addItem("None");
  386.       this.decompChoice.addItem("Canonical");
  387.       this.decompChoice.addItem("Full");
  388.       this.decompChoice.select("Canonical");
  389.       this.decompChoice.setFont(Utility.choiceFont);
  390.       Panel var11 = new Panel();
  391.       ((Container)var11).setLayout(new FlowLayout(0, 0, 0));
  392.       ((Container)var11).add(this.decompChoice);
  393.       Label var12 = new Label("Strength:");
  394.       ((Component)var12).setFont(Utility.labelFont);
  395.       this.strengthChoice = new Choice();
  396.       this.strengthChoice.addItemListener(this);
  397.       this.strengthChoice.addItem("Tertiary - a vs. A");
  398.       this.strengthChoice.addItem("Secondary - a vs. ├á");
  399.       this.strengthChoice.addItem("Primary - a vs. b");
  400.       this.strengthChoice.setFont(Utility.choiceFont);
  401.       Panel var13 = new Panel();
  402.       ((Container)var13).setLayout(new FlowLayout(0, 0, 0));
  403.       ((Container)var13).add(this.strengthChoice);
  404.       Panel var14 = new Panel();
  405.       ((Container)var14).add(var4);
  406.       ((Container)var14).add(new Label(" "));
  407.       ((Container)var14).add(var5);
  408.       ((Container)var14).add(var9);
  409.       ((Container)var14).add(var10);
  410.       ((Container)var14).add(var11);
  411.       ((Container)var14).add(var12);
  412.       ((Container)var14).add(var13);
  413.       Utility.fixGrid(var14, 1);
  414.       this.textentry.addKeyListener(this);
  415.       this.textentry.setFont(editFont);
  416.       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");
  417.       Panel var15 = new Panel();
  418.       new Panel();
  419.       if (this.theCollation instanceof RuleBasedCollator) {
  420.          String var16 = ((RuleBasedCollator)this.theCollation).getRules();
  421.          this.ruleEntry.setFont(ruleFont);
  422.          this.ruleEntry.setText(this.createUnicodeString(var16));
  423.       }
  424.  
  425.       ((Container)var15).add(new Label("Collator Rules", 0));
  426.       ((Container)var15).add(this.ruleEntry);
  427.       this.collateRulesButton = new Button("Set Rules");
  428.       this.collateRulesButton.addActionListener(this);
  429.       this.collationName = new TextField(10);
  430.       this.collationName.setText("custom-" + this.untitledIndex);
  431.       ((Container)var15).add(this.collateRulesButton);
  432.       ((Container)var15).add(new Label("Collator Name", 0));
  433.       ((Container)var15).add(this.collationName);
  434.       Utility.fixGrid(var15, 1);
  435.       Panel var19 = new Panel();
  436.       ((Container)var19).add(this.textentry);
  437.       ((Container)var19).add(var14);
  438.       ((Container)var19).add(var15);
  439.       this.errorMsg.setFont(Utility.labelFont);
  440.       ((Container)var19).add(this.errorMsg);
  441.       Utility.fixGrid(var19, 3);
  442.       ((Container)this).add("Center", var19);
  443.       Panel var17 = new Panel();
  444.       ((Container)var17).setLayout(new GridLayout(2, 1, 0, 0));
  445.       this.addWithFont(var17, new Label("", 0), Utility.creditFont);
  446.       this.addWithFont(var17, new Label("", 0), Utility.creditFont);
  447.       Utility.fixGrid(var17, 1);
  448.       ((Container)this).add("South", var17);
  449.    }
  450.  
  451.    private void InitializeListVector() {
  452.       this.textList.removeAllElements();
  453.       String var1 = this.textentry.getText();
  454.       char[] var2 = var1.toCharArray();
  455.  
  456.       for(int var3 = 0; var3 < var2.length; ++var3) {
  457.          var2[var3] = (char)(var2[var3] & 255);
  458.       }
  459.  
  460.       var1 = new String(var2);
  461.       int var5 = 0;
  462.  
  463.       for(int var6 = 0; var6 < var1.length(); ++var6) {
  464.          char var7 = var1.charAt(var6);
  465.          if (var7 == '\n' || var7 == '\r') {
  466.             if (var6 > var5) {
  467.                String var4 = var1.substring(var5, var6);
  468.                this.textList.addElement(var4);
  469.             }
  470.  
  471.             var5 = var6 + 1;
  472.          }
  473.       }
  474.  
  475.       if (var5 < var1.length()) {
  476.          String var9 = var1.substring(var5, var1.length());
  477.          this.textList.addElement(var9);
  478.       }
  479.  
  480.    }
  481.  
  482.    private void resetTextArea() {
  483.       String var1 = new String();
  484.  
  485.       int var2;
  486.       for(var2 = 0; var2 < this.textList.size() - 1; ++var2) {
  487.          var1 = var1.concat((String)this.textList.elementAt(var2));
  488.          var1 = var1.concat("\n");
  489.       }
  490.  
  491.       var1 = var1.concat((String)this.textList.elementAt(var2));
  492.       this.textentry.setText(var1);
  493.       this.textList.removeAllElements();
  494.    }
  495.  
  496.    private void errorText(String var1) {
  497.       if (!var1.equals(this.errorMsg.getText())) {
  498.          this.errorMsg.setText(var1);
  499.          this.errorMsg.setSize(300, 50);
  500.       }
  501.  
  502.    }
  503.  
  504.    private String makeDisplayString(char var1) {
  505.       oneChar.setLength(0);
  506.       if (var1 >= ' ' && (var1 <= '}' || var1 >= 160) && var1 <= 255) {
  507.          oneChar.append(var1);
  508.       } else {
  509.          String var2 = Integer.toString(var1, 16).toUpperCase();
  510.          oneChar.append(var2);
  511.          if (var2.length() < 4) {
  512.             oneChar.append("0000".substring(0, 4 - var2.length()));
  513.          }
  514.       }
  515.  
  516.       return oneChar.toString();
  517.    }
  518.  
  519.    private String createUnicodeString(String var1) {
  520.       StringBuffer var2 = new StringBuffer(var1.length());
  521.       int var3 = 0;
  522.  
  523.       for(int var4 = 0; var4 < var1.length(); ++var4) {
  524.          char var5 = var1.charAt(var4);
  525.          switch (var5) {
  526.             case '\n':
  527.                break;
  528.             case '&':
  529.             case '<':
  530.                var2.append('\n');
  531.                var2.append(var5);
  532.                var2.append(' ');
  533.                var3 = 0;
  534.                var3 += 2;
  535.                break;
  536.             case '\'':
  537.                int var6 = 0;
  538.                var2.append(var5);
  539.                ++var4;
  540.                var5 = var1.charAt(var4);
  541.  
  542.                for(; var5 != '\'' && var4 < var1.length() - 1; var5 = var1.charAt(var4)) {
  543.                   String var7 = this.makeDisplayString(var5);
  544.                   ++var6;
  545.                   ++var4;
  546.                   if (var7.length() > 1) {
  547.                      var2.append("\\u");
  548.                      var2.append(var7);
  549.                      var3 += 6;
  550.                   } else {
  551.                      var2.append(var7);
  552.                      ++var3;
  553.                   }
  554.                }
  555.  
  556.                if (var6 == 0) {
  557.                   var2.append('\'');
  558.                   ++var6;
  559.                   ++var4;
  560.                   var5 = var1.charAt(var4);
  561.                }
  562.  
  563.                var2.append(var5);
  564.                var3 += var6;
  565.                break;
  566.             case ',':
  567.                var2.append(' ');
  568.                var2.append(var5);
  569.                var3 += 2;
  570.                break;
  571.             case ';':
  572.             case '=':
  573.                if (var3 > 15) {
  574.                   var2.append('\n');
  575.                   var3 = 0;
  576.                }
  577.  
  578.                var2.append(' ');
  579.                var2.append(var5);
  580.                var3 += 2;
  581.                break;
  582.             default:
  583.                String var10 = this.makeDisplayString(var5);
  584.                if (var10.length() > 1) {
  585.                   var2.append("\\u");
  586.                   var2.append(var10);
  587.                   var3 += 6;
  588.                } else {
  589.                   var2.append(var10);
  590.                   ++var3;
  591.                }
  592.          }
  593.       }
  594.  
  595.       return var2.toString();
  596.    }
  597.  
  598.    private String convertStringToRules(String var1) {
  599.       StringBuffer var2 = new StringBuffer(var1.length());
  600.  
  601.       for(int var3 = 0; var3 < var1.length(); ++var3) {
  602.          char var4 = (char)(var1.charAt(var3) & 255);
  603.          switch (var4) {
  604.             case '\n':
  605.                break;
  606.             case '\'':
  607.                if (var3 + 6 < var1.length() && var1.charAt(var3 + 2) == 'u') {
  608.                   String var6 = var1.substring(var3 + 3, var3 + 7);
  609.                   if (var6.equals("005c")) {
  610.                      var2.append("'\\u005c'");
  611.                   } else {
  612.                      var2.append((char)Integer.parseInt(var6, 16));
  613.                   }
  614.  
  615.                   var3 += 7;
  616.                } else {
  617.                   var2.append(var4);
  618.                }
  619.                break;
  620.             case '\\':
  621.                if (var3 + 5 < var1.length() && var1.charAt(var3 + 1) == 'u') {
  622.                   String var5 = var1.substring(var3 + 2, var3 + 6);
  623.                   var2.append((char)Integer.parseInt(var5, 16));
  624.                   var3 += 6;
  625.                } else {
  626.                   var2.append(var4);
  627.                }
  628.                break;
  629.             default:
  630.                var2.append(var4);
  631.          }
  632.       }
  633.  
  634.       return var2.toString();
  635.    }
  636. }
  637.