home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2001 October / PCpro_2001_10.ISO / xml / xmlpro / data1.cab / Program_Executable_FILES / xmlpro.jar / XMLPro.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-09-15  |  33.9 KB  |  1,469 lines

  1. import COM.objectspace.jgl.Array;
  2. import com.ibm.xml.parser.AttDef;
  3. import com.ibm.xml.parser.DTD;
  4. import com.ibm.xml.parser.ElementDecl;
  5. import com.ibm.xml.parser.EntityDecl;
  6. import com.ibm.xml.parser.TXDocument;
  7. import java.awt.AWTEvent;
  8. import java.awt.Color;
  9. import java.awt.Component;
  10. import java.awt.Dialog;
  11. import java.awt.Dimension;
  12. import java.awt.FileDialog;
  13. import java.awt.Font;
  14. import java.awt.Frame;
  15. import java.awt.Graphics;
  16. import java.awt.Point;
  17. import java.awt.Toolkit;
  18. import java.awt.Window;
  19. import java.awt.event.WindowEvent;
  20. import java.awt.event.WindowListener;
  21. import java.awt.print.PageFormat;
  22. import java.awt.print.Printable;
  23. import java.awt.print.PrinterException;
  24. import java.awt.print.PrinterJob;
  25. import java.io.EOFException;
  26. import java.io.File;
  27. import java.io.FileOutputStream;
  28. import java.io.IOException;
  29. import java.io.LineNumberReader;
  30. import java.io.OutputStreamWriter;
  31. import java.io.StringReader;
  32. import java.io.StringWriter;
  33. import java.net.MalformedURLException;
  34. import java.net.URL;
  35. import java.util.Enumeration;
  36. import java.util.Hashtable;
  37. import java.util.StringTokenizer;
  38. import java.util.Vector;
  39. import javax.help.CSH;
  40. import javax.help.HelpBroker;
  41. import javax.help.HelpSet;
  42. import javax.swing.AbstractButton;
  43. import javax.swing.ImageIcon;
  44. import javax.swing.JComponent;
  45. import javax.swing.JFrame;
  46. import javax.swing.JMenu;
  47. import javax.swing.JMenuBar;
  48. import javax.swing.JMenuItem;
  49. import javax.swing.JPanel;
  50. import javax.swing.JScrollPane;
  51. import javax.swing.JSplitPane;
  52. import javax.swing.JToolBar;
  53. import javax.swing.UIManager;
  54. import javax.swing.border.CompoundBorder;
  55. import javax.swing.border.EmptyBorder;
  56. import javax.swing.border.EtchedBorder;
  57. import javax.swing.text.JTextComponent;
  58. import javax.swing.tree.DefaultMutableTreeNode;
  59. import javax.swing.tree.DefaultTreeModel;
  60. import javax.swing.tree.TreeNode;
  61. import javax.swing.tree.TreePath;
  62. import org.w3c.dom.Attr;
  63. import org.w3c.dom.Element;
  64. import org.w3c.dom.NamedNodeMap;
  65. import org.w3c.dom.Node;
  66. import org.w3c.dom.NodeList;
  67. import org.xml.sax.SAXException;
  68. import vervet.VervetLookAndFeel;
  69.  
  70. public class XMLPro extends JFrame implements WindowListener, Printable {
  71.    static boolean demoMode = true;
  72.    static boolean timeLimit = false;
  73.    HelpSet mainHS = null;
  74.    HelpBroker mainHB;
  75.    boolean treeSelected = false;
  76.    ElemClipboard elemClipboard;
  77.    int optCount = 0;
  78.    public JMenuItemLeft viewTextItem;
  79.    public JMenuItemLeft viewElementItem;
  80.    public JMenuItemLeft viewEntityItem;
  81.    public JMenuItemLeft editFixedItem;
  82.    public JMenuItemLeft limitElementsItem;
  83.    public JMenuItemLeft viewAttributesItem;
  84.    public JMenuItemLeft associateItem;
  85.    public AbstractButton[] undoItem;
  86.    SplashBox aboutBox;
  87.    XMLError errorHandler;
  88.    XMLDocument xmlDocument;
  89.    UndoManager undoManager;
  90.    String currDirectory = null;
  91.    public String rootDirectory = null;
  92.    static String fileName;
  93.    static boolean output;
  94.    static boolean stream;
  95.    static boolean text;
  96.    JSplitPane bottom;
  97.    VervetParser parser;
  98.    // $FF: renamed from: tb javax.swing.JToolBar
  99.    JToolBar field_0;
  100.    ElemPanel elems;
  101.    ElemPalette elemPalette;
  102.    EntityPalette entityPalette;
  103.    AttribPanel attribs;
  104.    KTextPane data;
  105.    JComponent[] validateWidgets;
  106.    JComponent[] mutableOptions;
  107.    JMenuBar menubar;
  108.    static boolean openTb = false;
  109.    static boolean newTb = false;
  110.    static boolean saveTb = false;
  111.    static boolean printTb = false;
  112.    static boolean elemTb = false;
  113.    static boolean attribTb = false;
  114.    static boolean validTb = false;
  115.    static ImageIcon blank;
  116.    static ImageIcon check;
  117.    public XMLPro theApp = null;
  118.    public JFrame mainFrame = null;
  119.    public JTextComponent lastText = null;
  120.    public boolean limitElements = true;
  121.    public boolean viewText = true;
  122.    public boolean viewAttributes = false;
  123.    public boolean viewElemPalette = true;
  124.    public boolean viewEntityPalette = false;
  125.    public boolean editFixedAttributes = false;
  126.    static boolean first = true;
  127.    Enumeration searchTree = null;
  128.    Vector pages;
  129.    static int FONT_HEIGHT = 10;
  130.    int fontHeightMetric = 0;
  131.    int startx;
  132.    int starty;
  133.  
  134.    XMLPro(String var1, SplashBox var2) {
  135.       super(var1);
  136.       this.theApp = this;
  137.       this.xmlDocument = new XMLDocument();
  138.       this.undoManager = new UndoManager(this);
  139.  
  140.       try {
  141.          URL var6 = HelpSet.findHelpSet((ClassLoader)null, "javahelp/XMLProHelp.hs");
  142.          this.mainHS = new HelpSet((ClassLoader)null, var6);
  143.       } catch (Exception var5) {
  144.          MesgBox var3 = new MesgBox(this, Strings.ErrorLoadingHelp);
  145.          ((Dialog)var3).show();
  146.          return;
  147.       }
  148.  
  149.       this.mainHB = this.mainHS.createHelpBroker();
  150.       ((Frame)this).setIconImage((new ImageIcon(this.getClass().getResource("icons/app-ico.gif"))).getImage());
  151.       if (!demoMode) {
  152.          Object var7 = null;
  153.          if (!timeLimit) {
  154.             if (!Register.checkRegistered()) {
  155.                Register var8 = new Register(this);
  156.                ((Component)var2).hide();
  157.                ((Dialog)var8).show();
  158.                if (var8.cancelled) {
  159.                   System.exit(0);
  160.                }
  161.             }
  162.  
  163.             var2.setRegName(Register.regName, Register.regComp);
  164.          } else {
  165.             if (!Register.checkTimeout(this)) {
  166.                System.exit(0);
  167.             }
  168.  
  169.             var2.setRegName(Strings.ThirtyDayEval, "");
  170.          }
  171.       }
  172.  
  173.       ((Window)var2).show();
  174.       this.aboutBox = var2;
  175.       blank = new ImageIcon(this.getClass().getResource("icons/blank.gif"));
  176.       check = new ImageIcon(this.getClass().getResource("icons/check.gif"));
  177.       this.validateWidgets = new JComponent[3];
  178.       this.mutableOptions = new JComponent[27];
  179.       this.undoItem = new AbstractButton[2];
  180.       this.rootDirectory = System.getProperties().getProperty("user.dir");
  181.       XMLTreeCellRenderer.elemIcon = new ImageIcon(this.getClass().getResource("icons/elem.gif"));
  182.       XMLTreeCellRenderer.entityIcon = new ImageIcon(this.getClass().getResource("icons/entity.gif"));
  183.       XMLTreeCellRenderer.pcdataIcon = new ImageIcon(this.getClass().getResource("icons/pcdata.gif"));
  184.       XMLTreeCellRenderer.cdataIcon = new ImageIcon(this.getClass().getResource("icons/cdata.gif"));
  185.       XMLTreeCellRenderer.commentIcon = new ImageIcon(this.getClass().getResource("icons/comment.gif"));
  186.       this.elemPalette = new ElemPalette(this);
  187.       this.entityPalette = new EntityPalette(this);
  188.       ((Window)this).addWindowListener(this);
  189.       ((Component)this).enableEvents(64L);
  190.       this.centerOnScreen();
  191.       this.field_0 = new JToolBar();
  192.       this.field_0.setFloatable(false);
  193.       this.field_0.setBorder(new CompoundBorder(new EtchedBorder(), new EmptyBorder(2, 4, 2, 4)));
  194.       ((JFrame)this).getContentPane().add("North", this.field_0);
  195.       this.bottom = new JSplitPane(1);
  196.       this.bottom.setDividerSize(2);
  197.       this.bottom.setContinuousLayout(true);
  198.       this.bottom.setBorder(new EmptyBorder(2, 2, 2, 2));
  199.       ((JFrame)this).getContentPane().add("Center", this.bottom);
  200.       JSplitPane var9 = new JSplitPane(0);
  201.       var9.setDividerSize(3);
  202.       var9.setContinuousLayout(true);
  203.       this.attribs = new AttribPanel(new JPanel(), this);
  204.       this.data = new KTextPane();
  205.       this.elems = new ElemPanel(this.attribs, this.data, this);
  206.       this.data.setElems(this.elems);
  207.       JScrollPane var4 = new JScrollPane(this.data);
  208.       this.data.setEditable(false);
  209.       this.data.addFocusListener(this.data);
  210.       var9.setTopComponent(this.attribs);
  211.       var9.setBottomComponent(var4);
  212.       this.bottom.setLeftComponent(this.elems);
  213.       this.bottom.setRightComponent(var9);
  214.       ((JComponent)var9).setBackground(Color.lightGray);
  215.       this.buildToolBar();
  216.       this.buildMenuBar();
  217.    }
  218.  
  219.    void about() {
  220.       this.aboutBox.show();
  221.    }
  222.  
  223.    void buildCache(DTD var1) {
  224.       if (var1 != null) {
  225.          if (first) {
  226.             first = false;
  227.          }
  228.  
  229.          String var4;
  230.          String var5;
  231.          for(Enumeration var2 = var1.getEntityEnumeration(); var2.hasMoreElements(); this.xmlDocument.entVals.put(var4, var5)) {
  232.             EntityDecl var3 = (EntityDecl)var2.nextElement();
  233.             var4 = var3.getNodeName();
  234.             var5 = var3.getValue();
  235.             if (var5 == null) {
  236.                var5 = "<External Entity>";
  237.             }
  238.          }
  239.  
  240.          Enumeration var13 = var1.getElementDeclarations();
  241.  
  242.          while(var13.hasMoreElements()) {
  243.             ElementDecl var14 = (ElementDecl)var13.nextElement();
  244.             var5 = var14.getName();
  245.             ElementVector var6 = new ElementVector();
  246.             this.xmlDocument.dtdElemVals.put(var14.getName(), var6);
  247.             ElemCache var7 = new ElemCache();
  248.             this.cacheAllowedElements(var5, var14, var7);
  249.  
  250.             AttDefn var10;
  251.             for(Enumeration var8 = var1.getAttributeDeclarations(var5); var8.hasMoreElements(); var6.add(var10)) {
  252.                AttDef var9 = (AttDef)var8.nextElement();
  253.                var10 = new AttDefn();
  254.                var10.id = var9.getName();
  255.                if (var9.getDeclaredType() == 10) {
  256.                   var10.enum = true;
  257.                }
  258.  
  259.                if (var9.getDefaultType() == 2) {
  260.                   var10.required = true;
  261.                }
  262.  
  263.                if (var9.getDefaultType() == 1) {
  264.                   var10.fixed = true;
  265.                }
  266.  
  267.                var10.def = var9.getDefaultStringValue();
  268.                if (var10.enum) {
  269.                   Enumeration var11 = var9.elements();
  270.                   Vector var12 = new Vector();
  271.  
  272.                   while(var11.hasMoreElements()) {
  273.                      var12.addElement(var11.nextElement());
  274.                   }
  275.  
  276.                   var10.values = var12;
  277.                }
  278.             }
  279.          }
  280.  
  281.       }
  282.    }
  283.  
  284.    void buildMenuBar() {
  285.       this.menubar = new JMenuBar();
  286.       ((JFrame)this).setJMenuBar(this.menubar);
  287.       JMenu var1 = new JMenu(Strings.File);
  288.       ((AbstractButton)var1).setMnemonic('F');
  289.       this.menubar.add(var1);
  290.       JMenu var2 = new JMenu(Strings.Edit);
  291.       ((AbstractButton)var2).setMnemonic('E');
  292.       this.menubar.add(var2);
  293.       JMenu var3 = new JMenu(Strings.Tools);
  294.       this.menubar.add(var3);
  295.       ((AbstractButton)var3).setMnemonic('T');
  296.       JMenu var4 = new JMenu(Strings.Options);
  297.       ((AbstractButton)var4).setMnemonic('O');
  298.       this.menubar.add(var4);
  299.       JMenu var5 = new JMenu(Strings.Help);
  300.       ((AbstractButton)var5).setMnemonic('H');
  301.       this.menubar.add(var5);
  302.       JMenuItemLeft var6;
  303.       var1.add(var6 = new JMenuItemLeft(Strings.New, new ImageIcon(this.getClass().getResource("icons/new.gif"))));
  304.       ((AbstractButton)var6).addActionListener(new XMLPro$14(this));
  305.       ((AbstractButton)var6).setMnemonic('N');
  306.       var1.add(var6 = new JMenuItemLeft(Strings.Open, new ImageIcon(this.getClass().getResource("icons/open.gif"))));
  307.       ((AbstractButton)var6).addActionListener(new XMLPro$15(this));
  308.       var1.addSeparator();
  309.       ((AbstractButton)var6).setMnemonic('O');
  310.       var1.add(var6 = new JMenuItemLeft(Strings.Save, new ImageIcon(this.getClass().getResource("icons/save.gif"))));
  311.       ((AbstractButton)var6).addActionListener(new XMLPro$16(this));
  312.       ((AbstractButton)var6).setMnemonic('S');
  313.       ((JMenuItem)var6).setEnabled(false);
  314.       this.mutableOptions[this.optCount++] = var6;
  315.       var1.add(var6 = new JMenuItemLeft(Strings.SaveAs, blank));
  316.       ((AbstractButton)var6).addActionListener(new XMLPro$17(this));
  317.       ((AbstractButton)var6).setMnemonic('A');
  318.       ((JMenuItem)var6).setEnabled(false);
  319.       this.mutableOptions[this.optCount++] = var6;
  320.       var1.addSeparator();
  321.       var1.add(var6 = new JMenuItemLeft(Strings.Print, new ImageIcon(this.getClass().getResource("icons/print.gif"))));
  322.       ((AbstractButton)var6).addActionListener(new XMLPro$18(this));
  323.       ((AbstractButton)var6).setMnemonic('P');
  324.       ((JMenuItem)var6).setEnabled(false);
  325.       this.mutableOptions[this.optCount++] = var6;
  326.       var1.addSeparator();
  327.       var1.add(var6 = new JMenuItemLeft(Strings.Close, blank));
  328.       ((AbstractButton)var6).addActionListener(new XMLPro$19(this));
  329.       ((AbstractButton)var6).setMnemonic('C');
  330.       ((JMenuItem)var6).setEnabled(false);
  331.       this.mutableOptions[this.optCount++] = var6;
  332.       var1.add(var6 = new JMenuItemLeft(Strings.Exit, blank));
  333.       ((AbstractButton)var6).addActionListener(new XMLPro$20(this));
  334.       ((AbstractButton)var6).setMnemonic('x');
  335.       var2.add(this.undoItem[1] = new JMenuItemLeft(Strings.Undo, new ImageIcon(this.getClass().getResource("icons/undo.gif"))));
  336.       this.undoItem[1].addActionListener(new XMLPro$21(this));
  337.       this.undoItem[1].setMnemonic('u');
  338.       this.undoItem[1].setEnabled(false);
  339.       this.mutableOptions[this.optCount++] = this.undoItem[1];
  340.       var2.addSeparator();
  341.       var2.add(var6 = new JMenuItemLeft(Strings.Cut, new ImageIcon(this.getClass().getResource("icons/cut.gif"))));
  342.       ((AbstractButton)var6).addActionListener(new XMLPro$22(this));
  343.       ((AbstractButton)var6).setMnemonic('t');
  344.       ((JMenuItem)var6).setEnabled(false);
  345.       this.mutableOptions[this.optCount++] = var6;
  346.       var2.add(var6 = new JMenuItemLeft(Strings.Copy, new ImageIcon(this.getClass().getResource("icons/copy.gif"))));
  347.       ((AbstractButton)var6).addActionListener(new XMLPro$23(this));
  348.       ((AbstractButton)var6).setMnemonic('c');
  349.       ((JMenuItem)var6).setEnabled(false);
  350.       this.mutableOptions[this.optCount++] = var6;
  351.       var2.add(var6 = new JMenuItemLeft(Strings.Paste, new ImageIcon(this.getClass().getResource("icons/paste.gif"))));
  352.       ((AbstractButton)var6).addActionListener(new XMLPro$24(this));
  353.       ((AbstractButton)var6).setMnemonic('P');
  354.       ((JMenuItem)var6).setEnabled(false);
  355.       this.mutableOptions[this.optCount++] = var6;
  356.       var2.add(var6 = new JMenuItemLeft(Strings.Find, new ImageIcon(this.getClass().getResource("icons/search.gif"))));
  357.       ((AbstractButton)var6).addActionListener(new XMLPro$25(this));
  358.       ((AbstractButton)var6).setMnemonic('F');
  359.       ((JMenuItem)var6).setEnabled(false);
  360.       this.mutableOptions[this.optCount++] = var6;
  361.       var3.add(var6 = new JMenuItemLeft(Strings.ElementWizard, new ImageIcon(this.getClass().getResource("icons/element.gif"))));
  362.       ((AbstractButton)var6).addActionListener(new XMLPro$26(this));
  363.       ((AbstractButton)var6).setMnemonic('E');
  364.       ((JMenuItem)var6).setEnabled(false);
  365.       this.mutableOptions[this.optCount++] = var6;
  366.       var3.add(var6 = new JMenuItemLeft(Strings.AttributeWizard, new ImageIcon(this.getClass().getResource("icons/attrib.gif"))));
  367.       ((AbstractButton)var6).addActionListener(new XMLPro$27(this));
  368.       ((AbstractButton)var6).setMnemonic('A');
  369.       ((JMenuItem)var6).setEnabled(false);
  370.       this.mutableOptions[this.optCount++] = var6;
  371.       var3.addSeparator();
  372.       var3.add(var6 = new JMenuItemLeft(Strings.MoveElementUp, new ImageIcon(this.getClass().getResource("icons/up.gif"))));
  373.       ((AbstractButton)var6).addActionListener(new XMLPro$28(this));
  374.       ((AbstractButton)var6).setMnemonic('U');
  375.       ((JMenuItem)var6).setEnabled(false);
  376.       this.mutableOptions[this.optCount++] = var6;
  377.       var3.add(var6 = new JMenuItemLeft(Strings.MoveElementDown, new ImageIcon(this.getClass().getResource("icons/down.gif"))));
  378.       ((AbstractButton)var6).addActionListener(new XMLPro$29(this));
  379.       ((AbstractButton)var6).setMnemonic('D');
  380.       ((JMenuItem)var6).setEnabled(false);
  381.       this.mutableOptions[this.optCount++] = var6;
  382.       var3.add(var6 = new JMenuItemLeft(Strings.DeleteElement, blank));
  383.       ((AbstractButton)var6).addActionListener(new XMLPro$30(this));
  384.       ((AbstractButton)var6).setMnemonic('l');
  385.       ((JMenuItem)var6).setEnabled(false);
  386.       this.mutableOptions[this.optCount++] = var6;
  387.       var3.addSeparator();
  388.       var3.add(var6 = new JMenuItemLeft(Strings.Validate, new ImageIcon(this.getClass().getResource("icons/valid.gif"))));
  389.       ((AbstractButton)var6).addActionListener(new XMLPro$31(this));
  390.       ((AbstractButton)var6).setMnemonic('V');
  391.       ((JMenuItem)var6).setEnabled(false);
  392.       this.validateWidgets[0] = var6;
  393.       var3.add(this.associateItem = new JMenuItemLeft(Strings.AssociateDTD, blank));
  394.       this.associateItem.addActionListener(new XMLPro$32(this));
  395.       this.associateItem.setMnemonic('A');
  396.       this.associateItem.setEnabled(false);
  397.       this.mutableOptions[this.optCount++] = this.associateItem;
  398.       var3.add(var6 = new JMenuItemLeft(Strings.ChangeEncoding, blank));
  399.       ((AbstractButton)var6).addActionListener(new XMLPro$33(this));
  400.       ((AbstractButton)var6).setMnemonic('E');
  401.       ((JMenuItem)var6).setEnabled(false);
  402.       this.mutableOptions[this.optCount++] = var6;
  403.       var3.addSeparator();
  404.       var3.add(var6 = new JMenuItemLeft(Strings.ViewXML, blank));
  405.       ((AbstractButton)var6).addActionListener(new XMLPro$34(this));
  406.       ((AbstractButton)var6).setMnemonic('w');
  407.       ((JMenuItem)var6).setEnabled(false);
  408.       this.mutableOptions[this.optCount++] = var6;
  409.       var3.add(var6 = new JMenuItemLeft(Strings.ViewDTD, blank));
  410.       ((AbstractButton)var6).addActionListener(new XMLPro$35(this));
  411.       ((AbstractButton)var6).setMnemonic('d');
  412.       ((JMenuItem)var6).setEnabled(false);
  413.       this.validateWidgets[2] = var6;
  414.       var4.add(this.viewTextItem = new JMenuItemLeft(Strings.ViewPCDATAText, new ImageIcon(this.getClass().getResource("icons/check.gif"))));
  415.       this.viewTextItem.addActionListener(new XMLPro$36(this));
  416.       this.viewTextItem.setMnemonic('P');
  417.       var4.add(this.viewAttributesItem = new JMenuItemLeft(Strings.ViewAttributesTree, new ImageIcon(this.getClass().getResource("icons/blank.gif"))));
  418.       this.viewAttributesItem.addActionListener(new XMLPro$37(this));
  419.       this.viewAttributesItem.setMnemonic('A');
  420.       var4.add(this.viewElementItem = new JMenuItemLeft(Strings.ShowElementPalette, new ImageIcon(this.getClass().getResource("icons/check.gif"))));
  421.       this.viewElementItem.addActionListener(new XMLPro$38(this));
  422.       this.viewElementItem.setMnemonic('E');
  423.       var4.add(this.viewEntityItem = new JMenuItemLeft(Strings.ShowEntityPalette, new ImageIcon(this.getClass().getResource("icons/blank.gif"))));
  424.       this.viewEntityItem.addActionListener(new XMLPro$39(this));
  425.       this.viewEntityItem.setMnemonic('N');
  426.       var4.add(this.editFixedItem = new JMenuItemLeft(Strings.EditFixedAtts, new ImageIcon(this.getClass().getResource("icons/blank.gif"))));
  427.       this.editFixedItem.addActionListener(new XMLPro$40(this));
  428.       this.editFixedItem.setMnemonic('X');
  429.       var4.add(this.limitElementsItem = new JMenuItemLeft(Strings.AvailableElementsConstrained, new ImageIcon(this.getClass().getResource("icons/check.gif"))));
  430.       this.limitElementsItem.addActionListener(new XMLPro$41(this));
  431.       this.limitElementsItem.setMnemonic('C');
  432.       var5.add(var6 = new JMenuItemLeft(Strings.XMLProHelp, new ImageIcon(this.getClass().getResource("icons/help.gif"))));
  433.       ((AbstractButton)var6).addActionListener(new CSH.DisplayHelpFromSource(this.mainHB));
  434.       ((AbstractButton)var6).setMnemonic('X');
  435.       var5.add(var6 = new JMenuItemLeft(Strings.About, blank));
  436.       ((AbstractButton)var6).addActionListener(new XMLPro$42(this));
  437.       ((AbstractButton)var6).setMnemonic('A');
  438.    }
  439.  
  440.    public void buildToolBar() {
  441.       XMLPro$JButtonSmall var1;
  442.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/new.gif"))));
  443.       ((AbstractButton)var1).addActionListener(new XMLPro$1(this));
  444.       ((JComponent)var1).setToolTipText(Strings.New);
  445.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/open.gif"))));
  446.       ((AbstractButton)var1).addActionListener(new XMLPro$2(this));
  447.       ((JComponent)var1).setToolTipText(Strings.Open);
  448.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/save.gif"))));
  449.       ((AbstractButton)var1).addActionListener(new XMLPro$3(this));
  450.       ((AbstractButton)var1).setEnabled(false);
  451.       this.mutableOptions[this.optCount++] = var1;
  452.       ((JComponent)var1).setToolTipText(Strings.Save);
  453.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/print.gif"))));
  454.       ((AbstractButton)var1).addActionListener(new XMLPro$4(this));
  455.       ((JComponent)var1).setToolTipText(Strings.Print);
  456.       ((AbstractButton)var1).setEnabled(false);
  457.       this.mutableOptions[this.optCount++] = var1;
  458.       this.field_0.addSeparator();
  459.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/cut.gif"))));
  460.       ((AbstractButton)var1).addActionListener(new XMLPro$5(this));
  461.       ((JComponent)var1).setToolTipText(Strings.Cut);
  462.       ((AbstractButton)var1).setEnabled(false);
  463.       this.mutableOptions[this.optCount++] = var1;
  464.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/copy.gif"))));
  465.       ((AbstractButton)var1).addActionListener(new XMLPro$6(this));
  466.       ((AbstractButton)var1).setEnabled(false);
  467.       this.mutableOptions[this.optCount++] = var1;
  468.       ((JComponent)var1).setToolTipText(Strings.Copy);
  469.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/paste.gif"))));
  470.       ((AbstractButton)var1).addActionListener(new XMLPro$7(this));
  471.       ((AbstractButton)var1).setEnabled(false);
  472.       this.mutableOptions[this.optCount++] = var1;
  473.       ((JComponent)var1).setToolTipText(Strings.Paste);
  474.       this.field_0.add(this.undoItem[0] = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/undo.gif"))));
  475.       this.undoItem[0].addActionListener(new XMLPro$8(this));
  476.       this.mutableOptions[this.optCount++] = this.undoItem[0];
  477.       this.undoItem[0].setEnabled(false);
  478.       this.undoItem[0].setToolTipText(Strings.Undo);
  479.       this.field_0.addSeparator();
  480.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/element.gif"))));
  481.       ((AbstractButton)var1).addActionListener(new XMLPro$9(this));
  482.       ((JComponent)var1).setToolTipText(Strings.ElementWizard);
  483.       ((AbstractButton)var1).setEnabled(false);
  484.       this.mutableOptions[this.optCount++] = var1;
  485.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/attrib.gif"))));
  486.       ((AbstractButton)var1).addActionListener(new XMLPro$10(this));
  487.       ((JComponent)var1).setToolTipText(Strings.AttributeWizard);
  488.       ((AbstractButton)var1).setEnabled(false);
  489.       this.mutableOptions[this.optCount++] = var1;
  490.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/up.gif"))));
  491.       ((AbstractButton)var1).addActionListener(new XMLPro$11(this));
  492.       ((AbstractButton)var1).setEnabled(false);
  493.       this.mutableOptions[this.optCount++] = var1;
  494.       ((JComponent)var1).setToolTipText(Strings.MoveElementUp);
  495.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/down.gif"))));
  496.       ((AbstractButton)var1).addActionListener(new XMLPro$12(this));
  497.       ((AbstractButton)var1).setEnabled(false);
  498.       this.mutableOptions[this.optCount++] = var1;
  499.       ((JComponent)var1).setToolTipText(Strings.MoveElementDown);
  500.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/valid.gif"))));
  501.       ((AbstractButton)var1).addActionListener(new XMLPro$13(this));
  502.       ((JComponent)var1).setToolTipText(Strings.Validate);
  503.       ((AbstractButton)var1).setEnabled(false);
  504.       this.validateWidgets[1] = var1;
  505.       this.field_0.addSeparator();
  506.       this.field_0.add(var1 = new XMLPro$JButtonSmall(this, new ImageIcon(this.getClass().getResource("icons/help.gif"))));
  507.       ((AbstractButton)var1).addActionListener(new CSH.DisplayHelpFromSource(this.mainHB));
  508.       ((JComponent)var1).setToolTipText(Strings.Help);
  509.    }
  510.  
  511.    void cacheAllowedElements(String var1, ElementDecl var2, ElemCache var3) {
  512.       int var4 = var2.getContentType();
  513.       ElementVector var5 = new ElementVector();
  514.       switch (var4) {
  515.          case 1:
  516.             var3.empty = true;
  517.          case 2:
  518.          case 3:
  519.          default:
  520.             break;
  521.          case 4:
  522.             StringTokenizer var6 = new StringTokenizer(var2.getXML4JContentModel().toString(), "(+,?|*)\t\n\r");
  523.  
  524.             while(var6.hasMoreTokens()) {
  525.                String var7 = var6.nextToken();
  526.                if (!"#PCDATA".equals(var7)) {
  527.                   var5.add(var7);
  528.                }
  529.             }
  530.       }
  531.  
  532.       Enumeration var8 = ((Array)var5).elements();
  533.       Vector var9 = Sorter.sortStringEnumeration(var8);
  534.       var3.elements = var9;
  535.       this.xmlDocument.dtdCache.put(var1, var3);
  536.    }
  537.  
  538.    protected void centerOnScreen() {
  539.       Dimension var1 = Toolkit.getDefaultToolkit().getScreenSize();
  540.       Dimension var2 = ((Component)this).getSize();
  541.       ((Component)this).setLocation((var1.width - var2.width) / 2, (var1.height - var2.height) / 2);
  542.    }
  543.  
  544.    void changeEditFixedAtts() {
  545.       this.editFixedAttributes ^= true;
  546.       if (!this.editFixedAttributes) {
  547.          this.editFixedItem.setIcon(blank);
  548.       } else {
  549.          this.editFixedItem.setIcon(check);
  550.       }
  551.  
  552.       DefaultTreeModel var1 = (DefaultTreeModel)this.theApp.elems.theTree.getModel();
  553.       var1.nodeStructureChanged((ElemNode)this.theApp.elems.theTree.getModel().getRoot());
  554.       if (this.theApp.elems.selectedElem != null) {
  555.          this.theApp.elems.theTree.setSelectionPath(new TreePath(this.theApp.elems.selectedElem.getPath()));
  556.       }
  557.  
  558.    }
  559.  
  560.    void changeLimitElements() {
  561.       if (this.limitElements) {
  562.          this.limitElements(false);
  563.       } else {
  564.          this.limitElements(true);
  565.       }
  566.  
  567.    }
  568.  
  569.    void changeViewAttributes() {
  570.       if (this.viewAttributes) {
  571.          this.viewAttributes(false);
  572.       } else {
  573.          this.viewAttributes(true);
  574.       }
  575.  
  576.    }
  577.  
  578.    void changeViewElemPalette() {
  579.       if (this.viewElemPalette) {
  580.          this.viewElemPalette(false);
  581.       } else {
  582.          this.viewElemPalette(true);
  583.       }
  584.  
  585.    }
  586.  
  587.    void changeViewEntityPalette() {
  588.       if (this.viewEntityPalette) {
  589.          this.viewEntityPalette(false);
  590.       } else {
  591.          this.viewEntityPalette(true);
  592.       }
  593.  
  594.    }
  595.  
  596.    void changeViewText() {
  597.       if (this.viewText) {
  598.          this.viewText(false);
  599.       } else {
  600.          this.viewText(true);
  601.       }
  602.  
  603.    }
  604.  
  605.    void close() {
  606.       if (this.xmlDocument.document != null && this.xmlDocument.modified) {
  607.          YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.SaveCurrentFile);
  608.          ((Dialog)var1).show();
  609.          if (var1.result == Strings.Yes) {
  610.             this.saveFile();
  611.          }
  612.       }
  613.  
  614.       this.setNoDocument();
  615.    }
  616.  
  617.    static boolean containsKey(Hashtable var0, String var1) {
  618.       return var0.containsKey(var1);
  619.    }
  620.  
  621.    void copy() {
  622.       if (!this.treeSelected) {
  623.          if (this.lastText != null) {
  624.             this.lastText.copy();
  625.          }
  626.  
  627.       } else {
  628.          this.elemClipboard = new ElemClipboard(this, this.elems.selectedElem);
  629.       }
  630.    }
  631.  
  632.    static URL createURL(String var0) {
  633.       URL var1 = null;
  634.  
  635.       try {
  636.          var1 = new URL(var0);
  637.       } catch (MalformedURLException var7) {
  638.          File var2 = new File(var0);
  639.  
  640.          try {
  641.             String var3 = var2.getAbsolutePath();
  642.             String var4 = System.getProperty("file.separator");
  643.             if (var4.length() == 1) {
  644.                char var5 = var4.charAt(0);
  645.                if (var5 != '/') {
  646.                   var3 = var3.replace(var5, '/');
  647.                }
  648.  
  649.                if (var3.charAt(0) != '/') {
  650.                   var3 = '/' + var3;
  651.                }
  652.             }
  653.  
  654.             var3 = "file://" + var3;
  655.             var1 = new URL(var3);
  656.          } catch (MalformedURLException var6) {
  657.             System.exit(0);
  658.          }
  659.       }
  660.  
  661.       return var1;
  662.    }
  663.  
  664.    void cut() {
  665.       if (!this.treeSelected) {
  666.          if (this.lastText != null) {
  667.             this.lastText.cut();
  668.          }
  669.  
  670.       } else {
  671.          this.elemClipboard = new ElemClipboard(this, this.elems.selectedElem);
  672.          this.elems.deleteElem();
  673.       }
  674.    }
  675.  
  676.    void dump(Node var1, int var2) {
  677.       TXDocument var4 = this.xmlDocument.document;
  678.  
  679.       for(int var5 = 0; var5 < var2; ++var5) {
  680.          System.out.println("    ");
  681.       }
  682.  
  683.       System.out.println(var1.getNodeName() + "{" + var1.getNodeType() + "}:");
  684.       NamedNodeMap var6 = var1.getAttributes();
  685.       if (var6 != null) {
  686.          int var3 = var6.getLength();
  687.  
  688.          for(int var7 = 0; var7 < var3; ++var7) {
  689.             Attr var8 = (Attr)var6.item(var7);
  690.             System.out.println("[" + var8.getName() + "/" + var8.getValue() + "]");
  691.          }
  692.       }
  693.  
  694.       System.out.println("\n");
  695.       NodeList var11 = var1.getChildNodes();
  696.       int var10 = var11.getLength();
  697.  
  698.       for(int var12 = 0; var12 < var10; ++var12) {
  699.          Node var9 = var11.item(var12);
  700.          this.dump(var9, var2 + 1);
  701.       }
  702.  
  703.    }
  704.  
  705.    void exit() {
  706.       if (this.xmlDocument.modified) {
  707.          YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.DocumentNotSaved);
  708.          ((Dialog)var1).show();
  709.          if (var1.result == Strings.Yes) {
  710.             System.exit(0);
  711.          }
  712.       } else {
  713.          System.exit(0);
  714.       }
  715.  
  716.    }
  717.  
  718.    void find() {
  719.       if (this.elems != null && this.elems.theTree != null) {
  720.          ElemNode var1 = (ElemNode)this.elems.theTree.getModel().getRoot();
  721.          this.searchTree = ((DefaultMutableTreeNode)var1).postorderEnumeration();
  722.          FindBox var2 = new FindBox(this, Strings.TextToFind);
  723.          ((Dialog)var2).show();
  724.          this.searchTree = null;
  725.       }
  726.    }
  727.  
  728.    boolean findAgain(String var1, boolean var2, String var3) {
  729.       boolean var4;
  730.       if (!this.searchTree.hasMoreElements()) {
  731.          var4 = false;
  732.       } else {
  733.          var4 = this.findInElement(var1, var2, var3);
  734.       }
  735.  
  736.       if (!var4) {
  737.          MesgBox var5 = new MesgBox(this, Strings.NotFound);
  738.          ((Dialog)var5).show();
  739.       }
  740.  
  741.       return var4;
  742.    }
  743.  
  744.    boolean findInElement(String var1, boolean var2, String var3) {
  745.       boolean var4 = false;
  746.       if (!var2) {
  747.          var1 = var1.toLowerCase();
  748.       }
  749.  
  750.       while(this.searchTree.hasMoreElements()) {
  751.          ElemNode var5 = (ElemNode)this.searchTree.nextElement();
  752.          Node var6 = var5.e;
  753.          if (var6.getNodeType() == 1) {
  754.             if (var3.equals(Strings.All) || var3.equals(Strings.ElementNames)) {
  755.                String var14 = var6.getNodeName();
  756.                if (var14 != null) {
  757.                   if (!var2) {
  758.                      var14 = var14.toLowerCase();
  759.                   }
  760.  
  761.                   if (var14.indexOf(var1) != -1) {
  762.                      var4 = true;
  763.                   }
  764.                }
  765.             }
  766.          } else if (var3.equals(Strings.All) || var3.equals(Strings.Text)) {
  767.             String var7 = var6.getNodeValue();
  768.             if (var7 != null) {
  769.                if (!var2) {
  770.                   var7 = var7.toLowerCase();
  771.                }
  772.  
  773.                if (var7.indexOf(var1) != -1) {
  774.                   var4 = true;
  775.                }
  776.             }
  777.          }
  778.  
  779.          NamedNodeMap var8 = var6.getAttributes();
  780.          if (var8 != null) {
  781.             int var9 = var8.getLength();
  782.  
  783.             for(int var10 = 0; var10 < var9; ++var10) {
  784.                Attr var11 = (Attr)var8.item(var10);
  785.                String var12 = var11.getName();
  786.                String var13 = var11.getValue();
  787.                if (!var2) {
  788.                   var12 = var12.toLowerCase();
  789.                   var13 = var13.toLowerCase();
  790.                }
  791.  
  792.                if ((var3.equals(Strings.All) || var3.equals(Strings.AttributeNames)) && var12.indexOf(var1) != -1) {
  793.                   var4 = true;
  794.                }
  795.  
  796.                if ((var3.equals(Strings.All) || var3.equals(Strings.AttributeValues)) && var13.indexOf(var1) != -1) {
  797.                   var4 = true;
  798.                }
  799.             }
  800.          }
  801.  
  802.          if (var4) {
  803.             this.elems.selectNode(var5);
  804.             return true;
  805.          }
  806.       }
  807.  
  808.       return false;
  809.    }
  810.  
  811.    void limitElements(boolean var1) {
  812.       if (!var1) {
  813.          this.limitElementsItem.setIcon(blank);
  814.       } else {
  815.          this.limitElementsItem.setIcon(check);
  816.       }
  817.  
  818.       this.limitElements = var1;
  819.       if (this.xmlDocument.document != null) {
  820.          this.elemPalette.updateElements();
  821.       }
  822.  
  823.    }
  824.  
  825.    public static void main(String[] var0) {
  826.       String var1 = System.getProperty("java.version");
  827.       if (var1 != null) {
  828.          int var2 = Character.digit(var1.charAt(0), 10);
  829.          int var3 = Character.digit(var1.charAt(2), 10);
  830.          if (var2 == 1 && var3 < 2) {
  831.             AWTMesgBox var4 = new AWTMesgBox(new Frame(""), Strings.JavaVersionError);
  832.             ((Dialog)var4).show();
  833.             System.exit(0);
  834.          }
  835.       }
  836.  
  837.       try {
  838.          UIManager.setLookAndFeel(new VervetLookAndFeel());
  839.       } catch (Exception var6) {
  840.          System.out.println(var6);
  841.       }
  842.  
  843.       SplashBox var7 = new SplashBox();
  844.       ((Window)var7).show();
  845.       XMLPro var8 = new XMLPro("XML<PRO>", var7);
  846.       Dimension var9 = Toolkit.getDefaultToolkit().getScreenSize();
  847.       if (var9.height >= 625 && var9.width >= 800) {
  848.          ((Component)var8).setSize(640, 625);
  849.          var8.centerOnScreen();
  850.       } else {
  851.          ((Component)var8).setSize(525, 480);
  852.          ((Component)var8).setLocation(115, 0);
  853.       }
  854.  
  855.       Point var5 = ((Component)var8).getLocation();
  856.       var8.elemPalette.setLocation(var5.x - 115, var5.y);
  857.       var8.entityPalette.setLocation(var5.x - 115, var5.y + 240);
  858.       ((Component)var7).hide();
  859.       ((Window)var8).show();
  860.       if (var8.viewElemPalette) {
  861.          var8.elemPalette.show();
  862.       }
  863.  
  864.       if (var8.viewEntityPalette) {
  865.          var8.entityPalette.show();
  866.       }
  867.  
  868.       ((Component)var8).requestFocus();
  869.       if (var0.length > 0) {
  870.          var8.openFile(var0[0]);
  871.       }
  872.  
  873.    }
  874.  
  875.    void newFile() {
  876.       if (this.xmlDocument.document != null && this.xmlDocument.modified) {
  877.          YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.SaveCurrentFile);
  878.          ((Dialog)var1).show();
  879.          if (var1.result == Strings.Yes) {
  880.             this.saveFile();
  881.          }
  882.       }
  883.  
  884.       InputBoxTwo var2 = new InputBoxTwo(this, Strings.NewDocument, Strings.RootElementName, Strings.Encoding);
  885.       var2.input2.setText("UTF-8");
  886.       ((Dialog)var2).show();
  887.       if (var2.result1 != null && var2.result1.length() >= 1) {
  888.          this.setNoDocument();
  889.          this.xmlDocument.document = new TXDocument();
  890.          this.xmlDocument.document.setVersion("1.0");
  891.          if (var2.result2 != null && var2.result2.length() >= 1) {
  892.             this.xmlDocument.document.setEncoding(var2.result2);
  893.          } else {
  894.             this.xmlDocument.document.setEncoding("UTF-8");
  895.          }
  896.  
  897.          this.xmlDocument.document.appendChild(this.xmlDocument.document.createElement(var2.result1));
  898.          this.setLoadedDocument();
  899.          this.xmlDocument.modified = true;
  900.          ((Frame)this).setTitle("XML <PRO>");
  901.       }
  902.    }
  903.  
  904.    void openFile() {
  905.       if (this.xmlDocument.document != null && this.xmlDocument.modified) {
  906.          YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.SaveCurrentFile);
  907.          ((Dialog)var1).show();
  908.          if (var1.result == Strings.Yes) {
  909.             this.saveFile();
  910.          }
  911.       }
  912.  
  913.       FileDialog var3 = new FileDialog(this, Strings.LoadDocument, 0);
  914.       var3.setFile("*.xml");
  915.       if (this.currDirectory != null) {
  916.          var3.setDirectory(this.currDirectory);
  917.       }
  918.  
  919.       ((Dialog)var3).show();
  920.       String var2 = var3.getFile();
  921.       if (var2 != null) {
  922.          this.currDirectory = var3.getDirectory();
  923.          this.openFile(var2);
  924.       }
  925.  
  926.    }
  927.  
  928.    void openFile(String var1) {
  929.       if (var1 != null) {
  930.          String var2 = var1;
  931.          this.setNoDocument();
  932.          if (this.currDirectory == null) {
  933.             var2 = var1.substring(var1.lastIndexOf("\\") + 1, var1.length());
  934.             String var3 = var1.substring(0, var1.lastIndexOf("\\") + 1);
  935.             this.currDirectory = var3;
  936.          }
  937.  
  938.          ((Frame)this).setTitle(Strings.Opening + " " + var2);
  939.          if (!this.parse(this.currDirectory + var2, true, true, true)) {
  940.             this.setNoDocument();
  941.             return;
  942.          }
  943.  
  944.          fileName = var2;
  945.          this.setLoadedDocument();
  946.       }
  947.  
  948.    }
  949.  
  950.    boolean parse(String var1, boolean var2, boolean var3, boolean var4) {
  951.       stream = var3;
  952.       fileName = var1;
  953.       text = var4;
  954.       output = var2;
  955.       this.parser = new VervetParser();
  956.       this.errorHandler = new XMLError();
  957.       this.parser.setErrorHandler(this.errorHandler);
  958.  
  959.       try {
  960.          this.parser.parse(fileName);
  961.          this.xmlDocument.document = (TXDocument)this.parser.getDocument();
  962.       } catch (IOException var8) {
  963.          String var6 = Strings.ErrorOpeningDocument + '\n' + ((Throwable)var8).getMessage();
  964.          MultiMesgBox var7 = new MultiMesgBox(this.theApp, Strings.ErrorOpeningDocument, var6);
  965.          ((Dialog)var7).show();
  966.          return false;
  967.       } catch (SAXException var9) {
  968.       }
  969.  
  970.       String var5 = this.errorHandler.getError();
  971.       if (var5 == null && this.xmlDocument.document.getDocumentElement() == null) {
  972.          String var11 = Strings.ErrorOpeningDocument + '\n' + Strings.DocumentIsEmpty;
  973.          MultiMesgBox var13 = new MultiMesgBox(this.theApp, Strings.ErrorOpeningDocument, var11);
  974.          ((Dialog)var13).show();
  975.          return false;
  976.       } else if (var5 != null) {
  977.          String var10 = Strings.ErrorOpeningDocument + '\n' + this.errorHandler.getErrorLine() + var5;
  978.          MultiMesgBox var12 = new MultiMesgBox(this.theApp, Strings.ErrorOpeningDocument, var10);
  979.          ((Dialog)var12).show();
  980.          return false;
  981.       } else {
  982.          return true;
  983.       }
  984.    }
  985.  
  986.    void paste() {
  987.       if (!this.treeSelected) {
  988.          if (this.lastText != null) {
  989.             this.lastText.paste();
  990.          }
  991.  
  992.       } else {
  993.          if (this.elemClipboard != null && this.elems.selectedElem != null) {
  994.             this.elemClipboard.pasteNodeInto(this.elems.selectedElem);
  995.          }
  996.  
  997.       }
  998.    }
  999.  
  1000.    public int print(Graphics var1, PageFormat var2, int var3) throws PrinterException {
  1001.       if (var3 >= this.pages.size()) {
  1002.          return 1;
  1003.       } else {
  1004.          Font var4 = new Font("Courier", 0, FONT_HEIGHT);
  1005.          var1.setFont(var4);
  1006.          if (this.fontHeightMetric == 0) {
  1007.             this.fontHeightMetric = var1.getFontMetrics().getHeight();
  1008.          }
  1009.  
  1010.          var1.setColor(Color.black);
  1011.          Vector var5 = (Vector)this.pages.elementAt(var3);
  1012.          int var7 = this.starty + this.fontHeightMetric;
  1013.  
  1014.          for(Enumeration var8 = var5.elements(); var8.hasMoreElements(); var7 += this.fontHeightMetric) {
  1015.             String var6 = (String)var8.nextElement();
  1016.             var1.drawString(var6, this.startx, var7);
  1017.          }
  1018.  
  1019.          return 0;
  1020.       }
  1021.    }
  1022.  
  1023.    void printFile() {
  1024.       if (demoMode) {
  1025.          this.showDemoBox();
  1026.       } else {
  1027.          this.pages = new Vector();
  1028.          PrinterJob var1 = PrinterJob.getPrinterJob();
  1029.          PageFormat var2 = var1.defaultPage();
  1030.          this.startx = (int)var2.getImageableX();
  1031.          this.starty = (int)var2.getImageableY();
  1032.          StringWriter var3 = new StringWriter();
  1033.  
  1034.          try {
  1035.             this.xmlDocument.document.printWithFormat(var3);
  1036.          } catch (IOException var9) {
  1037.          }
  1038.  
  1039.          String var4 = var3.toString();
  1040.          double var5 = var2.getImageableHeight();
  1041.          this.printLongString(var5, var4);
  1042.          var1.setPrintable(this);
  1043.          if (var1.printDialog()) {
  1044.             try {
  1045.                var1.print();
  1046.             } catch (Exception var8) {
  1047.                ((Throwable)var8).printStackTrace();
  1048.             }
  1049.          }
  1050.  
  1051.       }
  1052.    }
  1053.  
  1054.    void printLongString(double var1, String var3) {
  1055.       String var4 = StringUtils.breakUp(StringUtils.replaceStr(var3, '\t', "    "), 80);
  1056.       StringReader var5 = new StringReader(var4);
  1057.       LineNumberReader var6 = new LineNumberReader(var5);
  1058.       Vector var7 = new Vector();
  1059.       int var9 = 1;
  1060.       int var10 = 0;
  1061.       int var11 = 0;
  1062.       int var12 = this.starty + FONT_HEIGHT;
  1063.  
  1064.       String var8;
  1065.       try {
  1066.          do {
  1067.             var8 = var6.readLine();
  1068.             if (var8 != null) {
  1069.                if ((double)(var12 + FONT_HEIGHT) > var1 * 0.8) {
  1070.                   ++var9;
  1071.                   var10 = 0;
  1072.                   var12 = 0;
  1073.                   this.pages.addElement(var7);
  1074.                   var7 = new Vector();
  1075.                }
  1076.  
  1077.                var12 += FONT_HEIGHT;
  1078.                var7.addElement(var8);
  1079.                ++var10;
  1080.                ++var11;
  1081.             }
  1082.          } while(var8 != null);
  1083.       } catch (EOFException var14) {
  1084.          this.pages.addElement(var7);
  1085.       } catch (Throwable var15) {
  1086.          var15.printStackTrace();
  1087.       }
  1088.  
  1089.       this.pages.addElement(var7);
  1090.    }
  1091.  
  1092.    protected void processWindowEvent(WindowEvent var1) {
  1093.       if (((AWTEvent)var1).getID() == 201) {
  1094.          this.exit();
  1095.       } else {
  1096.          super.processWindowEvent(var1);
  1097.       }
  1098.  
  1099.    }
  1100.  
  1101.    void saveAsFile() {
  1102.       if (demoMode) {
  1103.          this.showDemoBox();
  1104.       } else if (this.xmlDocument.document != null) {
  1105.          if (this.xmlDocument.hasDTD && !this.xmlDocument.validated && !this.validateDocument(false)) {
  1106.             YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.DocumentNotValid);
  1107.             ((Dialog)var1).show();
  1108.             if (var1.result == Strings.No) {
  1109.                return;
  1110.             }
  1111.          }
  1112.  
  1113.          FileDialog var6 = new FileDialog(this.theApp, Strings.SaveDocument, 1);
  1114.          var6.setFile("*.xml");
  1115.          if (this.currDirectory != null) {
  1116.             var6.setDirectory(this.currDirectory);
  1117.          }
  1118.  
  1119.          ((Dialog)var6).show();
  1120.          String var2 = var6.getFile();
  1121.          this.currDirectory = var6.getDirectory();
  1122.          if (var2 != null) {
  1123.             try {
  1124.                FileOutputStream var7 = new FileOutputStream(this.currDirectory + var2);
  1125.                OutputStreamWriter var4 = new OutputStreamWriter(var7);
  1126.                this.xmlDocument.document.printWithFormat(var4);
  1127.                var4.flush();
  1128.                var4.close();
  1129.                fileName = var2;
  1130.             } catch (IOException var5) {
  1131.                MesgBox var3 = new MesgBox(this.theApp, Strings.ErrorWritingFile);
  1132.                ((Dialog)var3).show();
  1133.             }
  1134.  
  1135.             fileName = var2;
  1136.             ((Frame)this).setTitle("XML <PRO> - " + fileName);
  1137.             this.xmlDocument.modified = false;
  1138.          }
  1139.  
  1140.       }
  1141.    }
  1142.  
  1143.    void saveFile() {
  1144.       if (demoMode) {
  1145.          this.showDemoBox();
  1146.       } else if (this.xmlDocument.document != null) {
  1147.          if (fileName == null) {
  1148.             this.saveAsFile();
  1149.          } else {
  1150.             if (this.xmlDocument.hasDTD && !this.xmlDocument.validated && !this.validateDocument(false)) {
  1151.                YesNoBox var1 = new YesNoBox(this, Strings.Alert, Strings.DocumentNotValid);
  1152.                ((Dialog)var1).show();
  1153.                if (var1.result == Strings.No) {
  1154.                   return;
  1155.                }
  1156.             }
  1157.  
  1158.             if (fileName != null) {
  1159.                try {
  1160.                   FileOutputStream var5 = new FileOutputStream(this.currDirectory + fileName);
  1161.                   OutputStreamWriter var2 = new OutputStreamWriter(var5);
  1162.                   this.xmlDocument.document.printWithFormat(var2);
  1163.                   var2.flush();
  1164.                   var2.close();
  1165.                } catch (IOException var3) {
  1166.                   MesgBox var4 = new MesgBox(this.theApp, Strings.ErrorWritingFile);
  1167.                   ((Dialog)var4).show();
  1168.                }
  1169.             }
  1170.  
  1171.             this.xmlDocument.modified = false;
  1172.          }
  1173.       }
  1174.    }
  1175.  
  1176.    void scanForElems(Node var1) {
  1177.       if (var1 != null) {
  1178.          String var3 = var1.getNodeName();
  1179.          if (var3 != null) {
  1180.             if (!this.xmlDocument.hasDTD || !containsKey(this.xmlDocument.dtdElemVals, var3)) {
  1181.                ElementVector var2 = (ElementVector)this.xmlDocument.elemVals.get(var3);
  1182.                if (var2 == null) {
  1183.                   var2 = new ElementVector();
  1184.                   this.xmlDocument.elemVals.put(var3, var2);
  1185.                }
  1186.  
  1187.                NamedNodeMap var4 = var1.getAttributes();
  1188.                if (var4 != null) {
  1189.                   int var5 = var4.getLength();
  1190.  
  1191.                   for(int var6 = 0; var6 < var5; ++var6) {
  1192.                      Attr var7 = (Attr)var4.item(var6);
  1193.                      var2.add(var7.getName());
  1194.                   }
  1195.                }
  1196.             }
  1197.  
  1198.             NodeList var8 = var1.getChildNodes();
  1199.             int var9 = var8.getLength();
  1200.  
  1201.             for(int var10 = 0; var10 < var9; ++var10) {
  1202.                Node var11 = var8.item(var10);
  1203.                if (var11.getNodeType() == 1) {
  1204.                   this.scanForElems(var11);
  1205.                }
  1206.             }
  1207.  
  1208.          }
  1209.       }
  1210.    }
  1211.  
  1212.    void selectNodeInTree(Node var1) {
  1213.       Object var2 = null;
  1214.       ElemNode var3 = (ElemNode)this.elems.theTree.getModel().getRoot();
  1215.       Enumeration var6 = ((DefaultMutableTreeNode)var3).postorderEnumeration();
  1216.  
  1217.       while(var6.hasMoreElements()) {
  1218.          ElemNode var4 = (ElemNode)var6.nextElement();
  1219.          Node var5 = var4.e;
  1220.          if (var5 == var1) {
  1221.             this.elems.selectNode(var4);
  1222.             return;
  1223.          }
  1224.       }
  1225.  
  1226.    }
  1227.  
  1228.    void setDefaultCursor() {
  1229.       ((Frame)this).setCursor(0);
  1230.    }
  1231.  
  1232.    void setLoadedDocument() {
  1233.       this.field_0.hide();
  1234.       this.bottom.hide();
  1235.       this.elemPalette.getContentPane().hide();
  1236.       this.entityPalette.getContentPane().hide();
  1237.       this.xmlDocument.modified = false;
  1238.       this.xmlDocument.entVals = new Hashtable();
  1239.       this.xmlDocument.elemVals = new Hashtable();
  1240.       this.xmlDocument.dtdElemVals = new Hashtable();
  1241.       this.xmlDocument.dtdCache = new Hashtable();
  1242.       if (this.parser == null) {
  1243.          this.xmlDocument.hasDTD = false;
  1244.       } else if (!this.parser.definedElementDecl) {
  1245.          this.xmlDocument.hasDTD = false;
  1246.       } else {
  1247.          this.xmlDocument.hasDTD = true;
  1248.          this.setValidateWidgets(true);
  1249.       }
  1250.  
  1251.       this.buildCache(this.xmlDocument.document.getDTD());
  1252.       this.scanForElems(this.xmlDocument.document.getDocumentElement());
  1253.       this.elemPalette.elementsChanged();
  1254.       this.elems.addElements(this.xmlDocument.document);
  1255.       ElemNode var1 = (ElemNode)this.elems.theTree.getModel().getRoot();
  1256.       this.elems.pan.editElement(var1.e);
  1257.       this.elemPalette.updateElements();
  1258.       this.entityPalette.updateEntities();
  1259.       this.setMutableOn();
  1260.       this.setUndoWidgets(false);
  1261.       ((Frame)this).setTitle("XML <PRO> - " + fileName);
  1262.       this.elemPalette.getContentPane().show();
  1263.       this.entityPalette.getContentPane().show();
  1264.       this.field_0.show();
  1265.       this.bottom.show();
  1266.       if (this.xmlDocument.hasDTD) {
  1267.          this.validateDocument(true);
  1268.       }
  1269.  
  1270.       this.setDefaultCursor();
  1271.    }
  1272.  
  1273.    void setMutableOff() {
  1274.       for(int var1 = 0; var1 < this.mutableOptions.length; ++var1) {
  1275.          this.mutableOptions[var1].setEnabled(false);
  1276.       }
  1277.  
  1278.    }
  1279.  
  1280.    void setMutableOn() {
  1281.       for(int var1 = 0; var1 < this.mutableOptions.length; ++var1) {
  1282.          this.mutableOptions[var1].setEnabled(true);
  1283.       }
  1284.  
  1285.    }
  1286.  
  1287.    void setNoDocument() {
  1288.       this.xmlDocument.document = null;
  1289.       this.undoManager.cantUndoMod();
  1290.       this.treeSelected = false;
  1291.       this.elemClipboard = null;
  1292.       this.parser = null;
  1293.       this.xmlDocument.hasDTD = false;
  1294.       this.xmlDocument.modified = false;
  1295.       this.setWaitCursor();
  1296.       this.setValidateWidgets(false);
  1297.       this.setMutableOff();
  1298.       fileName = null;
  1299.       this.elems.deleteElements();
  1300.       this.elemPalette.clear();
  1301.       this.entityPalette.clear();
  1302.       this.data.setText("");
  1303.       this.data.repaint();
  1304.       this.attribs.clear();
  1305.       this.setMutableOff();
  1306.       this.elemPalette.clear();
  1307.       this.xmlDocument.entVals = null;
  1308.       this.xmlDocument.elemVals = null;
  1309.       this.xmlDocument.dtdElemVals = null;
  1310.       this.xmlDocument.dtdCache = null;
  1311.       ((Frame)this).setTitle("XML <PRO>");
  1312.    }
  1313.  
  1314.    void setUndoWidgets(boolean var1) {
  1315.       this.undoItem[0].setEnabled(var1);
  1316.       this.undoItem[1].setEnabled(var1);
  1317.    }
  1318.  
  1319.    void setValidateWidgets(boolean var1) {
  1320.       this.validateWidgets[0].setEnabled(var1);
  1321.       this.validateWidgets[1].setEnabled(var1);
  1322.       this.validateWidgets[2].setEnabled(var1);
  1323.    }
  1324.  
  1325.    void setWaitCursor() {
  1326.       ((Frame)this).setCursor(3);
  1327.    }
  1328.  
  1329.    void showDemoBox() {
  1330.       MesgBox var1 = new MesgBox(this, Strings.DemoVersion);
  1331.       ((Dialog)var1).show();
  1332.    }
  1333.  
  1334.    void undo() {
  1335.       this.undoManager.undo();
  1336.    }
  1337.  
  1338.    boolean validate(Element var1, boolean var2) {
  1339.       try {
  1340.          Node var3 = this.parser.validate(var1);
  1341.          if (var3 != null && var3.getNodeType() == 2) {
  1342.             var3 = this.parser.getErrorElement();
  1343.          }
  1344.  
  1345.          if (var3 != null) {
  1346.             (new StringBuffer(String.valueOf(Strings.InvalidAt))).append(var3).append(var3.getNodeName()).toString();
  1347.             String var7 = this.errorHandler.getWarning();
  1348.             if (var7 == null) {
  1349.                var7 = Strings.InvalidNode;
  1350.             }
  1351.  
  1352.             this.selectNodeInTree(var3);
  1353.             if (var2) {
  1354.                MultiMesgBox var5 = new MultiMesgBox(this.theApp, Strings.ValidationError, var7);
  1355.                ((Dialog)var5).show();
  1356.             }
  1357.  
  1358.             return false;
  1359.          }
  1360.  
  1361.          String var4 = Strings.ValidationSuccessful;
  1362.       } catch (Exception var6) {
  1363.          System.out.println(var6);
  1364.       }
  1365.  
  1366.       return true;
  1367.    }
  1368.  
  1369.    boolean validateDocument(boolean var1) {
  1370.       boolean var2 = false;
  1371.       this.setWaitCursor();
  1372.       var2 = this.validate(this.xmlDocument.document.getDocumentElement(), var1);
  1373.       this.setDefaultCursor();
  1374.       return var2;
  1375.    }
  1376.  
  1377.    void viewAttributes(boolean var1) {
  1378.       if (!var1) {
  1379.          this.viewAttributesItem.setIcon(blank);
  1380.       } else {
  1381.          this.viewAttributesItem.setIcon(check);
  1382.       }
  1383.  
  1384.       this.viewAttributes = var1;
  1385.       if (this.elems.theTree != null) {
  1386.          ((DefaultTreeModel)this.elems.theTree.getModel()).nodeStructureChanged((TreeNode)this.elems.theTree.getModel().getRoot());
  1387.          TreePath var2 = new TreePath(this.elems.selectedElem.getPath());
  1388.          this.elems.theTree.expandPath(var2);
  1389.          this.elems.theTree.setSelectionPath(var2);
  1390.          this.elems.theTree.scrollPathToVisible(var2);
  1391.       }
  1392.  
  1393.    }
  1394.  
  1395.    void viewElemPalette(boolean var1) {
  1396.       if (!var1) {
  1397.          this.viewElementItem.setIcon(blank);
  1398.       } else {
  1399.          this.viewElementItem.setIcon(check);
  1400.       }
  1401.  
  1402.       this.viewElemPalette = var1;
  1403.       if (!var1) {
  1404.          this.elemPalette.hide();
  1405.       } else {
  1406.          this.elemPalette.show();
  1407.       }
  1408.  
  1409.    }
  1410.  
  1411.    void viewEntityPalette(boolean var1) {
  1412.       if (!var1) {
  1413.          this.viewEntityItem.setIcon(blank);
  1414.       } else {
  1415.          this.viewEntityItem.setIcon(check);
  1416.       }
  1417.  
  1418.       this.viewEntityPalette = var1;
  1419.       if (!var1) {
  1420.          this.entityPalette.hide();
  1421.       } else {
  1422.          this.entityPalette.show();
  1423.       }
  1424.  
  1425.    }
  1426.  
  1427.    void viewText(boolean var1) {
  1428.       if (!var1) {
  1429.          this.viewTextItem.setIcon(blank);
  1430.       } else {
  1431.          this.viewTextItem.setIcon(check);
  1432.       }
  1433.  
  1434.       this.viewText = var1;
  1435.       if (this.elems.theTree != null) {
  1436.          ((DefaultTreeModel)this.elems.theTree.getModel()).nodeStructureChanged((TreeNode)this.elems.theTree.getModel().getRoot());
  1437.       }
  1438.  
  1439.       TreePath var2 = new TreePath(this.elems.selectedElem.getPath());
  1440.       this.elems.theTree.expandPath(var2);
  1441.       this.elems.theTree.setSelectionPath(var2);
  1442.       this.elems.theTree.scrollPathToVisible(var2);
  1443.    }
  1444.  
  1445.    public void windowActivated(WindowEvent var1) {
  1446.    }
  1447.  
  1448.    public void windowClosed(WindowEvent var1) {
  1449.    }
  1450.  
  1451.    public void windowClosing(WindowEvent var1) {
  1452.       ((Component)this).setVisible(false);
  1453.       ((Window)this).dispose();
  1454.       System.exit(0);
  1455.    }
  1456.  
  1457.    public void windowDeactivated(WindowEvent var1) {
  1458.    }
  1459.  
  1460.    public void windowDeiconified(WindowEvent var1) {
  1461.    }
  1462.  
  1463.    public void windowIconified(WindowEvent var1) {
  1464.    }
  1465.  
  1466.    public void windowOpened(WindowEvent var1) {
  1467.    }
  1468. }
  1469.