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 331