123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.traits;
-
- import org.apache.fop.area.Trait;
- import org.apache.fop.datatypes.ColorType;
- import org.apache.fop.fo.Constants;
- import org.apache.fop.fonts.FontTriplet;
-
- import java.io.Serializable;
- import java.util.StringTokenizer;
-
- /**
- * Border properties.
- * Class to store border trait propties for the area tree.
- */
- public class BorderProps implements Serializable {
-
- /** Separate border model */
- public static final int SEPARATE = 0;
- /** Collapsing border model, for borders inside a table */
- public static final int COLLAPSE_INNER = 1;
- /** Collapsing border model, for borders at the table's outer border */
- public static final int COLLAPSE_OUTER = 2;
-
- /** Border style (one of EN_*) */
- public int style; // Enum for border style
- /** Border color */
- public ColorType color;
- /** Border width */
- public int width;
- /** Border mode (one of SEPARATE, COLLAPSE_INNER and COLLAPSE_OUTER) */
- public int mode;
-
- /**
- * Constructs a new BorderProps instance.
- * @param style border style (one of EN_*)
- * @param width border width
- * @param color border color
- * @param mode border mode ((one of SEPARATE, COLLAPSE_INNER and COLLAPSE_OUTER)
- */
- public BorderProps(int style, int width, ColorType color, int mode) {
- this.style = style;
- this.width = width;
- this.color = Trait.Color.makeSerializable(color);
- this.mode = mode;
- }
-
- /**
- * Constructs a new BorderProps instance.
- * @param style border style (one of the XSL enum values for border style)
- * @param width border width
- * @param color border color
- * @param mode border mode ((one of SEPARATE, COLLAPSE_INNER and COLLAPSE_OUTER)
- */
- public BorderProps(String style, int width, ColorType color, int mode) {
- this(getConstantForStyle(style), width, color, mode);
- }
-
- /**
- * @param bp the border properties or null
- * @return the effective width of the clipped part of the border
- */
- public static int getClippedWidth(BorderProps bp) {
- if ((bp != null) && (bp.mode != SEPARATE)) {
- return bp.width / 2;
- } else {
- return 0;
- }
- }
-
- private String getStyleString() {
- switch (style) {
- case Constants.EN_NONE: return "none";
- case Constants.EN_HIDDEN: return "hidden";
- case Constants.EN_DOTTED: return "dotted";
- case Constants.EN_DASHED: return "dashed";
- case Constants.EN_SOLID: return "solid";
- case Constants.EN_DOUBLE: return "double";
- case Constants.EN_GROOVE: return "groove";
- case Constants.EN_RIDGE: return "ridge";
- case Constants.EN_INSET: return "inset";
- case Constants.EN_OUTSET: return "outset";
- default: throw new IllegalStateException("Illegal border style: " + style);
- }
- }
-
- private static int getConstantForStyle(String style) {
- if ("none".equalsIgnoreCase(style)) {
- return Constants.EN_NONE;
- } else if ("hidden".equalsIgnoreCase(style)) {
- return Constants.EN_HIDDEN;
- } else if ("dotted".equalsIgnoreCase(style)) {
- return Constants.EN_DOTTED;
- } else if ("dashed".equalsIgnoreCase(style)) {
- return Constants.EN_DASHED;
- } else if ("solid".equalsIgnoreCase(style)) {
- return Constants.EN_SOLID;
- } else if ("double".equalsIgnoreCase(style)) {
- return Constants.EN_DOUBLE;
- } else if ("groove".equalsIgnoreCase(style)) {
- return Constants.EN_GROOVE;
- } else if ("ridge".equalsIgnoreCase(style)) {
- return Constants.EN_RIDGE;
- } else if ("inset".equalsIgnoreCase(style)) {
- return Constants.EN_INSET;
- } else if ("outset".equalsIgnoreCase(style)) {
- return Constants.EN_OUTSET;
- } else {
- throw new IllegalStateException("Illegal border style: " + style);
- }
- }
-
- /** @see java.lang.Object#hashCode() */
- public int hashCode() {
- return toString().hashCode();
- }
-
- /** @see java.lang.Object#equals(java.lang.Object) */
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- } else if (obj == this) {
- return true;
- } else {
- if (obj instanceof BorderProps) {
- BorderProps other = (BorderProps)obj;
- return (style == other.style)
- && color.equals(other.color)
- && width == other.width
- && mode == other.mode;
- }
- }
- return false;
- }
-
- /**
- * Returns a BorderProps represtation of a string of the format as written by
- * BorderProps.toString().
- * @param s the string
- * @return a BorderProps instance
- */
- public static BorderProps valueOf(String s) {
- if (s.startsWith("(") && s.endsWith(")")) {
- s = s.substring(1, s.length() - 1);
- StringTokenizer st = new StringTokenizer(s, ",");
- String style = st.nextToken();
- String color = st.nextToken();
- int width = Integer.parseInt(st.nextToken());
- int mode = SEPARATE;
- if (st.hasMoreTokens()) {
- String ms = st.nextToken();
- if ("collapse-inner".equalsIgnoreCase(ms)) {
- mode = COLLAPSE_INNER;
- } else if ("collapse-outer".equalsIgnoreCase(ms)) {
- mode = COLLAPSE_OUTER;
- }
- }
- return new BorderProps(style, width, Trait.Color.valueOf(color), mode);
- } else {
- throw new IllegalArgumentException("BorderProps must be surrounded by parentheses");
- }
- }
-
- /** @see java.lang.Object#toString() */
- public String toString() {
- StringBuffer sbuf = new StringBuffer();
- sbuf.append('(');
- sbuf.append(getStyleString());
- sbuf.append(',');
- sbuf.append(color);
- sbuf.append(',');
- sbuf.append(width);
- if (mode != SEPARATE) {
- sbuf.append(',');
- if (mode == COLLAPSE_INNER) {
- sbuf.append("collapse-inner");
- } else {
- sbuf.append("collapse-outer");
- }
- }
- sbuf.append(')');
- return sbuf.toString();
- }
-
- }
|