- 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-ffa450edef68pull/30/head
@@ -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"; | |||
} | |||
@@ -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(); | |||
} |
@@ -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() + "]"; | |||
} | |||
} | |||
@@ -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); | |||
} | |||
} | |||
@@ -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() + "]"; | |||
} | |||
} |
@@ -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(); | |||
} |
@@ -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() + "]"; | |||
} | |||
} | |||
@@ -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() + "]"; | |||
} | |||
} | |||
@@ -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); | |||
} |
@@ -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( |
@@ -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); | |||
} | |||
} |
@@ -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() + "]"; | |||
} | |||
} | |||
@@ -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); | |||
} | |||
} | |||
@@ -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; | |||
} | |||
} | |||
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||
@@ -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); | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
/** |
@@ -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; | |||
} | |||
} |
@@ -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(); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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."); | |||
} | |||
} | |||
@@ -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; | |||
} | |||
} |
@@ -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()); | |||
} | |||
} |
@@ -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); | |||
} | |||
/** |
@@ -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]); | |||
} | |||
@@ -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) { |
@@ -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; |
@@ -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 |
@@ -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); | |||
} | |||
@@ -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 |
@@ -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); | |||
} |
@@ -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(); | |||
} |
@@ -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(); | |||
} |
@@ -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()); |