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#ifndef __PLAYOUT_H 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __PLAYOUT_H 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * ParagraphLayout doesn't make much sense without 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * BreakIterator... 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ubidi.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if ! UCONFIG_NO_BREAK_ITERATION 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "layout/LETypes.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "plruns.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \file 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \brief C API for paragraph layout. 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * This is a technology preview. The API may 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * change significantly. 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The opaque type for a paragraph layout. 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef void pl_paragraph; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The opaque type for a line in a paragraph layout. 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef void pl_line; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The opaque type for a visual run in a line. 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef void pl_visualRun; 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Construct a <code>ParagraphLayout</code> object for a styled paragraph. The paragraph is specified 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * as runs of text all in the same font. An <code>LEFontInstance</code> object and a limit offset 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * are specified for each font run. The limit offset is the offset of the character immediately 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * after the font run. 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Clients can optionally specify directional runs and / or script runs. If these aren't specified 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * they will be computed. 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If any errors are encountered during construction, <code>status</code> will be set, and the object 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * will be set to be empty. 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param chars is an array of the characters in the paragraph 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param count is the number of characters in the paragraph. 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param fontRuns a pointer to a <code>pl_fontRuns</code> object representing the font runs. 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param levelRuns is a pointer to a <code>pl_valueRuns</code> object representing the directional levels. 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If this pointer in <code>NULL</code> the levels will be determined by running the Unicde 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Bidi algorithm. 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param scriptRuns is a pointer to a <code>pl_valueRuns</code> object representing script runs. 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If this pointer in <code>NULL</code> the script runs will be determined using the 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Unicode code points. 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param localeRuns is a pointer to a <code>pl_localeRuns</code> object representing locale runs. 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The <code>Locale</code> objects are used to determind the language of the text. If this 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * pointer is <code>NULL</code> the default locale will be used for all of the text. 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object. 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param vertical is <code>TRUE</code> if the paragraph should be set vertically. 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param status will be set to any error code encountered during construction. 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return a pointer to the newly created <code>pl_paragraph</code> object. The object 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * will remain valid until <code>pl_close</code> is called. 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see ubidi.h 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see longine.h 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see plruns.h 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL pl_paragraph * U_EXPORT2 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_create(const LEUnicode chars[], 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 count, 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const pl_fontRuns *fontRuns, 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const pl_valueRuns *levelRuns, 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const pl_valueRuns *scriptRuns, 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const pl_localeRuns *localeRuns, 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBiDiLevel paragraphLevel, 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_bool vertical, 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEErrorCode *status); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Close the given paragraph layout object. 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> object to be 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * closed. Once this routine returns the object 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * can no longer be referenced 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL void U_EXPORT2 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_close(pl_paragraph *paragraph); 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Examine the given text and determine if it contains characters in any 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * script which requires complex processing to be rendered correctly. 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param chars is an array of the characters in the paragraph 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param count is the number of characters in the paragraph. 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return <code>TRUE</code> if any of the text requires complex processing. 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_bool U_EXPORT2 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_isComplex(const LEUnicode chars[], 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 count); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return the resolved paragraph level. This is useful for those cases 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * where the bidi analysis has determined the level based on the first 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * strong character in the paragraph. 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the resolved paragraph level. 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL UBiDiLevel U_EXPORT2 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getParagraphLevel(pl_paragraph *paragraph); 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return the directionality of the text in the paragraph. 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return <code>UBIDI_LTR</code> if the text is all left to right, 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <code>UBIDI_RTL</code> if the text is all right to left, 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * or <code>UBIDI_MIXED</code> if the text has mixed direction. 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL UBiDiDirection U_EXPORT2 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getTextDirection(pl_paragraph *paragraph); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the max ascent value for all the fonts 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the paragraph. 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return the max ascent value for all the fonts 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the paragraph. 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the ascent value. 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getAscent(const pl_paragraph *paragraph); 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return the max descent value for all the fonts 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the paragraph. 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the decent value. 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getDescent(const pl_paragraph *paragraph); 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return the max leading value for all the fonts 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the paragraph. 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the leading value. 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLeading(const pl_paragraph *paragraph); 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Reset line breaking to start from the beginning of the paragraph. 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL void U_EXPORT2 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_reflow(pl_paragraph *paragraph); 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Return a <code>pl_line</code> object which represents next line 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the paragraph. The width of the line is specified each time so that it can 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * be varied to support arbitrary paragraph shapes. 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param paragraph the <code>pl_paragraph</code> 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param width is the width of the line. If <code>width</code> is less than or equal 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * to zero, a <code>ParagraphLayout::Line</code> object representing the 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * rest of the paragraph will be returned. 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return a <code>ParagraphLayout::Line</code> object which represents the line. The caller 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is responsible for deleting the object. Returns <code>NULL</code> if there are no 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * more lines in the paragraph. 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see pl_line 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL pl_line * U_EXPORT2 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_nextLine(pl_paragraph *paragraph, float width); 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Close the given line object. Line objects are created 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * by <code>pl_nextLine</code> but it is the client's responsibility 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * to close them by calling this routine. 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object to close. 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL void U_EXPORT2 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_closeLine(pl_line *line); 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Count the number of visual runs in the line. 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the number of visual runs. 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_countLineRuns(const pl_line *line); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the ascent of the line. This is the maximum ascent 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of all the fonts on the line. 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the ascent of the line. 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLineAscent(const pl_line *line); 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the descent of the line. This is the maximum descent 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of all the fonts on the line. 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the descent of the line. 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLineDescent(const pl_line *line); 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the leading of the line. This is the maximum leading 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of all the fonts on the line. 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the leading of the line. 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLineLeading(const pl_line *line); 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the width of the line. This is a convenience method 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * which returns the last X position of the last visual run 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the line. 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the width of the line. 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLineWidth(const pl_line *line); 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get a <code>ParagraphLayout::VisualRun</code> object for a given 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * visual run in the line. 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param line the <code>pl_line</code> object. 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param runIndex is the index of the run, in visual order. 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the <code>pl_visualRun</code> object representing the 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * visual run. This object is owned by the <code>pl_line</code> object which 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * created it, and will remain valid for as long as the <code>pl_line</code> 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * object is valid. 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see pl_visualRun 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL const pl_visualRun * U_EXPORT2 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getLineVisualRun(const pl_line *line, le_int32 runIndex); 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the <code>le_font</code> object which 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * represents the font of the visual run. This will always 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * be a non-composite font. 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the <code>le_font</code> object which represents the 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * font of the visual run. 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @see le_font 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL const le_font * U_EXPORT2 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunFont(const pl_visualRun *run); 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the direction of the visual run. 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the direction of the run. This will be <code>UBIDI_LTR</code> if the 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * run is left-to-right and <code>UBIDI_RTL</code> if the line is right-to-left. 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL UBiDiDirection U_EXPORT2 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunDirection(const pl_visualRun *run); 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the number of glyphs in the visual run. 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the number of glyphs. 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunGlyphCount(const pl_visualRun *run); 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the glyphs in the visual run. Glyphs with the values <code>0xFFFE</code> and 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <code>0xFFFF</code> should be ignored. 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the address of the array of glyphs for this visual run. The storage 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is owned by the <code>pl_visualRun</code> object and must not be deleted. 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * It will remain valid as long as the <code>pl_visualRun</code> object is valid. 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL const LEGlyphID * U_EXPORT2 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunGlyphs(const pl_visualRun *run); 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the (x, y) positions of the glyphs in the visual run. To simplify storage 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * management, the x and y positions are stored in a single array with the x positions 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * at even offsets in the array and the corresponding y position in the following odd offset. 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * There is an extra (x, y) pair at the end of the array which represents the advance of 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * the final glyph in the run. 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the address of the array of glyph positions for this visual run. The storage 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is owned by the <code>pl_visualRun</code> object and must not be deleted. 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * It will remain valid as long as the <code>pl_visualRun</code> object is valid. 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL const float * U_EXPORT2 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunPositions(const pl_visualRun *run); 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get the glyph-to-character map for this visual run. This maps the indices into 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * the glyph array to indices into the character array used to create the paragraph. 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the address of the character-to-glyph map for this visual run. The storage 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is owned by the <code>pl_visualRun</code> object and must not be deleted. 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * It will remain valid as long as the <code>pl_visualRun</code> object is valid. 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL const le_int32 * U_EXPORT2 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunGlyphToCharMap(const pl_visualRun *run); 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A convenience method which returns the ascent value for the font 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * associated with this run. 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the ascent value of this run's font. 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunAscent(const pl_visualRun *run); 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A convenience method which returns the descent value for the font 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * associated with this run. 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the descent value of this run's font. 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunDescent(const pl_visualRun *run); 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A convenience method which returns the leading value for the font 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * associated with this run. 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param run the <code>pl_visualRun</code> object. 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the leading value of this run's font. 457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @internal 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_INTERNAL le_int32 U_EXPORT2 461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupl_getVisualRunLeading(const pl_visualRun *run); 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 465