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

  1. package webeq3.schema;
  2.  
  3. import java.awt.Graphics;
  4. import webeq3.app.Equation;
  5.  
  6. public class MStyle extends Box {
  7.    public static boolean allowForcedBreaks = true;
  8.  
  9.    public MStyle(Box var1) {
  10.       super(var1);
  11.       super.type = 68;
  12.       super.kind = 6;
  13.    }
  14.  
  15.    public MStyle(Equation var1) {
  16.       super(var1);
  17.       super.type = 68;
  18.    }
  19.  
  20.    public MStyle() {
  21.       super.type = 68;
  22.    }
  23.  
  24.    public void layout() {
  25.       super.left = 0;
  26.       super.top = 0;
  27.       super.width = 0;
  28.       super.ascent = 0;
  29.       super.descent = 0;
  30.       super.embellished_op = false;
  31.       super.is_spacelike = false;
  32.  
  33.       for(int var2 = 0; var2 < 86; ++var2) {
  34.          if (super.attributes[var2] != null) {
  35.             super.attribute_stack[var2].push(super.attributes[var2]);
  36.          }
  37.       }
  38.  
  39.       if (super.attributes[20] != null && super.attributes[20].length() > 0) {
  40.          char var3 = super.attributes[20].trim().charAt(0);
  41.          if (var3 == '+' || var3 == '-') {
  42.             try {
  43.                byte var4 = 1;
  44.                if (var3 == '-') {
  45.                   var4 = -1;
  46.                }
  47.  
  48.                super.attribute_stack[20].pop();
  49.                int var5 = Integer.parseInt(super.attributes[20].substring(super.attributes[20].indexOf(var3) + 1).trim());
  50.                String var6 = ((Box)this).getDefaultAttributeString(20).trim();
  51.                if (var6 == "") {
  52.                   var6 = "0";
  53.                }
  54.  
  55.                super.attribute_stack[20].push(Integer.toString(var4 * var5 + Integer.parseInt(var6)));
  56.             } catch (Exception var7) {
  57.                System.out.println("MStyle Error: SCRIPTLEVEL attribute not specified correctly.");
  58.             }
  59.          }
  60.       }
  61.  
  62.       this.size();
  63.       ((Box)this).position();
  64.  
  65.       for(int var8 = 0; var8 < 86; ++var8) {
  66.          if (super.attributes[var8] != null) {
  67.             super.attribute_stack[var8].pop();
  68.          }
  69.       }
  70.  
  71.    }
  72.  
  73.    public void size() {
  74.       super.bgcolor = ((Box)this).resolveColor(17);
  75.       super.fgcolor = ((Box)this).resolveColor(4);
  76.       ((Box)this).setfont(super.depth);
  77.       int var2 = 0;
  78.       int var3 = 0;
  79.       int var4 = super.children.size();
  80.       if (var4 > 0) {
  81.          super.descent = -1000;
  82.       }
  83.  
  84.       for(int var5 = 0; var5 < var4; ++var5) {
  85.          Box var1 = ((Box)this).getChild(var5);
  86.          var1.depth = super.depth;
  87.          var1.layout();
  88.          if (super.ascent < var1.getAscent()) {
  89.             super.ascent = var1.getAscent();
  90.          }
  91.  
  92.          if (super.descent < var1.getDescent()) {
  93.             super.descent = var1.getDescent();
  94.          }
  95.  
  96.          super.width += var1.getWidth();
  97.          if (var1.is_spacelike) {
  98.             ++var2;
  99.          }
  100.  
  101.          if (var1.embellished_op) {
  102.             ++var3;
  103.          }
  104.       }
  105.  
  106.       super.height = super.ascent + super.descent;
  107.       if (var2 == var4) {
  108.          super.is_spacelike = true;
  109.       }
  110.  
  111.       if (var2 == var4 - 1 && var3 == 1) {
  112.          super.embellished_op = true;
  113.       }
  114.  
  115.       switch (var4) {
  116.          case 0:
  117.             super.atomic = true;
  118.             break;
  119.          case 1:
  120.             Box var6 = ((Box)this).getChild(0);
  121.             super.italic = var6.isItalic();
  122.             super.atomic = var6.isAtomic();
  123.             break;
  124.          default:
  125.             super.atomic = false;
  126.       }
  127.  
  128.    }
  129.  
  130.    public void paint(Graphics var1, int var2, int var3) {
  131.       if ((allowForcedBreaks || super.my_view.linebreak) && ((Box)this).getParent() != null) {
  132.          Box var31 = null;
  133.          Object var32 = null;
  134.          Object var6 = null;
  135.          Object var7 = null;
  136.          int var9 = var2 + super.left + super.my_view.offsetx;
  137.          int var10 = super.my_view.getDisplayWidth();
  138.          int var11 = super.my_view.indent;
  139.          int var12 = 0;
  140.          int var13 = 0;
  141.          int var14 = 0;
  142.          int var15 = 0;
  143.          boolean var16 = false;
  144.          int[] var17 = new int[super.children.size()];
  145.          boolean var18 = false;
  146.          int var19 = 0;
  147.          int var22 = var3 + super.top + super.my_view.offsety;
  148.  
  149.          for(int var23 = 0; var23 < super.children.size(); ++var23) {
  150.             Box var41 = var31;
  151.             var31 = ((Box)this).getChild(var23);
  152.             var16 = false;
  153.             if (super.my_view.linebreak) {
  154.                if (var31 instanceof MO) {
  155.                   char var8 = var31.udata.length() > 0 ? var31.udata.charAt(0) : 0;
  156.                   if (var8 != ',' && var8 != ']' && var8 != ')' && var8 != '}' && var8 != ';' && var8 != '!' && var8 != 12297 && var8 != 8969 && var8 != 8971) {
  157.                      if (var8 != '[' && var8 != '(' && var8 != '{' && var8 != 12296 && var8 != 8968 && var8 != 8970) {
  158.                         if (var41 instanceof MO) {
  159.                            int var66 = var17[var23]--;
  160.                         } else if (((MO)var31).isBinary()) {
  161.                            int var67 = var17[var23]--;
  162.                            if (var23 + 1 < super.children.size()) {
  163.                               --var17[var23 + 1];
  164.                            }
  165.                         } else if (var8 == '∩┐╝') {
  166.                            if (super.children.size() > 0) {
  167.                               var17[var23 - 1] += 3;
  168.                            }
  169.                         } else {
  170.                            var17[var23] += 2;
  171.                         }
  172.                      } else {
  173.                         int var10002 = var17[var23]++;
  174.                         if (var23 + 1 < super.children.size() && ((Box)this).getChild(var23 + 1).isAtomic()) {
  175.                            var17[var23 + 1] -= 2;
  176.                         }
  177.                      }
  178.                   } else {
  179.                      if (var23 < super.children.size() - 1) {
  180.                         ++var17[var23 + 1];
  181.                         if (var8 == ',' || var8 == ';') {
  182.                            var17[var23 + 1] += 2;
  183.                         }
  184.                      }
  185.  
  186.                      if (var23 > 0 && ((Box)this).getChild(var23 - 1).isAtomic()) {
  187.                         var17[var23] -= 2;
  188.                      }
  189.                   }
  190.                }
  191.  
  192.                if (!var31.isAtomic() && var17[var23] <= 0) {
  193.                   int var68 = var17[var23]++;
  194.                }
  195.  
  196.                if (var31 instanceof MI && var41 instanceof MI) {
  197.                   int var69 = var17[var23]++;
  198.                }
  199.             }
  200.  
  201.             if (var31 instanceof MI || var31 instanceof MText) {
  202.                char var43 = var31.udata.length() > 0 ? var31.udata.charAt(0) : 0;
  203.                byte var24 = 0;
  204.                if (var43 == '\uf385' || var43 == '\uf386') {
  205.                   var24 = 10;
  206.                }
  207.  
  208.                if (super.my_view.linebreak) {
  209.                   if (var43 == '\uf387') {
  210.                      var24 = -10;
  211.                   }
  212.  
  213.                   if (var43 == '\uf388') {
  214.                      var24 = 3;
  215.                   }
  216.  
  217.                   if (var43 == '\uf389') {
  218.                      var24 = -2;
  219.                   }
  220.                }
  221.  
  222.                if (var24 >= 0) {
  223.                   if (var23 < super.children.size() - 1) {
  224.                      var17[var23 + 1] += var24;
  225.                   } else {
  226.                      var17[var23] += var24;
  227.                   }
  228.                } else {
  229.                   if (var23 < super.children.size() - 1) {
  230.                      var17[var23 + 1] += var24;
  231.                   }
  232.  
  233.                   var17[var23] += var24;
  234.                }
  235.             }
  236.  
  237.             if (var17[var23] > 7) {
  238.                var16 = true;
  239.             }
  240.  
  241.             if (super.my_view.linebreak) {
  242.                if (super.breakLookAhead > 0 && var31.getLeft() + var31.getWidth() + super.breakLookAhead > super.width && var9 + var31.getLeft() + var31.getWidth() + super.breakLookAhead > var10) {
  243.                   var16 = true;
  244.                }
  245.  
  246.                if (var9 + var31.getLeft() + var31.getWidth() > var10) {
  247.                   var16 = true;
  248.                }
  249.             }
  250.  
  251.             if (var16) {
  252.                var18 = true;
  253.                int var59 = 0;
  254.  
  255.                for(int var25 = var15; var25 <= var23; ++var25) {
  256.                   if (var17[var25] >= var59) {
  257.                      var59 = var17[var25];
  258.                      var14 = var25;
  259.                   }
  260.                }
  261.  
  262.                if (var59 < 3 && !var31.isAtomic()) {
  263.                   var14 = var23;
  264.                }
  265.  
  266.                var17[var14] = 0;
  267.                if (var14 >= var15 && var14 < var23) {
  268.                   var31 = ((Box)this).getChild(var14);
  269.                } else {
  270.                   var14 = var23;
  271.                }
  272.  
  273.                boolean var26 = false;
  274.                boolean var27 = false;
  275.                var11 = super.my_view.indent;
  276.                if (var14 > 0) {
  277.                   Box var33 = ((Box)this).getChild(var14 - 1);
  278.                   if (!(var33 instanceof MI) && !(var33 instanceof MText)) {
  279.                      if (var2 + super.left + ((Box)this).getChild(var14).getLeft() > super.my_view.indent) {
  280.                         var26 = true;
  281.                      }
  282.                   } else {
  283.                      char var44 = var33.udata.length() > 0 ? var33.udata.charAt(0) : 0;
  284.                      if (var44 == '\uf385' || var44 == '\uf386') {
  285.                         var27 = true;
  286.                      }
  287.  
  288.                      if (var44 == '\uf385') {
  289.                         var11 = 0;
  290.                      } else {
  291.                         var26 = true;
  292.                      }
  293.                   }
  294.                }
  295.  
  296.                if (var31.isAtomic()) {
  297.                   if (super.breakLookAhead > 0 && (double)(super.width - ((Box)this).getChild(var14).getLeft()) < 0.8 * (double)var10) {
  298.                      super.my_view.root.setLookAhead(0);
  299.                   }
  300.  
  301.                   Box var36 = ((Box)this).getChild(var15);
  302.                   if (var36 instanceof MO) {
  303.                      if (((MO)var36).marginTweak && var15 < var14) {
  304.                         var19 = ((MO)var36).op.lspace;
  305.                      } else {
  306.                         var19 = 0;
  307.                      }
  308.                   }
  309.  
  310.                   var12 = var36.getLeft() + var2 + super.left + super.my_view.offsetx + var19;
  311.                   ((Box)this).rvPaint(var1, var12, var3 + super.top + super.my_view.offsety, var10 - var12, super.height);
  312.                   int var63 = super.my_view.offsety;
  313.                   ((Box)this).paintBreakingChildren(var1, var2, var3, var15, var14, var3 + super.top + super.my_view.offsety);
  314.                   var36 = ((Box)this).getChild(var14);
  315.                   var19 = 0;
  316.                   if (var36 instanceof MO) {
  317.                      var19 = ((MO)var36).op.lspace;
  318.                      ((MO)var36).setMarginTweak(true);
  319.                   }
  320.  
  321.                   if (var26) {
  322.                      var1.setColor(super.my_view.root.bgcolor);
  323.                      var1.fillRect(0, super.my_view.offsety + 5 + super.my_view.root.getHeight(), super.my_view.indent, super.my_view.root.getHeight());
  324.                   }
  325.  
  326.                   if (var63 != super.my_view.offsety && !var27) {
  327.                      if (((Box)this).getChild(var14) instanceof MO) {
  328.                         ((MO)((Box)this).getChild(var14)).setMarginTweak(false);
  329.                      }
  330.                   } else {
  331.                      var36 = ((Box)this).getChild(var14);
  332.                      super.my_view.offsetx = var11 - (var2 + super.left + var36.getLeft() + var19);
  333.                      Equation var65 = super.my_view;
  334.                      var65.offsety += 5 + super.my_view.root.getHeight();
  335.                      if (var11 == 0) {
  336.                         super.my_view.breaks.addElement(new Integer(-(var2 + super.left + var36.getLeft() + var19)));
  337.                      } else {
  338.                         super.my_view.breaks.addElement(new Integer(var2 + super.left + var36.getLeft() + var19));
  339.                      }
  340.                   }
  341.  
  342.                   var15 = var14;
  343.                   var9 = var2 + super.left + super.my_view.offsetx;
  344.                } else {
  345.                   Box var34 = ((Box)this).getChild(var15);
  346.                   var12 = var34.getLeft() + var2 + super.left + super.my_view.offsetx;
  347.                   if (var34 instanceof MO) {
  348.                      if (((MO)var34).marginTweak) {
  349.                         var19 = ((MO)var34).op.lspace;
  350.                      } else {
  351.                         var19 = 0;
  352.                      }
  353.                   }
  354.  
  355.                   ((Box)this).rvPaint(var1, var12 + var19, var3 + super.top + super.my_view.offsety, var10 - var12, super.height);
  356.                   var34 = ((Box)this).getChild(var14);
  357.                   var12 = var34.getLeft() + var2 + super.left + super.my_view.offsetx;
  358.                   int var20 = var34.getWidth() - (var10 - var12);
  359.                   int var21 = var20 / var10 + 1;
  360.                   var22 = var3 + super.top + super.my_view.offsety;
  361.                   int var10000 = var10 - super.my_view.indent;
  362.  
  363.                   for(int var28 = 0; var28 < var21; ++var28) {
  364.                      var22 += 5 + super.my_view.root.getHeight();
  365.                      ((Box)this).rvPaint(var1, 0, var22, var10, super.height);
  366.                   }
  367.  
  368.                   int var29 = var2 + super.left + super.my_view.offsetx + var34.getLeft() + var34.getWidth();
  369.                   int var30 = var10 - var29 + 2;
  370.                   if (var30 > 0) {
  371.                      var34.setLookAhead(var30);
  372.                   }
  373.  
  374.                   if (var27) {
  375.                      ((Box)this).paintBreakingChildren(var1, var2, var3, var15, var14, var22);
  376.                      Box var42 = ((Box)this).getChild(var14);
  377.                      super.my_view.offsetx = var11 - (var2 + super.left + var42.getLeft() + var19);
  378.                      Equation var64 = super.my_view;
  379.                      var64.offsety += 5 + super.my_view.root.getHeight();
  380.                      if (var11 == 0) {
  381.                         super.my_view.breaks.addElement(new Integer(-(var2 + super.left + var42.getLeft() + var19)));
  382.                      } else {
  383.                         super.my_view.breaks.addElement(new Integer(var2 + super.left + var42.getLeft() + var19));
  384.                      }
  385.  
  386.                      ((Box)this).paintBreakingChildren(var1, var2, var3, var14, var14 + 1, var22);
  387.                   } else {
  388.                      ((Box)this).paintBreakingChildren(var1, var2, var3, var15, var14 + 1, var22);
  389.                   }
  390.  
  391.                   var12 = var2 + super.left + var34.getLeft() + var34.getWidth() + super.my_view.offsetx;
  392.                   var20 = var10 - var12;
  393.                   ((Box)this).paintCleanup(var1, var12, var3 + super.top + super.my_view.offsety, var20, super.height);
  394.                   var15 = var14 + 1;
  395.                   var9 = var2 + super.left + super.my_view.offsetx;
  396.                }
  397.             }
  398.          }
  399.  
  400.          if (var15 < super.children.size()) {
  401.             Box var39 = ((Box)this).getChild(var15);
  402.             var12 = var39.getLeft() + var2 + super.left + super.my_view.offsetx;
  403.             var13 = var2 + super.left + super.my_view.offsetx + super.width - var12;
  404.             if (var39 instanceof MO) {
  405.                if (((MO)var39).marginTweak) {
  406.                   var19 = ((MO)var39).op.lspace;
  407.                } else {
  408.                   var19 = 0;
  409.                }
  410.             }
  411.  
  412.             ((Box)this).rvPaint(var1, var12 + var19, var3 + super.top + super.my_view.offsety, var13 - var19, super.height);
  413.             var22 = var3 + super.top + super.my_view.offsety;
  414.             var18 |= ((Box)this).paintBreakingChildren(var1, var2, var3, var15, super.children.size(), var22);
  415.             var39 = ((Box)this).getChild(super.children.size() - 1);
  416.             var12 = var2 + super.left + var39.getLeft() + var39.getWidth() + super.my_view.offsetx;
  417.             int var55 = var2 + super.left + super.my_view.offsetx + super.width - var12 - var19;
  418.             var22 = var3 + super.top + super.my_view.offsety;
  419.             ((Box)this).paintCleanup(var1, var12, var22, var55, super.height);
  420.          }
  421.  
  422.          if (var18) {
  423.             int var60 = var2 + super.left + super.width + super.my_view.offsetx;
  424.             int var61 = var3 + super.top + super.my_view.offsety;
  425.             int var62 = var10 - var60;
  426.             ((Box)this).paintCleanup(var1, var60, var61, var62, super.height);
  427.          }
  428.       } else {
  429.          ((Box)this).paintBackground(var1, var2, var3);
  430.  
  431.          for(int var5 = 0; var5 < super.children.size(); ++var5) {
  432.             Box var4 = ((Box)this).getChild(var5);
  433.             var4.paint(var1, var2 + super.left, var3 + super.top);
  434.          }
  435.       }
  436.  
  437.       super.absleft = var2 + super.left;
  438.       super.abstop = var3 + super.top;
  439.    }
  440. }
  441.