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

  1. package webeq3.parser.mathml;
  2.  
  3. import java.io.StringReader;
  4. import java.util.Stack;
  5. import webeq3.constants.AttributeConstants;
  6. import webeq3.constants.EntityNames;
  7. import webeq3.parser.Parser;
  8. import webeq3.schema.Box;
  9. import webeq3.schema.ContentBox;
  10. import webeq3.schema.MAction;
  11. import webeq3.schema.MError;
  12. import webeq3.schema.MFenced;
  13. import webeq3.schema.MFrac;
  14. import webeq3.schema.MI;
  15. import webeq3.schema.MMultiscripts;
  16. import webeq3.schema.MN;
  17. import webeq3.schema.MO;
  18. import webeq3.schema.MOver;
  19. import webeq3.schema.MPadded;
  20. import webeq3.schema.MPhantom;
  21. import webeq3.schema.MRoot;
  22. import webeq3.schema.MRow;
  23. import webeq3.schema.MS;
  24. import webeq3.schema.MSpace;
  25. import webeq3.schema.MSqrt;
  26. import webeq3.schema.MStyle;
  27. import webeq3.schema.MSub;
  28. import webeq3.schema.MSubsup;
  29. import webeq3.schema.MSup;
  30. import webeq3.schema.MTable;
  31. import webeq3.schema.MTd;
  32. import webeq3.schema.MText;
  33. import webeq3.schema.MTr;
  34. import webeq3.schema.MUnder;
  35. import webeq3.schema.MUnderover;
  36. import webeq3.util.ErrorHandler;
  37. import webeq3.util.OutputHandler;
  38.  
  39. public class mathml extends Parser implements MathMLConstants, AttributeConstants {
  40.    // $FF: renamed from: st webeq3.parser.mathml.Tokenizer
  41.    Tokenizer field_0 = null;
  42.    static final String copyright = "MathML parser: Copyright (c) 1997 The Regents of the University of Minnesota";
  43.    private Stack start_tag_stack = new Stack();
  44.  
  45.    public void parse(String var1, String var2, Box var3, ErrorHandler var4) {
  46.       this.field_0 = new Tokenizer(new StringReader(var1));
  47.  
  48.       try {
  49.          this.parseSequence(var3);
  50.          String var5 = var3.getRawAttribute(84);
  51.          if (var5 == null) {
  52.             var5 = var3.getRawAttribute(85);
  53.          }
  54.  
  55.          if (var5 != null && var5.equals("block")) {
  56.             var3.ppeer.attribute_stack[21].push("true");
  57.          }
  58.  
  59.       } catch (ParseException var7) {
  60.          var7.printError(var4);
  61.          this.start_tag_stack.removeAllElements();
  62.       } catch (Exception var8) {
  63.          ((OutputHandler)var4).println("Unknown parsing problem...");
  64.          ((Throwable)var8).printStackTrace();
  65.          this.start_tag_stack.removeAllElements();
  66.       }
  67.    }
  68.  
  69.    public boolean parseParam(Box var1, String var2, boolean var3) throws ParseException {
  70.       boolean var5 = false;
  71.  
  72.       while(true) {
  73.          boolean var4 = true;
  74.          Object var6 = null;
  75.          boolean var7 = false;
  76.          String var8 = "";
  77.  
  78.          while(true) {
  79.             Token var11 = this.field_0.nextToken();
  80.             if (var11.ttype == 61) {
  81.                if (var8.length() <= 0) {
  82.                   throw new ParseException("missing parameter name in " + var2, this.field_0);
  83.                }
  84.                break;
  85.             }
  86.  
  87.             if (var11.ttype == -1) {
  88.                throw new ParseException("unexpected EOF: malformed tag?", this.field_0);
  89.             }
  90.  
  91.             if (var11.ttype == 62) {
  92.                if (var3) {
  93.                   throw new ParseException("malformed empty element", this.field_0);
  94.                }
  95.  
  96.                if (var8.length() > 0) {
  97.                   throw new ParseException("missing '=' in parameter in " + var2, this.field_0);
  98.                }
  99.  
  100.                var7 = true;
  101.                break;
  102.             }
  103.  
  104.             if (var11.ttype == 47) {
  105.                var11 = this.field_0.nextToken();
  106.                if (var11.ttype != 62) {
  107.                   throw new ParseException("malformed empty element", this.field_0);
  108.                }
  109.  
  110.                this.start_tag_stack.pop();
  111.                var7 = true;
  112.                var5 = true;
  113.                break;
  114.             }
  115.  
  116.             if (var8.length() == 0 && var11.ttype != -3) {
  117.                throw new ParseException("parameters to tags must start with words", this.field_0);
  118.             }
  119.  
  120.             var8 = var8 + var11.sval;
  121.          }
  122.  
  123.          if (var7) {
  124.             return var5;
  125.          }
  126.  
  127.          var8 = var8.toLowerCase();
  128.          String var9 = "";
  129.          Token var13 = this.field_0.nextToken();
  130.          if (var13.ttype != 39 && var13.ttype != 34) {
  131.             while(var13.ttype != -1 && var13.ttype != -2) {
  132.                if (var13.ttype == 62 || var13.ttype == 47) {
  133.                   if ("".equals(var9)) {
  134.                      throw new ParseException("missing parameter value", this.field_0);
  135.                   }
  136.  
  137.                   this.field_0.pushBack();
  138.                   break;
  139.                }
  140.  
  141.                var9 = var9 + var13.sval;
  142.                var13 = this.field_0.nextTokenOrSep();
  143.             }
  144.          } else {
  145.             int var10 = var13.ttype;
  146.  
  147.             for(var13 = this.field_0.nextTokenOrSep(); var13.ttype != -1 && var13.ttype != var10; var13 = this.field_0.nextTokenOrSep()) {
  148.                var9 = var9 + var13.sval;
  149.             }
  150.          }
  151.  
  152.          if (var13.ttype == -1) {
  153.             throw new ParseException("run away parameter value?", this.field_0);
  154.          }
  155.  
  156.          if (var8.startsWith("xml") || var8.startsWith("xlink")) {
  157.             var4 = false;
  158.          }
  159.  
  160.          if (var8.indexOf(":") != -1) {
  161.             String var15 = var8.substring(0, var8.indexOf(":"));
  162.             if (!var15.equals("dsi")) {
  163.                var4 = false;
  164.             }
  165.          }
  166.  
  167.          if (var4) {
  168.             if (!MathMLDictionary.AttributeTypes.containsKey(var8)) {
  169.                throw new ParseException(var8 + " is an invalid parameter name", this.field_0);
  170.             }
  171.  
  172.             int var16 = MathMLDictionary.getAttribute(var8);
  173.             var1.setAttribute(var16, this.toUnicode(var9));
  174.          }
  175.       }
  176.    }
  177.  
  178.    public void parseSequence(Box var1) throws ParseException {
  179.       boolean var2 = false;
  180.       String var3 = "";
  181.       Object var4 = null;
  182.  
  183.       while(!var2) {
  184.          Token var5 = this.field_0.nextTokenOrSep();
  185.          switch (var5.ttype) {
  186.             case -3:
  187.             case -2:
  188.                var3 = var3 + var5.sval;
  189.                break;
  190.             case -1:
  191.                if (!this.start_tag_stack.empty()) {
  192.                   throw new ParseException("unexpected EOF: missing end tag ?", this.field_0);
  193.                }
  194.  
  195.                var2 = true;
  196.                break;
  197.             case 60:
  198.                var5 = this.field_0.nextToken();
  199.                if (var5.ttype == 33) {
  200.                   var5 = this.field_0.nextToken();
  201.                   String var13 = var5.sval;
  202.                   if (var13.length() < 2 || !var13.substring(0, 2).equals("--")) {
  203.                      throw new ParseException("malformed comment", this.field_0);
  204.                   }
  205.  
  206.                   Object var15 = null;
  207.                   boolean var8 = true;
  208.  
  209.                   while(var5.ttype != -1) {
  210.                      Token var16 = var5;
  211.                      var5 = this.field_0.nextToken();
  212.                      if (var5.ttype == 62) {
  213.                         var13 = var16.sval;
  214.                         if (var13.length() > 2) {
  215.                            var13 = var13.substring(var13.length() - 2);
  216.                         }
  217.  
  218.                         if (var13.equals("--")) {
  219.                            var8 = false;
  220.                            break;
  221.                         }
  222.                      }
  223.                   }
  224.  
  225.                   if (var8) {
  226.                      throw new ParseException("unexpected EOF: runaway comment?", this.field_0);
  227.                   }
  228.                } else if (var5.ttype == 47) {
  229.                   var5 = this.field_0.nextToken();
  230.                   Token var6 = this.field_0.nextToken();
  231.                   if (var6.ttype == 58) {
  232.                      var5 = this.field_0.nextToken();
  233.                   } else {
  234.                      this.field_0.pushBack();
  235.                   }
  236.  
  237.                   if (var5.ttype != -3) {
  238.                      throw new ParseException("malformed end tag", this.field_0);
  239.                   }
  240.  
  241.                   String var7 = (String)this.start_tag_stack.pop();
  242.                   if (!var7.equals(var5.sval.toLowerCase())) {
  243.                      throw new ParseException("unexpected EOF: missing end tag for <" + var7 + ">", this.field_0);
  244.                   }
  245.  
  246.                   var5 = this.field_0.nextToken();
  247.                   if (var5.ttype != 62) {
  248.                      throw new ParseException("missing '>'", this.field_0);
  249.                   }
  250.  
  251.                   if (var3.length() != 0) {
  252.                      if (var3.length() > 1 && var3.charAt(0) == ' ') {
  253.                         var3 = var3.substring(1);
  254.                      }
  255.  
  256.                      if (var3.length() > 1 && var3.charAt(var3.length() - 1) == ' ') {
  257.                         var3 = var3.substring(0, var3.length() - 1);
  258.                      }
  259.  
  260.                      var1.addData(var3);
  261.                   }
  262.  
  263.                   var2 = true;
  264.                } else {
  265.                   if (var3.length() != 0) {
  266.                      if (var3.length() > 1 && var3.charAt(0) == ' ') {
  267.                         var3 = var3.substring(1);
  268.                      }
  269.  
  270.                      if (var3.length() > 1 && var3.charAt(var3.length() - 1) == ' ') {
  271.                         var3 = var3.substring(0, var3.length() - 1);
  272.                      }
  273.  
  274.                      var1.addData(var3);
  275.                      var3 = "";
  276.                   }
  277.  
  278.                   this.field_0.pushBack();
  279.                   this.parseTag(var1);
  280.                }
  281.                break;
  282.             default:
  283.                var3 = var3 + var5.sval;
  284.          }
  285.       }
  286.  
  287.    }
  288.  
  289.    public void parseTag(Box var1) throws ParseException {
  290.       Object var2 = null;
  291.       Token var3 = this.field_0.nextToken();
  292.       Token var4 = this.field_0.nextToken();
  293.       if (var4.ttype == 58) {
  294.          var3 = this.field_0.nextToken();
  295.       } else {
  296.          this.field_0.pushBack();
  297.       }
  298.  
  299.       if (var3.ttype != -3) {
  300.          throw new ParseException("missing tag name", this.field_0);
  301.       } else {
  302.          String var5 = var3.sval.toLowerCase();
  303.          this.start_tag_stack.push(var5);
  304.          int var6 = MathMLDictionary.getKeyword(var5);
  305.          switch (var6) {
  306.             case 1:
  307.                this.parseParam(var1, var5, false);
  308.                break;
  309.             case 2:
  310.             case 3:
  311.             case 4:
  312.             case 6:
  313.             case 7:
  314.             case 8:
  315.             case 9:
  316.             case 10:
  317.             case 11:
  318.             case 12:
  319.             case 13:
  320.             case 14:
  321.             case 15:
  322.             case 16:
  323.             case 17:
  324.             case 18:
  325.             case 19:
  326.             case 20:
  327.             case 21:
  328.             case 22:
  329.             case 25:
  330.             case 26:
  331.             case 27:
  332.             case 28:
  333.             case 72:
  334.             case 73:
  335.                this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
  336.                break;
  337.             case 5:
  338.             case 29:
  339.             case 30:
  340.             case 31:
  341.             case 32:
  342.             case 33:
  343.             case 34:
  344.             case 35:
  345.             case 36:
  346.             case 37:
  347.             case 38:
  348.             case 39:
  349.             case 40:
  350.             case 41:
  351.             case 42:
  352.             case 43:
  353.             case 44:
  354.             case 45:
  355.             case 46:
  356.             case 47:
  357.             case 48:
  358.             case 49:
  359.             case 50:
  360.             case 51:
  361.             case 52:
  362.             case 53:
  363.             case 54:
  364.             case 55:
  365.             case 56:
  366.             case 57:
  367.             case 58:
  368.             case 59:
  369.             case 60:
  370.             case 61:
  371.             case 62:
  372.             case 63:
  373.             case 64:
  374.             case 65:
  375.             case 66:
  376.             case 67:
  377.             case 68:
  378.             case 69:
  379.             case 74:
  380.             case 75:
  381.             case 76:
  382.             case 77:
  383.             case 78:
  384.             case 79:
  385.             case 80:
  386.             case 81:
  387.             case 82:
  388.             case 83:
  389.             case 84:
  390.             case 85:
  391.             case 86:
  392.             case 87:
  393.             case 88:
  394.             case 89:
  395.             case 90:
  396.             case 91:
  397.             case 92:
  398.             case 93:
  399.             case 94:
  400.             case 95:
  401.             case 96:
  402.             case 97:
  403.             case 98:
  404.             case 99:
  405.             case 100:
  406.             case 199:
  407.             case 200:
  408.             case 201:
  409.             case 202:
  410.             case 203:
  411.             case 204:
  412.             case 205:
  413.             case 206:
  414.             case 207:
  415.             case 208:
  416.             case 209:
  417.             case 210:
  418.             case 211:
  419.             case 212:
  420.             case 213:
  421.             case 214:
  422.             case 215:
  423.             case 216:
  424.             case 217:
  425.             case 218:
  426.             case 219:
  427.             case 220:
  428.             case 221:
  429.             case 222:
  430.             case 223:
  431.             case 224:
  432.             case 225:
  433.             case 226:
  434.             case 227:
  435.             case 228:
  436.             case 229:
  437.             case 230:
  438.             case 231:
  439.             case 232:
  440.             case 233:
  441.             case 234:
  442.             case 235:
  443.             case 236:
  444.             case 237:
  445.             case 238:
  446.             case 239:
  447.             case 240:
  448.             case 241:
  449.             case 242:
  450.             case 243:
  451.             case 244:
  452.             case 245:
  453.             case 246:
  454.             case 247:
  455.             case 248:
  456.             case 249:
  457.             case 280:
  458.             case 281:
  459.             case 282:
  460.             case 283:
  461.             case 284:
  462.             case 285:
  463.             case 286:
  464.             case 287:
  465.             case 288:
  466.             case 289:
  467.             default:
  468.                throw new ParseException(var5 + " is not a valid MathML element", this.field_0);
  469.             case 23:
  470.                ContentBox var8 = new ContentBox(var1, var6, -1);
  471.                this.process_pr(var1, var8, var5);
  472.                this.wrapMatrixRows(var8.ppeer);
  473.                break;
  474.             case 24:
  475.                ContentBox var7 = new ContentBox(var1, var6, -1);
  476.                this.process_pr(var1, var7, var5);
  477.                this.wrapMatrixCells(var7.ppeer);
  478.                break;
  479.             case 70:
  480.                if (!((ContentBox)var1).name.equals("mmultiscripts")) {
  481.                   throw new ParseException("<none/> encountered outside of  mmultiscripts environment", this.field_0);
  482.                }
  483.  
  484.                this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
  485.                break;
  486.             case 71:
  487.                if (!((ContentBox)var1).name.equals("mmultiscripts")) {
  488.                   throw new ParseException("<mprescripts/> encountered outside of mmultiscripts environment", this.field_0);
  489.                }
  490.  
  491.                this.process_pr(var1, new ContentBox(var1, var6, -1), var5);
  492.                break;
  493.             case 101:
  494.             case 102:
  495.             case 103:
  496.             case 104:
  497.             case 105:
  498.             case 109:
  499.             case 110:
  500.             case 111:
  501.                this.process_empty_ct(var1, new ContentBox(var1, var6, 201), var5);
  502.                break;
  503.             case 106:
  504.             case 107:
  505.             case 108:
  506.             case 112:
  507.             case 162:
  508.             case 198:
  509.                this.process_empty_ct(var1, new ContentBox(var1, var6, 200), var5);
  510.                break;
  511.             case 113:
  512.             case 115:
  513.             case 116:
  514.             case 128:
  515.             case 137:
  516.             case 138:
  517.             case 139:
  518.             case 140:
  519.             case 141:
  520.             case 142:
  521.             case 143:
  522.             case 144:
  523.             case 145:
  524.             case 146:
  525.             case 147:
  526.             case 148:
  527.             case 149:
  528.             case 150:
  529.             case 151:
  530.             case 159:
  531.             case 160:
  532.             case 161:
  533.             case 192:
  534.             case 193:
  535.             case 195:
  536.             case 196:
  537.             case 197:
  538.             case 268:
  539.             case 269:
  540.             case 270:
  541.             case 271:
  542.             case 272:
  543.             case 275:
  544.             case 276:
  545.             case 290:
  546.             case 291:
  547.             case 292:
  548.             case 293:
  549.             case 294:
  550.             case 295:
  551.             case 296:
  552.             case 297:
  553.             case 298:
  554.             case 299:
  555.             case 300:
  556.                this.process_empty_ct(var1, new ContentBox(var1, var6, 203), var5);
  557.                break;
  558.             case 114:
  559.                this.process_sep(var1, new ContentBox(var1, var6, 202), var5);
  560.                break;
  561.             case 117:
  562.             case 118:
  563.             case 119:
  564.             case 120:
  565.             case 121:
  566.             case 166:
  567.             case 190:
  568.             case 267:
  569.             case 277:
  570.             case 278:
  571.             case 279:
  572.                this.process_empty_ct(var1, new ContentBox(var1, var6, 204), var5);
  573.                break;
  574.             case 122:
  575.             case 123:
  576.             case 124:
  577.             case 125:
  578.             case 126:
  579.             case 153:
  580.             case 154:
  581.             case 155:
  582.             case 156:
  583.             case 157:
  584.             case 158:
  585.             case 163:
  586.             case 164:
  587.             case 165:
  588.             case 167:
  589.             case 168:
  590.             case 191:
  591.             case 266:
  592.             case 273:
  593.             case 274:
  594.                this.process_empty_ct(var1, new ContentBox(var1, var6, 205), var5);
  595.                break;
  596.             case 127:
  597.             case 129:
  598.             case 136:
  599.             case 152:
  600.                this.process_empty_ct(var1, new ContentBox(var1, var6, 208), var5);
  601.                break;
  602.             case 130:
  603.             case 134:
  604.             case 135:
  605.                this.process_empty_ct(var1, new ContentBox(var1, var6, 207), var5);
  606.                break;
  607.             case 131:
  608.             case 132:
  609.             case 133:
  610.                this.process_empty_ct(var1, new ContentBox(var1, var6, 206), var5);
  611.                break;
  612.             case 169:
  613.             case 170:
  614.             case 171:
  615.             case 172:
  616.             case 173:
  617.             case 174:
  618.             case 175:
  619.             case 176:
  620.             case 177:
  621.             case 178:
  622.             case 179:
  623.             case 180:
  624.             case 181:
  625.             case 182:
  626.             case 183:
  627.             case 184:
  628.             case 185:
  629.             case 186:
  630.             case 187:
  631.             case 188:
  632.             case 189:
  633.             case 194:
  634.             case 250:
  635.                this.process_ct(var1, new ContentBox(var1, var6, 0), var5);
  636.                break;
  637.             case 251:
  638.             case 252:
  639.             case 253:
  640.             case 254:
  641.             case 255:
  642.             case 256:
  643.             case 257:
  644.             case 258:
  645.             case 259:
  646.             case 260:
  647.             case 261:
  648.             case 262:
  649.             case 263:
  650.             case 264:
  651.             case 265:
  652.                this.process_empty_ct(var1, new ContentBox(var1, var6, 0), var5);
  653.          }
  654.  
  655.       }
  656.    }
  657.  
  658.    private void process_ct(Box var1, ContentBox var2, String var3, boolean var4) throws ParseException {
  659.       var2.name = var3;
  660.       var1.addChild(var2);
  661.       var4 = this.parseParam(var2, var3, false);
  662.       var2.empty = var4;
  663.       Box var5 = var1.ppeer;
  664.       ContentBox var6 = (ContentBox)var2.getCopy();
  665.       var5.addChild(var6);
  666.       var2.ppeer = var6;
  667.       var6.cpeer = var2;
  668.       var6.attribute_stack = var5.attribute_stack;
  669.       if (!var4) {
  670.          this.parseSequence(var2);
  671.          ((Box)var6).addData(var2.adata);
  672.       }
  673.  
  674.       try {
  675.          PeerConverter.makeEquiv(var6);
  676.       } catch (PeerException var8) {
  677.          throw new ParseException(((Throwable)var8).getMessage(), this.field_0);
  678.       }
  679.    }
  680.  
  681.    private void process_ct(Box var1, ContentBox var2, String var3) throws ParseException {
  682.       this.process_ct(var1, var2, var3, false);
  683.    }
  684.  
  685.    private void process_empty_ct(Box var1, ContentBox var2, String var3) throws ParseException {
  686.       this.process_ct(var1, var2, var3, true);
  687.    }
  688.  
  689.    private void process_pr(Box var1, ContentBox var2, String var3) throws ParseException {
  690.       var1.addChild(var2);
  691.       boolean var4 = this.parseParam(var2, var3, false);
  692.       var2.name = var3;
  693.       Box var5 = var1.ppeer;
  694.       Object var6 = null;
  695.       var2.empty = false;
  696.       switch (var2.type) {
  697.          case 2:
  698.             var6 = new MI(var5);
  699.             break;
  700.          case 3:
  701.             var6 = new MN(var5);
  702.             break;
  703.          case 4:
  704.             var6 = new MO(var5);
  705.          case 5:
  706.          case 29:
  707.          case 30:
  708.          case 31:
  709.          case 32:
  710.          case 33:
  711.          case 34:
  712.          case 35:
  713.          case 36:
  714.          case 37:
  715.          case 38:
  716.          case 39:
  717.          case 40:
  718.          case 41:
  719.          case 42:
  720.          case 43:
  721.          case 44:
  722.          case 45:
  723.          case 46:
  724.          case 47:
  725.          case 48:
  726.          case 49:
  727.          case 50:
  728.          case 51:
  729.          case 52:
  730.          case 53:
  731.          case 54:
  732.          case 55:
  733.          case 56:
  734.          case 57:
  735.          case 58:
  736.          case 59:
  737.          case 60:
  738.          case 61:
  739.          case 62:
  740.          case 63:
  741.          case 64:
  742.          case 65:
  743.          case 66:
  744.          case 67:
  745.          case 68:
  746.          case 69:
  747.          default:
  748.             break;
  749.          case 6:
  750.             var6 = new MText(var5);
  751.             break;
  752.          case 7:
  753.             var4 = true;
  754.             var2.empty = true;
  755.             var6 = new MSpace(var5);
  756.             break;
  757.          case 8:
  758.             var6 = new MS(var5);
  759.             break;
  760.          case 9:
  761.             var6 = new MStyle(var5);
  762.             break;
  763.          case 10:
  764.             var6 = new MError(var5);
  765.             break;
  766.          case 11:
  767.             var6 = new MPhantom(var5);
  768.             break;
  769.          case 12:
  770.             var6 = new MRow(var5);
  771.             break;
  772.          case 13:
  773.             var6 = new MFrac(var5);
  774.             break;
  775.          case 14:
  776.             var6 = new MSqrt(var5);
  777.             break;
  778.          case 15:
  779.             var6 = new MRoot(var5);
  780.             break;
  781.          case 16:
  782.             var6 = new MSub(var5);
  783.             break;
  784.          case 17:
  785.             var6 = new MSup(var5);
  786.             break;
  787.          case 18:
  788.             var6 = new MSubsup(var5);
  789.             break;
  790.          case 19:
  791.             var6 = new MUnder(var5);
  792.             break;
  793.          case 20:
  794.             var6 = new MOver(var5);
  795.             break;
  796.          case 21:
  797.             var6 = new MUnderover(var5);
  798.             break;
  799.          case 22:
  800.             var6 = new MMultiscripts(var5);
  801.             break;
  802.          case 23:
  803.             var6 = new MTable(var5);
  804.             break;
  805.          case 24:
  806.             var6 = new MTr(var5);
  807.             break;
  808.          case 25:
  809.             var6 = new MTd(var5);
  810.             break;
  811.          case 26:
  812.             var6 = new MAction(var5);
  813.             break;
  814.          case 27:
  815.             var6 = new MFenced(var5);
  816.             break;
  817.          case 28:
  818.             var6 = new MPadded(var5);
  819.             break;
  820.          case 70:
  821.             var4 = true;
  822.             var2.empty = true;
  823.             var6 = new MRow(var5);
  824.             break;
  825.          case 71:
  826.             System.out.println("doing prescripts!");
  827.             var4 = true;
  828.             var2.empty = true;
  829.             var6 = new Box(var5);
  830.             break;
  831.          case 72:
  832.          case 73:
  833.             var4 = true;
  834.             var2.empty = true;
  835.             var6 = new MRow(var5);
  836.       }
  837.  
  838.       if (var2.type != 71) {
  839.          var5.addChild((Box)var6);
  840.          var2.ppeer = (Box)var6;
  841.          ((Box)var6).cpeer = var2;
  842.       } else {
  843.          ((MMultiscripts)var5).postscripts_done();
  844.          var2.ppeer = null;
  845.       }
  846.  
  847.       var2.empty = var4;
  848.       ((Box)var6).setAttributeVec(((Box)var2).getAttributeVec());
  849.       if (var2.type == 26) {
  850.          ((MAction)var6).init();
  851.       }
  852.  
  853.       if (!var4) {
  854.          this.parseSequence(var2);
  855.          ((Box)var6).addData(var2.adata);
  856.       }
  857.  
  858.    }
  859.  
  860.    private void process_sep(Box var1, ContentBox var2, String var3) throws ParseException {
  861.       this.parseParam(var2, var3, true);
  862.       var1.addData("<sep/>");
  863.    }
  864.  
  865.    private void wrapMatrixRows(Box var1) {
  866.       Object var2 = null;
  867.  
  868.       for(int var3 = 0; var3 < var1.getNumChildren(); ++var3) {
  869.          Box var5 = var1.getChild(var3);
  870.          if (!var5.getClass().getName().equals("webeq3.schema.MTr")) {
  871.             var5 = var1.removeChildAt(var3);
  872.             MTr var4 = new MTr(var1);
  873.             var5.setParent(var4);
  874.             ((Box)var4).addChild(var5);
  875.             this.wrapMatrixCells(var4);
  876.             var1.insertChildAt(var4, var3);
  877.          }
  878.       }
  879.  
  880.    }
  881.  
  882.    private String toUnicode(String var1) {
  883.       StringBuffer var3 = new StringBuffer();
  884.  
  885.       for(int var4 = 0; var4 < var1.length(); ++var4) {
  886.          char var2 = var1.charAt(var4);
  887.          if (var2 == '&') {
  888.             int var5 = var1.indexOf(59, var4);
  889.             var3.append(EntityNames.get(var1.substring(var4 + 1, var5)));
  890.             var4 = var5;
  891.          } else {
  892.             var3.append(var2);
  893.          }
  894.       }
  895.  
  896.       return var3.toString();
  897.    }
  898.  
  899.    private void wrapMatrixCells(Box var1) {
  900.       Object var2 = null;
  901.  
  902.       for(int var3 = 0; var3 < var1.getNumChildren(); ++var3) {
  903.          Box var5 = var1.getChild(var3);
  904.          if (!var5.getClass().getName().equals("webeq3.schema.MTd")) {
  905.             var5 = var1.removeChildAt(var3);
  906.             MTd var4 = new MTd(var1);
  907.             var5.setParent(var4);
  908.             ((Box)var4).addChild(var5);
  909.             var1.insertChildAt(var4, var3);
  910.          }
  911.       }
  912.  
  913.    }
  914. }
  915.