]>
git.saurik.com Git - apple/icu.git/blob - icuSources/layout/LEInsertionList.h
2 **********************************************************************
3 * Copyright (C) 1998-2004, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
8 #ifndef __LEINSERTIONLIST_H
9 #define __LEINSERTIONLIST_H
15 struct InsertionRecord
;
18 * This class encapsulates the callback used by <code>LEInsertionList</code>
19 * to apply an insertion from the insertion list.
23 class LEInsertionCallback
27 * This method will be called by <code>LEInsertionList::applyInsertions</code> for each
28 * entry on the insertion list.
30 * @param atPosition the position of the insertion
31 * @param count the number of glyphs to insert
32 * @param newGlyphs the address of the glyphs to insert
34 * @return <code>TRUE</code> if <code>LEInsertions::applyInsertions</code> should
35 * stop after applying this insertion.
39 virtual le_bool
applyInsertion(le_int32 atPosition
, le_int32 count
, LEGlyphID newGlyphs
[]) = 0;
43 * This class is used to keep track of insertions to an array of
44 * <code>LEGlyphIDs</code>. The insertions are kept on a linked
45 * list of <code>InsertionRecords</code> so that the glyph array
46 * doesn't have to be grown for each insertion. The insertions are
47 * stored on the list from leftmost to rightmost to make it easier
48 * to do the insertions.
50 * The insertions are applied to the array by calling the
51 * <code>applyInsertions</code> method, which calls a client
52 * supplied <code>LEInsertionCallback</code> object to actually
53 * apply the individual insertions.
57 class LEInsertionList
: public UObject
61 * Construct an empty insertion list.
63 * @param rightToLeft <code>TRUE</code> if the glyphs are stored
64 * in the array in right to left order.
68 LEInsertionList(le_bool rightToLeft
);
76 * Add an entry to the insertion list.
78 * @param position the glyph at this position in the array will be
79 * replaced by the new glyphs.
80 * @param count the number of new glyphs
82 * @return the address of an array in which to store the new glyphs. This will
83 * <em>not</em> be in the glyph array.
87 LEGlyphID
*insert(le_int32 position
, le_int32 count
);
90 * Return the number of new glyphs that have been inserted.
92 * @return the number of new glyphs which have been inserted
96 le_int32
getGrowAmount();
99 * Call the <code>LEInsertionCallback</code> once for each
100 * entry on the insertion list.
102 * @param callback the <code>LEInsertionCallback</code> to call for each insertion.
104 * @return <code>TRUE</code> if <code>callback</code> returned <code>TRUE</code> to
105 * terminate the insertion list processing.
109 le_bool
applyInsertions(LEInsertionCallback
*callback
);
112 * Empty the insertion list and free all associated
120 * ICU "poor man's RTTI", returns a UClassID for the actual class.
124 virtual UClassID
getDynamicClassID() const;
127 * ICU "poor man's RTTI", returns a UClassID for this class.
131 static UClassID
getStaticClassID();
136 * The head of the insertion list.
140 InsertionRecord
*head
;
143 * The tail of the insertion list.
147 InsertionRecord
*tail
;
150 * The total number of new glyphs on the insertion list.
157 * Set to <code>TRUE</code> if the glyphs are in right
158 * to left order. Since we want the rightmost insertion
159 * to be first on the list, we need to append the
160 * insertions in this case. Otherwise they're prepended.