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

  1. package webeq3.parser.mathml;
  2.  
  3. import java.util.Enumeration;
  4. import webeq3.schema.Box;
  5. import webeq3.schema.ContentBox;
  6. import webeq3.schema.MO;
  7. import webeq3.schema.MRow;
  8. import webeq3.schema.MTable;
  9.  
  10. public class PreRuleSet extends P2CRuleSet {
  11.    PreRuleSet(P2CConverter var1) {
  12.       super(var1);
  13.    }
  14.  
  15.    public void applyRule(int var1, Box var2, ContentBox var3) throws P2CConverterException {
  16.       switch (var1) {
  17.          case 16:
  18.             this.processVector(var2, var3);
  19.             break;
  20.          case 17:
  21.             this.processMatrix(var2, var3);
  22.       }
  23.  
  24.    }
  25.  
  26.    public int getRuleMatch(Box var1) throws P2CConverterException {
  27.       byte var2 = -1;
  28.       if (isVector(var1)) {
  29.          var2 = 16;
  30.       } else if (isMatrix(var1)) {
  31.          var2 = 17;
  32.       }
  33.  
  34.       return var2;
  35.    }
  36.  
  37.    public static boolean isVector(Box var0) throws P2CConverterException {
  38.       if (isMatrix(var0)) {
  39.          Box var5 = var0.getChild(1).getChild(0);
  40.          if (var5.getChild(0).children.size() == 1) {
  41.             return true;
  42.          } else {
  43.             return var5.children.size() == 1;
  44.          }
  45.       } else {
  46.          if (var0.box_id != 0) {
  47.             Box var1 = var0.getParent().getChild(var0.box_id - 1);
  48.             if (var1 == null || var1 instanceof MO && var1.adata.equals("⁡")) {
  49.                return false;
  50.             }
  51.          }
  52.  
  53.          if (var0.children != null && var0.children.size() == 3) {
  54.             Box var2 = var0.getChild(0);
  55.             if (var2 instanceof MO && var2.adata.equals("(")) {
  56.                var2 = var0.getChild(2);
  57.                if (var2 instanceof MO && var2.adata.equals(")")) {
  58.                   var2 = var0.getChild(1);
  59.                   if (!(var2 instanceof MRow)) {
  60.                      return false;
  61.                   } else {
  62.                      int var3 = var2.children.size();
  63.                      if (var3 > 1 && var3 % 1 == 0) {
  64.                         for(int var4 = 1; var4 < var3; var4 += 2) {
  65.                            if (!var2.getChild(var4).adata.equals(",")) {
  66.                               return false;
  67.                            }
  68.                         }
  69.  
  70.                         return true;
  71.                      } else {
  72.                         return false;
  73.                      }
  74.                   }
  75.                } else {
  76.                   return false;
  77.                }
  78.             } else {
  79.                return false;
  80.             }
  81.          } else {
  82.             return false;
  83.          }
  84.       }
  85.    }
  86.  
  87.    public static boolean isMatrix(Box var0) throws P2CConverterException {
  88.       if (var0.children != null && var0.children.size() == 3) {
  89.          Box var1 = (Box)var0.children.elementAt(0);
  90.          if (var1 instanceof MO && (var1.adata.equals("(") || var1.adata.equals("[") || var1.adata.equals("|"))) {
  91.             var1 = (Box)var0.children.elementAt(2);
  92.             if (var1 instanceof MO && (var1.adata.equals(")") || var1.adata.equals("]") || var1.adata.equals("|"))) {
  93.                var1 = (Box)var0.children.elementAt(1);
  94.                if (var1 instanceof MRow && var1.children.size() == 1) {
  95.                   var1 = var1.getChild(0);
  96.                   if (var1 instanceof MTable && var1.children.size() != 0) {
  97.                      Box var2 = var1.getChild(0);
  98.                      int var3 = var2.children.size();
  99.                      if (var3 == 0) {
  100.                         return false;
  101.                      } else {
  102.                         Enumeration var4 = var1.children.elements();
  103.  
  104.                         while(var4.hasMoreElements()) {
  105.                            var2 = (Box)var4.nextElement();
  106.                            if (var2.children.size() != var3) {
  107.                               throw new P2CConverterException("Matrix with different sized rows");
  108.                            }
  109.                         }
  110.  
  111.                         return true;
  112.                      }
  113.                   } else {
  114.                      return false;
  115.                   }
  116.                } else {
  117.                   return false;
  118.                }
  119.             } else {
  120.                return false;
  121.             }
  122.          } else {
  123.             return false;
  124.          }
  125.       } else {
  126.          return false;
  127.       }
  128.    }
  129.  
  130.    public void processVector(Box var1, ContentBox var2) throws P2CConverterException {
  131.       ContentBox var3 = new ContentBox(var2, 179, -1);
  132.       var3.name = "vector";
  133.       ((Box)var2).addChild(var3);
  134.       Box var4 = var1.getChild(1);
  135.  
  136.       for(int var5 = 0; var5 < var4.children.size(); var5 += 2) {
  137.          Box var6 = var4.getChild(var5);
  138.          super.converter.processExpression(var6, var3);
  139.       }
  140.  
  141.    }
  142.  
  143.    public void processMatrix(Box var1, ContentBox var2) throws P2CConverterException {
  144.       Box var3 = var1.getChild(1).getChild(0);
  145.       ContentBox var4 = new ContentBox(var2, 176, -1);
  146.       var4.name = "matrix";
  147.       ((Box)var2).addChild(var4);
  148.  
  149.       for(int var5 = 0; var5 < var3.children.size(); ++var5) {
  150.          Box var6 = var3.getChild(var5);
  151.          this.processRow(var6, var4);
  152.       }
  153.  
  154.    }
  155.  
  156.    public void processRow(Box var1, ContentBox var2) throws P2CConverterException {
  157.       ContentBox var3 = new ContentBox(var2, 177, -1);
  158.       var3.name = "matrixrow";
  159.       ((Box)var2).addChild(var3);
  160.  
  161.       for(int var4 = 0; var4 < var1.children.size(); ++var4) {
  162.          Box var5 = var1.getChild(var4).getChild(0);
  163.          super.converter.processExpression(var5, var3);
  164.       }
  165.  
  166.    }
  167. }
  168.