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