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