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