• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
4  *
5  */
6 
7 #ifndef __LOENGINE_H
8 #define __LOENGINE_H
9 
10 #include "LETypes.h"
11 
12 /**
13  * \file
14  * \brief C API for complex text layout.
15  * \internal
16  *
17  * This is a technology preview. The API may
18  * change significantly.
19  *
20  */
21 
22 /**
23  * The opaque type for a LayoutEngine.
24  *
25  * @internal
26  */
27 typedef void le_engine;
28 
29 /**
30  * The opaque type for a font instance.
31  *
32  * @internal
33  */
34 typedef void le_font;
35 
36 /**
37  * This function returns an le_engine capable of laying out text
38  * in the given font, script and langauge. Note that the LayoutEngine
39  * returned may be a subclass of LayoutEngine.
40  *
41  * @param font - the font of the text
42  * @param scriptCode - the script of the text
43  * @param languageCode - the language of the text
44  * @param typo_flags - flags that control layout features like kerning and ligatures.
45  * @param success - output parameter set to an error code if the operation fails
46  *
47  * @return an le_engine which can layout text in the given font.
48  *
49  * @internal
50  */
51 U_INTERNAL le_engine * U_EXPORT2
52 le_create(const le_font *font,
53           le_int32 scriptCode,
54           le_int32 languageCode,
55           le_int32 typo_flags,
56           LEErrorCode *success);
57 
58 /**
59  * This function closes the given LayoutEngine. After
60  * it returns, the le_engine is no longer valid.
61  *
62  * @param engine - the LayoutEngine to close.
63  *
64  * @internal
65  */
66 U_INTERNAL void U_EXPORT2
67 le_close(le_engine *engine);
68 
69 /**
70  * This routine will compute the glyph, character index and position arrays.
71  *
72  * @param engine - the LayoutEngine
73  * @param chars - the input character context
74  * @param offset - the offset of the first character to process
75  * @param count - the number of characters to process
76  * @param max - the number of characters in the input context
77  * @param rightToLeft - TRUE if the characers are in a right to left directional run
78  * @param x - the initial X position
79  * @param y - the initial Y position
80  * @param success - output parameter set to an error code if the operation fails
81  *
82  * @return the number of glyphs in the glyph array
83  *
84  * Note: The glyph, character index and position array can be accessed
85  * using the getter routines below.
86  *
87  * Note: If you call this function more than once, you must call the reset()
88  * function first to free the glyph, character index and position arrays
89  * allocated by the previous call.
90  *
91  * @internal
92  */
93 U_INTERNAL le_int32 U_EXPORT2
94 le_layoutChars(le_engine *engine,
95                const LEUnicode chars[],
96                le_int32 offset,
97                le_int32 count,
98                le_int32 max,
99                le_bool rightToLeft,
100                float x,
101                float y,
102                LEErrorCode *success);
103 
104 /**
105  * This function returns the number of glyphs in the glyph array. Note
106  * that the number of glyphs will be greater than or equal to the number
107  * of characters used to create the LayoutEngine.
108  *
109  * @param engine - the LayoutEngine
110  * @param success - output parameter set to an error code if the operation fails.
111  *
112  * @return the number of glyphs in the glyph array
113  *
114  * @internal
115  */
116 U_INTERNAL le_int32 U_EXPORT2
117 le_getGlyphCount(le_engine *engine,
118                  LEErrorCode *success);
119 
120 /**
121  * This function copies the glyph array into a caller supplied array.
122  * The caller must ensure that the array is large enough to hold all
123  * the glyphs.
124  *
125  * @param engine - the LayoutEngine
126  * @param glyphs - the destiniation glyph array
127  * @param success - set to an error code if the operation fails
128  *
129  * @internal
130  */
131 U_INTERNAL void U_EXPORT2
132 le_getGlyphs(le_engine *engine,
133              LEGlyphID glyphs[],
134              LEErrorCode *success);
135 
136 /**
137  * This function copies the character index array into a caller supplied array.
138  * The caller must ensure that the array is large enough to hold a
139  * character index for each glyph.
140  *
141  * @param engine - the LayoutEngine
142  * @param charIndices - the destiniation character index array
143  * @param success - set to an error code if the operation fails
144  *
145  * @internal
146  */
147 U_INTERNAL void U_EXPORT2
148 le_getCharIndices(le_engine *engine,
149                   le_int32 charIndices[],
150                   LEErrorCode *success);
151 
152 /**
153  * This function copies the character index array into a caller supplied array.
154  * The caller must ensure that the array is large enough to hold a
155  * character index for each glyph.
156  *
157  * @param engine - the LayoutEngine
158  * @param charIndices - the destiniation character index array
159  * @param indexBase - an offset that will be added to each index.
160  * @param success - set to an error code if the operation fails
161  *
162  * @internal
163  */
164 U_INTERNAL void U_EXPORT2
165 le_getCharIndicesWithBase(le_engine *engine,
166                   le_int32 charIndices[],
167                   le_int32 indexBase,
168                   LEErrorCode *success);
169 
170 /**
171  * This function copies the position array into a caller supplied array.
172  * The caller must ensure that the array is large enough to hold an
173  * X and Y position for each glyph, plus an extra X and Y for the
174  * advance of the last glyph.
175  *
176  * @param engine - the LayoutEngine
177  * @param positions - the destiniation position array
178  * @param success - set to an error code if the operation fails
179  *
180  * @internal
181  */
182 U_INTERNAL void U_EXPORT2
183 le_getGlyphPositions(le_engine *engine,
184                      float positions[],
185                      LEErrorCode *success);
186 
187 /**
188  * This function returns the X and Y position of the glyph at
189  * the given index.
190  *
191  * Input parameters:
192  * @param engine - the LayoutEngine
193  * @param glyphIndex - the index of the glyph
194  *
195  * Output parameters:
196  * @param x - the glyph's X position
197  * @param y - the glyph's Y position
198  * @param success - set to an error code if the operation fails
199  *
200  * @internal
201  */
202 U_INTERNAL void U_EXPORT2
203 le_getGlyphPosition(le_engine *engine,
204                     le_int32 glyphIndex,
205                     float *x,
206                     float *y,
207                     LEErrorCode *success);
208 
209 /**
210  * This function frees the glyph, character index and position arrays
211  * so that the LayoutEngine can be reused to layout a different
212  * characer array. (This function is also called by le_close)
213  *
214  * @param engine - the LayoutEngine
215  * @param success - set to an error code if the operation fails
216  *
217  * @internal
218  */
219 U_INTERNAL void U_EXPORT2
220 le_reset(le_engine *engine,
221          LEErrorCode *success);
222 
223 #endif
224