]> git.saurik.com Git - apple/icu.git/blame - icuSources/layoutex/playout.cpp
ICU-66108.tar.gz
[apple/icu.git] / icuSources / layoutex / playout.cpp
CommitLineData
f3c0d7a5
A
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
46f4442e
A
3/*
4 *
5 * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
6 *
7 */
8
9/*
10 * paragraphLayout doesn't make much sense without
11 * BreakIterator...
12 */
13#include "layout/LETypes.h"
14#include "layout/loengine.h"
15#include "layout/plruns.h"
16#include "layout/playout.h"
17
18#include "unicode/locid.h"
19
20#include "layout/LayoutEngine.h"
21#include "layout/ParagraphLayout.h"
22
23#if ! UCONFIG_NO_BREAK_ITERATION
24
25U_NAMESPACE_USE
26
27U_CAPI pl_paragraph * U_EXPORT2
28pl_create(const LEUnicode chars[],
29 le_int32 count,
30 const pl_fontRuns *fontRuns,
31 const pl_valueRuns *levelRuns,
32 const pl_valueRuns *scriptRuns,
33 const pl_localeRuns *localeRuns,
34 UBiDiLevel paragraphLevel,
35 le_bool vertical,
36 LEErrorCode *status)
37{
38 ParagraphLayout *pl = new ParagraphLayout(chars, count, (const FontRuns *) fontRuns,
39 (const ValueRuns *) levelRuns, (const ValueRuns *) scriptRuns, (const LocaleRuns *) localeRuns,
40 paragraphLevel, vertical, *status);
41
42 return (pl_paragraph *) pl;
43}
44
45U_CAPI void U_EXPORT2
46pl_close(pl_paragraph *paragraph)
47{
48 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
49
50 delete pl;
51}
52
53U_CAPI le_bool U_EXPORT2
54pl_isComplex(const LEUnicode chars[],
55 le_int32 count)
56{
57 return ParagraphLayout::isComplex(chars, count);
58}
59
60U_CAPI UBiDiLevel U_EXPORT2
61pl_getParagraphLevel(pl_paragraph *paragraph)
62{
63 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
64
65 if (pl == NULL) {
66 return 0;
67 }
68
69 return pl->getParagraphLevel();
70}
71
72U_CAPI UBiDiDirection U_EXPORT2
73pl_getTextDirection(pl_paragraph *paragraph)
74{
75 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
76
77 if (pl == NULL) {
78 return UBIDI_LTR;
79 }
80
81 return pl->getTextDirection();
82}
83
84U_CAPI le_int32 U_EXPORT2
85pl_getAscent(const pl_paragraph *paragraph)
86{
87 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
88
89 if (pl == NULL) {
90 return 0;
91 }
92
93 return pl->getAscent();
94}
95
96U_CAPI le_int32 U_EXPORT2
97pl_getDescent(const pl_paragraph *paragraph)
98{
99 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
100
101 if (pl == NULL) {
102 return 0;
103 }
104
105 return pl->getDescent();
106}
107
108U_CAPI le_int32 U_EXPORT2
109pl_getLeading(const pl_paragraph *paragraph)
110{
111 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
112
113 if (pl == NULL) {
114 return 0;
115 }
116
117 return pl->getLeading();
118}
119
120U_CAPI void U_EXPORT2
121pl_reflow(pl_paragraph *paragraph)
122{
123 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
124
125 if (pl == NULL) {
126 return;
127 }
128
129 return pl->reflow();
130}
131
132U_CAPI pl_line * U_EXPORT2
133pl_nextLine(pl_paragraph *paragraph, float width)
134{
135 ParagraphLayout *pl = (ParagraphLayout *) paragraph;
136
137 if (pl == NULL) {
138 return NULL;
139 }
140
141 return (pl_line *) pl->nextLine(width);
142}
143
144U_CAPI void U_EXPORT2
145pl_closeLine(pl_line *line)
146{
147 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
148
149 delete ll;
150}
151
152U_CAPI le_int32 U_EXPORT2
153pl_countLineRuns(const pl_line *line)
154{
155 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
156
157 if (ll == NULL) {
158 return 0;
159 }
160
161 return ll->countRuns();
162}
163
164U_CAPI le_int32 U_EXPORT2
165pl_getLineAscent(const pl_line *line)
166{
167 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
168
169 if (ll == NULL) {
170 return 0;
171 }
172
173 return ll->getAscent();
174}
175
176U_CAPI le_int32 U_EXPORT2
177pl_getLineDescent(const pl_line *line)
178{
179 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
180
181 if (ll == NULL) {
182 return 0;
183 }
184
185 return ll->getDescent();
186}
187
188U_CAPI le_int32 U_EXPORT2
189pl_getLineLeading(const pl_line *line)
190{
191 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
192
193 if (ll == NULL) {
194 return 0;
195 }
196
197 return ll->getLeading();
198}
199
200U_CAPI le_int32 U_EXPORT2
201pl_getLineWidth(const pl_line *line)
202{
203 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
204
205 if (ll == NULL) {
206 return 0;
207 }
208
209 return ll->getWidth();
210}
211
212U_CAPI const pl_visualRun * U_EXPORT2
213pl_getLineVisualRun(const pl_line *line, le_int32 runIndex)
214{
215 ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
216
217 if (ll == NULL) {
218 return 0;
219 }
220
221 return (pl_visualRun *) ll->getVisualRun(runIndex);
222}
223
224U_CAPI const le_font * U_EXPORT2
225pl_getVisualRunFont(const pl_visualRun *run)
226{
227 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
228
229 if (vr == NULL) {
230 return NULL;
231 }
232
233 return (const le_font *) vr->getFont();
234}
235
236U_CAPI UBiDiDirection U_EXPORT2
237pl_getVisualRunDirection(const pl_visualRun *run)
238{
239 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
240
241 if (vr == NULL) {
242 return UBIDI_LTR;
243 }
244
245 return vr->getDirection();
246}
247
248U_CAPI le_int32 U_EXPORT2
249pl_getVisualRunGlyphCount(const pl_visualRun *run)
250{
251 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
252
253 if (vr == NULL) {
254 return -1;
255 }
256
257 return vr->getGlyphCount();
258}
259
260U_CAPI const LEGlyphID * U_EXPORT2
261pl_getVisualRunGlyphs(const pl_visualRun *run)
262{
263 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
264
265 if (vr == NULL) {
266 return NULL;
267 }
268
269 return vr->getGlyphs();
270}
271
272U_CAPI const float * U_EXPORT2
273pl_getVisualRunPositions(const pl_visualRun *run)
274{
275 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
276
277 if (vr == NULL) {
278 return NULL;
279 }
280
281 return vr->getPositions();
282}
283
284U_CAPI const le_int32 * U_EXPORT2
285pl_getVisualRunGlyphToCharMap(const pl_visualRun *run)
286{
287 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
288
289 if (vr == NULL) {
290 return NULL;
291 }
292
293 return vr->getGlyphToCharMap();
294}
295
296U_CAPI le_int32 U_EXPORT2
297pl_getVisualRunAscent(const pl_visualRun *run)
298{
299 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
300
301 if (vr == NULL) {
302 return 0;
303 }
304
305 return vr->getAscent();
306}
307
308U_CAPI le_int32 U_EXPORT2
309pl_getVisualRunDescent(const pl_visualRun *run)
310{
311 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
312
313 if (vr == NULL) {
314 return 0;
315 }
316
317 return vr->getDescent();
318}
319
320U_CAPI le_int32 U_EXPORT2
321pl_getVisualRunLeading(const pl_visualRun *run)
322{
323 ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
324
325 if (vr == NULL) {
326 return 0;
327 }
328
329 return vr->getLeading();
330}
331
332#endif