2002/css-validator/org/w3c/css/properties/css2/user Css2Style.java,NONE,1.1 Cursor.java,NONE,1.1 CursorATSC.java,NONE,1.1 CursorCSS2.java,NONE,1.1 Outline.java,NONE,1.1 OutlineATSC.java,NONE,1.1 OutlineColor.java,NONE,1.1 OutlineColorATSC.java,NONE,1.1 OutlineStyle.java,NONE,1.1 OutlineStyleATSC.java,NONE,1.1 OutlineWidth.java,NONE,1.1 OutlineWidthATSC.java,NONE,1.1 UserProperties.java,NONE,1.1 UserProperty.java,NONE,1.1

Update of /sources/public/2002/css-validator/org/w3c/css/properties/css2/user
In directory hutz:/tmp/cvs-serv9948/user

Added Files:
	Css2Style.java Cursor.java CursorATSC.java CursorCSS2.java 
	Outline.java OutlineATSC.java OutlineColor.java 
	OutlineColorATSC.java OutlineStyle.java OutlineStyleATSC.java 
	OutlineWidth.java OutlineWidthATSC.java UserProperties.java 
	UserProperty.java 
Log Message:
major reorganization of property files

--- NEW FILE: CursorCSS2.java ---
//
// $Id: CursorCSS2.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;
import java.util.Vector;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssURL;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class CursorCSS2 extends CssProperty 
    implements CssOperator {
    
    int value;
    Vector uris = new Vector();
    boolean inheritedValue;
    
    private static String CURSOR[] = {
	"auto", "crosshair", "default", "pointer", "move", "e-resize", 
	"ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", 
	"s-resize", "w-resize", "text", "wait", "help" };
    
    private static int[] hash_values;
    
    
    /**
     * Create a new Cursor
     */
    public CursorCSS2() {
	value = 0;
    }
    
    /**
     * Create a new Cursor
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public CursorCSS2(ApplContext ac, CssExpression expression, boolean check) 
	throws InvalidParamException {
	CssValue val = expression.getValue();
	char op = expression.getOperator();
	
	setByUser();
	
	if (val.equals(inherit)) {
	    if(expression.getCount() > 1) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    inheritedValue = true;
	    expression.next();
	    return;
	}
	
	while ((op == COMMA) && (val instanceof CssURL)) {
	    if(val != null && val.equals(inherit)) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    uris.addElement(val);
	    expression.next();
	    val = expression.getValue();
	    op = expression.getOperator();
	} 
	if (val instanceof CssURL) {
	    throw new InvalidParamException("comma", 
					    val.toString(), 
					    getPropertyName(), ac);
	}
	
	if (val instanceof CssIdent) {
	    int hash = val.hashCode();
	    
	    for (int i = 0; i < CURSOR.length; i++) {
		if (hash_values[i] == hash) {
		    value = i;
		    expression.next();
		    if(check && !expression.end()) {
			throw new InvalidParamException("unrecognize", ac);
		    }
		    return;
		}
	    }
	}
	
	throw new InvalidParamException("value", 
					val.toString(), getPropertyName(), ac);
    }
    
    public CursorCSS2(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     */
    public Object get() {
	return null;
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "cursor";
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return inheritedValue;
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	if (inheritedValue) {
	    return inherit.toString();
	} else {
	    int i = 0;
	    int l = uris.size();
	    String ret = "";
	    while (i != l) {
		ret += uris.elementAt(i++) + 
		    (new Character(COMMA)).toString() + " ";
	    }
	    ret += " " + CURSOR[value];
	    return ret;
	}
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Css2Style style0 = (Css2Style) style;
	if (style0.cursorCSS2 != null)
	    style0.addRedefinitionWarning(ac, this);
	style0.cursorCSS2 = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getCursorCSS2();
	} else {
	    return ((Css2Style) style).cursor;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof Cursor 
		&& value == ((Cursor) property).value);
    }
    
    /**
     * Is the value of this property is a default value.
     * It is used by all macro for the function <code>print</code>
     */  
    public boolean isDefault() {
	return value == 0;
    }
    
    static {
	hash_values = new int[CURSOR.length];
	for (int i=0; i<CURSOR.length; i++)
	    hash_values[i] = CURSOR[i].hashCode();
    }
}

--- NEW FILE: Css2Style.java ---
//
// $Id: Css2Style.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssPrinterStyle;

/**
 * @version $Revision: 1.1 $
 */
public class Css2Style extends org.w3c.css.properties.css2.table.Css2Style {

    CursorCSS2 cursorCSS2;
    Cursor cursor;
    CursorATSC cursorATSC;

    Outline outline = new Outline();
    OutlineATSC outlineATSC = new OutlineATSC();
        
    /**
     * Get the cursor property
     */
    public final CursorCSS2 getCursorCSS2() {
	if (cursorCSS2 == null) {
	    cursorCSS2 = (CursorCSS2) style.CascadingOrder(new CursorCSS2(), 
						   style, selector);
	}
	return cursorCSS2;
    }

    public final Cursor getCursor() {
	if (cursor == null) {
	    cursor = (Cursor) style.CascadingOrder(new Cursor(), style,
						   selector);
	}
	return cursor;
    }

    public final CursorATSC getCursorATSC() {
	if (cursorATSC == null) {
	    cursorATSC = (CursorATSC) style.CascadingOrder(new CursorATSC(), style,
						   selector);
	}
	return cursorATSC;
    }

    /**
     * Get the outline-style property
     */  
    public final OutlineStyle getOutlineStyle() {
        if (outline.style == null) {
            outline.style = 
                (OutlineStyle) style.CascadingOrder(new OutlineStyle(), 
                                                    style, selector);
        }
        return outline.style;
    }

    public final OutlineStyleATSC getOutlineStyleATSC() {
        if (outlineATSC.style == null) {
            outlineATSC.style = 
                (OutlineStyleATSC) style.CascadingOrder(new OutlineStyleATSC(), 
                                                    style, selector);
        }
        return outlineATSC.style;
    }

    /**
     * Get the outline-width property
     */  
    public final OutlineWidth getOutlineWidth() {
        if (outline.width == null) {
            outline.width = 
                (OutlineWidth) style.CascadingOrder(new OutlineWidth(), 
                                                    style, selector);
        }
        return outline.width;
    }

    public final OutlineWidthATSC getOutlineWidthATSC() {
        if (outlineATSC.width == null) {
            outlineATSC.width = 
                (OutlineWidthATSC) style.CascadingOrder(new OutlineWidthATSC(), 
                                                    style, selector);
        }
        return outlineATSC.width;
    }

    /**
     * Get the outline-color property
     */  
    public final OutlineColor getOutlineColor() {
        if (outline.color == null) {
            outline.color = 
                (OutlineColor) style.CascadingOrder(new OutlineColor(), 
                                                    style, selector);
        }
        return outline.color;
    }

    public final OutlineColorATSC getOutlineColorATSC() {
        if (outlineATSC.color == null) {
            outlineATSC.color = 
                (OutlineColorATSC) style.CascadingOrder(new OutlineColorATSC(), 
                                                    style, selector);
        }
        return outlineATSC.color;
    }

    /**
     * Get the outline property
     */
    public final Outline getOutline() {
	if (outline.style == null) {
	    outline.style = getOutlineStyle();
	}
	if (outline.width == null) {
	    outline.width = getOutlineWidth();
	}
	if (outline.color == null) {
	    outline.color = getOutlineColor();
	}
        return outline;
    }

    public final OutlineATSC getOutlineATSC() {
	if (outlineATSC.style == null) {
	    outlineATSC.style = getOutlineStyleATSC();
	}
	if (outlineATSC.width == null) {
	    outlineATSC.width = getOutlineWidthATSC();
	}
	if (outlineATSC.color == null) {
	    outlineATSC.color = getOutlineColorATSC();
	}
        return outlineATSC;
    }

    /**
     * Print this style.
     *
     * @param printer The printer interface.
     */  
    public void print(CssPrinterStyle printer) {
	super.print(printer);
	if (cursor != null) {
	    cursor.print(printer);
	}
	if (cursorATSC != null) {
	    cursorATSC.print(printer);
	}
	if (cursorCSS2 != null) {
	    cursorCSS2.print(printer);
	}
	if (outline != null) {
	    outline.print(printer);
	}
	if (outlineATSC != null) {
	    outlineATSC.print(printer);
	}
    }
}

--- NEW FILE: CursorATSC.java ---
//
// $Id: CursorATSC.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;
import java.util.Vector;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssURL;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class CursorATSC extends CssProperty 
    implements CssOperator {
    
    int value;
    Vector uris = new Vector();
    boolean inheritedValue;
    
    private static String CURSOR[] = {
	"auto", "crosshair", "default", "pointer", "move", "e-resize", 
	"ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", 
	"s-resize", "w-resize", "text", "wait", "help" };
    
    private static int[] hash_values;
    
    
    /**
     * Create a new Cursor
     */
    public CursorATSC() {
	value = 0;
    }
    
    /**
     * Create a new Cursor
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public CursorATSC(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	CssValue val = expression.getValue();
	char op = expression.getOperator();
	
	setByUser();

	ac.getFrame().addWarning("atsc", val.toString());
	
	if (val.equals(inherit)) {
	    if(expression.getCount() > 1) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    inheritedValue = true;
	    expression.next();
	    return;
	}
	
	while ((op == COMMA)&& (val instanceof CssURL)) {
	    if(val != null && val.equals(inherit)) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    uris.addElement(val);
	    expression.next();
	    val = expression.getValue();
	    op = expression.getOperator();
	} 
	if (val instanceof CssURL) {
	    throw new InvalidParamException("comma", 
					    val.toString(), 
					    getPropertyName(), ac);
	}
	
	if (val instanceof CssIdent) {
	    int hash = val.hashCode();
	    
	    for (int i = 0; i < CURSOR.length; i++) {
		if (hash_values[i] == hash) {
		    value = i;
		    expression.next();
		    if(check && !expression.end()) {
			throw new InvalidParamException("unrecognize", ac);
		    }
		    return;
		}
	    }
	}
	
	throw new InvalidParamException("value", 
					val.toString(), getPropertyName(), ac);
    }
    
    public CursorATSC(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     */
    public Object get() {
	return null;
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "cursor";
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return inheritedValue;
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	if (inheritedValue) {
	    return inherit.toString();
	} else {
	    int i = 0;
	    int l = uris.size();
	    String ret = "";
	    while (i != l) {
		ret += uris.elementAt(i++) + 
		    (new Character(COMMA)).toString() + " ";
	    }
	    ret += " " + CURSOR[value];
	    return ret;
	}
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Css2Style style0 = (Css2Style) style;
	if (style0.cursorATSC != null)
	    style0.addRedefinitionWarning(ac, this);
	style0.cursorATSC = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getCursorATSC();
	} else {
	    return ((Css2Style) style).cursorATSC;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof CursorATSC 
		&& value == ((CursorATSC) property).value);
    }
    
    /**
     * Is the value of this property is a default value.
     * It is used by all macro for the function <code>print</code>
     */  
    public boolean isDefault() {
	return value == 0;
    }
    
    static {
	hash_values = new int[CURSOR.length];
	for (int i=0; i<CURSOR.length; i++)
	    hash_values[i] = CURSOR[i].hashCode();
    }
}

--- NEW FILE: OutlineColor.java ---
//
// $Id: OutlineColor.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/**
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssColor;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineColor extends UserProperty {
    
    CssValue color;
    
    private static final CssIdent invert = new CssIdent("invert");

    /**
     * Create a new OutlineColor
     */
    public OutlineColor() {
	color = invert;
    }  
    
    /**
     * Set the value of the property
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public OutlineColor(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
	setByUser();
	
	if (val.equals(inherit)) {
	    color = inherit;
	    expression.next();
	} else if (val.equals(invert)) {
	    color = invert;
	    expression.next();
	} else if (val instanceof CssColor) {
	    color = val;
	    expression.next();
	} else if (val instanceof CssIdent) {
	    color = new CssColor(ac, (String) val.get());
	    expression.next();
	} else {
	    throw new InvalidParamException("value", val, 
					    getPropertyName(), ac);
	}
    }
    
    public OutlineColor(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     */
    public Object get() {
	return color;
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return color.equals(inherit);
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	return color.toString();
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Outline outline = ((Css2Style) style).outline;
	if (outline.color != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.color = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineColor();
	} else {
	    return ((Css2Style) style).outline.color;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof OutlineColor && 
		color.equals(((OutlineColor) property).color));
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline-color";
    }
    
}

--- NEW FILE: OutlineATSC.java ---
//
// $Id: OutlineATSC.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssPrinterStyle;
import org.w3c.css.parser.CssSelectors;
import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineATSC extends UserProperty implements CssOperator {
    
    OutlineColorATSC color;
    OutlineWidthATSC width;
    OutlineStyleATSC style;

    boolean same;
    
    /**
     * Create a new OutlineATSC
     */
    public OutlineATSC() {
    }  
    
    /**
     * Create a new OutlineATSC
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public OutlineATSC(ApplContext ac, CssExpression expression,
	    boolean check)  throws InvalidParamException {
	
	if(check && expression.getCount() > 3) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
        char op = SPACE;
        boolean find = true;
        int max_values = 3;

	ac.getFrame().addWarning("atsc", val.toString());

	if (val.equals(inherit)) {
	    if(expression.getCount() > 1) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    this.same = true;
	    color = new OutlineColorATSC(ac, expression);
	    width = new OutlineWidthATSC();
	    width.value = inherit;
	    style = new OutlineStyleATSC();
	    style.value = OutlineStyleATSC.BORDERSTYLE.length - 1;
	    return;
	}
	
        while (find && max_values-- > 0) {
            find = false;
            val = expression.getValue();
            op = expression.getOperator();
            
            if(val != null && val.equals(inherit)) {
        	throw new InvalidParamException("unrecognize", ac);
            }
            
            if (val == null) {
                break;
	    }
            
            if (op != SPACE) {
                throw new InvalidParamException("operator", 
                                                ((new Character(op)).toString()), ac);
	    }
            
            if (style == null) {
                try {
                    style = new OutlineStyleATSC(ac, expression);
                    find = true;
		} catch (InvalidParamException e) {
		}
            }   
            if (!find && color == null) {
                try {
                    color = new OutlineColorATSC(ac, expression);
                    find = true;
                } catch (InvalidParamException e) {
                }
            }
            if (!find && width == null) {
        	width = new OutlineWidthATSC(ac, expression);
        	find = true;
            }
            if(val != null && !find) {
        	throw new InvalidParamException("unrecognize", ac);
            }
        }

	if (max_values >= 2) {
	    throw new InvalidParamException("few-value", getPropertyName(), ac);
	}
	/*
	if (color == null) {
	    color = new OutlineColorATSC();
	}
	if (width == null) {
	    width = new OutlineWidthATSC();
	}
	if (style == null) {
	    style = new OutlineStyleATSC();
	}
	*/
    }
    
    public OutlineATSC(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     * not useful
     */
    public Object get() {
	return color;
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline";
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	// outlineColor and outlineWidth must be not null !
	if (same) {
	    return color.toString();
	} else {
	    String ret ="";
	    if (color != null) {
		ret += " " + color;
	    }
	    if (width != null) {
		ret += " " + width;
		}
	    if (style != null) {
		ret += " "  + style;
	    }
	    return ret.substring(1);
	}
    }
    
    /**
     * Set this property to be important.
     * Overrides this method for a macro
     */  
    public void setImportant() {
	super.setImportant();
	if(color != null)
	    color.setImportant();
	if(width != null)
	    width.setImportant();
	if(style != null)
	    style.setImportant();
    }
    
    /**
     * Returns true if this property is important.
     * Overrides this method for a macro
     */
    public boolean getImportant() {
	return ((width == null || width.getImportant())
		&& (color == null || color.getImportant())
		&& (style == null || style.getImportant()));
    }
    
    /**
     * Print this property.
     *
     * @param printer The printer.
     * @see #toString()
     * @see #getPropertyName()
     */  
    public void print(CssPrinterStyle printer) {
	if ((color != null && width != null && style != null) &&
	    (getImportant() ||
	     (!color.getImportant()
	      && !style.getImportant()
	      && !width.getImportant()))) {
	    printer.print(this);
	} else {	
	    if (color != null) {
		color.print(printer);
	    }
	    if (width != null) {
		width.print(printer);
	    }
	    if (style != null) {
		style.print(printer);
	    }
	}
    }
    
    /**
     * Add this property to the CssStyle
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style0) {
	// outlineColor and outlineWidth can't be null ...
	((Css2Style) style0).outline.same = same;
	if(color != null)
	    color.addToStyle(ac, style0);
	if(width != null)
	    width.addToStyle(ac, style0);
	if(style != null)
	    style.addToStyle(ac, style0);
    }
    
    /**
     * Update the source file and the line.
     * Overrides this method for a macro
     *
     * @param line The line number where this property is defined
     * @param source The source file where this property is defined
     */  
    public void setInfo(int line, String source) {
	super.setInfo(line, source);
	if(color != null)
	    color.setInfo(line, source);
	if(width != null)
	    width.setInfo(line, source);
	if(style != null)
	    style.setInfo(line, source);
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return false; // @FIXME
    }
    
    /**
     * Set the context.
     * Overrides this method for a macro
     *
     * @see org.w3c.css.css.CssCascadingOrder#order
     * @see org.w3c.css.css.StyleSheetParser#handleRule
     */
    public void setSelectors(CssSelectors selector) {
	super.setSelectors(selector);
	if (color != null) {
	    color.setSelectors(selector);
	}
	if (width != null) {
	    width.setSelectors(selector);
	}
	if (style != null) {
	    style.setSelectors(selector);
	}
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineATSC();
	} else {
	    return ((Css2Style) style).outlineATSC;
	}
    }
    
}

--- NEW FILE: OutlineStyleATSC.java ---
//
// $Id: OutlineStyleATSC.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/**
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineStyleATSC extends UserProperty {
    
    int value = -1;
    
    static String[] BORDERSTYLE = {
	"none", "dotted", "dashed", "solid", "double", "groove", 
	"ridge", "inset", "outset", "inherit" };
    
    private static int[] hash_values;
    
    /**
     * Create a new OutlineStyleATSC
     */
    public OutlineStyleATSC() {
	// nothing to do
    }  
    
    /**
     * Create a new OutlineStyleATSC
     *
     * @param expression The expression for this face
     * @exception InvalidParamException The expression is incorrect
     */  
    public OutlineStyleATSC(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
	setByUser();

	ac.getFrame().addWarning("atsc", val.toString());

	if (val instanceof CssIdent) {
	    int hash = val.hashCode();
	    for (int i = 0; i < BORDERSTYLE.length; i++) {
		if (hash_values[i] == hash) {
		    value = i;
		    expression.next();
		    return;
		}
	    }
	}
	
	throw new InvalidParamException("value", val.toString(), 
					getPropertyName(), ac);
    }
    
    public OutlineStyleATSC(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the internal value
     */  
    public Object get() {
	return BORDERSTYLE[value];
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return value == (BORDERSTYLE.length - 1);
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	return BORDERSTYLE[value];
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	OutlineATSC outline = ((Css2Style) style).outlineATSC;
	if (outline.style != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.style = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineStyleATSC();
	} else {
	    return ((Css2Style) style).outlineATSC.style;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return ((property instanceof OutlineStyleATSC) 
		&& (value == ((OutlineStyleATSC) property).value));
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline-style";
    }
    
    static {
	hash_values = new int[BORDERSTYLE.length];
	for (int i=0; i<BORDERSTYLE.length; i++)
	    hash_values[i] = BORDERSTYLE[i].hashCode();
    }
    
}

--- NEW FILE: OutlineColorATSC.java ---
//
// $Id: OutlineColorATSC.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/**
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssColor;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineColorATSC extends UserProperty {
    
    CssValue color;
    
    private static final CssIdent invert = new CssIdent("invert");

    /**
     * Create a new OutlineColorATSC
     */
    public OutlineColorATSC() {
	color = invert;
    }  
    
    /**
     * Set the value of the property
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public OutlineColorATSC(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
	setByUser();
	
	ac.getFrame().addWarning("atsc", val.toString());

	if (val.equals(inherit)) {
	    color = inherit;
	    expression.next();
	} else if (val.equals(invert)) {
	    color = invert;
	    expression.next();
	} else if (val instanceof CssColor) {
	    color = val;
	    expression.next();
	} else if (val instanceof CssIdent) {
	    color = new CssColor(ac, (String) val.get());
	    expression.next();
	} else {
	    throw new InvalidParamException("value", val, 
					    getPropertyName(), ac);
	}
    }
    
    public OutlineColorATSC(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     */
    public Object get() {
	return color;
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return color.equals(inherit);
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	return color.toString();
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	OutlineATSC outline = ((Css2Style) style).outlineATSC;
	if (outline.color != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.color = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineColorATSC();
	} else {
	    return ((Css2Style) style).outlineATSC.color;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof OutlineColorATSC && 
		color.equals(((OutlineColorATSC) property).color));
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline-color";
    }
    
}

--- NEW FILE: OutlineStyle.java ---
//
// $Id: OutlineStyle.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/**
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineStyle extends UserProperty {

    int value = -1;

    static String[] BORDERSTYLE = {
	"none", "hidden", "dotted", "dashed", "solid", "double", "groove",
	"ridge", "inset", "outset", "inherit" };

    private static int[] hash_values;

    /**
     * Create a new OutlineStyle
     */
    public OutlineStyle() {
	// nothing to do
    }

    /**
     * Create a new OutlineStyle
     *
     * @param expression The expression for this face
     * @exception InvalidParamException The expression is incorrect
     */
    public OutlineStyle(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}

	CssValue val = expression.getValue();
	setByUser();

	if (val instanceof CssIdent) {
	    int hash = val.hashCode();
	    for (int i = 0; i < BORDERSTYLE.length; i++) {
		if (hash_values[i] == hash) {
		    value = i;
		    expression.next();
		    return;
		}
	    }
	}

	throw new InvalidParamException("value", val.toString(),
					getPropertyName(), ac);
    }

    public OutlineStyle(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the internal value
     */
    public Object get() {
	return BORDERSTYLE[value];
    }

    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return value == (BORDERSTYLE.length - 1);
    }

    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	return BORDERSTYLE[value];
    }

    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Outline outline = ((Css2Style) style).outline;
	if (outline.style != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.style = this;
    }

    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineStyle();
	} else {
	    return ((Css2Style) style).outline.style;
	}
    }

    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */
    public boolean equals(CssProperty property) {
	return ((property instanceof OutlineStyle)
		&& (value == ((OutlineStyle) property).value));
    }

    /**
     * Returns the name of this property
     */
    public String getPropertyName() {
	return "outline-style";
    }

    static {
	hash_values = new int[BORDERSTYLE.length];
	for (int i=0; i<BORDERSTYLE.length; i++)
	    hash_values[i] = BORDERSTYLE[i].hashCode();
    }

}

--- NEW FILE: OutlineWidth.java ---
//
// $Id: OutlineWidth.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineWidth extends UserProperty {
    
    CssValue value;
    
    private static CssIdent thin = new CssIdent("thin");
    private static CssIdent medium = new CssIdent("medium");
    private static CssIdent thick = new CssIdent("thick");
    
    /**
     * Create a new OutlineWidth
     */
    public OutlineWidth() {
	value = medium;
    }
    
    /**
     * Create a new OutlineWidth from an another OutlineWidth
     *
     * @param another The another side.
     */
    public OutlineWidth(OutlineWidth another) {
	value = another.value;
    }
    
    /**
     * Create a new OutlineWidth
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */
    public OutlineWidth(ApplContext ac, CssExpression expression, boolean check) 
	throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
	setByUser();

	if (val instanceof CssLength) {
	    float f = ((Float) val.get()).floatValue();
	    if (f >= 0) {
		this.value = val;
	    } else {
		throw new InvalidParamException("negative-value", 
						val.toString(), ac);
	    }
	} else if (val instanceof CssNumber) {
	    value = ((CssNumber) val).getLength();
	} else if (val.equals(thin)) {
	    value = thin;
	} else if (val.equals(medium)) {
	    value = medium;
	} else if (val.equals(thick)) {
	    value = thick;
	} else if (val.equals(inherit)) {
	    value = CssProperty.inherit;
	} else {
	    throw new InvalidParamException("value", val.toString(), 
					    "width", ac);
	}
	
	expression.next();
    }  
    
    public OutlineWidth(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the internal value
     */  
    public Object get() {
	return value;
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return value.equals(inherit);
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {  
	return value.toString();
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Outline outline = ((Css2Style) style).outline;
	if (outline.width != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.width = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineWidth();
	} else {
	    return ((Css2Style) style).outline.width;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof OutlineWidth && 
		value.equals(((OutlineWidth) property).value));
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline-width";
    }
    
}




--- NEW FILE: Outline.java ---
//
// $Id: Outline.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssPrinterStyle;
import org.w3c.css.parser.CssSelectors;
import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class Outline extends UserProperty implements CssOperator {
    
    OutlineColor color;
    OutlineWidth width;
    OutlineStyle style;

    boolean same;
    
    /**
     * Create a new Outline
     */
    public Outline() {
    }  
    
    /**
     * Create a new Outline
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */  
    public Outline(ApplContext ac, CssExpression expression,
	    boolean check)  throws InvalidParamException {
	
	if(check && expression.getCount() > 3) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
        char op = SPACE;
        boolean find = true;
        int max_values = 3;

	if (val.equals(inherit)) {
	    if(expression.getCount() > 1) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    this.same = true;
	    color = new OutlineColor(ac, expression);
	    width = new OutlineWidth();
	    width.value = inherit;
	    style = new OutlineStyle();
	    style.value = OutlineStyle.BORDERSTYLE.length - 1;
	    return;
	}
	
        while (find && max_values-- > 0) {
            find = false;
            val = expression.getValue();
            op = expression.getOperator();
            
            if(val != null && val.equals(inherit)) {
        	throw new InvalidParamException("unrecognize", ac);
            }
            
            if (val == null) {
                break;
	    }
            
            if (op != SPACE) {
                throw new InvalidParamException("operator", 
                                                ((new Character(op)).toString()), ac);
	    }
            
            if (style == null) {
                try {
                    style = new OutlineStyle(ac, expression);
                    find = true;
		} catch (InvalidParamException e) {
		}
            }   
            if (!find && color == null) {
                try {
                    color = new OutlineColor(ac, expression);
                    find = true;
                } catch (InvalidParamException e) {
                }
            }
            if (!find && width == null) {
        	width = new OutlineWidth(ac, expression);
        	find = true;
            }
            if(val != null && !find) {
        	throw new InvalidParamException("unrecognize", ac);
            }
        }

	if (max_values >= 2) {
	    throw new InvalidParamException("few-value", getPropertyName(), ac);
	}
	/*
	if (color == null) {
	    color = new OutlineColor();
	}
	if (width == null) {
	    width = new OutlineWidth();
	}
	if (style == null) {
	    style = new OutlineStyle();
	}*/
    }
    
    public Outline(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     * not useful
     */
    public Object get() {
	return color;
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline";
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	// outlineColor and outlineWidth must be not null !
	if (same) {
	    return color.toString();
	} else {
	    String ret ="";
	    if (color != null) {
		ret += " " + color;
	    }
	    if (width != null) {
		ret += " " + width;
		}
	    if (style != null) {
		ret += " "  + style;
	    }
	    return ret.substring(1);
	}
    }
    
    /**
     * Set this property to be important.
     * Overrides this method for a macro
     */  
    public void setImportant() {
	super.setImportant();
	if(color != null)
	    color.setImportant();
	if(width != null)
	    width.setImportant();
	if(style != null)
	    style.setImportant();
    }
    
    /**
     * Returns true if this property is important.
     * Overrides this method for a macro
     */
    public boolean getImportant() {
	return ((width == null || width.getImportant())
		&& (color == null || color.getImportant())
		&& (style == null || style.getImportant()));
    }
    
    /**
     * Print this property.
     *
     * @param printer The printer.
     * @see #toString()
     * @see #getPropertyName()
     */  
    public void print(CssPrinterStyle printer) {
	if ((color != null && width != null && style != null) &&
	    (getImportant() ||
	     (!color.getImportant()
	      && !style.getImportant()
	      && !width.getImportant()))) {
	    printer.print(this);
	} else {	
	    if (color != null) {
		color.print(printer);
	    }
	    if (width != null) {
		width.print(printer);
	    }
	    if (style != null) {
		style.print(printer);
	    }
	}
    }
    
    /**
     * Add this property to the CssStyle
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style0) {
	// outlineColor and outlineWidth can't be null ...
	((Css2Style) style0).outline.same = same;
	if(color != null)
	    color.addToStyle(ac, style0);
	if(width != null)
	    width.addToStyle(ac, style0);
	if(style != null)
	    style.addToStyle(ac, style0);
    }
    
    /**
     * Update the source file and the line.
     * Overrides this method for a macro
     *
     * @param line The line number where this property is defined
     * @param source The source file where this property is defined
     */  
    public void setInfo(int line, String source) {
	super.setInfo(line, source);
	if(color != null)
	    color.setInfo(line, source);
	if(width != null)
	    width.setInfo(line, source);
	if(style != null)
	    style.setInfo(line, source);
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return false; // @FIXME
    }
    
    /**
     * Set the context.
     * Overrides this method for a macro
     *
     * @see org.w3c.css.css.CssCascadingOrder#order
     * @see org.w3c.css.css.StyleSheetParser#handleRule
     */
    public void setSelectors(CssSelectors selector) {
	super.setSelectors(selector);
	if (color != null) {
	    color.setSelectors(selector);
	}
	if (width != null) {
	    width.setSelectors(selector);
	}
	if (style != null) {
	    style.setSelectors(selector);
	}
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutline();
	} else {
	    return ((Css2Style) style).outline;
	}
    }
    
}

--- NEW FILE: Cursor.java ---
//
// $Id: Cursor.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
// Updated september 14th 2000 by Sijtsche de Jong (sy.de.jong@let.rug.nl)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */
package org.w3c.css.properties.css2.user;
import java.util.Vector;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssOperator;
import org.w3c.css.values.CssURL;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class Cursor extends CssProperty
    implements CssOperator {

    int value;
    Vector uris = new Vector();
    boolean inheritedValue;

    private static String CURSOR[] = {
		"auto", "crosshair", "default", "pointer", "move", "e-resize",
		"ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize",
		"s-resize", "w-resize", "text", "wait", "help", "progress", "copy", "alias",
		"context-menu", "cell", "all-scroll", "col-resize", "row-resize", "no-drop",
		"not-allowed", "vertical-text"
	};

    private static int[] hash_values;


    /**
     * Create a new CssCursor
     */
    public Cursor() {
		value = 0;
    }

    /**
     * Create a new CssCursor
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */
    public Cursor(ApplContext ac, CssExpression expression, boolean check)
	throws InvalidParamException {		
	
	CssValue val = expression.getValue();
	char op = expression.getOperator();

	setByUser();

	if (val.equals(inherit)) {
	    if(expression.getCount() > 1) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    inheritedValue = true;
	    expression.next();
	    return;
	}

	while ((op == COMMA)&& (val instanceof CssURL)) {
	    if(val != null && val.equals(inherit)) {
		throw new InvalidParamException("unrecognize", ac);
	    }
	    uris.addElement(val);
	    expression.next();
	    val = expression.getValue();
	    op = expression.getOperator();
	}
	if (val instanceof CssURL) {
	    throw new InvalidParamException("comma",
					    val.toString(),
					    getPropertyName(), ac);
	}

	if (val instanceof CssIdent) {
	    int hash = val.hashCode();

	    for (int i = 0; i < CURSOR.length; i++) {
		if (hash_values[i] == hash) {
		    value = i;
		    expression.next();
		    if(check && !expression.end()) {
			throw new InvalidParamException("unrecognize", ac);
		    }
		    return;
		}
	    }
	}

	throw new InvalidParamException("value",
					val.toString(), getPropertyName(), ac);
    }

    public Cursor(ApplContext ac, CssExpression expression)
	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the value of this property
     */
    public Object get() {
	return null;
    }

    /**
     * Returns the name of this property
     */
    public String getPropertyName() {
	return "cursor";
    }

    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return inheritedValue;
    }

    /**
     * Returns a string representation of the object.
     */
    public String toString() {
	if (inheritedValue) {
	    return inherit.toString();
	} else {
	    int i = 0;
	    int l = uris.size();
	    String ret = "";
	    while (i != l) {
		ret += uris.elementAt(i++) +
		    (new Character(COMMA)).toString() + " ";
	    }
	    ret += " " + CURSOR[value];
	    return ret;
	}
    }

    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	Css2Style style0 = (Css2Style) style;
	if (style0.cursor != null)
	    style0.addRedefinitionWarning(ac, this);
	style0.cursor = this;
    }

    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getCursor();
	} else {
	    return ((Css2Style) style).cursor;
	}
    }

    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */
    public boolean equals(CssProperty property) {
	return (property instanceof Cursor
		&& value == ((Cursor) property).value);
    }

    /**
     * Is the value of this property is a default value.
     * It is used by all macro for the function <code>print</code>
     */
    public boolean isDefault() {
	return value == 0;
    }

    static {
	hash_values = new int[CURSOR.length];
	for (int i=0; i<CURSOR.length; i++)
	    hash_values[i] = CURSOR[i].hashCode();
    }
}

--- NEW FILE: UserProperty.java ---
//
// $Id: UserProperty.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 */

package org.w3c.css.properties.css2.user;

import org.w3c.css.properties.css1.CssProperty;

/**
 * @version $Revision: 1.1 $
 */
public abstract class UserProperty extends CssProperty {

  /**
   * Returns true if the property is inherited
   */
  public boolean Inherited() {
    return UserProperties.getInheritance(this);
  }

}

--- NEW FILE: OutlineWidthATSC.java ---
//
// $Id: OutlineWidthATSC.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
/*
 *
 */
package org.w3c.css.properties.css2.user;

import org.w3c.css.parser.CssStyle;
import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssLength;
import org.w3c.css.values.CssNumber;
import org.w3c.css.values.CssValue;

/**
 * @version $Revision: 1.1 $
 */
public class OutlineWidthATSC extends UserProperty {
    
    CssValue value;
    
    private static CssIdent thin = new CssIdent("thin");
    private static CssIdent medium = new CssIdent("medium");
    private static CssIdent thick = new CssIdent("thick");
    
    /**
     * Create a new OutlineWidthATSC
     */
    public OutlineWidthATSC() {
	value = medium;
    }
    
    /**
     * Create a new OutlineWidthATSC from an another OutlineWidthATSC
     *
     * @param another The another side.
     */
    public OutlineWidthATSC(OutlineWidthATSC another) {
	value = another.value;
    }
    
    /**
     * Create a new OutlineWidthATSC
     *
     * @param expression The expression for this property
     * @exception InvalidParamException Values are incorrect
     */
    public OutlineWidthATSC(ApplContext ac, CssExpression expression,
	    boolean check) throws InvalidParamException {
	
	if(check && expression.getCount() > 1) {
	    throw new InvalidParamException("unrecognize", ac);
	}
	
	CssValue val = expression.getValue();
	setByUser();

	ac.getFrame().addWarning("atsc", val.toString());

	if (val instanceof CssLength) {
	    float f = ((Float) val.get()).floatValue();
	    if (f >= 0) {
		this.value = val;
	    } else {
		throw new InvalidParamException("negative-value", 
						val.toString(), ac);
	    }
	} else if (val instanceof CssNumber) {
	    value = ((CssNumber) val).getLength();
	} else if (val.equals(thin)) {
	    value = thin;
	} else if (val.equals(medium)) {
	    value = medium;
	} else if (val.equals(thick)) {
	    value = thick;
	} else if (val.equals(inherit)) {
	    value = CssProperty.inherit;
	} else {
	    throw new InvalidParamException("value", val.toString(), 
					    "width", ac);
	}
	
	expression.next();
    }  
    
    public OutlineWidthATSC(ApplContext ac, CssExpression expression)
    	throws InvalidParamException {
	this(ac, expression, false);
    }
    
    /**
     * Returns the internal value
     */  
    public Object get() {
	return value;
    }
    
    /**
     * Returns true if this property is "softly" inherited
     * e.g. his value equals inherit
     */
    public boolean isSoftlyInherited() {
	return value.equals(inherit);
    }
    
    /**
     * Returns a string representation of the object.
     */
    public String toString() {  
	return value.toString();
    }
    
    /**
     * Add this property to the CssStyle.
     *
     * @param style The CssStyle
     */
    public void addToStyle(ApplContext ac, CssStyle style) {
	OutlineATSC outline = ((Css2Style) style).outlineATSC;
	if (outline.width != null) {
	    style.addRedefinitionWarning(ac, this);
	}
	outline.width = this;
    }
    
    /**
     * Get this property in the style.
     *
     * @param style The style where the property is
     * @param resolve if true, resolve the style to find this property
     */  
    public CssProperty getPropertyInStyle(CssStyle style, boolean resolve) {
	if (resolve) {
	    return ((Css2Style) style).getOutlineWidthATSC();
	} else {
	    return ((Css2Style) style).outlineATSC.width;
	}
    }
    
    /**
     * Compares two properties for equality.
     *
     * @param value The other property.
     */  
    public boolean equals(CssProperty property) {
	return (property instanceof OutlineWidthATSC && 
		value.equals(((OutlineWidthATSC) property).value));
    }
    
    /**
     * Returns the name of this property
     */  
    public String getPropertyName() {
	return "outline-width";
    }
    
}




--- NEW FILE: UserProperties.java ---
//
// $Id: UserProperties.java,v 1.1 2005/08/23 16:33:51 ylafon Exp $
// From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr)
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.properties.css2.user;

import java.net.URL;

import org.w3c.css.properties.css1.CssProperty;
import org.w3c.css.util.Utf8Properties;

/**
 * @version $Revision: 1.1 $
 */
public class UserProperties {
    public static Utf8Properties properties;
    
    public static String getString(CssProperty property, String prop) {
	return properties.getProperty(property.getPropertyName() + "." + prop);
    }
    
    public static boolean getInheritance(CssProperty property) {
	return getString(property, "inherited").equals("true");
    }
    
    static {
	properties = new Utf8Properties();
	try {
	    URL url = UserProperties.class
	    .getResource("UserDefault.properties");
	    properties.load(url.openStream());
	} catch (Exception e) {
	    System.err
	    .println("org.w3c.css.properties.css2.user.UserProperties: couldn't load properties ");
	    System.err.println("  " + e.toString());
	}
    }
}

Received on Tuesday, 23 August 2005 16:34:59 UTC