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