All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.w3c.css.properties.css2.CssDisplayCSS2 Maven / Gradle / Ivy

The newest version!
//
// $Id: CssDisplayCSS2.java,v 1.1 2010-01-05 13:49:46 ylafon Exp $
// From Philippe Le Hegaret ([email protected])
//
// (c) COPYRIGHT MIT and INRIA, 1997.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.properties.css2;

import org.w3c.css.properties.css.CssDisplay;
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.CssTypes;
import org.w3c.css.values.CssValue;

import java.util.HashMap;

/**
 *
 * http://www.w3.org/TR/2008/REC-CSS2-20080411/visuren.html#display-prop
 * 9.2.5 The 'display' property

'display'
    Value:  	inline | block | list-item | run-in | compact | marker |
                table | inline-table | table-row-group | table-header-group |
                table-footer-group | table-row | table-column-group |
                table-column | table-cell | table-caption | none | inherit
    Initial:  	inline
    Applies to:  	all elements
    Inherited:  	no
    Percentages:  	N/A
    Media:  	all

The values of this property have the following meanings:

block
    This value causes an element to generate a principal block box.
inline
    This value causes an element to generate one or more inline boxes.
list-item
    This value causes an element (e.g., LI in HTML) to generate a principal
    block box and a list-item inline box. For information about lists and
    examples of list formatting, please consult the section on lists.
marker
    This value declares generated content before or after a box to be a marker.
    This value should only be used with :before and :after pseudo-elements
    attached to block-level elements. In other cases, this value is interpreted
    as 'inline'. Please consult the section on markers for more information.
none
    This value causes an element to generate no boxes in the formatting
    structure (i.e., the element has no effect on layout). Descendant elements
    do not generate any boxes either; this behavior cannot be overridden by
    setting the 'display' property on the descendants.

    Please note that a display of 'none' does not create an invisible box; it
    creates no box at all. CSS includes mechanisms that enable an element to
    generate boxes in the formatting structure that affect formatting but are
    not visible themselves. Please consult the section on visibility for
    details.
run-in and compact
    These values create either block or inline boxes, depending on context.
    Properties apply to run-in and compact boxes based on their final status
    (inline-level or block-level). For example, the 'white-space' property only
    applies if the box becomes a block box.
table, inline-table, table-row-group, table-column, table-column-group,
table-header-group, table-footer-group, table-row, table-cell, and table-caption
    These values cause an element to behave like a table element (subject to
    restrictions described in the chapter on tables).

Note that although the initial value of 'display' is 'inline', rules in the
user agent's default style sheet may override this value. See the sample style
sheet for HTML 4.0 in the appendix.

Example(s):

Here are some examples of the 'display' property:

P   { display: block }
EM  { display: inline }
LI  { display: list-item }
IMG { display: none }

Conforming HTML user agents may ignore the 'display' property.
 * @version $Revision: 1.1 $
 */

public class CssDisplayCSS2 extends CssDisplay {

    public static CssIdent inline;
    public static HashMap allowed_values;
    static {
        allowed_values = new HashMap();
        String[] DISPLAY = {
                "inline", "block", "list-item", "run-in", "compact", "marker",
                "table", "inline-table", "table-row-group",
                "table-header-group", "table-footer-group",
                "table-row", "table-column-group", "table-column",
                "table-cell", "table-caption", "none"};

        for (String aDISPLAY : DISPLAY) {
            allowed_values.put(aDISPLAY, CssIdent.getIdent(aDISPLAY));
        }
        inline = CssIdent.getIdent("inline");
    }

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

    /**
     * Create a new CssDisplay
     *
     * @param ac         The context
     * @param expression The expression for this property
     * @param check      boolean, if check has to be enforced
     * @throws org.w3c.css.util.InvalidParamException Values are incorect
     */
    public CssDisplayCSS2(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.getType() == CssTypes.CSS_IDENT) {
            CssIdent id_val = (CssIdent) val;
            String id_value = id_val.toString();
            if (inherit.equals(id_val)) {
                value = inherit;
            } else {
                value = allowed_values.get(id_value);
            }
            if (value != null) {
                expression.next();
                return;
            }
        }

        throw new InvalidParamException("value", expression.getValue(),
                getPropertyName(), ac);

    }

    public CssDisplayCSS2(ApplContext ac, CssExpression expression)
            throws InvalidParamException {
        this(ac, expression, false);
    }


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

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy