001: /*
002: * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
003: *
004: * The program is provided "as is" without any warranty express or
005: * implied, including the warranty of non-infringement and the implied
006: * warranties of merchantibility and fitness for a particular purpose.
007: * IBM will not be liable for any damages suffered by you as a result
008: * of using the Program. In no event will IBM be liable for any
009: * special, indirect or consequential damages or lost profits even if
010: * IBM has been advised of the possibility of their occurrence. IBM
011: * will not be liable for any third party claims against you.
012: */
013: package com.ibm.richtext.styledtext;
014:
015: import com.ibm.richtext.textlayout.attributes.AttributeMap;
016:
017: /*
018: 8/1/96
019: Style -> ResolvedStyle
020: 8/7/96 jf
021: added countStyles and getStyles protocol
022: 8/13/96
023: ResolvedStyle->Style
024: 8/22/96 jf
025: Removed the setIterator methods.
026: */
027: /*
028: * MStyleBuffer is the abstract interface for a class which maintains
029: * style runs in an <tt>MText</tt>. A "style run" consists of a
030: * style and the interval on which the style applies.
031: * <p>
032: * MStyleBuffer includes methods to call when text is inserted into
033: * or deleted from the <tt>MText</tt>. These methods update the
034: * style runs in accordance with the commonly accepted behavior for
035: * style runs.
036: * <p>
037: * Additionally, MStyleBuffer provides methods for replacing the style runs on a
038: * text range with another set of style runs. MStyleBuffer does not do style "combining" (for
039: * example, adding the bold attribute to text which is italicized); clients are
040: * responsible for computing the combined styles, and passing these styles into
041: * MStyleBuffer.
042: * <p>
043: * MStyleBuffer supplies a method for replacing the style runs on a text range with the runs
044: * represented in an <tt>MStyleRunIterator</tt>. This is useful for implementing paste
045: * operations, in which the style runs on a range of text are replaced by style runs
046: * from an external source.
047: * <p>
048: *
049: * @author John Raley
050: *
051: * @see AttributeMap
052: * @see MText
053: */
054: abstract class MStyleBuffer {
055:
056: static final String COPYRIGHT = "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
057:
058: /**
059: * Respond to an insertion in the text. The length of the last style run which
060: * begins before <tt>start</tt> is increased by <tt>limit-start</tt>.
061: * @param start the offset where the insertion began
062: * @param limit the offset where the insertion ended
063: */
064: abstract void insertText(int start, int limit);
065:
066: /**
067: * Respond to a deletion in the text. The last style run before
068: * <tt>start</tt> is truncated to end at <tt>start</tt>. The
069: * style run containing (<tt>start</tt>+<tt>length</tt>) is set to begin
070: * at (<tt>start</tt>+<tt>length</tt>). Runs in between are deleted.
071: * If the deletion occurs entirely within one style run, the length of the style
072: * run is reduced by <tt>length</tt>.
073: * @param start the offset where the deletion began
074: * @param length the offset where the deletion ended
075: */
076: abstract void deleteText(int start, int limit);
077:
078: /*
079: * Replace style runs between offsets <tt>start</tt> and <tt>limit</tt> with styles in
080: * <tt>iter</tt>. This method can be used to perform a "paste" operation.
081: * @param start the offset where the replacement begins
082: * @param limit the offset where the replacement ends
083: * @param iter an <tt>MStyleRunIterator</tt> containing style runs which will replace old
084: * style runs.
085: */
086: abstract void replace(int start, int limit, MConstText srcText,
087: int srcStart, int srcLimit);
088:
089: abstract int styleStart(int pos);
090:
091: abstract int styleLimit(int pos);
092:
093: /**
094: * Return style at location <tt>pos</tt>.
095: * @param pos an offset into the text
096: * @returns the style of the character at <tt>offset</tt>
097: */
098: abstract AttributeMap styleAt(int pos);
099:
100: /**
101: * Return true if styles were modified.
102: */
103: abstract boolean modifyStyles(int start, int limit,
104: StyleModifier modifier, int[] damagedRange);
105:
106: /**
107: * Minimize the amount of memory used by this object.
108: */
109: abstract void compress();
110: }
|