/**
 * ===========================================
 * LibLayout : a free Java layouting library
 * ===========================================
 *
 * Project Info:  http://reporting.pentaho.org/liblayout/
 *
 * (C) Copyright 2006-2007, by Pentaho Corporation and Contributors.
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
 * in the United States and other countries.]
 *
 * ------------
 * $Id: DisplayRole.java 6653 2008-12-02 14:53:40Z tmorgner $
 * ------------
 * (C) Copyright 2006-2007, by Pentaho Corporation.
 */

package org.jfree.layouting.input.style.keys.box;

import org.jfree.layouting.input.style.values.CSSConstant;

/**
 * The Display-Role property describes the role an element plays in the parent
 * algorithm. Seeing that property as general 'LayoutManagerConstraint' might
 * be apropriate.
 * <p/>
 * The RUBY_* properties are required for Japanese and other Asian font support
 * and not yet used.
 */
public class DisplayRole
{
  /**
   * The element is not rendered. The rendering is the same as if the element
   * had been removed from the document tree, except for possible effects on
   * counters (see [generated] or [paged]).
   * <p/>
   * Note that :before and :after pseudo elements of this element are also not
   * rendered, see [generated].)
   */
  public static final CSSConstant NONE = new CSSConstant("none");

  /**
   * The element is rendered as a rectangular block. See Collapsing margins
   * for its position relative to earlier boxes in the same flow. In paged
   * media [ref] or inside another element that has two or more columns,
   * the box may be split into several smaller boxes.
   */
  public static final CSSConstant BLOCK = new CSSConstant("block");

  /**
   * The element is rendered inside a line box. It may be split into several
   * boxes because of line breaking and bidi processing (see the Text module).
   */
  public static final CSSConstant INLINE = new CSSConstant("inline");

  /**
   * The element is rendered the same as if it had display-role 'block', but
   * in addition a marker is generated (see 'list-style').
   */
  public static final CSSConstant LIST_ITEM = new CSSConstant("list-item");

  /**
   * The effect depends on what comes after the element. If the next element
   * (in the depth-first, left to right tree traversal, so not necessarily a
   * sibling) has a 'display-model' of 'block-inside', the current element will
   * be rendered as if it had display-role 'inline' and was the first child
   * of that block element. Otherwise this element will be rendered as if it
   * had display-role 'block'. [Does this explain Ian's tests?]
   */
  public static final CSSConstant RUN_IN = new CSSConstant("run-in");

  /**
   * The effect depends on the intrinsic size of this element and on what comes
   * after it. If the next element has a 'display-role' of 'block', and the
   * intrinsic width of the compact element is less than or equal to the left
   * margin of that block (resp. the right margin, if the block's 'direction'
   * is 'rtl'), then the compact element is rendered in the left (right) margin
   * of the block at its intrinsic size and baseline aligned with the first
   * line box of the block. [Do we need a different alignment depending on
   * script?] In all other cases the compact element is rendered as if its
   * display-role was 'block'.
   */
  public static final CSSConstant COMPACT = new CSSConstant("compact");

  /** See the Tables module [CSS3TBL]. */
  public static final CSSConstant TABLE_ROW = new CSSConstant("table-row");
  public static final CSSConstant TABLE_CELL = new CSSConstant("table-cell");
  public static final CSSConstant TABLE_ROW_GROUP = new CSSConstant(
          "table-row-group");
  public static final CSSConstant TABLE_HEADER_GROUP = new CSSConstant(
          "table-header-group");

  public static final CSSConstant TABLE_FOOTER_GROUP = new CSSConstant(
          "table-footer-group");
  public static final CSSConstant TABLE_COLUMN = new CSSConstant(
          "table-column");
  public static final CSSConstant TABLE_COLUMN_GROUP = new CSSConstant(
          "table-column-group");
  public static final CSSConstant TABLE_CAPTION = new CSSConstant(
          "table-caption");

  /** Ruby is not yet used. */
  public static final CSSConstant RUBY_TEXT = new CSSConstant("ruby-text");
  public static final CSSConstant RUBY_BASE = new CSSConstant("ruby-base");
  public static final CSSConstant RUBY_BASE_GROUP = new CSSConstant(
          "ruby-base-group");
  public static final CSSConstant RUBY_TEXT_GROUP
          = new CSSConstant("ruby-text-group");

  /**
   * A JFreeReport compatibility setting. Enables the absolute positioning mode.
   */
  public static final CSSConstant ABSOLUTE
          = new CSSConstant("absolute");


  private DisplayRole()
  {
  }
}
