home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2001 December / dppcpro1201.iso / Extras / maple / Viewer / WebEQ / MMLViewerInstall.cab / MMLViewerApplet.cab / webeq3 / P2CTester.class (.txt) < prev    next >
Encoding:
Java Class File  |  2001-05-24  |  13.2 KB  |  497 lines

  1. package webeq3;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.BorderLayout;
  5. import java.awt.Button;
  6. import java.awt.CheckboxMenuItem;
  7. import java.awt.Color;
  8. import java.awt.Component;
  9. import java.awt.Container;
  10. import java.awt.FileDialog;
  11. import java.awt.FlowLayout;
  12. import java.awt.Font;
  13. import java.awt.Frame;
  14. import java.awt.Graphics;
  15. import java.awt.Label;
  16. import java.awt.Menu;
  17. import java.awt.MenuBar;
  18. import java.awt.MenuItem;
  19. import java.awt.Panel;
  20. import java.awt.TextField;
  21. import java.awt.Window;
  22. import java.awt.event.ActionEvent;
  23. import java.awt.event.ActionListener;
  24. import java.awt.event.ItemEvent;
  25. import java.awt.event.ItemListener;
  26. import java.io.DataInputStream;
  27. import java.io.FileInputStream;
  28. import java.io.IOException;
  29. import java.util.EventObject;
  30. import java.util.Vector;
  31. import webeq3.app.Handler;
  32. import webeq3.app.PEquation;
  33. import webeq3.fonts.FontBroker;
  34. import webeq3.parser.Parser;
  35. import webeq3.parser.mathml.P2CConverter;
  36. import webeq3.parser.mathml.P2CConverterException;
  37. import webeq3.schema.Box;
  38. import webeq3.schema.ContentBox;
  39. import webeq3.schema.MScripts;
  40. import webeq3.schema.Normalizer;
  41. import webeq3.util.ErrorHandler;
  42. import webeq3.util.OutputHandler;
  43.  
  44. public class P2CTester extends Frame implements ActionListener, ItemListener {
  45.    Vector mathMLVector = new Vector();
  46.    Vector normalizedVector = new Vector();
  47.    Vector answerVector = new Vector();
  48.    Vector descVector = new Vector();
  49.    int idx = 0;
  50.    Parser parser;
  51.    P2CConverter p2cconverter;
  52.    // $FF: renamed from: eq webeq3.app.PEquation
  53.    PEquation field_0;
  54.    Handler handler;
  55.    ErrorHandler err;
  56.    Button nextButton;
  57.    Button prevButton;
  58.    Button speedButton;
  59.    TextField numInput;
  60.    Label description;
  61.    Frame rawframe = new Frame("Raw MathML Source");
  62.    Frame presentationframe = new Frame("Presentation Source");
  63.    Frame normalizedframe = new Frame("Normalized Presentation Source");
  64.    Frame contentframe = new Frame("Converted Content Source");
  65.    OutputHandler oh_raw;
  66.    OutputHandler oh_presentation;
  67.    OutputHandler oh_normalized;
  68.    OutputHandler oh_content;
  69.    static long time = 0L;
  70.    // $FF: renamed from: rt java.lang.Runtime
  71.    Runtime field_1;
  72.    boolean report;
  73.    Box rawRoot;
  74.    Box presentationRoot;
  75.    Box normalizedRoot;
  76.    Box contentRoot;
  77.    Box answerNormalizedRoot;
  78.    Box answerRoot;
  79.  
  80.    public P2CTester() {
  81.       this.oh_raw = new OutputHandler(this.rawframe);
  82.       this.oh_presentation = new OutputHandler(this.presentationframe);
  83.       this.oh_normalized = new OutputHandler(this.normalizedframe);
  84.       this.oh_content = new OutputHandler(this.contentframe);
  85.       this.field_1 = Runtime.getRuntime();
  86.       this.report = false;
  87.    }
  88.  
  89.    public void actionPerformed(ActionEvent var1) {
  90.       String var2 = var1.getActionCommand();
  91.       if (var2.equals("Open")) {
  92.          FileDialog var3 = new FileDialog(this, "WebEQ: Open", 0);
  93.          var3.setDirectory("c:\\");
  94.          ((Component)var3).setVisible(true);
  95.          if (var3.getDirectory() != null && var3.getFile() != null) {
  96.             String var4 = var3.getFile();
  97.             if (var4.endsWith(".*.*")) {
  98.                var3.setFile(var4.substring(0, var4.length() - 4));
  99.             }
  100.  
  101.             String var5 = var3.getDirectory();
  102.             System.out.println("Loading from file: " + var5 + var4);
  103.             this.initFromFile(var5 + var4);
  104.             ((Component)this).repaint();
  105.          }
  106.       } else if (var2.equals("Raw MathML Source")) {
  107.          this.oh_raw.setVisible(true);
  108.       } else if (var2.equals("Presentation Source")) {
  109.          this.oh_presentation.setVisible(true);
  110.       } else if (var2.equals("Normalized Source")) {
  111.          this.oh_normalized.setVisible(true);
  112.       } else if (var2.equals("Content Source")) {
  113.          this.oh_content.setVisible(true);
  114.       } else if (var2.equals("Exit")) {
  115.          System.exit(0);
  116.       } else if (((long)((AWTEvent)var1).getID() & 8L) != 0L) {
  117.          this.idx = Integer.parseInt(var2);
  118.          this.setEquation(this.idx);
  119.          ((Component)this).repaint();
  120.       }
  121.  
  122.    }
  123.  
  124.    private void initFromFile(String var1) {
  125.       this.descVector.removeAllElements();
  126.       this.mathMLVector.removeAllElements();
  127.       this.answerVector.removeAllElements();
  128.       this.idx = 0;
  129.  
  130.       try {
  131.          DataInputStream var2 = new DataInputStream(new FileInputStream(var1));
  132.          String var3 = var2.readLine();
  133.          boolean var4 = true;
  134.          boolean var5 = false;
  135.          boolean var6 = false;
  136.  
  137.          for(String var7 = ""; var3 != null; var3 = var2.readLine()) {
  138.             if (var4) {
  139.                if (!"".equals(var3)) {
  140.                   this.descVector.addElement(var3);
  141.                   var4 = false;
  142.                   var5 = true;
  143.                }
  144.             } else {
  145.                int var8 = var3.indexOf("</math>");
  146.                if (var8 != -1) {
  147.                   var7 = var7 + var3.substring(0, var8 + 7);
  148.                   if (var6) {
  149.                      this.normalizedVector.addElement(var7);
  150.                      var7 = var3.substring(var8 + 7);
  151.                      var6 = false;
  152.                   } else if (var5) {
  153.                      this.mathMLVector.addElement(var7);
  154.                      var7 = var3.substring(var8 + 7);
  155.                      var5 = false;
  156.                      var6 = true;
  157.                   } else {
  158.                      this.answerVector.addElement(var7);
  159.                      var7 = var3.substring(var8 + 7);
  160.                      var4 = true;
  161.                   }
  162.                } else {
  163.                   var7 = var7 + var3;
  164.                }
  165.             }
  166.          }
  167.       } catch (IOException var9) {
  168.          System.out.println("Problems reading options from file: " + var1);
  169.          System.out.println("Going on anyway...");
  170.       }
  171.  
  172.       this.setEquation(this.idx);
  173.    }
  174.  
  175.    void initTests(String[] var1) {
  176.       if (var1.length == 0) {
  177.          this.descVector.addElement("x + y z");
  178.          this.mathMLVector.addElement("<math><mi>x</mi><mo>+</mo><mi>y</mi></math>");
  179.          this.normalizedVector.addElement("<math><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow></math>");
  180.          this.answerVector.addElement("<math><apply><plus/><ci>x</ci><ci>y</ci></apply></math>");
  181.       } else {
  182.          this.initFromFile(var1[0]);
  183.       }
  184.  
  185.    }
  186.  
  187.    public void itemStateChanged(ItemEvent var1) {
  188.       CheckboxMenuItem var2 = (CheckboxMenuItem)((EventObject)var1).getSource();
  189.       if (((MenuItem)var2).getLabel().equals("Linebreaks")) {
  190.          this.field_0.linebreak = var2.getState();
  191.       } else if (((MenuItem)var2).getLabel().equals("Allow Cut")) {
  192.          this.field_0.allow_cut = var2.getState();
  193.       }
  194.  
  195.       ((Component)this).repaint();
  196.    }
  197.  
  198.    public static void main(String[] var0) {
  199.       time = System.currentTimeMillis();
  200.       P2CTester var1 = new P2CTester();
  201.       var1.start(var0);
  202.    }
  203.  
  204.    public void paint(Graphics var1) {
  205.       long var2 = System.currentTimeMillis();
  206.       this.field_0.redraw();
  207.       this.field_0.repaint();
  208.       this.presentationRoot = this.field_0.root.getCopy();
  209.  
  210.       try {
  211.          this.normalizedRoot = this.field_0.root.getCopy();
  212.          Normalizer.normalize(this.normalizedRoot);
  213.       } catch (Exception var6) {
  214.          System.out.println("Normalization failed: " + var6);
  215.       }
  216.  
  217.       try {
  218.          Box var4 = this.normalizedRoot.getCopy();
  219.          this.p2cconverter.convert(var4, this.field_0.markupRoot);
  220.          this.contentRoot = this.field_0.markupRoot.getCopy();
  221.       } catch (P2CConverterException var5) {
  222.          System.out.println("P2C conversion failed: " + var5);
  223.       }
  224.  
  225.       this.oh_raw.reset();
  226.       this.rawRoot.print("", this.oh_raw);
  227.       this.oh_presentation.reset();
  228.       this.presentationRoot.print("", this.oh_presentation);
  229.       this.oh_normalized.reset();
  230.       this.normalizedRoot.print("", this.oh_normalized);
  231.       this.oh_content.reset();
  232.       this.contentRoot.print("", this.oh_content);
  233.       if (!this.treeEqualityCheck((ContentBox)this.contentRoot, (ContentBox)this.answerRoot)) {
  234.          this.contentRoot.printDebug();
  235.          this.answerRoot.printDebug();
  236.       }
  237.  
  238.    }
  239.  
  240.    public void setEquation(int var1) {
  241.       this.numInput.setText("" + var1);
  242.       String var2 = (String)this.descVector.elementAt(var1);
  243.       short var3 = 200;
  244.       if (var2.length() < var3) {
  245.          for(int var4 = 0; var4 < var3 - var2.length(); ++var4) {
  246.             var2 = var2 + " ";
  247.          }
  248.       }
  249.  
  250.       this.description.setText(var2);
  251.       String var11 = (String)this.normalizedVector.elementAt(var1);
  252.       this.field_0.setRoot(new Box(this.field_0), new ContentBox(this.field_0));
  253.       this.field_0.initBG();
  254.  
  255.       try {
  256.          this.parser.parse(var11, "", this.field_0.markupRoot, this.err);
  257.       } catch (Exception var10) {
  258.          System.out.println(var10);
  259.          ((Throwable)var10).printStackTrace();
  260.       }
  261.  
  262.       this.answerNormalizedRoot = this.field_0.root.getCopy();
  263.       String var5 = (String)this.answerVector.elementAt(var1);
  264.       this.field_0.setRoot(new Box(this.field_0), new ContentBox(this.field_0));
  265.       this.field_0.initBG();
  266.  
  267.       try {
  268.          this.parser.parse(var5, "", this.field_0.markupRoot, this.err);
  269.       } catch (Exception var9) {
  270.          System.out.println(var9);
  271.          ((Throwable)var9).printStackTrace();
  272.       }
  273.  
  274.       this.answerRoot = this.field_0.markupRoot;
  275.       String var6 = (String)this.mathMLVector.elementAt(var1);
  276.       this.field_0.setRoot(new Box(this.field_0), new ContentBox(this.field_0));
  277.       this.field_0.initBG();
  278.  
  279.       try {
  280.          this.parser.parse(var6, "", this.field_0.markupRoot, this.err);
  281.          this.field_0.registerActions();
  282.       } catch (Exception var8) {
  283.          System.out.println(var8);
  284.          ((Throwable)var8).printStackTrace();
  285.       }
  286.  
  287.       this.rawRoot = this.field_0.markupRoot.getCopy();
  288.    }
  289.  
  290.    void start(String[] var1) {
  291.       ((Window)this).addWindowListener(new TDWindowAdapter(this));
  292.       ((Container)this).setLayout(new BorderLayout(5, 5));
  293.       ((Component)this).setSize(600, 400);
  294.       ((Component)this).setBackground(Color.white);
  295.       MenuBar var2 = new MenuBar();
  296.       Menu var3 = new Menu("File");
  297.       var3.add(new MenuItem("Open"));
  298.       var3.add(new MenuItem("-"));
  299.       var3.add(new MenuItem("Exit"));
  300.       ((MenuItem)var3).addActionListener(this);
  301.       var2.add(var3);
  302.       Menu var4 = new Menu("Parameters");
  303.       CheckboxMenuItem var5 = new CheckboxMenuItem("Linebreaks");
  304.       var5.addItemListener(this);
  305.       var4.add(var5);
  306.       var5 = new CheckboxMenuItem("Allow Cut");
  307.       var5.addItemListener(this);
  308.       var4.add(var5);
  309.       var2.add(var4);
  310.       Menu var6 = new Menu("View");
  311.       var6.add(new MenuItem("Raw MathML Source"));
  312.       var6.add(new MenuItem("Presentation Source"));
  313.       var6.add(new MenuItem("Normalized Source"));
  314.       var6.add(new MenuItem("Content Source"));
  315.       ((MenuItem)var6).addActionListener(this);
  316.       var2.add(var6);
  317.       ((Frame)this).setMenuBar(var2);
  318.       Color var7 = new Color(255, 245, 197);
  319.       this.oh_raw.setBackground(var7);
  320.       this.oh_raw.setColor(var7);
  321.       this.oh_raw.setTitle("Raw MathML Source");
  322.       this.oh_raw.setSize(400, 300);
  323.       this.oh_presentation.setBackground(var7);
  324.       this.oh_presentation.setColor(var7);
  325.       this.oh_presentation.setTitle("Presentation Source");
  326.       this.oh_presentation.setSize(400, 300);
  327.       this.oh_normalized.setBackground(var7);
  328.       this.oh_normalized.setColor(var7);
  329.       this.oh_normalized.setTitle("Normalized Source");
  330.       this.oh_normalized.setSize(400, 300);
  331.       this.oh_content.setBackground(var7);
  332.       this.oh_content.setColor(var7);
  333.       this.oh_content.setTitle("Content Source");
  334.       this.oh_content.setSize(400, 300);
  335.       Panel var8 = new Panel();
  336.       ((Container)var8).setLayout(new FlowLayout(0));
  337.       ((Component)var8).setBackground(new Color(220, 220, 220));
  338.       String var9 = "prev";
  339.       this.prevButton = new Button(var9);
  340.       this.prevButton.setFont(new Font("TimesRoman", 0, 14));
  341.       this.prevButton.addMouseListener(new TDButtonAdapter(this, var9));
  342.       ((Container)var8).add(this.prevButton);
  343.       var9 = "next";
  344.       this.nextButton = new Button(var9);
  345.       this.nextButton.setFont(new Font("TimesRoman", 0, 14));
  346.       this.nextButton.addMouseListener(new TDButtonAdapter(this, var9));
  347.       ((Container)var8).add(this.nextButton);
  348.       var9 = "check all";
  349.       this.speedButton = new Button(var9);
  350.       this.speedButton.setFont(new Font("TimesRoman", 0, 14));
  351.       this.speedButton.addMouseListener(new TDButtonAdapter(this, var9));
  352.       ((Container)var8).add(this.speedButton);
  353.       Label var10 = new Label("Test #");
  354.       var10.setAlignment(2);
  355.       ((Container)var8).add(var10);
  356.       this.numInput = new TextField(3);
  357.       this.numInput.setFont(new Font("TimesRoman", 0, 14));
  358.       this.numInput.addActionListener(this);
  359.       ((Container)var8).add(this.numInput);
  360.       this.description = new Label();
  361.       this.description.setAlignment(0);
  362.       ((Container)var8).add(this.description);
  363.       ((Container)this).add(var8, "North");
  364.       this.handler = new Handler();
  365.       this.handler.setParameters(this, var1);
  366.       this.err = new ErrorHandler();
  367.       this.field_0 = new PEquation(this.handler);
  368.       this.field_0.linebreak = false;
  369.       this.field_0.setControls(true);
  370.       this.field_0.setPadding(5);
  371.       this.field_0.allow_cut = false;
  372.       this.field_0.registerControls();
  373.       this.field_0.setPointSize(36);
  374.       this.field_0.fixSize(400, 200);
  375.       FontBroker.initialize(true);
  376.       ((Container)this).add(this.field_0, "Center");
  377.  
  378.       try {
  379.          this.parser = (Parser)Class.forName("webeq3.parser.mathml.mathml").newInstance();
  380.          this.parser.init(this.handler);
  381.       } catch (InstantiationException var14) {
  382.          System.out.println(var14);
  383.       } catch (IllegalAccessException var15) {
  384.          System.out.println(var15);
  385.       } catch (ClassNotFoundException var16) {
  386.          System.out.println(var16);
  387.       }
  388.  
  389.       this.p2cconverter = new P2CConverter();
  390.       this.initTests(var1);
  391.       this.setEquation(this.idx);
  392.       ((Component)this).setVisible(true);
  393.       ((Component)this).repaint();
  394.    }
  395.  
  396.    public boolean treeEqualityCheck(ContentBox var1, ContentBox var2) {
  397.       boolean var3 = true;
  398.       if (var1.name != null && var2.name != null) {
  399.          var3 &= var1.name.equals(var2.name);
  400.          if (!var3) {
  401.             System.out.println("\nProblem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  402.             System.out.println("node " + var1.name + " differs from " + var2.name);
  403.             return false;
  404.          }
  405.       } else if (var1.name != null || var2.name != null) {
  406.          System.out.println("\nProblem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  407.          System.out.println("node " + var1.name + " differs from " + var2.name);
  408.          return false;
  409.       }
  410.  
  411.       var3 &= ((Box)var1).getNumChildren() == ((Box)var2).getNumChildren();
  412.       if (!var3) {
  413.          System.out.println("\nProblem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  414.          System.out.println("node " + var1.name + " differs in number of children from " + var2.name);
  415.          return false;
  416.       } else {
  417.          if (((Box)var1).getNumChildren() == 0) {
  418.             if (var1.adata != null && var2.adata != null) {
  419.                var3 &= var1.adata.equals(var2.adata);
  420.                if (!var3) {
  421.                   System.out.println("\nProblem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  422.                   System.out.println("node data " + var1.adata + " differs from " + var2.adata);
  423.                   return false;
  424.                }
  425.             } else if (var1.adata != null || var2.adata != null) {
  426.                System.out.println("\nProblem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  427.                System.out.println("node data " + var1.adata + " differs from " + var2.adata);
  428.                return false;
  429.             }
  430.          }
  431.  
  432.          for(int var4 = 0; var4 < ((Box)var1).getNumChildren(); ++var4) {
  433.             try {
  434.                var3 &= this.treeEqualityCheck((ContentBox)((Box)var1).getChild(var4), (ContentBox)((Box)var2).getChild(var4));
  435.             } catch (ClassCastException var6) {
  436.             }
  437.          }
  438.  
  439.          return var3;
  440.       }
  441.    }
  442.  
  443.    public boolean normalizedTreeEqualityCheck(Box var1, Box var2) {
  444.       boolean var3 = true;
  445.       var3 &= var1.getClass().getName().equals(var2.getClass().getName());
  446.       if (!var3) {
  447.          System.out.println("\nNormalization problem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  448.          System.out.println("node " + var1 + " differs from " + var2);
  449.          return false;
  450.       } else {
  451.          var3 &= var1.getNumChildren() == var2.getNumChildren();
  452.          if (var3 || var1 instanceof MScripts && Math.abs(var1.getNumChildren() - var2.getNumChildren()) == 1) {
  453.             var3 = true;
  454.             if (var1.getNumChildren() == 0) {
  455.                if (var1.adata != null && var2.adata != null) {
  456.                   var3 &= var1.adata.equals(var2.adata);
  457.                   if (!var3) {
  458.                      System.out.println("\nNormalization problem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  459.                      System.out.println("node data " + var1.adata + " differs from " + var2.adata);
  460.                      return false;
  461.                   }
  462.                } else if (var1.adata != null || var2.adata != null) {
  463.                   System.out.println("\nNormalization problem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  464.                   System.out.println("node data " + var1.adata + " differs from " + var2.adata);
  465.                   return false;
  466.                }
  467.             }
  468.  
  469.             int var4 = 0;
  470.  
  471.             for(int var7 = 0; var7 < var1.getNumChildren(); ++var7) {
  472.                Box var5 = var1.getChild(var7);
  473.                Box var6 = var2.getChild(var4);
  474.                if (var5.getClass().getName().equals("webeq3.schema.Box")) {
  475.                   ++var7;
  476.                   var5 = var1.getChild(var7);
  477.                }
  478.  
  479.                if (var6.getClass().getName().equals("webeq3.schema.Box")) {
  480.                   ++var4;
  481.                   var6 = var2.getChild(var4);
  482.                }
  483.  
  484.                var3 &= this.normalizedTreeEqualityCheck(var5, var6);
  485.                ++var4;
  486.             }
  487.  
  488.             return var3;
  489.          } else {
  490.             System.out.println("\nNormalization problem in test " + this.idx + ": " + (String)this.descVector.elementAt(this.idx));
  491.             System.out.println("node " + var1 + " differs in number of children from " + var2);
  492.             return false;
  493.          }
  494.       }
  495.    }
  496. }
  497.