]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Updated to experimental code.
authorPeter Bernard West <pbwest@apache.org>
Tue, 7 May 2002 15:58:53 +0000 (15:58 +0000)
committerPeter Bernard West <pbwest@apache.org>
Tue, 7 May 2002 15:58:53 +0000 (15:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/FOP_0-20-0_Alt-Design@194793 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/datatypes/Keep.java
src/org/apache/fop/datatypes/Length.java

index 8d16c25b9b791bb45b6f7e7648a03a0acf17947e..253f632ce83e1aae616049b5725b64f63f2da054 100644 (file)
@@ -1,77 +1,17 @@
+package org.apache.fop.datatypes;
+
+import org.apache.fop.datatypes.Compound;
+
 /*
  * $Id$
  * 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;
-
 /**
- * XSL FO Keep Property datatype (keep-together, etc)
+ * Interface for &lt;keep&gt; compound properties
  */
-public class Keep implements CompoundDatatype {
-    private Property withinLine;
-    private Property withinColumn;
-    private Property withinPage;
-
-    public Keep() {}
-
-    // From CompoundDatatype
-    public void setComponent(String sCmpnName, Property cmpnValue,
-                             boolean bIsDefault) {
-        if (sCmpnName.equals("within-line"))
-            setWithinLine(cmpnValue, bIsDefault);
-        else if (sCmpnName.equals("within-column"))
-            setWithinColumn(cmpnValue, bIsDefault);
-        else if (sCmpnName.equals("within-page"))
-            setWithinPage(cmpnValue, bIsDefault);
-    }
-
-    // From CompoundDatatype
-    public Property getComponent(String sCmpnName) {
-        if (sCmpnName.equals("within-line"))
-            return getWithinLine();
-        else if (sCmpnName.equals("within-column"))
-            return getWithinColumn();
-        else if (sCmpnName.equals("within-page"))
-            return getWithinPage();
-        else
-            return null;
-    }
-
-    public void setWithinLine(Property withinLine, boolean bIsDefault) {
-        this.withinLine = withinLine;
-    }
-
-    protected void setWithinColumn(Property withinColumn,
-                                   boolean bIsDefault) {
-        this.withinColumn = withinColumn;
-    }
-
-    public void setWithinPage(Property withinPage, boolean bIsDefault) {
-        this.withinPage = withinPage;
-    }
-
-    public Property getWithinLine() {
-        return this.withinLine;
-    }
-
-    public Property getWithinColumn() {
-        return this.withinColumn;
-    }
-
-    public Property getWithinPage() {
-        return this.withinPage;
-    }
 
-    /**
-     * What to do here?? There isn't really a meaningful single value.
-     */
-    public String toString() {
-        return "Keep";
-    }
+public interface Keep extends Compound {
 
 }
index 0dad1fd77fe7495e78e034ecf377fa9dd9593380..55c34b0c44c860262d520b85a7a68cf160daa3e2 100644 (file)
+
+package org.apache.fop.datatypes;
+
+import org.apache.fop.fo.expr.PropertyException;
+
 /*
+ * Length.java
  * $Id$
+ * Created: Wed Nov 21 15:39:30 2001
  * 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.
+ * @author <a href="mailto:pbwest@powerup.com.au">Peter B. West</a>
+ * @version $Revision$ $Name$
  */
-
-package org.apache.fop.datatypes;
-
-import org.apache.fop.fo.Property;
-import org.apache.fop.messaging.MessageHandler;
-
 /**
- * a length quantity in XSL
+ * A constructor class for Length datatype.  Constructs a <tt>Numeric</tt>.
  */
-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;
+public class Length {
 
-    /**
-     * Set the length given a number of relative units and the current
-     * font size in base units.
+    /*
+     * Constants for LengthUnitNames
      */
-    public Length(double numRelUnits, int iCurFontSize) {
-        millipoints = (int)(numRelUnits * (double)iCurFontSize);
-        setIsComputed(true);
-    }
+    public static final int
+         NOUNIT = 0
+            ,CM = 1
+            ,MM = 2
+            ,IN = 3
+            ,PT = 4
+            ,PC = 5
+            ,PX = 6
+           ,MPT = 7  // Millipoints
+                ;
+
+    /*
+     * Constants for conversions into millipoints
+     */
+    public static final double
+          PTSPERINCH = 72.0
+         ,PTSPERPICA = 12.0
+         ,CMSPERINCH = 2.54
+         ,MMSPERINCH = 25.4
+           ,PTSPERCM = PTSPERINCH / CMSPERINCH
+           ,PTSPERMM = PTSPERINCH / MMSPERINCH
+         ,PXSPERINCH = 92.0
+           ,PTSPERPX = PTSPERINCH / PXSPERINCH
+           ,PXSPERPT = PXSPERINCH / PTSPERINCH
+         ,PXSPERPICA = PTSPERPICA * PXSPERPT
+           ,PXSPERCM = PXSPERINCH / CMSPERINCH
+           ,PXSPERMM = PXSPERINCH / MMSPERINCH
+                   ;
 
     /**
-     * Set the length given a number of units and a unit name.
+     * Array of constant conversion factors from unit to millipoints,
+     * indexed by integer unit constant.  Keep this array in sync with
+     * the integer constants or bear the consequences.
      */
-    public Length(double numUnits, String units) {
-        convert(numUnits, units);
-    }
+    public static final double[] milliPtsPerUnit = {
+        0.0
+        ,PTSPERCM * 1000.0
+        ,PTSPERMM * 1000.0
+        ,PTSPERINCH * 1000.0
+        ,1000.0
+        ,PTSPERPICA * 1000.0
+        ,PTSPERPX * 1000.0
+        ,1.0
+    };
 
     /**
-     * set the length as a number of base units
+     * Private constructor - don't instantiate a <i>Length</i> object.
      */
-    public Length(int baseUnits) {
-        millipoints = baseUnits;
-        setIsComputed(true);
-    }
+    private Length() {}
 
     /**
-     * Convert the given length to a dimensionless integer representing
-     * a whole number of base units (milli-points).
+     * Construct a <tt>Numeric</tt> with a given unit and quantity.
+     * The unit power is assumed as 1.  The base unit is millipoints.
+     * @param property the index of the property with which this value
+     * is associated.
+     * @param value the number of units.
+     * @param unit an integer constant representing the unit
+     * @return a <tt>Numeric</tt> representing this <i>Length</i>.
      */
-    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("ERROR: unknown length unit '" + unit
-                                   + "'");
-        }
-        this.millipoints = (int)(dvalue * 1000);
-        setIsComputed(true);
-    }
-
-    protected void setIsComputed(boolean bIsComputed) {
-        this.bIsComputed = bIsComputed;
+    public static Numeric makeLength(int property, double value, int unit)
+        throws PropertyException
+    {
+        return new Numeric(property, value * milliPtsPerUnit[unit],
+                           Numeric.MILLIPOINTS, 1, unit);
     }
 
     /**
-     * return the length in 1/1000ths of a point
+     * Construct a <tt>Numeric</tt> with a given unit and quantity.
+     * The unit power is assumed as 1.  The base unit is millipoints.
+     * @param propertyName the name of the property with which this value
+     * is associated.
+     * @param value the number of units.
+     * @param unit an integer constant representing the unit.
+     * @return a <tt>Numeric</tt> representing this <i>Length</i>.
      */
-    public int mvalue() {
-        if (!bIsComputed)
-            millipoints = computeValue();
-        return millipoints;
-    }
-
-    protected int computeValue() {
-        return millipoints;
-    }
-
-    protected void setValue(int millipoints) {
-        this.millipoints = millipoints;
-        setIsComputed(true);
-    }
-
-    public boolean isAuto() {
-        return bAuto;
+    public static Numeric makeLength
+        (String propertyName, double value, int unit)
+        throws PropertyException
+    {
+        return new Numeric(propertyName, value * milliPtsPerUnit[unit],
+                           Numeric.MILLIPOINTS, 1, unit);
     }
 
     /**
-     * Return the number of table units which are included in this
-     * length specification.
-     * This will always be 0 unless the property specification used
-     * the proportional-column-width() function (only only table
-     * column FOs).
-     * <p>If this value is not 0, the actual value of the Length cannot
-     * be known without looking at all of the columns in the table to
-     * determine the value of a "table-unit".
-     * @return The number of table units which are included in this
-     * length specification.
+     * @param unit an <tt>int</tt> encoding a <i>Length</i> unit.
+     * @return the <tt>String</tt> name of the unit.
      */
-    public double getTableUnits() {
-        return 0.0;
-    }
-
-    public String toString() {
-        String s = millipoints + "mpt";
-        return s;
+    public static String getUnitName(int unit) {
+        switch (unit) {
+        case CM:
+            return "cm";
+        case MM:
+            return "mm";
+        case IN:
+            return "in";
+        case PT:
+            return "pt";
+        case PC:
+            return "pc";
+        case PX:
+            return "px";
+        case MPT:
+            return "millipt";
+        default:
+            return "";
+        }
     }
 
 }