klease      01/10/14 13:33:36

  Modified:    src/org/apache/fop/datatypes Length.java TableColLength.java
                        PercentLength.java LinearCombinationLength.java
                        MixedLength.java
  Added:       src/org/apache/fop/datatypes AutoLength.java
                        FixedLength.java
  Log:
  Modify the Length class hierarchy
  
  Revision  Changes    Path
  1.14      +25 -75    xml-fop/src/org/apache/fop/datatypes/Length.java
  
  Index: Length.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/Length.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Length.java       2001/09/11 10:04:24     1.13
  +++ Length.java       2001/10/14 20:33:36     1.14
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Length.java,v 1.13 2001/09/11 10:04:24 keiron Exp $
  + * $Id: Length.java,v 1.14 2001/10/14 20:33:36 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -7,6 +7,7 @@
   
   package org.apache.fop.datatypes;
   
  +import org.apache.fop.fo.expr.Numeric;
   import org.apache.fop.fo.Property;
   import org.apache.fop.messaging.MessageHandler;
   
  @@ -14,97 +15,39 @@
    * a length quantity in XSL
    */
   public class Length {
  -    public static final Length AUTO = new Length(0);
   
  -    static {
  -        AUTO.bAuto = true;
  -    }
  -
       protected int millipoints = 0;
       protected boolean bIsComputed = false;
  -    private boolean bAuto = false;
  -
  -    /**
  -     * Set the length given a number of relative units and the current
  -     * font size in base units.
  -     */
  -    public Length(double numRelUnits, int iCurFontSize) {
  -        millipoints = (int)(numRelUnits * (double)iCurFontSize);
  -        setIsComputed(true);
  -    }
  -
  -    /**
  -     * Set the length given a number of units and a unit name.
  -     */
  -    public Length(double numUnits, String units) {
  -        convert(numUnits, units);
  -    }
  -
  -    /**
  -     * set the length as a number of base units
  -     */
  -    public Length(int baseUnits) {
  -        millipoints = baseUnits;
  -        setIsComputed(true);
  -    }
  -
  -    /**
  -     * Convert the given length to a dimensionless integer representing
  -     * a whole number of base units (milli-points).
  -     */
  -    protected void convert(double dvalue, String unit) {
  -
  -        int assumed_resolution = 1;    // points/pixel
  -
  -        if (unit.equals("in"))
  -            dvalue = dvalue * 72;
  -        else if (unit.equals("cm"))
  -            dvalue = dvalue * 28.3464567;
  -        else if (unit.equals("mm"))
  -            dvalue = dvalue * 2.83464567;
  -        else if (unit.equals("pt"))
  -            dvalue = dvalue;
  -        else if (unit.equals("pc"))
  -            dvalue = dvalue * 12;
  -            /*
  -             * else if (unit.equals("em"))
  -             * dvalue = dvalue * fontsize;
  -             */
  -        else if (unit.equals("px"))
  -            dvalue = dvalue * assumed_resolution;
  -        else {
  -            dvalue = 0;
  -            MessageHandler.errorln("unknown length unit '" + unit
  -                                   + "'");
  -        }
  -        this.millipoints = (int)(dvalue * 1000);
  -        setIsComputed(true);
  -    }
   
  -    protected void setIsComputed(boolean bIsComputed) {
  -        this.bIsComputed = bIsComputed;
  -    }
  -
       /**
        * return the length in 1/1000ths of a point
        */
       public int mvalue() {
  -        if (!bIsComputed)
  -            millipoints = computeValue();
  +        if (!bIsComputed) {
  +            computeValue();
  +     }
           return millipoints;
       }
   
  -    protected int computeValue() {
  -        return millipoints;
  +    protected void computeValue() {
  +    }
  +
  +
  +    protected void setComputedValue(int millipoints) {
  +     setComputedValue(millipoints, true);
       }
   
  -    protected void setValue(int millipoints) {
  +    protected void setComputedValue(int millipoints, boolean bSetComputed) {
           this.millipoints = millipoints;
  -        setIsComputed(true);
  +        this.bIsComputed = bSetComputed;
       }
   
       public boolean isAuto() {
  -        return bAuto;
  +        return false;
  +    }
  +
  +    public boolean isComputed() {
  +     return this.bIsComputed;
       }
   
       /**
  @@ -121,6 +64,13 @@
        */
       public double getTableUnits() {
           return 0.0;
  +    }
  +
  +    public void resolveTableUnit(double dTableUnit) {
  +    }
  +
  +    public Numeric asNumeric() {
  +     return null;
       }
   
       public String toString() {
  
  
  
  1.4       +23 -11    xml-fop/src/org/apache/fop/datatypes/TableColLength.java
  
  Index: TableColLength.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/TableColLength.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TableColLength.java       2001/08/20 11:19:22     1.3
  +++ TableColLength.java       2001/10/14 20:33:36     1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: TableColLength.java,v 1.3 2001/08/20 11:19:22 keiron Exp $
  + * $Id: TableColLength.java,v 1.4 2001/10/14 20:33:36 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -7,6 +7,8 @@
   
   package org.apache.fop.datatypes;
   
  +import org.apache.fop.fo.expr.Numeric;
  +
   /**
    * A table-column width specification, possibly including some
    * number of proportional "column-units". The absolute size of a
  @@ -18,7 +20,7 @@
    * during layout.
    * NOTE: this is only supposed to be allowed if table-layout=fixed.
    */
  -public class TableColLength extends MixedLength {
  +public class TableColLength extends Length {
   
       /**
        * Number of table-column proportional units
  @@ -29,15 +31,9 @@
        * Construct an object with tcolUnits of proportional measure.
        */
       public TableColLength(double tcolUnits) {
  -        super(0, null);
           this.tcolUnits = tcolUnits;
       }
   
  -    public TableColLength(int absUnits, PercentLength pcUnits,
  -                          double tcolUnits) {
  -        super(absUnits, pcUnits);
  -        this.tcolUnits = tcolUnits;
  -    }
   
   
       /**
  @@ -48,11 +44,27 @@
           return tcolUnits;
       }
   
  -    // Set tcolUnits too when resolved?
  +    /**
  +     * Calculate the number of millipoints and set it.
  +     */
  +    public void resolveTableUnit(double mpointsPerUnit) {
  +     setComputedValue((int)(tcolUnits * mpointsPerUnit));
  +    }
  +
  +//   If the table-unit can be resolved, set the computed value
  +//     protected void computeValue() {
  +//   if (tblUnitBase.canResolveUnit()) {
  +//       rslt += (int)(tcolUnits * (double)tblUnitBase.getUnitValue());
  +//       setComputedValue(rslt);
  +//   }
  +//     }
   
  +
       public String toString() {
  -        return (super.toString() + "+" + (new Double(tcolUnits).toString())
  -                + "table-column-units");
  +        return (Double.toString(tcolUnits) + " table-column-units");
       }
   
  +    public Numeric asNumeric() {
  +     return new Numeric(this);
  +    }
   }
  
  
  
  1.4       +9 -5      xml-fop/src/org/apache/fop/datatypes/PercentLength.java
  
  Index: PercentLength.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/PercentLength.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PercentLength.java        2001/08/20 11:19:22     1.3
  +++ PercentLength.java        2001/10/14 20:33:36     1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PercentLength.java,v 1.3 2001/08/20 11:19:22 keiron Exp $
  + * $Id: PercentLength.java,v 1.4 2001/10/14 20:33:36 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -7,6 +7,8 @@
   
   package org.apache.fop.datatypes;
   
  +import org.apache.fop.fo.expr.Numeric;
  +
   /**
    * a percent specified length quantity in XSL
    */
  @@ -25,10 +27,8 @@
       }
   
       public PercentLength(double factor, PercentBase lbase) {
  -        super(0);
           this.factor = factor;
           this.lbase = lbase;
  -        super.setIsComputed(false);
       }
   
       public void setBaseLength(PercentBase lbase) {
  @@ -43,8 +43,8 @@
        * Return the computed value in millipoints. This assumes that the
        * base length has been resolved to an absolute length value.
        */
  -    protected int computeValue() {
  -        return (int)(factor * (double)lbase.getBaseLength());
  +    protected void computeValue() {
  +        setComputedValue((int)(factor * (double)lbase.getBaseLength()));
       }
   
       public double value() {
  @@ -55,6 +55,10 @@
           // return the factor as a percent
           // What about the base value?
           return (new Double(factor * 100.0).toString()) + "%";
  +    }
  +
  +    public Numeric asNumeric() {
  +     return new Numeric(this);
       }
   
   }
  
  
  
  1.3       +3 -5      
xml-fop/src/org/apache/fop/datatypes/LinearCombinationLength.java
  
  Index: LinearCombinationLength.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/org/apache/fop/datatypes/LinearCombinationLength.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LinearCombinationLength.java      2001/07/30 20:29:19     1.2
  +++ LinearCombinationLength.java      2001/10/14 20:33:36     1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: LinearCombinationLength.java,v 1.2 2001/07/30 20:29:19 tore Exp $
  + * $Id: LinearCombinationLength.java,v 1.3 2001/10/14 20:33:36 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -15,10 +15,8 @@
       protected Vector lengths;
   
       public LinearCombinationLength() {
  -        super(0);
           factors = new Vector();
           lengths = new Vector();
  -        super.setIsComputed(false);
       }
   
       public void addTerm(double factor, Length length) {
  @@ -29,7 +27,7 @@
       /**
        * Return the computed value in millipoints.
        */
  -    protected int computeValue() {
  +    protected void computeValue() {
           int result = 0;
           int numFactors = factors.size();
           for (int i = 0; i < numFactors; ++i) {
  @@ -37,7 +35,7 @@
                   (int)(((Double)factors.elementAt(i)).doubleValue()
                         * (double)((Length)lengths.elementAt(i)).mvalue());
           }
  -        return result;
  +        setComputedValue(result);
       }
   
   }
  
  
  
  1.4       +66 -23    xml-fop/src/org/apache/fop/datatypes/MixedLength.java
  
  Index: MixedLength.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/MixedLength.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MixedLength.java  2001/08/20 11:19:22     1.3
  +++ MixedLength.java  2001/10/14 20:33:36     1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: MixedLength.java,v 1.3 2001/08/20 11:19:22 keiron Exp $
  + * $Id: MixedLength.java,v 1.4 2001/10/14 20:33:36 klease Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -7,6 +7,12 @@
   
   package org.apache.fop.datatypes;
   
  +import java.util.Vector;
  +import java.util.Enumeration;
  +
  +import org.apache.fop.fo.expr.Numeric;
  +import org.apache.fop.fo.expr.PropertyException;
  +
   /**
    * A length quantity in XSL which is specified with a mixture
    * of absolute and relative and/or percent components.
  @@ -14,36 +20,73 @@
    */
   public class MixedLength extends Length {
   
  -    private PercentLength pcPart;
  +    private Vector lengths ;
   
  -    /**
  -     * construct an object based on a factor (the percent, as a
  -     * a factor) and an object which has a method to return the
  -     * Length which provides the "base" for this calculation.
  -     */
  -    public MixedLength(int absPart, PercentLength pcPart) {
  -        super(absPart);
  -        this.pcPart = pcPart;
  -        super.setIsComputed(false);
  +    public MixedLength(Vector lengths) {
  +     this.lengths = lengths;
       }
   
  -    protected int computeValue() {
  -        int rslt = super.computeValue();    // absolute part
  -        if (pcPart != null) {
  -            rslt += pcPart.computeValue();
  +    protected void computeValue() {
  +     int computedValue =0;
  +     boolean bAllComputed = true;
  +     Enumeration e = lengths.elements();
  +     while (e.hasMoreElements()) {
  +         Length l = (Length)e.nextElement();
  +         computedValue += l.mvalue();
  +         if (! l.isComputed()) {
  +             bAllComputed = false;
  +         }
           }
  -        return rslt;
  +        setComputedValue(computedValue, bAllComputed);
       }
   
  -    public String toString() {
  -        // return the factor as a percent
  -        // What about the base value?
  -        StringBuffer rslt = new StringBuffer(super.toString());
  +
  +    public double getTableUnits() {
  +     double tableUnits = 0.0;
  +     Enumeration e = lengths.elements();
  +     while (e.hasMoreElements()) {
  +         tableUnits += ((Length)e.nextElement()).getTableUnits();
  +        }
  +        return tableUnits;
  +    }
   
  -        if (pcPart != null) {
  -            rslt.append("+" + pcPart.toString());
  +    public void resolveTableUnit(double dTableUnit) {
  +     Enumeration e = lengths.elements();
  +     while (e.hasMoreElements()) {
  +         ((Length)e.nextElement()).resolveTableUnit(dTableUnit);
           }
  -        return rslt.toString();
  +    }
  +
  +    public String toString() {
  +        StringBuffer sbuf = new StringBuffer();
  +     Enumeration e = lengths.elements();
  +     while (e.hasMoreElements()) {
  +         if (sbuf.length()>0) {
  +             sbuf.append('+');
  +         }
  +         sbuf.append(e.nextElement().toString());
  +        }
  +     return sbuf.toString();
  +    }
  +
  +    public Numeric asNumeric() {
  +     Numeric numeric = null;
  +     for (Enumeration e = lengths.elements(); e.hasMoreElements();) {
  +         Length l = (Length)e.nextElement();
  +         if (numeric == null) {
  +             numeric = l.asNumeric();
  +         }
  +         else {
  +             try {
  +                 Numeric sum = numeric.add(l.asNumeric());
  +                 numeric = sum;
  +             } catch (PropertyException pe) {
  +                 System.err.println("Can't convert MixedLength to Numeric: " +
  +                                    pe);
  +             }
  +         }
  +     }
  +     return numeric;
       }
   
   }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/datatypes/AutoLength.java
  
  Index: AutoLength.java
  ===================================================================
  /*
   * $Id: AutoLength.java,v 1.1 2001/10/14 20:33:36 klease Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.datatypes;
  
  import org.apache.fop.fo.Property;
  import org.apache.fop.messaging.MessageHandler;
  
  /**
   * a length quantity in XSL which is specified as "auto"
   */
  public class AutoLength extends Length {
  
      public boolean isAuto() {
          return true;
      }
  
      // Should we do something intelligent here to set the actual size?
      // Would need a reference object!
      //    protected void computeValue() {
      //    }
  
      public String toString() {
          return "auto";
      }
  
  }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/datatypes/FixedLength.java
  
  Index: FixedLength.java
  ===================================================================
  /*
   * $Id: FixedLength.java,v 1.1 2001/10/14 20:33:36 klease Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.datatypes;
  
  import org.apache.fop.fo.Property;
  import org.apache.fop.fo.expr.Numeric;
  import org.apache.fop.messaging.MessageHandler;
  
  /**
   * a length quantity in XSL
   */
  public class FixedLength extends Length {
  
      /**
       * Set the length given a number of relative units and the current
       * font size in base units.
       */
      public FixedLength(double numRelUnits, int iCurFontSize) {
          setComputedValue((int)(numRelUnits * (double)iCurFontSize));
      }
  
      /**
       * Set the length given a number of units and a unit name.
       */
      public FixedLength(double numUnits, String units) {
          convert(numUnits, units);
      }
  
      /**
       * set the length as a number of base units
       */
      public FixedLength(int baseUnits) {
          setComputedValue(baseUnits);
      }
  
      /**
       * Convert the given length to a dimensionless integer representing
       * a whole number of base units (milli-points).
       */
      protected void convert(double dvalue, String unit) {
  
          int assumed_resolution = 1;    // points/pixel
  
          if (unit.equals("in"))
              dvalue = dvalue * 72;
          else if (unit.equals("cm"))
              dvalue = dvalue * 28.3464567;
          else if (unit.equals("mm"))
              dvalue = dvalue * 2.83464567;
          else if (unit.equals("pt"))
              dvalue = dvalue;
          else if (unit.equals("pc"))
              dvalue = dvalue * 12;
              /*
               * else if (unit.equals("em"))
               * dvalue = dvalue * fontsize;
               */
          else if (unit.equals("px"))
              dvalue = dvalue * assumed_resolution;
          else {
              dvalue = 0;
              MessageHandler.errorln("unknown length unit '" + unit
                                     + "'");
          }
          setComputedValue((int)(dvalue * 1000));
      }
  
      public Numeric asNumeric() {
        return new Numeric(this);
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to