/* Textual.java


	Purpose: 
	Description: 
	History:
	2001/10/24 20:23:58, Create, Tom M. Yeh.

Copyright (C) 2001 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.idom;

/**
 * Represents an object that is mainly for storing "text".
 * It is usually implemented by a class that also implements Item.
 *
 * <p>A "text" is usually a string (e.g., Text, Comment and CDATA) but
 * could be any object (e.g., Binary).
 *
 * <p>The getText method of some parent, e.g., Element, concatenates
 * the text of its children if they implement this interface and
 * Textual.isPartOfParentText returns true.
 *
 * <p>Note: the class that implement this interface must have a constructor
 * with a single argument whose type is String. The split method will
 * invoke it to create a new instance.
 *
 * @author tomyeh
 * @see Item
 */
public interface Textual {
	/**
	 * Splits at the specified offset into two Textual objects.
	 * The new textual object is inserted right after this one.
	 *
	 * @return the new textual object; null if offset is no less than length
	 */
	public Textual split(int offset);

	/**
	 * Returns true if this textual object is part of the parent's text.
	 * Currently, only Element.getText uses it.
	 */
	public boolean isPartOfParentText();

	/**
	 * Returns true if this textual object is allowed to be coalesced with
	 * its siblings with the same type (class).
	 * It is used by Group.coalesce.
	 */
	public boolean isCoalesceable();
}
