Browse Source

Phase 2 of bug 26434.

- Roll the datatypes logic into the property classes.

PR: 26434.


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197312 13f79535-47bb-0310-9956-ffa450edef68
pull/30/head
Finn Bock 20 years ago
parent
commit
d9a8ac8671
43 changed files with 1747 additions and 2194 deletions
  1. 5
    3
      src/java/org/apache/fop/datatypes/AutoLength.java
  2. 7
    684
      src/java/org/apache/fop/datatypes/ColorType.java
  3. 0
    127
      src/java/org/apache/fop/datatypes/CondLength.java
  4. 5
    4
      src/java/org/apache/fop/datatypes/FixedLength.java
  5. 0
    157
      src/java/org/apache/fop/datatypes/Keep.java
  6. 3
    90
      src/java/org/apache/fop/datatypes/Length.java
  7. 0
    112
      src/java/org/apache/fop/datatypes/LengthPair.java
  8. 0
    231
      src/java/org/apache/fop/datatypes/LengthRange.java
  9. 4
    2
      src/java/org/apache/fop/datatypes/LinearCombinationLength.java
  10. 11
    10
      src/java/org/apache/fop/datatypes/MixedLength.java
  11. 5
    4
      src/java/org/apache/fop/datatypes/PercentLength.java
  12. 0
    133
      src/java/org/apache/fop/datatypes/Space.java
  13. 5
    4
      src/java/org/apache/fop/datatypes/TableColLength.java
  14. 708
    12
      src/java/org/apache/fop/fo/ColorTypeProperty.java
  15. 68
    14
      src/java/org/apache/fop/fo/CondLengthProperty.java
  16. 1
    1
      src/java/org/apache/fop/fo/EnumProperty.java
  17. 2
    2
      src/java/org/apache/fop/fo/FOPropertyMapping.java
  18. 90
    10
      src/java/org/apache/fop/fo/KeepProperty.java
  19. 48
    10
      src/java/org/apache/fop/fo/LengthPairProperty.java
  20. 94
    23
      src/java/org/apache/fop/fo/LengthProperty.java
  21. 171
    11
      src/java/org/apache/fop/fo/LengthRangeProperty.java
  22. 5
    6
      src/java/org/apache/fop/fo/NumberProperty.java
  23. 10
    18
      src/java/org/apache/fop/fo/Property.java
  24. 75
    13
      src/java/org/apache/fop/fo/SpaceProperty.java
  25. 2
    2
      src/java/org/apache/fop/fo/expr/AbsFunction.java
  26. 3
    3
      src/java/org/apache/fop/fo/expr/BodyStartFunction.java
  27. 4
    5
      src/java/org/apache/fop/fo/expr/LabelEndFunction.java
  28. 3
    3
      src/java/org/apache/fop/fo/expr/MaxFunction.java
  29. 3
    3
      src/java/org/apache/fop/fo/expr/MinFunction.java
  30. 0
    429
      src/java/org/apache/fop/fo/expr/Numeric.java
  31. 370
    13
      src/java/org/apache/fop/fo/expr/NumericProperty.java
  32. 1
    2
      src/java/org/apache/fop/fo/expr/PPColWidthFunction.java
  33. 20
    23
      src/java/org/apache/fop/fo/expr/PropertyParser.java
  34. 1
    3
      src/java/org/apache/fop/fo/expr/RGBColorFunction.java
  35. 5
    5
      src/java/org/apache/fop/fo/flow/ExternalGraphic.java
  36. 2
    2
      src/java/org/apache/fop/fo/flow/Table.java
  37. 0
    1
      src/java/org/apache/fop/fo/properties/BorderWidthPropertyMaker.java
  38. 6
    6
      src/java/org/apache/fop/fo/properties/CommonBorderAndPadding.java
  39. 3
    4
      src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java
  40. 1
    2
      src/java/org/apache/fop/fo/properties/LineHeightPropertyMaker.java
  41. 1
    1
      src/java/org/apache/fop/render/rtf/TableAttributesConverter.java
  42. 3
    3
      src/java/org/apache/fop/render/rtf/TextAttributesConverter.java
  43. 2
    3
      src/java/org/apache/fop/traits/SpaceVal.java

+ 5
- 3
src/java/org/apache/fop/datatypes/AutoLength.java View File

@@ -50,10 +50,12 @@
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.LengthProperty;

/**
* A length quantity in XSL which is specified as "auto".
*/
public class AutoLength extends Length {
public class AutoLength extends LengthProperty {

/**
* @see org.apache.fop.datatypes.Length#isAuto()
@@ -68,9 +70,9 @@ public class AutoLength extends Length {
// }

/**
* @see java.lang.Object#toString()
* @see org.apache.fop.fo.Property#getString()
*/
public String toString() {
public String getString() {
return "auto";
}


+ 7
- 684
src/java/org/apache/fop/datatypes/ColorType.java View File

@@ -51,716 +51,39 @@
package org.apache.fop.datatypes;

import java.awt.Color;
import java.io.Serializable;
import java.util.StringTokenizer;

/**
* A colour quantity in XSL.
*/
public class ColorType implements Serializable {

/**
* the red component
*/
protected float red = 0f;

/**
* the green component
*/
protected float green = 0f;

/**
* the blue component
*/
protected float blue = 0f;

/**
* the alpha component (indicator of opaque-ness)
* 0.0 - 1.0; 0.0 is completely transparent; 1.0 is completely opaque
* see definition at http://java.sun.com/j2se/1.3/docs/api/java/awt/Color.html
*/
protected float alpha = 1f;

/**
* Main constructor
* @param red red component
* @param green green component
* @param blue blue component
*/
public ColorType(float red, float green, float blue) {
this.red = red;
this.green = green;
this.blue = blue;
}

/**
* Set the colour given a particular String specifying either a
* colour name or #RGB or #RRGGBB
* @param value RGB value as String to be parsed
*/
public ColorType(String value) {
if (value.startsWith("#")) {
try {
if (value.length() == 4) {
// note: divide by 15 so F = FF = 1 and so on
this.red = Integer.parseInt(value.substring(1, 2), 16)
/ 15f;
this.green = Integer.parseInt(value.substring(2, 3), 16)
/ 15f;
this.blue = Integer.parseInt(value.substring(3), 16)
/ 15f;
} else if (value.length() == 7) {
// note: divide by 255 so FF = 1
this.red = Integer.parseInt(value.substring(1, 3), 16)
/ 255f;
this.green = Integer.parseInt(value.substring(3, 5), 16)
/ 255f;
this.blue = Integer.parseInt(value.substring(5), 16)
/ 255f;
} else {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
} catch (Exception e) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
} else if (value.startsWith("rgb(")) {
int poss = value.indexOf("(");
int pose = value.indexOf(")");
if (poss != -1 && pose != -1) {
value = value.substring(poss + 1, pose);
StringTokenizer st = new StringTokenizer(value, ",");
try {
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.red =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.red = Integer.parseInt(str) / 255f;
}
}
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.green =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.green = Integer.parseInt(str) / 255f;
}
}
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.blue =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.blue = Integer.parseInt(str) / 255f;
}
}
} catch (Exception e) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
}
} else if (value.startsWith("url(")) {
// refers to a gradient
} else {
if (value.toLowerCase().equals("transparent")) {
this.red = 0;
this.green = 0;
this.blue = 0;
this.alpha = 0;
} else {
boolean found = false;
for (int count = 0; count < NAMES.length; count++) {
if (value.toLowerCase().equals(NAMES[count])) {
this.red = VALUES[count][0] / 255f;
this.green = VALUES[count][1] / 255f;
this.blue = VALUES[count][2] / 255f;
found = true;
break;
}
}
if (!found) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour name: "
// + value);
}
}
}
}
public interface ColorType {

/**
* Returns the blue component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getBlue() {
return this.blue;
}
public float getBlue();

/**
* Returns the green component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getGreen() {
return this.green;
}
public float getGreen();

/**
* Returns the red component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getRed() {
return this.red;
}
public float getRed();

/**
* Returns the alpha (degree of opaque-ness) component of the color.
* @return float a value between 0.0 (fully transparent) and 1.0 (fully opaque)
*/
public float getAlpha() {
return this.alpha;
}
public float getAlpha();

/**
* Returns an AWT instance of this color
* @return float the AWT color represented by this ColorType instance
*/
public Color getAWTColor() {
return new Color(this.red, this.green, this.blue, this.alpha);
}

/**
* @param floatValue value (between 0.0 and 1.0) of color channel
* @return integer equivalent (between 0 and 255)
*/
public static int convertChannelToInteger (float floatValue) {
if (floatValue > 1.0) {
floatValue = 1.0f;
}
if (floatValue < 0) {
floatValue = 0;
}
return (int) (floatValue * 255);
}

/**
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer sbuf = new StringBuffer(8);
sbuf.append('#');
String s = Integer.toHexString((int)(red * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
s = Integer.toHexString((int)(green * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
s = Integer.toHexString((int)(blue * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
return sbuf.toString();
}

/** The names of the predefined colors */
protected static final String[] NAMES = {
"aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
"bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
"burlywood", "cadetblue", "chartreuse", "chocolate", "coral",
"cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue",
"darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey",
"darkkhaki", "darkmagenta", "darkolivegreen", "darkorange",
"darkorchid", "darkred", "darksalmon", "darkseagreen",
"darkslateblue", "darkslategray", "darkslategrey", "darkturquoise",
"darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey",
"dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia",
"gainsboro", "lightpink", "lightsalmon", "lightseagreen",
"lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue",
"lightyellow", "lime", "limegreen", "linen", "magenta", "maroon",
"mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
"mediumseagreen", "mediumslateblue", "mediumspringgreen",
"mediumturquoise", "mediumvioletred", "midnightblue", "mintcream",
"mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive",
"olivedrab", "orange", "orangered", "orchid", "palegoldenrod",
"palegreen", "paleturquoise", "palevioletred", "papayawhip",
"peachpuff", "peru", "pink", "plum", "powderblue", "purple", "red",
"rosybrown", "royalblue", "saddlebrown", "salmon", "ghostwhite",
"gold", "goldenrod", "gray", "grey", "green", "greenyellow",
"honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki",
"lavender", "lavenderblush", "lawngreen", "lemonchiffon",
"lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow",
"lightgray", "lightgreen", "lightgrey", "sandybrown", "seagreen",
"seashell", "sienna", "silver", "skyblue", "slateblue", "slategray",
"slategrey", "snow", "springgreen", "steelblue", "tan", "teal",
"thistle", "tomato", "turquoise", "violet", "wheat", "white",
"whitesmoke", "yellow", "yellowgreen"
};

/** The color values for the predefined colors */
protected static final int[][] VALUES = {
{
240, 248, 255
}, {
250, 235, 215
}, {
0, 255, 255
}, {
127, 255, 212
}, {
240, 255, 255
}, {
245, 245, 220
}, {
255, 228, 196
}, {
0, 0, 0
}, {
255, 235, 205
}, {
0, 0, 255
}, {
138, 43, 226
}, {
165, 42, 42
}, {
222, 184, 135
}, {
95, 158, 160
}, {
127, 255, 0
}, {
210, 105, 30
}, {
255, 127, 80
}, {
100, 149, 237
}, {
255, 248, 220
}, {
220, 20, 60
}, {
0, 255, 255
}, {
0, 0, 139
}, {
0, 139, 139
}, {
184, 134, 11
}, {
169, 169, 169
}, {
0, 100, 0
}, {
169, 169, 169
}, {
189, 183, 107
}, {
139, 0, 139
}, {
85, 107, 47
}, {
255, 140, 0
}, {
153, 50, 204
}, {
139, 0, 0
}, {
233, 150, 122
}, {
143, 188, 143
}, {
72, 61, 139
}, {
47, 79, 79
}, {
47, 79, 79
}, {
0, 206, 209
}, {
148, 0, 211
}, {
255, 20, 147
}, {
0, 191, 255
}, {
105, 105, 105
}, {
105, 105, 105
}, {
30, 144, 255
}, {
178, 34, 34
}, {
255, 250, 240
}, {
34, 139, 34
}, {
255, 0, 255
}, {
220, 220, 220
}, {
255, 182, 193
}, {
255, 160, 122
}, {
32, 178, 170
}, {
135, 206, 250
}, {
119, 136, 153
}, {
119, 136, 153
}, {
176, 196, 222
}, {
255, 255, 224
}, {
0, 255, 0
}, {
50, 205, 50
}, {
250, 240, 230
}, {
255, 0, 255
}, {
128, 0, 0
}, {
102, 205, 170
}, {
0, 0, 205
}, {
186, 85, 211
}, {
147, 112, 219
}, {
60, 179, 113
}, {
123, 104, 238
}, {
0, 250, 154
}, {
72, 209, 204
}, {
199, 21, 133
}, {
25, 25, 112
}, {
245, 255, 250
}, {
255, 228, 225
}, {
255, 228, 181
}, {
255, 222, 173
}, {
0, 0, 128
}, {
253, 245, 230
}, {
128, 128, 0
}, {
107, 142, 35
}, {
255, 165, 0
}, {
255, 69, 0
}, {
218, 112, 214
}, {
238, 232, 170
}, {
152, 251, 152
}, {
175, 238, 238
}, {
219, 112, 147
}, {
255, 239, 213
}, {
255, 218, 185
}, {
205, 133, 63
}, {
255, 192, 203
}, {
221, 160, 221
}, {
176, 224, 230
}, {
128, 0, 128
}, {
255, 0, 0
}, {
188, 143, 143
}, {
65, 105, 225
}, {
139, 69, 19
}, {
250, 128, 114
}, {
248, 248, 255
}, {
255, 215, 0
}, {
218, 165, 32
}, {
128, 128, 128
}, {
128, 128, 128
}, {
0, 128, 0
}, {
173, 255, 47
}, {
240, 255, 240
}, {
255, 105, 180
}, {
205, 92, 92
}, {
75, 0, 130
}, {
255, 255, 240
}, {
240, 230, 140
}, {
230, 230, 250
}, {
255, 240, 245
}, {
124, 252, 0
}, {
255, 250, 205
}, {
173, 216, 230
}, {
240, 128, 128
}, {
224, 255, 255
}, {
250, 250, 210
}, {
211, 211, 211
}, {
144, 238, 144
}, {
211, 211, 211
}, {
244, 164, 96
}, {
46, 139, 87
}, {
255, 245, 238
}, {
160, 82, 45
}, {
192, 192, 192
}, {
135, 206, 235
}, {
106, 90, 205
}, {
112, 128, 144
}, {
112, 128, 144
}, {
255, 250, 250
}, {
0, 255, 127
}, {
70, 130, 180
}, {
210, 180, 140
}, {
0, 128, 128
}, {
216, 191, 216
}, {
255, 99, 71
}, {
64, 224, 208
}, {
238, 130, 238
}, {
245, 222, 179
}, {
255, 255, 255
}, {
245, 245, 245
}, {
255, 255, 0
}, {
154, 205, 50
}
};
}

/*
* aliceblue rgb(240, 248, 255)
* antiquewhite rgb(250, 235, 215)
* aqua rgb( 0, 255, 255)
* aquamarine rgb(127, 255, 212)
* azure rgb(240, 255, 255)
* beige rgb(245, 245, 220)
* bisque rgb(255, 228, 196)
* black rgb( 0, 0, 0)
* blanchedalmond rgb(255, 235, 205)
* blue rgb( 0, 0, 255)
* blueviolet rgb(138, 43, 226)
* brown rgb(165, 42, 42)
* burlywood rgb(222, 184, 135)
* cadetblue rgb( 95, 158, 160)
* chartreuse rgb(127, 255, 0)
* chocolate rgb(210, 105, 30)
* coral rgb(255, 127, 80)
* cornflowerblue rgb(100, 149, 237)
* cornsilk rgb(255, 248, 220)
* crimson rgb(220, 20, 60)
* cyan rgb( 0, 255, 255)
* darkblue rgb( 0, 0, 139)
* darkcyan rgb( 0, 139, 139)
* darkgoldenrod rgb(184, 134, 11)
* darkgray rgb(169, 169, 169)
* darkgreen rgb( 0, 100, 0)
* darkgrey rgb(169, 169, 169)
* darkkhaki rgb(189, 183, 107)
* darkmagenta rgb(139, 0, 139)
* darkolivegreen rgb( 85, 107, 47)
* darkorange rgb(255, 140, 0)
* darkorchid rgb(153, 50, 204)
* darkred rgb(139, 0, 0)
* darksalmon rgb(233, 150, 122)
* darkseagreen rgb(143, 188, 143)
* darkslateblue rgb( 72, 61, 139)
* darkslategray rgb( 47, 79, 79)
* darkslategrey rgb( 47, 79, 79)
* darkturquoise rgb( 0, 206, 209)
* darkviolet rgb(148, 0, 211)
* deeppink rgb(255, 20, 147)
* deepskyblue rgb( 0, 191, 255)
* dimgray rgb(105, 105, 105)
* dimgrey rgb(105, 105, 105)
* dodgerblue rgb( 30, 144, 255)
* firebrick rgb(178, 34, 34)
* floralwhite rgb(255, 250, 240)
* forestgreen rgb( 34, 139, 34)
* fuchsia rgb(255, 0, 255)
* gainsboro rgb(220, 220, 220)
* lightpink rgb(255, 182, 193)
* lightsalmon rgb(255, 160, 122)
* lightseagreen rgb( 32, 178, 170)
* lightskyblue rgb(135, 206, 250)
* lightslategray rgb(119, 136, 153)
* lightslategrey rgb(119, 136, 153)
* lightsteelblue rgb(176, 196, 222)
* lightyellow rgb(255, 255, 224)
* lime rgb( 0, 255, 0)
* limegreen rgb( 50, 205, 50)
* linen rgb(250, 240, 230)
* magenta rgb(255, 0, 255)
* maroon rgb(128, 0, 0)
* mediumaquamarine rgb(102, 205, 170)
* mediumblue rgb( 0, 0, 205)
* mediumorchid rgb(186, 85, 211)
* mediumpurple rgb(147, 112, 219)
* mediumseagreen rgb( 60, 179, 113)
* mediumslateblue rgb(123, 104, 238)
* mediumspringgreen rgb( 0, 250, 154)
* mediumturquoise rgb( 72, 209, 204)
* mediumvioletred rgb(199, 21, 133)
* midnightblue rgb( 25, 25, 112)
* mintcream rgb(245, 255, 250)
* mistyrose rgb(255, 228, 225)
* moccasin rgb(255, 228, 181)
* navajowhite rgb(255, 222, 173)
* navy rgb( 0, 0, 128)
* oldlace rgb(253, 245, 230)
* olive rgb(128, 128, 0)
* olivedrab rgb(107, 142, 35)
* orange rgb(255, 165, 0)
* orangered rgb(255, 69, 0)
* orchid rgb(218, 112, 214)
* palegoldenrod rgb(238, 232, 170)
* palegreen rgb(152, 251, 152)
* paleturquoise rgb(175, 238, 238)
* palevioletred rgb(219, 112, 147)
* papayawhip rgb(255, 239, 213)
* peachpuff rgb(255, 218, 185)
* peru rgb(205, 133, 63)
* pink rgb(255, 192, 203)
* plum rgb(221, 160, 221)
* powderblue rgb(176, 224, 230)
* purple rgb(128, 0, 128)
* red rgb(255, 0, 0)
* rosybrown rgb(188, 143, 143)
* royalblue rgb( 65, 105, 225)
* saddlebrown rgb(139, 69, 19)
* salmon rgb(250, 128, 114)
* ghostwhite rgb(248, 248, 255)
* gold rgb(255, 215, 0)
* goldenrod rgb(218, 165, 32)
* gray rgb(128, 128, 128)
* grey rgb(128, 128, 128)
* green rgb( 0, 128, 0)
* greenyellow rgb(173, 255, 47)
* honeydew rgb(240, 255, 240)
* hotpink rgb(255, 105, 180)
* indianred rgb(205, 92, 92)
* indigo rgb( 75, 0, 130)
* ivory rgb(255, 255, 240)
* khaki rgb(240, 230, 140)
* lavender rgb(230, 230, 250)
* lavenderblush rgb(255, 240, 245)
* lawngreen rgb(124, 252, 0)
* lemonchiffon rgb(255, 250, 205)
* lightblue rgb(173, 216, 230)
* lightcoral rgb(240, 128, 128)
* lightcyan rgb(224, 255, 255)
* lightgoldenrodyellow rgb(250, 250, 210)
* lightgray rgb(211, 211, 211)
* lightgreen rgb(144, 238, 144)
* lightgrey rgb(211, 211, 211)
* sandybrown rgb(244, 164, 96)
* seagreen rgb( 46, 139, 87)
* seashell rgb(255, 245, 238)
* sienna rgb(160, 82, 45)
* silver rgb(192, 192, 192)
* skyblue rgb(135, 206, 235)
* slateblue rgb(106, 90, 205)
* slategray rgb(112, 128, 144)
* slategrey rgb(112, 128, 144)
* snow rgb(255, 250, 250)
* springgreen rgb( 0, 255, 127)
* steelblue rgb( 70, 130, 180)
* tan rgb(210, 180, 140)
* teal rgb( 0, 128, 128)
* thistle rgb(216, 191, 216)
* tomato rgb(255, 99, 71)
* turquoise rgb( 64, 224, 208)
* violet rgb(238, 130, 238)
* wheat rgb(245, 222, 179)
* white rgb(255, 255, 255)
* whitesmoke rgb(245, 245, 245)
* yellow rgb(255, 255, 0)
* yellowgreen rgb(154, 205, 50)
*/
public Color getAWTColor();
}

+ 0
- 127
src/java/org/apache/fop/datatypes/CondLength.java View File

@@ -1,127 +0,0 @@
/*
* $Id: CondLength.java,v 1.7 2003/03/05 20:38:23 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.Property;
import org.apache.fop.fo.Constants;

/**
* A space quantity in XSL (space-before, space-after).
* See length-conditional datatype in the specs.
*/
public class CondLength implements CompoundDatatype {

private Property length;
private Property conditionality;

/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_LENGTH) {
length = cmpnValue;
} else if (cmpId == CP_CONDITIONALITY) {
conditionality = cmpnValue;
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_LENGTH) {
return length;
} else if (cmpId == CP_CONDITIONALITY) {
return conditionality;
} else {
return null;
}
}

/**
* Returns the conditionality.
* @return the conditionality
*/
public Property getConditionality() {
return this.conditionality;
}

/**
* Returns the length.
* @return the length
*/
public Property getLength() {
return this.length;
}

/**
* Indicates if the length can be discarded on certain conditions.
* @return true if the length can be discarded.
*/
public boolean isDiscard() {
return this.conditionality.getEnum() == Constants.DISCARD;
}

/**
* Returns the computed length value.
* @return the length in millipoints
*/
public int getLengthValue() {
return this.length.getLength().getValue();
}

public String toString() {
return "CondLength[" + (isDiscard() ? "discard, " : "") +
length.getObject().toString() + "]";
}
}


+ 5
- 4
src/java/org/apache/fop/datatypes/FixedLength.java View File

@@ -50,12 +50,13 @@
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.expr.NumericProperty;

/**
* a length quantity in XSL
*/
public class FixedLength extends Length {
public class FixedLength extends LengthProperty {

/**
* Set the length given
@@ -120,8 +121,8 @@ public class FixedLength extends Length {
/**
* @return Numeric equivalent of this
*/
public Numeric asNumeric() {
return new Numeric(this);
public NumericProperty asNumeric() {
return new NumericProperty(this);
}
}


+ 0
- 157
src/java/org/apache/fop/datatypes/Keep.java View File

@@ -1,157 +0,0 @@
/*
* $Id: Keep.java,v 1.5 2003/03/05 20:38:23 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.Property;


/**
* XSL FO Keep Property datatype (keep-together, etc)
*/
public class Keep implements CompoundDatatype {
private Property withinLine;
private Property withinColumn;
private Property withinPage;

/**
* Constructor
*/
public Keep() {
}


/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_WITHIN_LINE) {
setWithinLine(cmpnValue, bIsDefault);
} else if (cmpId == CP_WITHIN_COLUMN) {
setWithinColumn(cmpnValue, bIsDefault);
} else if (cmpId == CP_WITHIN_PAGE) {
setWithinPage(cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_WITHIN_LINE) {
return getWithinLine();
} else if (cmpId == CP_WITHIN_COLUMN) {
return getWithinColumn();
} else if (cmpId == CP_WITHIN_PAGE) {
return getWithinPage();
} else {
return null;
}
}

/**
* @param withinLine withinLine property to set
* @param bIsDefault not used (??)
*/
public void setWithinLine(Property withinLine, boolean bIsDefault) {
this.withinLine = withinLine;
}

/**
* @param withinColumn withinColumn property to set
* @param bIsDefault not used (??)
*/
protected void setWithinColumn(Property withinColumn,
boolean bIsDefault) {
this.withinColumn = withinColumn;
}

/**
* @param withinPage withinPage property to set
* @param bIsDefault not used (??)
*/
public void setWithinPage(Property withinPage, boolean bIsDefault) {
this.withinPage = withinPage;
}

/**
* @return the withinLine property
*/
public Property getWithinLine() {
return this.withinLine;
}

/**
* @return the withinColumn property
*/
public Property getWithinColumn() {
return this.withinColumn;
}

/**
* @return the withinPage property
*/
public Property getWithinPage() {
return this.withinPage;
}

/**
* Not sure what to do here. There isn't really a meaningful single value.
* @return String representation
*/
public String toString() {
return "Keep[" +
"withinLine:" + getWithinLine().getObject() +
", withinColumn:" + getWithinColumn().getObject() +
", withinPage:" + getWithinPage().getObject() + "]";
}

}

+ 3
- 90
src/java/org/apache/fop/datatypes/Length.java View File

@@ -50,102 +50,15 @@
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.expr.Numeric;

/**
* A length quantity in XSL
*/
public class Length {

/** Holds the length in millipoints. */
protected int millipoints = 0;
/** Indicates if the value has been computed, or not. */
protected boolean bIsComputed = false;
public interface Length {

/**
* Returns the length in 1/1000ths of a point (millipoints)
* @return the length in millipoints
*/
public int getValue() {
if (!bIsComputed) {
computeValue();
}
return millipoints;
}

/**
* Computes the value.
*/
protected void computeValue() {
}


/**
* Sets the computed value.
* @param millipoints the length in millipoints
*/
protected void setComputedValue(int millipoints) {
setComputedValue(millipoints, true);
}

/**
* Sets the computed value.
* @param millipoints the length in millipoints
* @param bSetComputed True if the isComputed flag should be set.
*/
protected void setComputedValue(int millipoints, boolean bSetComputed) {
this.millipoints = millipoints;
this.bIsComputed = bSetComputed;
}

/**
* Indicates if the length has the "auto" value.
* @return True if the length is set to "auto"
*/
public boolean isAuto() {
return false;
}

/**
* Indicates if the length has been computed.
* @return True if the length has been computed
*/
public boolean isComputed() {
return this.bIsComputed;
}

/**
* 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.
*/
public double getTableUnits() {
return 0.0;
}

public void resolveTableUnit(double dTableUnit) {
}

/**
* @return null (cannot be converted to a Numeric ??)
*/
public Numeric asNumeric() {
return null;
}

/**
* @see java.lang.Object#toString()
*/
public String toString() {
String s = millipoints + "mpt";
return s;
}

public int getValue();
public boolean isAuto();
}

+ 0
- 112
src/java/org/apache/fop/datatypes/LengthPair.java View File

@@ -1,112 +0,0 @@
/*
* $Id: LengthPair.java,v 1.6 2003/03/05 20:38:24 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.Property;


/**
* Models a pair of lengths, one specifiying the dimensions for the
* inline-progression-direction, the other for the block-progression-direction.
* It is currently only used to specify border-separation in tables.
*/
public class LengthPair implements CompoundDatatype {

private Property ipd;
private Property bpd;

/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_BLOCK_PROGRESSION_DIRECTION) {
bpd = cmpnValue;
} else if (cmpId == CP_INLINE_PROGRESSION_DIRECTION) {
ipd = cmpnValue;
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_BLOCK_PROGRESSION_DIRECTION) {
return getBPD();
} else if (cmpId == CP_INLINE_PROGRESSION_DIRECTION) {
return getIPD();
} else {
return null; // SHOULDN'T HAPPEN
}
}

/**
* @return Property holding the ipd length
*/
public Property getIPD() {
return this.ipd;
}

/**
* @return Property holding the bpd length
*/
public Property getBPD() {
return this.bpd;
}

public String toString() {
return "LengthPair[" +
"ipd:" + getIPD().getObject() +
", bpd:" + getBPD().getObject() + "]";
}
}


+ 0
- 231
src/java/org/apache/fop/datatypes/LengthRange.java View File

@@ -1,231 +0,0 @@
/*
* $Id: LengthRange.java,v 1.10 2003/03/05 20:38:23 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.Property;

/**
* A "progression-dimension" quantity.
* Examples: block-progression-dimension, inline-progression-dimension.
* Corresponds to the triplet min-height, height, max-height (or width).
*/
public class LengthRange implements CompoundDatatype {

private Property minimum;
private Property optimum;
private Property maximum;
private static final int MINSET = 1;
private static final int OPTSET = 2;
private static final int MAXSET = 4;
private int bfSet = 0; // bit field
private boolean bChecked = false;

/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_MINIMUM) {
setMinimum(cmpnValue, bIsDefault);
} else if (cmpId == CP_OPTIMUM) {
setOptimum(cmpnValue, bIsDefault);
} else if (cmpId == CP_MAXIMUM) {
setMaximum(cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_MINIMUM) {
return getMinimum();
} else if (cmpId == CP_OPTIMUM) {
return getOptimum();
} else if (cmpId == CP_MAXIMUM) {
return getMaximum();
} else {
return null; // SHOULDN'T HAPPEN
}
}

/**
* Set minimum value to min.
* @param minimum A Length value specifying the minimum value for this
* LengthRange.
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
protected void setMinimum(Property minimum, boolean bIsDefault) {
this.minimum = minimum;
if (!bIsDefault) {
bfSet |= MINSET;
}
}


/**
* Set maximum value to max if it is >= optimum or optimum isn't set.
* @param max A Length value specifying the maximum value for this
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
protected void setMaximum(Property max, boolean bIsDefault) {
maximum = max;
if (!bIsDefault) {
bfSet |= MAXSET;
}
}


/**
* Set the optimum value.
* @param opt A Length value specifying the optimum value for this
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
protected void setOptimum(Property opt, boolean bIsDefault) {
optimum = opt;
if (!bIsDefault) {
bfSet |= OPTSET;
}
}

// Minimum is prioritaire, if explicit
private void checkConsistency() {
if (bChecked) {
return;
}
// Make sure max >= min
// Must also control if have any allowed enum values!

/**
* *******************
* if (minimum.mvalue() > maximum.mvalue()) {
* if ((bfSet&MINSET)!=0) {
* // if minimum is explicit, force max to min
* if ((bfSet&MAXSET)!=0) {
* // Warning: min>max, resetting max to min
* log.error("forcing max to min in LengthRange");
* }
* maximum = minimum ;
* }
* else {
* minimum = maximum; // minimum was default value
* }
* }
* // Now make sure opt <= max and opt >= min
* if (optimum.mvalue() > maximum.mvalue()) {
* if ((bfSet&OPTSET)!=0) {
* if ((bfSet&MAXSET)!=0) {
* // Warning: opt > max, resetting opt to max
* log.error("forcing opt to max in LengthRange");
* optimum = maximum ;
* }
* else {
* maximum = optimum; // maximum was default value
* }
* }
* else {
* // opt is default and max is explicit or default
* optimum = maximum ;
* }
* }
* else if (optimum.mvalue() < minimum.mvalue()) {
* if ((bfSet&MINSET)!=0) {
* // if minimum is explicit, force opt to min
* if ((bfSet&OPTSET)!=0) {
* log.error("forcing opt to min in LengthRange");
* }
* optimum = minimum ;
* }
* else {
* minimum = optimum; // minimum was default value
* }
* }
* *******$*******
*/
bChecked = true;
}

/**
* @return minimum length
*/
public Property getMinimum() {
checkConsistency();
return this.minimum;
}

/**
* @return maximum length
*/
public Property getMaximum() {
checkConsistency();
return this.maximum;
}

/**
* @return optimum length
*/
public Property getOptimum() {
checkConsistency();
return this.optimum;
}

public String toString() {
return "LengthRange[" +
"min:" + getMinimum().getObject() +
", max:" + getMaximum().getObject() +
", opt:" + getOptimum().getObject() + "]";
}
}


+ 4
- 2
src/java/org/apache/fop/datatypes/LinearCombinationLength.java View File

@@ -52,10 +52,12 @@ package org.apache.fop.datatypes;

import java.util.Vector;

import org.apache.fop.fo.LengthProperty;

/**
* Class modelling lengths that are build up by combining other lengths
*/
public class LinearCombinationLength extends Length {
public class LinearCombinationLength extends LengthProperty {

/** Collection of factors (1-1 correspondence with {@link #lengths} */
protected Vector factors;
@@ -75,7 +77,7 @@ public class LinearCombinationLength extends Length {
* @param factor the factor to be added
* @param length the Length to be added
*/
public void addTerm(double factor, Length length) {
public void addTerm(double factor, LengthProperty length) {
factors.addElement(new Double(factor));
lengths.addElement(length);
}

+ 11
- 10
src/java/org/apache/fop/datatypes/MixedLength.java View File

@@ -50,10 +50,11 @@
*/
package org.apache.fop.datatypes;

import java.util.Vector;
import java.util.Enumeration;
import java.util.Vector;

import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.expr.NumericProperty;
import org.apache.fop.fo.expr.PropertyException;

/**
@@ -61,7 +62,7 @@ import org.apache.fop.fo.expr.PropertyException;
* of absolute and relative and/or percent components.
* The actual value may not be computable before layout is done.
*/
public class MixedLength extends Length {
public class MixedLength extends LengthProperty {

/** The collection of Length objects comprising this MixedLength object */
private Vector lengths ;
@@ -84,7 +85,7 @@ public class MixedLength extends Length {
boolean bAllComputed = true;
Enumeration e = lengths.elements();
while (e.hasMoreElements()) {
Length l = (Length) e.nextElement();
LengthProperty l = (LengthProperty) e.nextElement();
computedValue += l.getValue();
if (!l.isComputed()) {
bAllComputed = false;
@@ -98,7 +99,7 @@ public class MixedLength extends Length {
double tableUnits = 0.0;
Enumeration e = lengths.elements();
while (e.hasMoreElements()) {
tableUnits += ((Length) e.nextElement()).getTableUnits();
tableUnits += ((LengthProperty) e.nextElement()).getTableUnits();
}
return tableUnits;
}
@@ -106,7 +107,7 @@ public class MixedLength extends Length {
public void resolveTableUnit(double dTableUnit) {
Enumeration e = lengths.elements();
while (e.hasMoreElements()) {
((Length) e.nextElement()).resolveTableUnit(dTableUnit);
((LengthProperty) e.nextElement()).resolveTableUnit(dTableUnit);
}
}

@@ -128,15 +129,15 @@ public class MixedLength extends Length {
/**
* @return Numeric equivalent of this
*/
public Numeric asNumeric() {
Numeric numeric = null;
public NumericProperty asNumeric() {
NumericProperty numeric = null;
for (Enumeration e = lengths.elements(); e.hasMoreElements();) {
Length l = (Length) e.nextElement();
LengthProperty l = (LengthProperty) e.nextElement();
if (numeric == null) {
numeric = l.asNumeric();
} else {
try {
Numeric sum = numeric.add(l.asNumeric());
NumericProperty sum = numeric.add(l.asNumeric());
numeric = sum;
} catch (PropertyException pe) {
System.err.println(

+ 5
- 4
src/java/org/apache/fop/datatypes/PercentLength.java View File

@@ -50,12 +50,13 @@
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.expr.NumericProperty;

/**
* a percent specified length quantity in XSL
*/
public class PercentLength extends Length {
public class PercentLength extends LengthProperty {

/**
* The percentage itself, expressed as a decimal value, e.g. for 95%, set
@@ -132,8 +133,8 @@ public class PercentLength extends Length {
/**
* @return new Numeric object that is equivalent to this
*/
public Numeric asNumeric() {
return new Numeric(this);
public NumericProperty asNumeric() {
return new NumericProperty(this);
}

}

+ 0
- 133
src/java/org/apache/fop/datatypes/Space.java View File

@@ -1,133 +0,0 @@
/*
* $Id: Space.java,v 1.8 2003/03/05 20:38:23 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.Property;

/**
* a space quantity in XSL (space-before, space-after)
*/
public class Space extends LengthRange {

private Property precedence;
private Property conditionality;

/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_PRECEDENCE) {
setPrecedence(cmpnValue, bIsDefault);
} else if (cmpId == CP_CONDITIONALITY) {
setConditionality(cmpnValue, bIsDefault);
} else {
super.setComponent(cmpId, cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_PRECEDENCE) {
return getPrecedence();
} else if (cmpId == CP_CONDITIONALITY) {
return getConditionality();
} else {
return super.getComponent(cmpId);
}
}

/**
*
* @param precedence precedence Property to set
* @param bIsDefault (is not used anywhere)
*/
protected void setPrecedence(Property precedence, boolean bIsDefault) {
this.precedence = precedence;
}

/**
*
* @param conditionality conditionality Property to set
* @param bIsDefault (is not used anywhere)
*/
protected void setConditionality(Property conditionality,
boolean bIsDefault) {
this.conditionality = conditionality;
}

/**
* @return precedence Property
*/
public Property getPrecedence() {
return this.precedence;
}

/**
* @return conditionality Property
*/
public Property getConditionality() {
return this.conditionality;
}

public String toString() {
return "Space[" +
"min:" + getMinimum().getObject() +
", max:" + getMaximum().getObject() +
", opt:" + getOptimum().getObject() +
", precedence:" + precedence.getObject() +
", conditionality:" + conditionality.getObject() + "]";
}

}


+ 5
- 4
src/java/org/apache/fop/datatypes/TableColLength.java View File

@@ -50,7 +50,8 @@
*/
package org.apache.fop.datatypes;

import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.expr.NumericProperty;

/**
* A table-column width specification, possibly including some
@@ -63,7 +64,7 @@ import org.apache.fop.fo.expr.Numeric;
* during layout.
* NOTE: this is only supposed to be allowed if table-layout=fixed.
*/
public class TableColLength extends Length {
public class TableColLength extends LengthProperty {

/**
* Number of table-column proportional units
@@ -114,8 +115,8 @@ public class TableColLength extends Length {
* Converts this to a new Numeric object
* @return the Numeric object
*/
public Numeric asNumeric() {
return new Numeric(this);
public NumericProperty asNumeric() {
return new NumericProperty(this);
}
}


+ 708
- 12
src/java/org/apache/fop/fo/ColorTypeProperty.java View File

@@ -50,13 +50,37 @@
*/
package org.apache.fop.fo;

import java.awt.Color;
import java.util.StringTokenizer;

import org.apache.fop.datatypes.ColorType;
import org.apache.fop.fo.properties.PropertyMaker;

/**
* Superclass for properties that wrap ColorType values
*/
public class ColorTypeProperty extends Property {
public class ColorTypeProperty extends Property implements ColorType {
/**
* the red component
*/
protected float red = 0f;

/**
* the green component
*/
protected float green = 0f;

/**
* the blue component
*/
protected float blue = 0f;

/**
* the alpha component (indicator of opaque-ness)
* 0.0 - 1.0; 0.0 is completely transparent; 1.0 is completely opaque
* see definition at http://java.sun.com/j2se/1.3/docs/api/java/awt/Color.html
*/
protected float alpha = 1f;

/**
* Inner class for creating instances of ColorTypeProperty
@@ -75,39 +99,711 @@ public class ColorTypeProperty extends Property {
if (p instanceof ColorTypeProperty) {
return p;
}
ColorType val = p.getColorType();
ColorTypeProperty val = p.getColorType();
if (val != null) {
return new ColorTypeProperty(val);
return val;
}
return convertPropertyDatatype(p, propertyList, fo);
}

}

private ColorType colorType;
/**
* Main constructor
* @param red red component
* @param green green component
* @param blue blue component
*/
public ColorTypeProperty(float red, float green, float blue) {
this.red = red;
this.green = green;
this.blue = blue;
}

/**
* @param colorType color type object which is to be wrapped in this
* Property
* Set the colour given a particular String specifying either a
* colour name or #RGB or #RRGGBB
* @param value RGB value as String to be parsed
*/
public ColorTypeProperty(ColorType colorType) {
this.colorType = colorType;
public ColorTypeProperty(String value) {
if (value.startsWith("#")) {
try {
if (value.length() == 4) {
// note: divide by 15 so F = FF = 1 and so on
this.red = Integer.parseInt(value.substring(1, 2), 16)
/ 15f;
this.green = Integer.parseInt(value.substring(2, 3), 16)
/ 15f;
this.blue = Integer.parseInt(value.substring(3), 16)
/ 15f;
} else if (value.length() == 7) {
// note: divide by 255 so FF = 1
this.red = Integer.parseInt(value.substring(1, 3), 16)
/ 255f;
this.green = Integer.parseInt(value.substring(3, 5), 16)
/ 255f;
this.blue = Integer.parseInt(value.substring(5), 16)
/ 255f;
} else {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
} catch (Exception e) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
} else if (value.startsWith("rgb(")) {
int poss = value.indexOf("(");
int pose = value.indexOf(")");
if (poss != -1 && pose != -1) {
value = value.substring(poss + 1, pose);
StringTokenizer st = new StringTokenizer(value, ",");
try {
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.red =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.red = Integer.parseInt(str) / 255f;
}
}
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.green =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.green = Integer.parseInt(str) / 255f;
}
}
if (st.hasMoreTokens()) {
String str = st.nextToken().trim();
if (str.endsWith("%")) {
this.blue =
Integer.parseInt(str.substring(0, str.length() - 1))
* 2.55f;
} else {
this.blue = Integer.parseInt(str) / 255f;
}
}
} catch (Exception e) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour format. Must be #RGB or #RRGGBB");
}
}
} else if (value.startsWith("url(")) {
// refers to a gradient
} else {
if (value.toLowerCase().equals("transparent")) {
this.red = 0;
this.green = 0;
this.blue = 0;
this.alpha = 0;
} else {
boolean found = false;
for (int count = 0; count < NAMES.length; count++) {
if (value.toLowerCase().equals(NAMES[count])) {
this.red = VALUES[count][0] / 255f;
this.green = VALUES[count][1] / 255f;
this.blue = VALUES[count][2] / 255f;
found = true;
break;
}
}
if (!found) {
this.red = 0;
this.green = 0;
this.blue = 0;
//log.error("unknown colour name: "
// + value);
}
}
}
}

/**
* Returns the blue component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getBlue() {
return this.blue;
}

/**
* Returns the green component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getGreen() {
return this.green;
}

/**
* Returns the red component of the color.
* @return float a value between 0.0 and 1.0
*/
public float getRed() {
return this.red;
}

/**
* Returns the alpha (degree of opaque-ness) component of the color.
* @return float a value between 0.0 (fully transparent) and 1.0 (fully opaque)
*/
public float getAlpha() {
return this.alpha;
}

/**
* Returns an AWT instance of this color
* @return float the AWT color represented by this ColorType instance
*/
public Color getAWTColor() {
return new Color(this.red, this.green, this.blue, this.alpha);
}

/**
* @param floatValue value (between 0.0 and 1.0) of color channel
* @return integer equivalent (between 0 and 255)
*/
public static int convertChannelToInteger (float floatValue) {
if (floatValue > 1.0) {
floatValue = 1.0f;
}
if (floatValue < 0) {
floatValue = 0;
}
return (int) (floatValue * 255);
}

/**
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer sbuf = new StringBuffer(8);
sbuf.append('#');
String s = Integer.toHexString((int)(red * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
s = Integer.toHexString((int)(green * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
s = Integer.toHexString((int)(blue * 255.0));
if (s.length() == 1) {
sbuf.append('0');
}
sbuf.append(s);
return sbuf.toString();
}

/** The names of the predefined colors */
protected static final String[] NAMES = {
"aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
"bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
"burlywood", "cadetblue", "chartreuse", "chocolate", "coral",
"cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue",
"darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey",
"darkkhaki", "darkmagenta", "darkolivegreen", "darkorange",
"darkorchid", "darkred", "darksalmon", "darkseagreen",
"darkslateblue", "darkslategray", "darkslategrey", "darkturquoise",
"darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey",
"dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia",
"gainsboro", "lightpink", "lightsalmon", "lightseagreen",
"lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue",
"lightyellow", "lime", "limegreen", "linen", "magenta", "maroon",
"mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
"mediumseagreen", "mediumslateblue", "mediumspringgreen",
"mediumturquoise", "mediumvioletred", "midnightblue", "mintcream",
"mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive",
"olivedrab", "orange", "orangered", "orchid", "palegoldenrod",
"palegreen", "paleturquoise", "palevioletred", "papayawhip",
"peachpuff", "peru", "pink", "plum", "powderblue", "purple", "red",
"rosybrown", "royalblue", "saddlebrown", "salmon", "ghostwhite",
"gold", "goldenrod", "gray", "grey", "green", "greenyellow",
"honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki",
"lavender", "lavenderblush", "lawngreen", "lemonchiffon",
"lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow",
"lightgray", "lightgreen", "lightgrey", "sandybrown", "seagreen",
"seashell", "sienna", "silver", "skyblue", "slateblue", "slategray",
"slategrey", "snow", "springgreen", "steelblue", "tan", "teal",
"thistle", "tomato", "turquoise", "violet", "wheat", "white",
"whitesmoke", "yellow", "yellowgreen"
};

/** The color values for the predefined colors */
protected static final int[][] VALUES = {
{
240, 248, 255
}, {
250, 235, 215
}, {
0, 255, 255
}, {
127, 255, 212
}, {
240, 255, 255
}, {
245, 245, 220
}, {
255, 228, 196
}, {
0, 0, 0
}, {
255, 235, 205
}, {
0, 0, 255
}, {
138, 43, 226
}, {
165, 42, 42
}, {
222, 184, 135
}, {
95, 158, 160
}, {
127, 255, 0
}, {
210, 105, 30
}, {
255, 127, 80
}, {
100, 149, 237
}, {
255, 248, 220
}, {
220, 20, 60
}, {
0, 255, 255
}, {
0, 0, 139
}, {
0, 139, 139
}, {
184, 134, 11
}, {
169, 169, 169
}, {
0, 100, 0
}, {
169, 169, 169
}, {
189, 183, 107
}, {
139, 0, 139
}, {
85, 107, 47
}, {
255, 140, 0
}, {
153, 50, 204
}, {
139, 0, 0
}, {
233, 150, 122
}, {
143, 188, 143
}, {
72, 61, 139
}, {
47, 79, 79
}, {
47, 79, 79
}, {
0, 206, 209
}, {
148, 0, 211
}, {
255, 20, 147
}, {
0, 191, 255
}, {
105, 105, 105
}, {
105, 105, 105
}, {
30, 144, 255
}, {
178, 34, 34
}, {
255, 250, 240
}, {
34, 139, 34
}, {
255, 0, 255
}, {
220, 220, 220
}, {
255, 182, 193
}, {
255, 160, 122
}, {
32, 178, 170
}, {
135, 206, 250
}, {
119, 136, 153
}, {
119, 136, 153
}, {
176, 196, 222
}, {
255, 255, 224
}, {
0, 255, 0
}, {
50, 205, 50
}, {
250, 240, 230
}, {
255, 0, 255
}, {
128, 0, 0
}, {
102, 205, 170
}, {
0, 0, 205
}, {
186, 85, 211
}, {
147, 112, 219
}, {
60, 179, 113
}, {
123, 104, 238
}, {
0, 250, 154
}, {
72, 209, 204
}, {
199, 21, 133
}, {
25, 25, 112
}, {
245, 255, 250
}, {
255, 228, 225
}, {
255, 228, 181
}, {
255, 222, 173
}, {
0, 0, 128
}, {
253, 245, 230
}, {
128, 128, 0
}, {
107, 142, 35
}, {
255, 165, 0
}, {
255, 69, 0
}, {
218, 112, 214
}, {
238, 232, 170
}, {
152, 251, 152
}, {
175, 238, 238
}, {
219, 112, 147
}, {
255, 239, 213
}, {
255, 218, 185
}, {
205, 133, 63
}, {
255, 192, 203
}, {
221, 160, 221
}, {
176, 224, 230
}, {
128, 0, 128
}, {
255, 0, 0
}, {
188, 143, 143
}, {
65, 105, 225
}, {
139, 69, 19
}, {
250, 128, 114
}, {
248, 248, 255
}, {
255, 215, 0
}, {
218, 165, 32
}, {
128, 128, 128
}, {
128, 128, 128
}, {
0, 128, 0
}, {
173, 255, 47
}, {
240, 255, 240
}, {
255, 105, 180
}, {
205, 92, 92
}, {
75, 0, 130
}, {
255, 255, 240
}, {
240, 230, 140
}, {
230, 230, 250
}, {
255, 240, 245
}, {
124, 252, 0
}, {
255, 250, 205
}, {
173, 216, 230
}, {
240, 128, 128
}, {
224, 255, 255
}, {
250, 250, 210
}, {
211, 211, 211
}, {
144, 238, 144
}, {
211, 211, 211
}, {
244, 164, 96
}, {
46, 139, 87
}, {
255, 245, 238
}, {
160, 82, 45
}, {
192, 192, 192
}, {
135, 206, 235
}, {
106, 90, 205
}, {
112, 128, 144
}, {
112, 128, 144
}, {
255, 250, 250
}, {
0, 255, 127
}, {
70, 130, 180
}, {
210, 180, 140
}, {
0, 128, 128
}, {
216, 191, 216
}, {
255, 99, 71
}, {
64, 224, 208
}, {
238, 130, 238
}, {
245, 222, 179
}, {
255, 255, 255
}, {
245, 245, 245
}, {
255, 255, 0
}, {
154, 205, 50
}
};

/*
* aliceblue rgb(240, 248, 255)
* antiquewhite rgb(250, 235, 215)
* aqua rgb( 0, 255, 255)
* aquamarine rgb(127, 255, 212)
* azure rgb(240, 255, 255)
* beige rgb(245, 245, 220)
* bisque rgb(255, 228, 196)
* black rgb( 0, 0, 0)
* blanchedalmond rgb(255, 235, 205)
* blue rgb( 0, 0, 255)
* blueviolet rgb(138, 43, 226)
* brown rgb(165, 42, 42)
* burlywood rgb(222, 184, 135)
* cadetblue rgb( 95, 158, 160)
* chartreuse rgb(127, 255, 0)
* chocolate rgb(210, 105, 30)
* coral rgb(255, 127, 80)
* cornflowerblue rgb(100, 149, 237)
* cornsilk rgb(255, 248, 220)
* crimson rgb(220, 20, 60)
* cyan rgb( 0, 255, 255)
* darkblue rgb( 0, 0, 139)
* darkcyan rgb( 0, 139, 139)
* darkgoldenrod rgb(184, 134, 11)
* darkgray rgb(169, 169, 169)
* darkgreen rgb( 0, 100, 0)
* darkgrey rgb(169, 169, 169)
* darkkhaki rgb(189, 183, 107)
* darkmagenta rgb(139, 0, 139)
* darkolivegreen rgb( 85, 107, 47)
* darkorange rgb(255, 140, 0)
* darkorchid rgb(153, 50, 204)
* darkred rgb(139, 0, 0)
* darksalmon rgb(233, 150, 122)
* darkseagreen rgb(143, 188, 143)
* darkslateblue rgb( 72, 61, 139)
* darkslategray rgb( 47, 79, 79)
* darkslategrey rgb( 47, 79, 79)
* darkturquoise rgb( 0, 206, 209)
* darkviolet rgb(148, 0, 211)
* deeppink rgb(255, 20, 147)
* deepskyblue rgb( 0, 191, 255)
* dimgray rgb(105, 105, 105)
* dimgrey rgb(105, 105, 105)
* dodgerblue rgb( 30, 144, 255)
* firebrick rgb(178, 34, 34)
* floralwhite rgb(255, 250, 240)
* forestgreen rgb( 34, 139, 34)
* fuchsia rgb(255, 0, 255)
* gainsboro rgb(220, 220, 220)
* lightpink rgb(255, 182, 193)
* lightsalmon rgb(255, 160, 122)
* lightseagreen rgb( 32, 178, 170)
* lightskyblue rgb(135, 206, 250)
* lightslategray rgb(119, 136, 153)
* lightslategrey rgb(119, 136, 153)
* lightsteelblue rgb(176, 196, 222)
* lightyellow rgb(255, 255, 224)
* lime rgb( 0, 255, 0)
* limegreen rgb( 50, 205, 50)
* linen rgb(250, 240, 230)
* magenta rgb(255, 0, 255)
* maroon rgb(128, 0, 0)
* mediumaquamarine rgb(102, 205, 170)
* mediumblue rgb( 0, 0, 205)
* mediumorchid rgb(186, 85, 211)
* mediumpurple rgb(147, 112, 219)
* mediumseagreen rgb( 60, 179, 113)
* mediumslateblue rgb(123, 104, 238)
* mediumspringgreen rgb( 0, 250, 154)
* mediumturquoise rgb( 72, 209, 204)
* mediumvioletred rgb(199, 21, 133)
* midnightblue rgb( 25, 25, 112)
* mintcream rgb(245, 255, 250)
* mistyrose rgb(255, 228, 225)
* moccasin rgb(255, 228, 181)
* navajowhite rgb(255, 222, 173)
* navy rgb( 0, 0, 128)
* oldlace rgb(253, 245, 230)
* olive rgb(128, 128, 0)
* olivedrab rgb(107, 142, 35)
* orange rgb(255, 165, 0)
* orangered rgb(255, 69, 0)
* orchid rgb(218, 112, 214)
* palegoldenrod rgb(238, 232, 170)
* palegreen rgb(152, 251, 152)
* paleturquoise rgb(175, 238, 238)
* palevioletred rgb(219, 112, 147)
* papayawhip rgb(255, 239, 213)
* peachpuff rgb(255, 218, 185)
* peru rgb(205, 133, 63)
* pink rgb(255, 192, 203)
* plum rgb(221, 160, 221)
* powderblue rgb(176, 224, 230)
* purple rgb(128, 0, 128)
* red rgb(255, 0, 0)
* rosybrown rgb(188, 143, 143)
* royalblue rgb( 65, 105, 225)
* saddlebrown rgb(139, 69, 19)
* salmon rgb(250, 128, 114)
* ghostwhite rgb(248, 248, 255)
* gold rgb(255, 215, 0)
* goldenrod rgb(218, 165, 32)
* gray rgb(128, 128, 128)
* grey rgb(128, 128, 128)
* green rgb( 0, 128, 0)
* greenyellow rgb(173, 255, 47)
* honeydew rgb(240, 255, 240)
* hotpink rgb(255, 105, 180)
* indianred rgb(205, 92, 92)
* indigo rgb( 75, 0, 130)
* ivory rgb(255, 255, 240)
* khaki rgb(240, 230, 140)
* lavender rgb(230, 230, 250)
* lavenderblush rgb(255, 240, 245)
* lawngreen rgb(124, 252, 0)
* lemonchiffon rgb(255, 250, 205)
* lightblue rgb(173, 216, 230)
* lightcoral rgb(240, 128, 128)
* lightcyan rgb(224, 255, 255)
* lightgoldenrodyellow rgb(250, 250, 210)
* lightgray rgb(211, 211, 211)
* lightgreen rgb(144, 238, 144)
* lightgrey rgb(211, 211, 211)
* sandybrown rgb(244, 164, 96)
* seagreen rgb( 46, 139, 87)
* seashell rgb(255, 245, 238)
* sienna rgb(160, 82, 45)
* silver rgb(192, 192, 192)
* skyblue rgb(135, 206, 235)
* slateblue rgb(106, 90, 205)
* slategray rgb(112, 128, 144)
* slategrey rgb(112, 128, 144)
* snow rgb(255, 250, 250)
* springgreen rgb( 0, 255, 127)
* steelblue rgb( 70, 130, 180)
* tan rgb(210, 180, 140)
* teal rgb( 0, 128, 128)
* thistle rgb(216, 191, 216)
* tomato rgb(255, 99, 71)
* turquoise rgb( 64, 224, 208)
* violet rgb(238, 130, 238)
* wheat rgb(245, 222, 179)
* white rgb(255, 255, 255)
* whitesmoke rgb(245, 245, 245)
* yellow rgb(255, 255, 0)
* yellowgreen rgb(154, 205, 50)
*/

/**
* Can't convert to any other types
* @return this.colorType
*/
public ColorType getColorType() {
return this.colorType;
public ColorTypeProperty getColorType() {
return this;
}

/**
* @return this.colorType cast as an Object
*/
public Object getObject() {
return this.colorType;
return this;
}

}


+ 68
- 14
src/java/org/apache/fop/fo/CondLengthProperty.java View File

@@ -51,14 +51,15 @@
package org.apache.fop.fo;

import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.CondLength;
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.CompoundDatatype;
import org.apache.fop.fo.properties.CompoundPropertyMaker;

/**
* Superclass for properties that have conditional lengths
*/
public class CondLengthProperty extends Property {
public class CondLengthProperty extends Property implements CompoundDatatype {
private Property length;
private Property conditionality;

/**
* Inner class for creating instances of CondLengthProperty
@@ -77,7 +78,7 @@ public class CondLengthProperty extends Property {
* @return the new instance.
*/
public Property makeNewProperty() {
return new CondLengthProperty(new CondLength());
return new CondLengthProperty();
}

/**
@@ -93,36 +94,89 @@ public class CondLengthProperty extends Property {
}
}

private CondLength condLength = null;
/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_LENGTH) {
length = cmpnValue;
} else if (cmpId == CP_CONDITIONALITY) {
conditionality = cmpnValue;
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_LENGTH) {
return length;
} else if (cmpId == CP_CONDITIONALITY) {
return conditionality;
} else {
return null;
}
}

/**
* @param condLength conditional length object which is to be wrapped in
* this property
* Returns the conditionality.
* @return the conditionality
*/
public CondLengthProperty(CondLength condLength) {
this.condLength = condLength;
public Property getConditionality() {
return this.conditionality;
}

/**
* Returns the length.
* @return the length
*/
public Property getLengthComponent() {
return this.length;
}

/**
* Indicates if the length can be discarded on certain conditions.
* @return true if the length can be discarded.
*/
public boolean isDiscard() {
return this.conditionality.getEnum() == Constants.DISCARD;
}

/**
* Returns the computed length value.
* @return the length in millipoints
*/
public int getLengthValue() {
return this.length.getLength().getValue();
}

public String toString() {
return "CondLength[" + (isDiscard() ? "discard, " : "") +
length.getObject().toString() + "]";
}


/**
* @return this.condLength
*/
public CondLength getCondLength() {
return this.condLength;
public CondLengthProperty getCondLength() {
return this;
}

/**
* TODO: Should we allow this?
* @return this.condLength cast as a Length
*/
public Length getLength() {
return this.condLength.getLength().getLength();
public LengthProperty getLength() {
return length.getLength();
}

/**
* @return this.condLength cast as an Object
*/
public Object getObject() {
return this.condLength;
return this;
}

}

+ 1
- 1
src/java/org/apache/fop/fo/EnumProperty.java View File

@@ -66,7 +66,7 @@ public class EnumProperty extends Property {
/**
* @param propName name of property for which a Maker should be created
*/
protected Maker(int propId) {
public Maker(int propId) {
super(propId);
}


+ 2
- 2
src/java/org/apache/fop/fo/FOPropertyMapping.java View File

@@ -53,10 +53,10 @@ package org.apache.fop.fo;
import java.util.HashMap;
import java.util.Map;

import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.LengthBase;
import org.apache.fop.datatypes.ToBeImplementedProperty;
import org.apache.fop.fo.properties.BorderWidthPropertyMaker;
import org.apache.fop.fo.properties.CharacterProperty;
import org.apache.fop.fo.properties.CorrespondingPropertyMaker;
import org.apache.fop.fo.properties.DimensionPropertyMaker;
import org.apache.fop.fo.properties.IndentPropertyMaker;
@@ -686,7 +686,7 @@ public class FOPropertyMapping implements Constants {
Property p, PropertyList propertyList, FObj fo) {
String nameval = p.getNCname();
if (nameval != null) {
return new ColorTypeProperty(new ColorType(nameval));
return new ColorTypeProperty(nameval);
}
return super.convertPropertyDatatype(p, propertyList, fo);
}

+ 90
- 10
src/java/org/apache/fop/fo/KeepProperty.java View File

@@ -51,13 +51,16 @@
package org.apache.fop.fo;

import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.Keep;
import org.apache.fop.datatypes.CompoundDatatype;
import org.apache.fop.fo.properties.CompoundPropertyMaker;

/**
* Superclass for properties that wrap Keep values
*/
public class KeepProperty extends Property {
public class KeepProperty extends Property implements CompoundDatatype {
private Property withinLine;
private Property withinColumn;
private Property withinPage;

/**
* Inner class for creating instances of KeepProperty
@@ -76,7 +79,7 @@ public class KeepProperty extends Property {
* @return the new instance.
*/
public Property makeNewProperty() {
return new KeepProperty(new Keep());
return new KeepProperty();
}

/**
@@ -92,27 +95,104 @@ public class KeepProperty extends Property {
}
}

private Keep keep;
/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_WITHIN_LINE) {
setWithinLine(cmpnValue, bIsDefault);
} else if (cmpId == CP_WITHIN_COLUMN) {
setWithinColumn(cmpnValue, bIsDefault);
} else if (cmpId == CP_WITHIN_PAGE) {
setWithinPage(cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_WITHIN_LINE) {
return getWithinLine();
} else if (cmpId == CP_WITHIN_COLUMN) {
return getWithinColumn();
} else if (cmpId == CP_WITHIN_PAGE) {
return getWithinPage();
} else {
return null;
}
}

/**
* @param withinLine withinLine property to set
* @param bIsDefault not used (??)
*/
public void setWithinLine(Property withinLine, boolean bIsDefault) {
this.withinLine = withinLine;
}

/**
* @param withinColumn withinColumn property to set
* @param bIsDefault not used (??)
*/
protected void setWithinColumn(Property withinColumn,
boolean bIsDefault) {
this.withinColumn = withinColumn;
}

/**
* @param withinPage withinPage property to set
* @param bIsDefault not used (??)
*/
public void setWithinPage(Property withinPage, boolean bIsDefault) {
this.withinPage = withinPage;
}

/**
* @return the withinLine property
*/
public Property getWithinLine() {
return this.withinLine;
}

/**
* @return the withinColumn property
*/
public Property getWithinColumn() {
return this.withinColumn;
}

/**
* @return the withinPage property
*/
public Property getWithinPage() {
return this.withinPage;
}

/**
* @param keep Keep value to wrap in this Property
* Not sure what to do here. There isn't really a meaningful single value.
* @return String representation
*/
public KeepProperty(Keep keep) {
this.keep = keep;
public String toString() {
return "Keep[" +
"withinLine:" + getWithinLine().getObject() +
", withinColumn:" + getWithinColumn().getObject() +
", withinPage:" + getWithinPage().getObject() + "]";
}

/**
* @return this.keep
*/
public Keep getKeep() {
return this.keep;
public KeepProperty getKeep() {
return this;
}

/**
* @return this.keep cast as Object
*/
public Object getObject() {
return this.keep;
return this;
}

}

+ 48
- 10
src/java/org/apache/fop/fo/LengthPairProperty.java View File

@@ -51,13 +51,15 @@
package org.apache.fop.fo;

import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.LengthPair;
import org.apache.fop.datatypes.CompoundDatatype;
import org.apache.fop.fo.properties.CompoundPropertyMaker;

/**
* Superclass for properties wrapping a LengthPair value
*/
public class LengthPairProperty extends Property {
public class LengthPairProperty extends Property implements CompoundDatatype {
private Property ipd;
private Property bpd;

/**
* Inner class for creating instances of LengthPairProperty
@@ -76,7 +78,7 @@ public class LengthPairProperty extends Property {
* @return the new instance.
*/
public Property makeNewProperty() {
return new LengthPairProperty(new LengthPair());
return new LengthPairProperty();
}

/**
@@ -92,27 +94,63 @@ public class LengthPairProperty extends Property {
}
}

private LengthPair lengthPair;
/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_BLOCK_PROGRESSION_DIRECTION) {
bpd = cmpnValue;
} else if (cmpId == CP_INLINE_PROGRESSION_DIRECTION) {
ipd = cmpnValue;
}
}

/**
* @param lengthPair the LengthPair object to be wrapped in this Property
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public LengthPairProperty(LengthPair lengthPair) {
this.lengthPair = lengthPair;
public Property getComponent(int cmpId) {
if (cmpId == CP_BLOCK_PROGRESSION_DIRECTION) {
return getBPD();
} else if (cmpId == CP_INLINE_PROGRESSION_DIRECTION) {
return getIPD();
} else {
return null; // SHOULDN'T HAPPEN
}
}

/**
* @return Property holding the ipd length
*/
public Property getIPD() {
return this.ipd;
}

/**
* @return Property holding the bpd length
*/
public Property getBPD() {
return this.bpd;
}

public String toString() {
return "LengthPair[" +
"ipd:" + getIPD().getObject() +
", bpd:" + getBPD().getObject() + "]";
}

/**
* @return this.lengthPair
*/
public LengthPair getLengthPair() {
return this.lengthPair;
public LengthPairProperty getLengthPair() {
return this;
}

/**
* @return this.lengthPair cast as an Object
*/
public Object getObject() {
return this.lengthPair;
return this;
}

}

+ 94
- 23
src/java/org/apache/fop/fo/LengthProperty.java View File

@@ -50,16 +50,20 @@
*/
package org.apache.fop.fo;

import org.apache.fop.datatypes.Length;
import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.AutoLength;
import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.datatypes.Length;
import org.apache.fop.fo.expr.NumericProperty;
import org.apache.fop.fo.properties.PropertyMaker;
import org.apache.fop.apps.FOPException;

/**
* Superclass for properties wrapping a Length value.
*/
public class LengthProperty extends Property {
public class LengthProperty extends Property implements Length {
/** Holds the length in millipoints. */
protected int millipoints = 0;
/** Indicates if the value has been computed, or not. */
protected boolean bIsComputed = false;

/**
* Inner class for making instances of LengthProperty
@@ -111,60 +115,127 @@ public class LengthProperty extends Property {
if (isAutoLengthAllowed()) {
String pval = p.getString();
if (pval != null && pval.equals("auto")) {
return new LengthProperty(new AutoLength());
return new AutoLength();
}
}
if (p instanceof LengthProperty) {
return p;
}
Length val = p.getLength();
LengthProperty val = p.getLength();
if (val != null) {
return new LengthProperty(val);
return val;
}
return convertPropertyDatatype(p, propertyList, fo);
}

}

/*
* public static Property.Maker maker(String prop) {
* return new Maker(prop);
* }

/**
* Returns the length in 1/1000ths of a point (millipoints)
* @return the length in millipoints
*/
public int getValue() {
if (!bIsComputed) {
computeValue();
}
return millipoints;
}

/**
* Computes the value.
*/
protected void computeValue() {
}


/**
* Sets the computed value.
* @param millipoints the length in millipoints
*/
protected void setComputedValue(int millipoints) {
setComputedValue(millipoints, true);
}

/**
* Sets the computed value.
* @param millipoints the length in millipoints
* @param bSetComputed True if the isComputed flag should be set.
*/
protected void setComputedValue(int millipoints, boolean bSetComputed) {
this.millipoints = millipoints;
this.bIsComputed = bSetComputed;
}

/**
* Indicates if the length has the "auto" value.
* @return True if the length is set to "auto"
*/
public boolean isAuto() {
return false;
}

/**
* Indicates if the length has been computed.
* @return True if the length has been computed
*/
public boolean isComputed() {
return this.bIsComputed;
}

/**
* 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.
*/
public double getTableUnits() {
return 0.0;
}

public void resolveTableUnit(double dTableUnit) {
}

/**
* This object may be also be a subclass of Length, such
* as PercentLength, TableColLength.
* @return null (cannot be converted to a Numeric ??)
*/
private Length length;
public NumericProperty asNumeric() {
return null;
}

/**
* @param length Length object to wrap in this
* @see java.lang.Object#toString()
*/
public LengthProperty(Length length) {
this.length = length;
// System.err.println("Set LengthProperty: " + length.toString());
public String toString() {
String s = millipoints + "mpt";
return s;
}

/**
* @return this.lenght cast as a Numeric
*/
public Numeric getNumeric() {
return length.asNumeric() ;
public NumericProperty getNumeric() {
return asNumeric() ;
}

/**
* @return this.length
*/
public Length getLength() {
return this.length;
public LengthProperty getLength() {
return this;
}

/**
* @return this.length cast as an Object
*/
public Object getObject() {
return this.length;
return this;
}

}

+ 171
- 11
src/java/org/apache/fop/fo/LengthRangeProperty.java View File

@@ -50,14 +50,22 @@
*/
package org.apache.fop.fo;

import org.apache.fop.datatypes.LengthRange;
import org.apache.fop.fo.properties.CompoundPropertyMaker;
import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.CompoundDatatype;
import org.apache.fop.fo.properties.CompoundPropertyMaker;

/**
* Superclass for properties that contain LengthRange values
*/
public class LengthRangeProperty extends Property {
public class LengthRangeProperty extends Property implements CompoundDatatype {
private Property minimum;
private Property optimum;
private Property maximum;
private static final int MINSET = 1;
private static final int OPTSET = 2;
private static final int MAXSET = 4;
private int bfSet = 0; // bit field
private boolean bChecked = false;

/**
* Inner class for a Maker for LengthProperty objects
@@ -76,7 +84,7 @@ public class LengthRangeProperty extends Property {
* @return the new instance.
*/
public Property makeNewProperty() {
return new LengthRangeProperty(new LengthRange());
return new LengthRangeProperty();
}

/**
@@ -92,27 +100,179 @@ public class LengthRangeProperty extends Property {
}
}

private LengthRange lengthRange;


/**
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_MINIMUM) {
setMinimum(cmpnValue, bIsDefault);
} else if (cmpId == CP_OPTIMUM) {
setOptimum(cmpnValue, bIsDefault);
} else if (cmpId == CP_MAXIMUM) {
setMaximum(cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_MINIMUM) {
return getMinimum();
} else if (cmpId == CP_OPTIMUM) {
return getOptimum();
} else if (cmpId == CP_MAXIMUM) {
return getMaximum();
} else {
return null; // SHOULDN'T HAPPEN
}
}

/**
* Set minimum value to min.
* @param minimum A Length value specifying the minimum value for this
* LengthRange.
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
protected void setMinimum(Property minimum, boolean bIsDefault) {
this.minimum = minimum;
if (!bIsDefault) {
bfSet |= MINSET;
}
}


/**
* Set maximum value to max if it is >= optimum or optimum isn't set.
* @param max A Length value specifying the maximum value for this
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
protected void setMaximum(Property max, boolean bIsDefault) {
maximum = max;
if (!bIsDefault) {
bfSet |= MAXSET;
}
}


/**
* @param lengthRange LengthRange object to wrap in this
* Set the optimum value.
* @param opt A Length value specifying the optimum value for this
* @param bIsDefault If true, this is set as a "default" value
* and not a user-specified explicit value.
*/
public LengthRangeProperty(LengthRange lengthRange) {
this.lengthRange = lengthRange;
protected void setOptimum(Property opt, boolean bIsDefault) {
optimum = opt;
if (!bIsDefault) {
bfSet |= OPTSET;
}
}

// Minimum is prioritaire, if explicit
private void checkConsistency() {
if (bChecked) {
return;
}
// Make sure max >= min
// Must also control if have any allowed enum values!

/**
* *******************
* if (minimum.mvalue() > maximum.mvalue()) {
* if ((bfSet&MINSET)!=0) {
* // if minimum is explicit, force max to min
* if ((bfSet&MAXSET)!=0) {
* // Warning: min>max, resetting max to min
* log.error("forcing max to min in LengthRange");
* }
* maximum = minimum ;
* }
* else {
* minimum = maximum; // minimum was default value
* }
* }
* // Now make sure opt <= max and opt >= min
* if (optimum.mvalue() > maximum.mvalue()) {
* if ((bfSet&OPTSET)!=0) {
* if ((bfSet&MAXSET)!=0) {
* // Warning: opt > max, resetting opt to max
* log.error("forcing opt to max in LengthRange");
* optimum = maximum ;
* }
* else {
* maximum = optimum; // maximum was default value
* }
* }
* else {
* // opt is default and max is explicit or default
* optimum = maximum ;
* }
* }
* else if (optimum.mvalue() < minimum.mvalue()) {
* if ((bfSet&MINSET)!=0) {
* // if minimum is explicit, force opt to min
* if ((bfSet&OPTSET)!=0) {
* log.error("forcing opt to min in LengthRange");
* }
* optimum = minimum ;
* }
* else {
* minimum = optimum; // minimum was default value
* }
* }
* *******$*******
*/
bChecked = true;
}

/**
* @return minimum length
*/
public Property getMinimum() {
checkConsistency();
return this.minimum;
}

/**
* @return maximum length
*/
public Property getMaximum() {
checkConsistency();
return this.maximum;
}

/**
* @return optimum length
*/
public Property getOptimum() {
checkConsistency();
return this.optimum;
}

public String toString() {
return "LengthRange[" +
"min:" + getMinimum().getObject() +
", max:" + getMaximum().getObject() +
", opt:" + getOptimum().getObject() + "]";
}

/**
* @return this.lengthRange
*/
public LengthRange getLengthRange() {
return this.lengthRange;
public LengthRangeProperty getLengthRange() {
return this;
}

/**
* @return this.lengthRange cast as an Object
*/
public Object getObject() {
return this.lengthRange;
return this;
}

}

+ 5
- 6
src/java/org/apache/fop/fo/NumberProperty.java View File

@@ -50,8 +50,7 @@
*/
package org.apache.fop.fo;

import org.apache.fop.datatypes.ColorType;
import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.expr.NumericProperty;
import org.apache.fop.fo.properties.PropertyMaker;

/**
@@ -142,18 +141,18 @@ public class NumberProperty extends Property {
* Convert NumberProperty to Numeric object
* @return Numeric object corresponding to this
*/
public Numeric getNumeric() {
return new Numeric(this.number);
public NumericProperty getNumeric() {
return new NumericProperty(this.number);
}

/**
* Convert NumberProperty to a ColorType. Not sure why this is needed.
* @return ColorType that corresponds to black
*/
public ColorType getColorType() {
public ColorTypeProperty getColorType() {
// Convert numeric value to color ???
// Convert to hexadecimal and then try to make it into a color?
return new ColorType((float)0.0, (float)0.0, (float)0.0);
return new ColorTypeProperty((float)0.0, (float)0.0, (float)0.0);
}

}

+ 10
- 18
src/java/org/apache/fop/fo/Property.java View File

@@ -50,14 +50,7 @@
*/
package org.apache.fop.fo;

import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.CondLength;
import org.apache.fop.datatypes.Keep;
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.LengthPair;
import org.apache.fop.datatypes.LengthRange;
import org.apache.fop.datatypes.Space;
import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.expr.NumericProperty;
import java.util.Vector;

/**
@@ -97,7 +90,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return Length property value
*/
public Length getLength() {
public LengthProperty getLength() {
return null;
}

@@ -105,7 +98,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return ColorType property value
*/
public ColorType getColorType() {
public ColorTypeProperty getColorType() {
return null;
}

@@ -113,7 +106,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return CondLength property value
*/
public CondLength getCondLength() {
public CondLengthProperty getCondLength() {
return null;
}

@@ -121,7 +114,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return LenghtRange property value
*/
public LengthRange getLengthRange() {
public LengthRangeProperty getLengthRange() {
return null;
}

@@ -129,7 +122,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return LengthPair property value
*/
public LengthPair getLengthPair() {
public LengthPairProperty getLengthPair() {
return null;
}

@@ -137,7 +130,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return Space property value
*/
public Space getSpace() {
public SpaceProperty getSpace() {
return null;
}

@@ -145,7 +138,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return Keep property value
*/
public Keep getKeep() {
public KeepProperty getKeep() {
return null;
}

@@ -185,7 +178,7 @@ public class Property {
* This method expects to be overridden by subclasses
* @return Numeric property value
*/
public Numeric getNumeric() {
public NumericProperty getNumeric() {
return null;
}

@@ -210,8 +203,7 @@ public class Property {
* @return String property value
*/
public String getString() {
Object o = getObject();
return (o == null) ? null : o.toString();
return null;
}

/**

+ 75
- 13
src/java/org/apache/fop/fo/SpaceProperty.java View File

@@ -51,8 +51,6 @@
package org.apache.fop.fo;

import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.LengthRange;
import org.apache.fop.datatypes.Space;
import org.apache.fop.fo.properties.CompoundPropertyMaker;

/**
@@ -60,7 +58,9 @@ import org.apache.fop.fo.properties.CompoundPropertyMaker;
* fo:space-after variety. It is extended by org.apache.fop.fo.properties.GenericSpace,
* which is extended by many other properties.
*/
public class SpaceProperty extends Property {
public class SpaceProperty extends LengthRangeProperty {
private Property precedence;
private Property conditionality;

/**
* Inner class used to create new instances of SpaceProperty
@@ -79,7 +79,7 @@ public class SpaceProperty extends Property {
* @return the new instance.
*/
public Property makeNewProperty() {
return new SpaceProperty(new Space());
return new SpaceProperty();
}

/**
@@ -95,35 +95,97 @@ public class SpaceProperty extends Property {
}
}

private Space space;

/**
* @param space the Space object (datatype) to be stored here
* @see org.apache.fop.datatypes.CompoundDatatype#setComponent(int, Property, boolean)
*/
public SpaceProperty(Space space) {
this.space = space;
public void setComponent(int cmpId, Property cmpnValue,
boolean bIsDefault) {
if (cmpId == CP_PRECEDENCE) {
setPrecedence(cmpnValue, bIsDefault);
} else if (cmpId == CP_CONDITIONALITY) {
setConditionality(cmpnValue, bIsDefault);
} else {
super.setComponent(cmpId, cmpnValue, bIsDefault);
}
}

/**
* @see org.apache.fop.datatypes.CompoundDatatype#getComponent(int)
*/
public Property getComponent(int cmpId) {
if (cmpId == CP_PRECEDENCE) {
return getPrecedence();
} else if (cmpId == CP_CONDITIONALITY) {
return getConditionality();
} else {
return super.getComponent(cmpId);
}
}

/**
*
* @param precedence precedence Property to set
* @param bIsDefault (is not used anywhere)
*/
protected void setPrecedence(Property precedence, boolean bIsDefault) {
this.precedence = precedence;
}

/**
*
* @param conditionality conditionality Property to set
* @param bIsDefault (is not used anywhere)
*/
protected void setConditionality(Property conditionality,
boolean bIsDefault) {
this.conditionality = conditionality;
}

/**
* @return precedence Property
*/
public Property getPrecedence() {
return this.precedence;
}

/**
* @return conditionality Property
*/
public Property getConditionality() {
return this.conditionality;
}

public String toString() {
return "Space[" +
"min:" + getMinimum().getObject() +
", max:" + getMaximum().getObject() +
", opt:" + getOptimum().getObject() +
", precedence:" + precedence.getObject() +
", conditionality:" + conditionality.getObject() + "]";
}

/**
* @return the Space (datatype) object contained here
*/
public Space getSpace() {
return this.space;
public SpaceProperty getSpace() {
return this;
}

/**
* Space extends LengthRange.
* @return the Space (datatype) object contained here
*/
public LengthRange getLengthRange() {
return this.space;
public LengthRangeProperty getLengthRange() {
return this;
}

/**
* @return the Space (datatype) object contained here
*/
public Object getObject() {
return this.space;
return this;
}

}

+ 2
- 2
src/java/org/apache/fop/fo/expr/AbsFunction.java View File

@@ -73,12 +73,12 @@ public class AbsFunction extends FunctionBase {
*/
public Property eval(Property[] args,
PropertyInfo propInfo) throws PropertyException {
Numeric num = args[0].getNumeric();
NumericProperty num = args[0].getNumeric();
if (num == null) {
throw new PropertyException("Non numeric operand to abs function");
}
// TODO: What if it has relative components (percent, table-col units)?
return new NumericProperty(num.abs());
return num.abs();
}

}

+ 3
- 3
src/java/org/apache/fop/fo/expr/BodyStartFunction.java View File

@@ -77,7 +77,7 @@ public class BodyStartFunction extends FunctionBase {
*/
public Property eval(Property[] args,
PropertyInfo pInfo) throws PropertyException {
Numeric distance =
NumericProperty distance =
pInfo.getPropertyList().get(Constants.PR_PROVISIONAL_DISTANCE_BETWEEN_STARTS).getNumeric();

FONode item = pInfo.getFO();
@@ -88,10 +88,10 @@ public class BodyStartFunction extends FunctionBase {
throw new PropertyException("body-start() called from outside an fo:list-item");
}

Numeric startIndent =
NumericProperty startIndent =
((ListItem)item).propertyList.get(Constants.PR_START_INDENT).getNumeric();

return new NumericProperty(distance.add(startIndent));
return distance.add(startIndent);
}

}

+ 4
- 5
src/java/org/apache/fop/fo/expr/LabelEndFunction.java View File

@@ -50,7 +50,6 @@
*/
package org.apache.fop.fo.expr;

import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.LengthBase;
import org.apache.fop.datatypes.LinearCombinationLength;
import org.apache.fop.datatypes.PercentLength;
@@ -84,9 +83,9 @@ public class LabelEndFunction extends FunctionBase {
public Property eval(Property[] args,
PropertyInfo pInfo) throws PropertyException {

Length distance =
LengthProperty distance =
pInfo.getPropertyList().get(Constants.PR_PROVISIONAL_DISTANCE_BETWEEN_STARTS).getLength();
Length separation =
LengthProperty separation =
pInfo.getPropertyList().getNearestSpecified(Constants.PR_PROVISIONAL_LABEL_SEPARATION).getLength();

FONode item = pInfo.getFO();
@@ -96,7 +95,7 @@ public class LabelEndFunction extends FunctionBase {
if (item == null) {
throw new PropertyException("label-end() called from outside an fo:list-item");
}
Length startIndent = ((ListItem)item).propertyList.get(Constants.PR_START_INDENT).getLength();
LengthProperty startIndent = ((ListItem)item).propertyList.get(Constants.PR_START_INDENT).getLength();

LinearCombinationLength labelEnd = new LinearCombinationLength();

@@ -110,7 +109,7 @@ public class LabelEndFunction extends FunctionBase {
labelEnd.addTerm(-1.0, startIndent);
labelEnd.addTerm(1.0, separation);

return new LengthProperty(labelEnd);
return labelEnd;
}

}

+ 3
- 3
src/java/org/apache/fop/fo/expr/MaxFunction.java View File

@@ -74,12 +74,12 @@ public class MaxFunction extends FunctionBase {
*/
public Property eval(Property[] args,
PropertyInfo pInfo) throws PropertyException {
Numeric n1 = args[0].getNumeric();
Numeric n2 = args[1].getNumeric();
NumericProperty n1 = args[0].getNumeric();
NumericProperty n2 = args[1].getNumeric();
if (n1 == null || n2 == null) {
throw new PropertyException("Non numeric operands to max function");
}
return new NumericProperty(n1.max(n2));
return n1.max(n2);
}

}

+ 3
- 3
src/java/org/apache/fop/fo/expr/MinFunction.java View File

@@ -74,12 +74,12 @@ public class MinFunction extends FunctionBase {
*/
public Property eval(Property[] args,
PropertyInfo pInfo) throws PropertyException {
Numeric n1 = args[0].getNumeric();
Numeric n2 = args[1].getNumeric();
NumericProperty n1 = args[0].getNumeric();
NumericProperty n2 = args[1].getNumeric();
if (n1 == null || n2 == null) {
throw new PropertyException("Non numeric operands to min function");
}
return new NumericProperty(n1.min(n2));
return n1.min(n2);
}

}

+ 0
- 429
src/java/org/apache/fop/fo/expr/Numeric.java View File

@@ -1,429 +0,0 @@
/*
* $Id: Numeric.java,v 1.6 2003/03/05 20:38:26 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.fo.expr;

import java.util.Vector;

import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.FixedLength;
import org.apache.fop.datatypes.PercentLength;
import org.apache.fop.datatypes.MixedLength;
import org.apache.fop.datatypes.TableColLength;
import org.apache.fop.datatypes.PercentBase;

/**
* Represents a "numeric" value as defined by the XSL FO Specification.
* This consists of one or more kinds of value specifications, from
* absolute numbers (units power of 0) to lengths (unit power of 1),
* relative lengths (ems), percentage lengths.
* A Numeric can be constructed from other Property types representing
* Numbers or Length-type values.
* Numeric provides methods to return Number and Length values based on
* its current value.
* It supports basic arithmetic operations involving Numerics.
*/
public class Numeric {
// Bit fields

/** constant for a length of absolute units (or number) */
public static final int ABS_LENGTH = 1;
/** constant for a percentage */
public static final int PC_LENGTH = 2;
/** constant for table units */
public static final int TCOL_LENGTH = 4;

private int valType;
private double absValue;
private double pcValue;
private PercentBase pcBase = null; // base value for PC_LENGTH component
private double tcolValue;
private int dim;


/**
* Construct a Numeric object by specifying one or more components,
* including absolute length, percent length, table units.
* @param valType A combination of bits representing the value types.
* @param absValue The value of a Number or resolved Length value if
* the ABS_LENGTH flag is set.
* @param pcValue The decimal percent value if the PC_LENGTH flag is set
* @param tcolValue The decimal table unit value if the TCOL_LENGTH flag
* is set.
* @param dim The dimension of the value. 0 for a Number, 1 for a Length
* (any type), >1, <0 if Lengths have been multiplied or divided.
* @param pcBase The PercentBase object used to calculate an actual value for
* a PC_LENGTH.
*/
protected Numeric(int valType, double absValue, double pcValue,
double tcolValue, int dim, PercentBase pcBase) {
this.valType = valType;
this.absValue = absValue;
this.pcValue = pcValue;
this.tcolValue = tcolValue;
this.dim = dim;
this.pcBase = pcBase;
}

/**
* Construct a Numeric object of dimension 0 from a double.
* @param valType A combination of bits representing the value types.
* @param absValue The value of a Number or resolved Length value.
*/

/**
* *
* protected Numeric(int valType, double absValue) {
* this.valType = valType;
* this.absValue = absValue;
* }
*/

/**
* Construct a Numeric object from a Number.
* @param num The number.
*/
public Numeric(Number num) {
this(ABS_LENGTH, num.doubleValue(), 0.0, 0.0, 0, null);
}

/**
* Construct a Numeric object from a Length.
* @param l The Length.
*/
public Numeric(FixedLength l) {
this(ABS_LENGTH, (double)l.getValue(), 0.0, 0.0, 1, null);
}

/**
* Construct a Numeric object from a PercentLength.
* @param pclen The PercentLength.
*/
public Numeric(PercentLength pclen) {
this(PC_LENGTH, 0.0, pclen.value(), 0.0, 1, pclen.getBaseLength());
}

/**
* Construct a Numeric object from a TableColLength.
* @param tclen The TableColLength.
*/
public Numeric(TableColLength tclen) {
this(TCOL_LENGTH, 0.0, 0.0, tclen.getTableUnits(), 1, null);
}


/**
* @return the current value as a Length if possible. This constructs
* a new Length or Length subclass based on the current value type
* of the Numeric.
* If the stored value has a unit dimension other than 1, null
* is returned.
*/
public Length asLength() {
if (dim == 1) {
Vector len = new Vector(3);
if ((valType & ABS_LENGTH) != 0) {
len.add(new FixedLength((int)absValue));
}
if ((valType & PC_LENGTH) != 0) {
len.add(new PercentLength(pcValue, pcBase));
}
if ((valType & TCOL_LENGTH) != 0) {
len.add(new TableColLength(tcolValue));
}
if (len.size() == 1) {
return (Length)len.elementAt(0);
} else {
return new MixedLength(len);
}
} else {
// or throw exception???
// can't make Length if dimension != 1
return null;
}
}

/**
* @return the current value as a Number if possible.
* Calls asDouble().
*/
public Number asNumber() {
return asDouble();
}

/**
* @return the current value as a Double
*/
public Double asDouble() {
if (dim == 0 && valType == ABS_LENGTH) {
return new Double(absValue);
} else {
// or throw exception???
// can't make Number if dimension != 0
return null;
}
}

/**
* Return the current value as a Integer if possible.
* If the unit dimension is 0 and the value type is ABSOLUTE, an Integer
* is returned. Otherwise null is returned. Note: the current value is
* truncated if necessary to make an integer value.
*/

/**
* public Integer asInteger() {
* if (dim == 0 && valType==ABS_LENGTH) {
* return new Integer((int)absValue);
* }
* else {
* // or throw exception???
* // can't make Number if dimension != 0
* return null;
* }
* }
*/

/**
* Return a boolean value indiciating whether the currently stored
* value consists of different "types" of values (absolute, percent,
* and/or table-unit.)
*/
private boolean isMixedType() {
int ntype = 0;
for (int t = valType; t != 0; t = t >> 1) {
if ((t & 1) != 0) {
++ntype;
}
}
return ntype > 1;
}

/**
* Subtract the operand from the current value and return a new Numeric
* representing the result.
* @param op The value to subtract.
* @return A Numeric representing the result.
* @throws PropertyException If the dimension of the operand is different
* from the dimension of this Numeric.
*/
public Numeric subtract(Numeric op) throws PropertyException {
// Check of same dimension
// Add together absolute and table units
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == op.dim) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
// Subtract each type of value
return new Numeric(valType | op.valType, absValue - op.absValue,
pcValue - op.pcValue,
tcolValue - op.tcolValue, dim, npcBase);
} else {
throw new PropertyException("Can't add Numerics of different dimensions");
}
}

/**
* Add the operand from the current value and return a new Numeric
* representing the result.
* @param op The value to add.
* @return A Numeric representing the result.
* @throws PropertyException If the dimension of the operand is different
* from the dimension of this Numeric.
*/
public Numeric add(Numeric op) throws PropertyException {
// Check of same dimension
// Add together absolute and table units
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == op.dim) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
// Add each type of value
return new Numeric(valType | op.valType, absValue + op.absValue,
pcValue + op.pcValue,
tcolValue + op.tcolValue, dim, npcBase);
} else {
throw new PropertyException("Can't add Numerics of different dimensions");
}
}

/**
* Multiply the the current value by the operand and return a new Numeric
* representing the result.
* @param op The multiplier.
* @return A Numeric representing the result.
* @throws PropertyException If both Numerics have "mixed" type.
*/
public Numeric multiply(Numeric op) throws PropertyException {
// Multiply together absolute units and add dimensions (exponents)
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == 0) {
// This is a dimensionless quantity, ie. a "Number"
return new Numeric(op.valType, absValue * op.absValue,
absValue * op.pcValue,
absValue * op.tcolValue, op.dim, op.pcBase);
} else if (op.dim == 0) {
double opval = op.absValue;
return new Numeric(valType, opval * absValue, opval * pcValue,
opval * tcolValue, dim, pcBase);
} else if (valType == op.valType && !isMixedType()) {
// Check same relbase and pcbase ???
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
return new Numeric(valType, absValue * op.absValue,
pcValue * op.pcValue,
tcolValue * op.tcolValue, dim + op.dim,
npcBase);
} else {
throw new PropertyException("Can't multiply mixed Numerics");
}
}

/**
* Divide the the current value by the operand and return a new Numeric
* representing the result.
* @param op The divisor.
* @return A Numeric representing the result.
* @throws PropertyException If both Numerics have "mixed" type.
*/
public Numeric divide(Numeric op) throws PropertyException {
// Multiply together absolute units and add dimensions (exponents)
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == 0) {
// This is a dimensionless quantity, ie. a "Number"
return new Numeric(op.valType, absValue / op.absValue,
absValue / op.pcValue,
absValue / op.tcolValue, -op.dim, op.pcBase);
} else if (op.dim == 0) {
double opval = op.absValue;
return new Numeric(valType, absValue / opval, pcValue / opval,
tcolValue / opval, dim, pcBase);
} else if (valType == op.valType && !isMixedType()) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
return new Numeric(valType,
(valType == ABS_LENGTH ? absValue / op.absValue : 0.0),
(valType == PC_LENGTH ? pcValue / op.pcValue : 0.0),
(valType == TCOL_LENGTH ? tcolValue / op.tcolValue : 0.0),
dim - op.dim, npcBase);
} else {
throw new PropertyException("Can't divide mixed Numerics.");
}
}

/**
* Return the absolute value of this Numeric.
* @return A new Numeric object representing the absolute value.
*/
public Numeric abs() {
return new Numeric(valType, Math.abs(absValue), Math.abs(pcValue),
Math.abs(tcolValue), dim, pcBase);
}

/**
* @param op the operand to which the current value should be compared
* @return a Numeric which is the maximum of the current value and the
* operand.
* @throws PropertyException If the dimensions or value types of the
* object and the operand are different.
*/
public Numeric max(Numeric op) throws PropertyException {
double rslt = 0.0;
// Only compare if have same dimension and value type!
if (dim == op.dim && valType == op.valType && !isMixedType()) {
if (valType == ABS_LENGTH) {
rslt = absValue - op.absValue;
} else if (valType == PC_LENGTH) {
rslt = pcValue - op.pcValue;
} else if (valType == TCOL_LENGTH) {
rslt = tcolValue - op.tcolValue;
}
if (rslt > 0.0) {
return this;
} else {
return op;
}
}
throw new PropertyException("Arguments to max() must have same dimension and value type.");
}

/**
* @param op the operand to which the current value should be compared
* @return a Numeric which is the minimum of the current value and the
* operand.
* @throws PropertyException If the dimensions or value types of the
* object and the operand are different.
*/
public Numeric min(Numeric op) throws PropertyException {
double rslt = 0.0;
// Only compare if have same dimension and value type!
if (dim == op.dim && valType == op.valType && !isMixedType()) {
if (valType == ABS_LENGTH) {
rslt = absValue - op.absValue;
} else if (valType == PC_LENGTH) {
rslt = pcValue - op.pcValue;
} else if (valType == TCOL_LENGTH) {
rslt = tcolValue - op.tcolValue;
}
if (rslt > 0.0) {
return op;
} else {
return this;
}
}
throw new PropertyException("Arguments to min() must have same dimension and value type.");
}

}


+ 370
- 13
src/java/org/apache/fop/fo/expr/NumericProperty.java View File

@@ -50,36 +50,393 @@
*/
package org.apache.fop.fo.expr;

import java.util.Vector;

import org.apache.fop.datatypes.PercentBase;
import org.apache.fop.datatypes.FixedLength;
import org.apache.fop.datatypes.TableColLength;
import org.apache.fop.datatypes.PercentLength;
import org.apache.fop.datatypes.MixedLength;

import org.apache.fop.fo.ColorTypeProperty;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.Property;
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.ColorType;

class NumericProperty extends Property {
private Numeric numeric;
public class NumericProperty extends Property {
// Bit fields

/** constant for a length of absolute units (or number) */
public static final int ABS_LENGTH = 1;
/** constant for a percentage */
public static final int PC_LENGTH = 2;
/** constant for table units */
public static final int TCOL_LENGTH = 4;

private int valType;
private double absValue;
private double pcValue;
private PercentBase pcBase = null; // base value for PC_LENGTH component
private double tcolValue;
private int dim;


/**
* Construct a Numeric object by specifying one or more components,
* including absolute length, percent length, table units.
* @param valType A combination of bits representing the value types.
* @param absValue The value of a Number or resolved Length value if
* the ABS_LENGTH flag is set.
* @param pcValue The decimal percent value if the PC_LENGTH flag is set
* @param tcolValue The decimal table unit value if the TCOL_LENGTH flag
* is set.
* @param dim The dimension of the value. 0 for a Number, 1 for a Length
* (any type), >1, <0 if Lengths have been multiplied or divided.
* @param pcBase The PercentBase object used to calculate an actual value for
* a PC_LENGTH.
*/
protected NumericProperty(int valType, double absValue, double pcValue,
double tcolValue, int dim, PercentBase pcBase) {
this.valType = valType;
this.absValue = absValue;
this.pcValue = pcValue;
this.tcolValue = tcolValue;
this.dim = dim;
this.pcBase = pcBase;
}

/**
* Construct a Numeric object of dimension 0 from a double.
* @param valType A combination of bits representing the value types.
* @param absValue The value of a Number or resolved Length value.
*/

/**
* *
* protected Numeric(int valType, double absValue) {
* this.valType = valType;
* this.absValue = absValue;
* }
*/

/**
* Construct a Numeric object from a Number.
* @param num The number.
*/
public NumericProperty(Number num) {
this(ABS_LENGTH, num.doubleValue(), 0.0, 0.0, 0, null);
}

/**
* Construct a Numeric object from a Length.
* @param l The Length.
*/
public NumericProperty(FixedLength l) {
this(ABS_LENGTH, (double)l.getValue(), 0.0, 0.0, 1, null);
}

/**
* Construct a Numeric object from a PercentLength.
* @param pclen The PercentLength.
*/
public NumericProperty(PercentLength pclen) {
this(PC_LENGTH, 0.0, pclen.value(), 0.0, 1, pclen.getBaseLength());
}

/**
* Construct a Numeric object from a TableColLength.
* @param tclen The TableColLength.
*/
public NumericProperty(TableColLength tclen) {
this(TCOL_LENGTH, 0.0, 0.0, tclen.getTableUnits(), 1, null);
}


/**
* @return the current value as a Length if possible. This constructs
* a new Length or Length subclass based on the current value type
* of the Numeric.
* If the stored value has a unit dimension other than 1, null
* is returned.
*/
public LengthProperty asLength() {
if (dim == 1) {
Vector len = new Vector(3);
if ((valType & ABS_LENGTH) != 0) {
len.add(new FixedLength((int)absValue));
}
if ((valType & PC_LENGTH) != 0) {
len.add(new PercentLength(pcValue, pcBase));
}
if ((valType & TCOL_LENGTH) != 0) {
len.add(new TableColLength(tcolValue));
}
if (len.size() == 1) {
return (LengthProperty)len.elementAt(0);
} else {
return new MixedLength(len);
}
} else {
// or throw exception???
// can't make Length if dimension != 1
return null;
}
}

/**
* @return the current value as a Number if possible.
* Calls asDouble().
*/
public Number asNumber() {
return asDouble();
}

/**
* @return the current value as a Double
*/
public Double asDouble() {
if (dim == 0 && valType == ABS_LENGTH) {
return new Double(absValue);
} else {
// or throw exception???
// can't make Number if dimension != 0
return null;
}
}

/**
* Return the current value as a Integer if possible.
* If the unit dimension is 0 and the value type is ABSOLUTE, an Integer
* is returned. Otherwise null is returned. Note: the current value is
* truncated if necessary to make an integer value.
*/

/**
* public Integer asInteger() {
* if (dim == 0 && valType==ABS_LENGTH) {
* return new Integer((int)absValue);
* }
* else {
* // or throw exception???
* // can't make Number if dimension != 0
* return null;
* }
* }
*/

/**
* Return a boolean value indiciating whether the currently stored
* value consists of different "types" of values (absolute, percent,
* and/or table-unit.)
*/
private boolean isMixedType() {
int ntype = 0;
for (int t = valType; t != 0; t = t >> 1) {
if ((t & 1) != 0) {
++ntype;
}
}
return ntype > 1;
}

/**
* Subtract the operand from the current value and return a new Numeric
* representing the result.
* @param op The value to subtract.
* @return A Numeric representing the result.
* @throws PropertyException If the dimension of the operand is different
* from the dimension of this Numeric.
*/
public NumericProperty subtract(NumericProperty op) throws PropertyException {
// Check of same dimension
// Add together absolute and table units
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == op.dim) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
// Subtract each type of value
return new NumericProperty(valType | op.valType, absValue - op.absValue,
pcValue - op.pcValue,
tcolValue - op.tcolValue, dim, npcBase);
} else {
throw new PropertyException("Can't add Numerics of different dimensions");
}
}

/**
* Add the operand from the current value and return a new Numeric
* representing the result.
* @param op The value to add.
* @return A Numeric representing the result.
* @throws PropertyException If the dimension of the operand is different
* from the dimension of this Numeric.
*/
public NumericProperty add(NumericProperty op) throws PropertyException {
// Check of same dimension
// Add together absolute and table units
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == op.dim) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
// Add each type of value
return new NumericProperty(valType | op.valType, absValue + op.absValue,
pcValue + op.pcValue,
tcolValue + op.tcolValue, dim, npcBase);
} else {
throw new PropertyException("Can't add Numerics of different dimensions");
}
}

/**
* Multiply the the current value by the operand and return a new Numeric
* representing the result.
* @param op The multiplier.
* @return A Numeric representing the result.
* @throws PropertyException If both Numerics have "mixed" type.
*/
public NumericProperty multiply(NumericProperty op) throws PropertyException {
// Multiply together absolute units and add dimensions (exponents)
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == 0) {
// This is a dimensionless quantity, ie. a "Number"
return new NumericProperty(op.valType, absValue * op.absValue,
absValue * op.pcValue,
absValue * op.tcolValue, op.dim, op.pcBase);
} else if (op.dim == 0) {
double opval = op.absValue;
return new NumericProperty(valType, opval * absValue, opval * pcValue,
opval * tcolValue, dim, pcBase);
} else if (valType == op.valType && !isMixedType()) {
// Check same relbase and pcbase ???
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
return new NumericProperty(valType, absValue * op.absValue,
pcValue * op.pcValue,
tcolValue * op.tcolValue, dim + op.dim,
npcBase);
} else {
throw new PropertyException("Can't multiply mixed Numerics");
}
}

/**
* Divide the the current value by the operand and return a new Numeric
* representing the result.
* @param op The divisor.
* @return A Numeric representing the result.
* @throws PropertyException If both Numerics have "mixed" type.
*/
public NumericProperty divide(NumericProperty op) throws PropertyException {
// Multiply together absolute units and add dimensions (exponents)
// What about percentages??? Treat as colUnits if they can't be
// in same property!
if (dim == 0) {
// This is a dimensionless quantity, ie. a "Number"
return new NumericProperty(op.valType, absValue / op.absValue,
absValue / op.pcValue,
absValue / op.tcolValue, -op.dim, op.pcBase);
} else if (op.dim == 0) {
double opval = op.absValue;
return new NumericProperty(valType, absValue / opval, pcValue / opval,
tcolValue / opval, dim, pcBase);
} else if (valType == op.valType && !isMixedType()) {
PercentBase npcBase = ((valType & PC_LENGTH) != 0) ? pcBase
: op.pcBase;
return new NumericProperty(valType,
(valType == ABS_LENGTH ? absValue / op.absValue : 0.0),
(valType == PC_LENGTH ? pcValue / op.pcValue : 0.0),
(valType == TCOL_LENGTH ? tcolValue / op.tcolValue : 0.0),
dim - op.dim, npcBase);
} else {
throw new PropertyException("Can't divide mixed Numerics.");
}
}

/**
* Return the absolute value of this Numeric.
* @return A new Numeric object representing the absolute value.
*/
public NumericProperty abs() {
return new NumericProperty(valType, Math.abs(absValue), Math.abs(pcValue),
Math.abs(tcolValue), dim, pcBase);
}

/**
* @param op the operand to which the current value should be compared
* @return a Numeric which is the maximum of the current value and the
* operand.
* @throws PropertyException If the dimensions or value types of the
* object and the operand are different.
*/
public NumericProperty max(NumericProperty op) throws PropertyException {
double rslt = 0.0;
// Only compare if have same dimension and value type!
if (dim == op.dim && valType == op.valType && !isMixedType()) {
if (valType == ABS_LENGTH) {
rslt = absValue - op.absValue;
} else if (valType == PC_LENGTH) {
rslt = pcValue - op.pcValue;
} else if (valType == TCOL_LENGTH) {
rslt = tcolValue - op.tcolValue;
}
if (rslt > 0.0) {
return this;
} else {
return op;
}
}
throw new PropertyException("Arguments to max() must have same dimension and value type.");
}

NumericProperty(Numeric value) {
this.numeric = value;
/**
* @param op the operand to which the current value should be compared
* @return a Numeric which is the minimum of the current value and the
* operand.
* @throws PropertyException If the dimensions or value types of the
* object and the operand are different.
*/
public NumericProperty min(NumericProperty op) throws PropertyException {
double rslt = 0.0;
// Only compare if have same dimension and value type!
if (dim == op.dim && valType == op.valType && !isMixedType()) {
if (valType == ABS_LENGTH) {
rslt = absValue - op.absValue;
} else if (valType == PC_LENGTH) {
rslt = pcValue - op.pcValue;
} else if (valType == TCOL_LENGTH) {
rslt = tcolValue - op.tcolValue;
}
if (rslt > 0.0) {
return op;
} else {
return this;
}
}
throw new PropertyException("Arguments to min() must have same dimension and value type.");
}

public Numeric getNumeric() {
return this.numeric;
public NumericProperty getNumeric() {
return this;
}

public Number getNumber() {
return numeric.asNumber();
return asNumber();
}

public Length getLength() {
return numeric.asLength();
public LengthProperty getLength() {
return asLength();
}

public ColorType getColorType() {
public ColorTypeProperty getColorType() {
// try converting to numeric number and then to color
return null;
}

public Object getObject() {
return this.numeric;
return this;
}

}

+ 1
- 2
src/java/org/apache/fop/fo/expr/PPColWidthFunction.java View File

@@ -52,7 +52,6 @@ package org.apache.fop.fo.expr;


import org.apache.fop.fo.Property;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.datatypes.TableColLength;

/**
@@ -90,7 +89,7 @@ public class PPColWidthFunction extends FunctionBase {
+ "may only be used on table-column FO");
}
// Check if table-layout is "fixed"...
return new LengthProperty(new TableColLength(d.doubleValue()));
return new TableColLength(d.doubleValue());
}

}

+ 20
- 23
src/java/org/apache/fop/fo/expr/PropertyParser.java View File

@@ -50,17 +50,15 @@
*/
package org.apache.fop.fo.expr;

import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.FixedLength;
import org.apache.fop.datatypes.Length;
import org.apache.fop.datatypes.PercentBase;
import org.apache.fop.datatypes.PercentLength;
import org.apache.fop.fo.Property;
import org.apache.fop.fo.ColorTypeProperty;
import org.apache.fop.fo.ListProperty;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.NumberProperty;
import org.apache.fop.fo.StringProperty;
import org.apache.fop.fo.ColorTypeProperty;

import java.util.HashMap;

@@ -73,7 +71,7 @@ public class PropertyParser extends PropertyTokenizer {
private PropertyInfo propInfo; // Maker and propertyList related info

private static final String RELUNIT = "em";
private static final Numeric NEGATIVE_ONE = new Numeric(new Double(-1.0));
private static final NumericProperty NEGATIVE_ONE = new NumericProperty(new Double(-1.0));
private static final HashMap FUNCTION_TABLE = new HashMap();

static {
@@ -299,8 +297,7 @@ public class PropertyParser extends PropertyTokenizer {
if (pcBase.getDimension() == 0) {
prop = new NumberProperty(pcval * pcBase.getBaseValue());
} else if (pcBase.getDimension() == 1) {
prop = new LengthProperty(new PercentLength(pcval,
pcBase));
prop = new PercentLength(pcval, pcBase);
} else {
throw new PropertyException("Illegal percent dimension value");
}
@@ -316,7 +313,7 @@ public class PropertyParser extends PropertyTokenizer {
String unitPart = currentTokenValue.substring(numLen);
Double numPart = new Double(currentTokenValue.substring(0,
numLen));
Length length = null;
LengthProperty length = null;
if (unitPart.equals(RELUNIT)) {
length = new FixedLength(numPart.doubleValue(),
propInfo.currentFontSize());
@@ -327,12 +324,12 @@ public class PropertyParser extends PropertyTokenizer {
throw new PropertyException("unrecognized unit name: "
+ currentTokenValue);
} else {
prop = new LengthProperty(length);
prop = length;
}
break;

case TOK_COLORSPEC:
prop = new ColorTypeProperty(new ColorType(currentTokenValue));
prop = new ColorTypeProperty(currentTokenValue);
break;

case TOK_FUNCTION_LPAR: {
@@ -404,12 +401,12 @@ public class PropertyParser extends PropertyTokenizer {
* the sum of the two operands.
* @throws PropertyException If either operand is null.
*/
private Property evalAddition(Numeric op1,
Numeric op2) throws PropertyException {
private Property evalAddition(NumericProperty op1,
NumericProperty op2) throws PropertyException {
if (op1 == null || op2 == null) {
throw new PropertyException("Non numeric operand in addition");
}
return new NumericProperty(op1.add(op2));
return op1.add(op2);
}

/**
@@ -421,12 +418,12 @@ public class PropertyParser extends PropertyTokenizer {
* the difference of the two operands.
* @throws PropertyException If either operand is null.
*/
private Property evalSubtraction(Numeric op1,
Numeric op2) throws PropertyException {
private Property evalSubtraction(NumericProperty op1,
NumericProperty op2) throws PropertyException {
if (op1 == null || op2 == null) {
throw new PropertyException("Non numeric operand in subtraction");
}
return new NumericProperty(op1.subtract(op2));
return op1.subtract(op2);
}

/**
@@ -437,11 +434,11 @@ public class PropertyParser extends PropertyTokenizer {
* the negative of the operand (multiplication by *1).
* @throws PropertyException If the operand is null.
*/
private Property evalNegate(Numeric op) throws PropertyException {
private Property evalNegate(NumericProperty op) throws PropertyException {
if (op == null) {
throw new PropertyException("Non numeric operand to unary minus");
}
return new NumericProperty(op.multiply(NEGATIVE_ONE));
return op.multiply(NEGATIVE_ONE);
}

/**
@@ -453,12 +450,12 @@ public class PropertyParser extends PropertyTokenizer {
* the product of the two operands.
* @throws PropertyException If either operand is null.
*/
private Property evalMultiply(Numeric op1,
Numeric op2) throws PropertyException {
private Property evalMultiply(NumericProperty op1,
NumericProperty op2) throws PropertyException {
if (op1 == null || op2 == null) {
throw new PropertyException("Non numeric operand in multiplication");
}
return new NumericProperty(op1.multiply(op2));
return op1.multiply(op2);
}


@@ -471,12 +468,12 @@ public class PropertyParser extends PropertyTokenizer {
* op1 divided by op2.
* @throws PropertyException If either operand is null.
*/
private Property evalDivide(Numeric op1,
Numeric op2) throws PropertyException {
private Property evalDivide(NumericProperty op1,
NumericProperty op2) throws PropertyException {
if (op1 == null || op2 == null) {
throw new PropertyException("Non numeric operand in division");
}
return new NumericProperty(op1.divide(op2));
return op1.divide(op2);
}

/**

+ 1
- 3
src/java/org/apache/fop/fo/expr/RGBColorFunction.java View File

@@ -53,7 +53,6 @@ package org.apache.fop.fo.expr;

import org.apache.fop.fo.Property;
import org.apache.fop.fo.ColorTypeProperty;
import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.PercentBase;

class RGBColorFunction extends FunctionBase {
@@ -88,8 +87,7 @@ class RGBColorFunction extends FunctionBase {
}
cfvals[i] = colorVal;
}
return new ColorTypeProperty(new ColorType(cfvals[0], cfvals[1],
cfvals[2]));
return new ColorTypeProperty(cfvals[0], cfvals[1], cfvals[2]);

}


+ 5
- 5
src/java/org/apache/fop/fo/flow/ExternalGraphic.java View File

@@ -58,9 +58,9 @@ import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.FOTreeVisitor;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.image.ImageFactory;
import org.apache.fop.image.FopImage;
import org.apache.fop.datatypes.Length;
// Java
import java.awt.geom.Rectangle2D;

@@ -104,7 +104,7 @@ public class ExternalGraphic extends FObj {
url = ImageFactory.getURL(url);

// assume lr-tb for now and just use the .optimum value of the range
Length ipd = propertyList.get(PR_INLINE_PROGRESSION_DIMENSION).
LengthProperty ipd = propertyList.get(PR_INLINE_PROGRESSION_DIMENSION).
getLengthRange().getOptimum().getLength();
if (!ipd.isAuto()) {
viewWidth = ipd.getValue();
@@ -114,7 +114,7 @@ public class ExternalGraphic extends FObj {
viewWidth = ipd.getValue();
}
}
Length bpd = propertyList.get(PR_BLOCK_PROGRESSION_DIMENSION | CP_OPTIMUM).getLength();
LengthProperty bpd = propertyList.get(PR_BLOCK_PROGRESSION_DIMENSION | CP_OPTIMUM).getLength();
if (!bpd.isAuto()) {
viewHeight = bpd.getValue();
} else {
@@ -129,7 +129,7 @@ public class ExternalGraphic extends FObj {

int cwidth = -1;
int cheight = -1;
Length ch = propertyList.get(PR_CONTENT_HEIGHT).getLength();
LengthProperty ch = propertyList.get(PR_CONTENT_HEIGHT).getLength();
if (!ch.isAuto()) {
/*if (ch.scaleToFit()) {
if (viewHeight != -1) {
@@ -138,7 +138,7 @@ public class ExternalGraphic extends FObj {
} else {*/
cheight = ch.getValue();
}
Length cw = propertyList.get(PR_CONTENT_WIDTH).getLength();
LengthProperty cw = propertyList.get(PR_CONTENT_WIDTH).getLength();
if (!cw.isAuto()) {
/*if (cw.scaleToFit()) {
if (viewWidth != -1) {

+ 2
- 2
src/java/org/apache/fop/fo/flow/Table.java View File

@@ -59,7 +59,7 @@ import org.xml.sax.Attributes;
// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.LengthRange;
import org.apache.fop.fo.LengthRangeProperty;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.FOTreeVisitor;
@@ -88,7 +88,7 @@ public class Table extends FObj {
private int spaceBefore;
private int spaceAfter;
private ColorType backgroundColor;
private LengthRange ipd;
private LengthRangeProperty ipd;
private int height;

private boolean bAutoLayout = false;

+ 0
- 1
src/java/org/apache/fop/fo/properties/BorderWidthPropertyMaker.java View File

@@ -55,7 +55,6 @@ import org.apache.fop.fo.Constants;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.Property;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.LengthProperty.Maker;

/**
* This subclass of LengthProperty.Maker handles the special treatment of

+ 6
- 6
src/java/org/apache/fop/fo/properties/CommonBorderAndPadding.java View File

@@ -50,9 +50,9 @@
*/
package org.apache.fop.fo.properties;

import org.apache.fop.fo.Constants;
import org.apache.fop.datatypes.ColorType;
import org.apache.fop.datatypes.CondLength;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.CondLengthProperty;

/**
* Stores all common border and padding properties.
@@ -78,7 +78,7 @@ public class CommonBorderAndPadding implements Cloneable {
private int iLength; // Resolved length value
private boolean bDiscard;

public ResolvedCondLength(CondLength length) {
public ResolvedCondLength(CondLengthProperty length) {
bDiscard = length.isDiscard();
iLength = length.getLengthValue();
}
@@ -114,7 +114,7 @@ public class CommonBorderAndPadding implements Cloneable {
private ColorType mColor; // Border color
private ResolvedCondLength mWidth;

BorderInfo(int style, CondLength width, ColorType color) {
BorderInfo(int style, CondLengthProperty width, ColorType color) {
mStyle = style;
mWidth = new ResolvedCondLength(width);
mColor = color;
@@ -131,12 +131,12 @@ public class CommonBorderAndPadding implements Cloneable {
private BorderInfo[] borderInfo = new BorderInfo[4];
private ResolvedCondLength[] padding = new ResolvedCondLength[4];

public void setBorder(int side, int style, CondLength width,
public void setBorder(int side, int style, CondLengthProperty width,
ColorType color) {
borderInfo[side] = new BorderInfo(style, width, color);
}

public void setPadding(int side, CondLength width) {
public void setPadding(int side, CondLengthProperty width) {
padding[side] = new ResolvedCondLength(width);
}


+ 3
- 4
src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java View File

@@ -53,10 +53,9 @@ package org.apache.fop.fo.properties;
import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.FixedLength;
import org.apache.fop.fo.FOPropertyMapping;
import org.apache.fop.fo.LengthProperty;
import org.apache.fop.fo.Property;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.expr.Numeric;
import org.apache.fop.fo.expr.NumericProperty;

/**
* This property maker handles the calculations described in 5.3.2 which
@@ -109,7 +108,7 @@ public class IndentPropertyMaker extends CorrespondingPropertyMaker {
}
// Calculate the values as described in 5.3.2.
try {
Numeric v = new Numeric(new FixedLength(0));
NumericProperty v = new NumericProperty(new FixedLength(0));
/*
if (!propertyList.getFObj().generatesInlineAreas()) {
String propName = FOPropertyMapping.getPropertyName(this.propId);
@@ -119,7 +118,7 @@ public class IndentPropertyMaker extends CorrespondingPropertyMaker {
v = v.add(propertyList.get(propertyList.wmMap(lr_tb, rl_tb, tb_rl)).getNumeric());
v = v.add(getCorresponding(paddingCorresponding, propertyList).getNumeric());
v = v.add(getCorresponding(borderWidthCorresponding, propertyList).getNumeric());
return new LengthProperty(v.asLength());
return v.asLength();
} catch (org.apache.fop.fo.expr.PropertyException propEx) {
String propName = FOPropertyMapping.getPropertyName(baseMaker.getPropId());
throw new FOPException("Error in " + propName

+ 1
- 2
src/java/org/apache/fop/fo/properties/LineHeightPropertyMaker.java View File

@@ -117,8 +117,7 @@ public class LineHeightPropertyMaker extends LengthProperty.Maker {
FObj fo) {
Number numval = p.getNumber();
if (numval != null) {
return new LengthProperty(
new PercentLength(numval.doubleValue(), getPercentBase(fo,propertyList)));
return new PercentLength(numval.doubleValue(), getPercentBase(fo,propertyList));
}
return super.convertPropertyDatatype(p, propertyList, fo);
}

+ 1
- 1
src/java/org/apache/fop/render/rtf/TableAttributesConverter.java View File

@@ -178,7 +178,7 @@ public class TableAttributesConverter {
ListProperty listprop = (ListProperty) p;
ColorType color = null;
if (listprop.getList().get(0) instanceof NCnameProperty) {
color = new ColorType(((NCnameProperty)listprop.getList().get(0)).getNCname());
color = new ColorTypeProperty(((NCnameProperty)listprop.getList().get(0)).getNCname());
} else if (listprop.getList().get(0) instanceof ColorTypeProperty) {
color = ((ColorTypeProperty)listprop.getList().get(0)).getColorType();
}

+ 3
- 3
src/java/org/apache/fop/render/rtf/TextAttributesConverter.java View File

@@ -327,9 +327,9 @@ class TextAttributesConverter {
* @return integer pointing into the RTF color table
*/
public static int convertFOPColorToRTF(ColorType fopColor) {
int redComponent = ColorType.convertChannelToInteger (fopColor.getRed());
int greenComponent = ColorType.convertChannelToInteger (fopColor.getGreen());
int blueComponent = ColorType.convertChannelToInteger (fopColor.getBlue());
int redComponent = ColorTypeProperty.convertChannelToInteger (fopColor.getRed());
int greenComponent = ColorTypeProperty.convertChannelToInteger (fopColor.getGreen());
int blueComponent = ColorTypeProperty.convertChannelToInteger (fopColor.getBlue());
return RtfColorTable.getInstance().getColorNumber(redComponent,
greenComponent, blueComponent).intValue();
}

+ 2
- 3
src/java/org/apache/fop/traits/SpaceVal.java View File

@@ -50,9 +50,8 @@
*/
package org.apache.fop.traits;

import org.apache.fop.datatypes.Space;

import org.apache.fop.fo.Property;
import org.apache.fop.fo.SpaceProperty;
import org.apache.fop.fo.Constants;

/**
@@ -70,7 +69,7 @@ public class SpaceVal {
* Constructor for SpaceVal objects based on Space objects.
* @param spaceprop Space object to use
*/
public SpaceVal(Space spaceprop) {
public SpaceVal(SpaceProperty spaceprop) {
space = new MinOptMax(spaceprop.getMinimum().getLength().getValue(),
spaceprop.getOptimum().getLength().getValue(),
spaceprop.getMaximum().getLength().getValue());

Loading…
Cancel
Save