]> git.saurik.com Git - apple/icu.git/blame_incremental - icuSources/layoutex/layout/plruns.h
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / layoutex / layout / plruns.h
... / ...
CommitLineData
1/*
2 *
3 * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
4 *
5 */
6
7#ifndef __PLRUNS_H
8#define __PLRUNS_H
9
10#include "unicode/utypes.h"
11
12#ifndef U_HIDE_INTERNAL_API
13
14#include "unicode/ubidi.h"
15#include "layout/LETypes.h"
16
17#include "layout/loengine.h"
18
19/**
20 * Opaque datatype representing an array of font runs
21 */
22typedef void pl_fontRuns;
23/**
24 * Opaque datatype representing an array of value runs
25 */
26typedef void pl_valueRuns;
27/**
28 * Opaque datatype representing an array of locale runs
29 */
30typedef void pl_localeRuns;
31
32/**
33 * \file
34 * \brief C API for run arrays.
35 *
36 * This is a technology preview. The API may
37 * change significantly.
38 *
39 */
40
41/**
42 * Construct a <code>pl_fontRuns</code> object from pre-existing arrays of fonts
43 * and limit indices.
44 *
45 * @param fonts is the address of an array of pointers to <code>le_font</code> objects. This
46 * array, and the <code>le_font</code> objects to which it points must remain
47 * valid until the <code>pl_fontRuns</code> object is closed.
48 *
49 * @param limits is the address of an array of limit indices. This array must remain valid until
50 * the <code>pl_fontRuns</code> object is closed.
51 *
52 * @param count is the number of entries in the two arrays.
53 *
54 * @internal
55 */
56U_INTERNAL pl_fontRuns * U_EXPORT2
57pl_openFontRuns(const le_font **fonts,
58 const le_int32 *limits,
59 le_int32 count);
60
61/**
62 * Construct an empty <code>pl_fontRuns</code> object. Clients can add font and limit
63 * indices arrays using the <code>pl_addFontRun</code> routine.
64 *
65 * @param initialCapacity is the initial size of the font and limit indices arrays. If
66 * this value is zero, no arrays will be allocated.
67 *
68 * @see pl_addFontRun
69 *
70 * @internal
71 */
72U_INTERNAL pl_fontRuns * U_EXPORT2
73pl_openEmptyFontRuns(le_int32 initialCapacity);
74
75/**
76 * Close the given <code>pl_fontRuns</code> object. Once this
77 * call returns, the object can no longer be referenced.
78 *
79 * @param fontRuns is the <code>pl_fontRuns</code> object.
80 *
81 * @internal
82 */
83U_INTERNAL void U_EXPORT2
84pl_closeFontRuns(pl_fontRuns *fontRuns);
85
86/**
87 * Get the number of font runs.
88 *
89 * @param fontRuns is the <code>pl_fontRuns</code> object.
90 *
91 * @return the number of entries in the limit indices array.
92 *
93 * @internal
94 */
95U_INTERNAL le_int32 U_EXPORT2
96pl_getFontRunCount(const pl_fontRuns *fontRuns);
97
98/**
99 * Reset the number of font runs to zero.
100 *
101 * @param fontRuns is the <code>pl_fontRuns</code> object.
102 *
103 * @internal
104 */
105U_INTERNAL void U_EXPORT2
106pl_resetFontRuns(pl_fontRuns *fontRuns);
107
108/**
109 * Get the limit index for the last font run. This is the
110 * number of characters in the text.
111 *
112 * @param fontRuns is the <code>pl_fontRuns</code> object.
113 *
114 * @return the last limit index.
115 *
116 * @internal
117 */
118U_INTERNAL le_int32 U_EXPORT2
119pl_getFontRunLastLimit(const pl_fontRuns *fontRuns);
120
121/**
122 * Get the limit index for a particular font run.
123 *
124 * @param fontRuns is the <code>pl_fontRuns</code> object.
125 * @param run is the run. This is an index into the limit index array.
126 *
127 * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
128 *
129 * @internal
130 */
131U_INTERNAL le_int32 U_EXPORT2
132pl_getFontRunLimit(const pl_fontRuns *fontRuns,
133 le_int32 run);
134
135/**
136 * Get the <code>le_font</code> object assoicated with the given run
137 * of text. Use <code>pl_getFontRunLimit(run)</code> to get the corresponding
138 * limit index.
139 *
140 * @param fontRuns is the <code>pl_fontRuns</code> object.
141 * @param run is the index into the font and limit indices arrays.
142 *
143 * @return the <code>le_font</code> associated with the given text run.
144 *
145 * @internal
146 */
147U_INTERNAL const le_font * U_EXPORT2
148pl_getFontRunFont(const pl_fontRuns *fontRuns,
149 le_int32 run);
150
151
152/**
153 * Add a new font run to the given <code>pl_fontRuns</code> object.
154 *
155 * If the <code>pl_fontRuns</code> object was not created by calling
156 * <code>pl_openEmptyFontRuns</code>, this method will return a run index of -1.
157 *
158 * @param fontRuns is the <code>pl_fontRuns</code> object.
159 *
160 * @param font is the address of the <code>le_font</code> to add. This object must
161 * remain valid until the <code>pl_fontRuns</code> object is closed.
162 *
163 * @param limit is the limit index to add
164 *
165 * @return the run index where the font and limit index were stored, or -1 if
166 * the run cannot be added.
167 *
168 * @internal
169 */
170U_INTERNAL le_int32 U_EXPORT2
171pl_addFontRun(pl_fontRuns *fontRuns,
172 const le_font *font,
173 le_int32 limit);
174
175/**
176 * Construct a <code>pl_valueRuns</code> object from pre-existing arrays of values
177 * and limit indices.
178 *
179 * @param values is the address of an array of values. This array must remain valid until
180 the <code>pl_valueRuns</code> object is closed.
181 *
182 * @param limits is the address of an array of limit indices. This array must remain valid until
183 * the <code>pl_valueRuns</code> object is closed.
184 *
185 * @param count is the number of entries in the two arrays.
186 *
187 * @internal
188 */
189U_INTERNAL pl_valueRuns * U_EXPORT2
190pl_openValueRuns(const le_int32 *values,
191 const le_int32 *limits,
192 le_int32 count);
193
194/**
195 * Construct an empty <code>pl_valueRuns</code> object. Clients can add values and limits
196 * using the <code>pl_addValueRun</code> routine.
197 *
198 * @param initialCapacity is the initial size of the value and limit indices arrays. If
199 * this value is zero, no arrays will be allocated.
200 *
201 * @see pl_addValueRun
202 *
203 * @internal
204 */
205U_INTERNAL pl_valueRuns * U_EXPORT2
206pl_openEmptyValueRuns(le_int32 initialCapacity);
207
208/**
209 * Close the given <code>pl_valueRuns</code> object. Once this
210 * call returns, the object can no longer be referenced.
211 *
212 * @param valueRuns is the <code>pl_valueRuns</code> object.
213 *
214 * @internal
215 */
216U_INTERNAL void U_EXPORT2
217pl_closeValueRuns(pl_valueRuns *valueRuns);
218
219/**
220 * Get the number of value runs.
221 *
222 * @param valueRuns is the <code>pl_valueRuns</code> object.
223 *
224 * @return the number of value runs.
225 *
226 * @internal
227 */
228U_INTERNAL le_int32 U_EXPORT2
229pl_getValueRunCount(const pl_valueRuns *valueRuns);
230
231/**
232 * Reset the number of value runs to zero.
233 *
234 * @param valueRuns is the <code>pl_valueRuns</code> object.
235 *
236 * @internal
237 */
238U_INTERNAL void U_EXPORT2
239pl_resetValueRuns(pl_valueRuns *valueRuns);
240
241/**
242 * Get the limit index for the last value run. This is the
243 * number of characters in the text.
244 *
245 * @param valueRuns is the <code>pl_valueRuns</code> object.
246 *
247 * @return the last limit index.
248 *
249 * @internal
250 */
251U_INTERNAL le_int32 U_EXPORT2
252pl_getValueRunLastLimit(const pl_valueRuns *valueRuns);
253
254/**
255 * Get the limit index for a particular value run.
256 *
257 * @param valueRuns is the <code>pl_valueRuns</code> object.
258 * @param run is the run index.
259 *
260 * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
261 *
262 * @internal
263 */
264U_INTERNAL le_int32 U_EXPORT2
265pl_getValueRunLimit(const pl_valueRuns *valueRuns,
266 le_int32 run);
267
268/**
269 * Get the value assoicated with the given run * of text. Use
270 * <code>pl_getValueRunLimit(run)</code> to get the corresponding
271 * limit index.
272 *
273 * @param valueRuns is the <code>pl_valueRuns</code> object.
274 * @param run is the run index.
275 *
276 * @return the value associated with the given text run.
277 *
278 * @internal
279 */
280U_INTERNAL le_int32 U_EXPORT2
281pl_getValueRunValue(const pl_valueRuns *valueRuns,
282 le_int32 run);
283
284
285/**
286 * Add a new font run to the given <code>pl_valueRuns</code> object.
287 *
288 * If the <code>pl_valueRuns</code> object was not created by calling
289 * <code>pl_openEmptyFontRuns</code>, this method will return a run index of -1.
290 *
291 * @param valueRuns is the <code>pl_valueRuns</code> object.
292 *
293 * @param value is the value to add.
294 *
295 * @param limit is the limit index to add
296 *
297 * @return the run index where the font and limit index were stored, or -1 if
298 * the run cannot be added.
299 *
300 * @internal
301 */
302U_INTERNAL le_int32 U_EXPORT2
303pl_addValueRun(pl_valueRuns *valueRuns,
304 le_int32 value,
305 le_int32 limit);
306
307/**
308 * Construct a <code>pl_localeRuns</code> object from pre-existing arrays of fonts
309 * and limit indices.
310 *
311 * @param locales is the address of an array of pointers to locale name strings. This
312 * array must remain valid until the <code>pl_localeRuns</code> object is destroyed.
313 *
314 * @param limits is the address of an array of limit indices. This array must remain valid until
315 * the <code>pl_valueRuns</code> object is destroyed.
316 *
317 * @param count is the number of entries in the two arrays.
318 *
319 * @internal
320 */
321U_INTERNAL pl_localeRuns * U_EXPORT2
322pl_openLocaleRuns(const char **locales,
323 const le_int32 *limits,
324 le_int32 count);
325
326/**
327 * Construct an empty <code>pl_localeRuns</code> object. Clients can add font and limit
328 * indices arrays using the <code>pl_addFontRun</code> routine.
329 *
330 * @param initialCapacity is the initial size of the font and limit indices arrays. If
331 * this value is zero, no arrays will be allocated.
332 *
333 * @see pl_addLocaleRun
334 *
335 * @internal
336 */
337U_INTERNAL pl_localeRuns * U_EXPORT2
338pl_openEmptyLocaleRuns(le_int32 initialCapacity);
339
340/**
341 * Close the given <code>pl_localeRuns</code> object. Once this
342 * call returns, the object can no longer be referenced.
343 *
344 * @param localeRuns is the <code>pl_localeRuns</code> object.
345 *
346 * @internal
347 */
348U_INTERNAL void U_EXPORT2
349pl_closeLocaleRuns(pl_localeRuns *localeRuns);
350
351/**
352 * Get the number of font runs.
353 *
354 * @param localeRuns is the <code>pl_localeRuns</code> object.
355 *
356 * @return the number of entries in the limit indices array.
357 *
358 * @internal
359 */
360U_INTERNAL le_int32 U_EXPORT2
361pl_getLocaleRunCount(const pl_localeRuns *localeRuns);
362
363/**
364 * Reset the number of locale runs to zero.
365 *
366 * @param localeRuns is the <code>pl_localeRuns</code> object.
367 *
368 * @internal
369 */
370U_INTERNAL void U_EXPORT2
371pl_resetLocaleRuns(pl_localeRuns *localeRuns);
372
373/**
374 * Get the limit index for the last font run. This is the
375 * number of characters in the text.
376 *
377 * @param localeRuns is the <code>pl_localeRuns</code> object.
378 *
379 * @return the last limit index.
380 *
381 * @internal
382 */
383U_INTERNAL le_int32 U_EXPORT2
384pl_getLocaleRunLastLimit(const pl_localeRuns *localeRuns);
385
386/**
387 * Get the limit index for a particular font run.
388 *
389 * @param localeRuns is the <code>pl_localeRuns</code> object.
390 * @param run is the run. This is an index into the limit index array.
391 *
392 * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
393 *
394 * @internal
395 */
396U_INTERNAL le_int32 U_EXPORT2
397pl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
398 le_int32 run);
399
400/**
401 * Get the <code>le_font</code> object assoicated with the given run
402 * of text. Use <code>pl_getLocaleRunLimit(run)</code> to get the corresponding
403 * limit index.
404 *
405 * @param localeRuns is the <code>pl_localeRuns</code> object.
406 * @param run is the index into the font and limit indices arrays.
407 *
408 * @return the <code>le_font</code> associated with the given text run.
409 *
410 * @internal
411 */
412U_INTERNAL const char * U_EXPORT2
413pl_getLocaleRunLocale(const pl_localeRuns *localeRuns,
414 le_int32 run);
415
416
417/**
418 * Add a new run to the given <code>pl_localeRuns</code> object.
419 *
420 * If the <code>pl_localeRuns</code> object was not created by calling
421 * <code>pl_openEmptyLocaleRuns</code>, this method will return a run index of -1.
422 *
423 * @param localeRuns is the <code>pl_localeRuns</code> object.
424 *
425 * @param locale is the name of the locale to add. This name must
426 * remain valid until the <code>pl_localeRuns</code> object is closed.
427 *
428 * @param limit is the limit index to add
429 *
430 * @return the run index where the font and limit index were stored, or -1 if
431 * the run cannot be added.
432 *
433 * @internal
434 */
435U_INTERNAL le_int32 U_EXPORT2
436pl_addLocaleRun(pl_localeRuns *localeRuns,
437 const char *locale,
438 le_int32 limit);
439
440#endif /* U_HIDE_INTERNAL_API */
441#endif