1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************** 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * Copyright (C) 2002-2011, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************** 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __PARAGRAPHLAYOUT_H 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __PARAGRAPHLAYOUT_H 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C++ API: Paragraph Layout 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ParagraphLayout doesn't make much sense without 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * BreakIterator... 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uscript.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if ! UCONFIG_NO_BREAK_ITERATION 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "layout/LETypes.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "layout/LEFontInstance.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "layout/LayoutEngine.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubidi.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/brkiter.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "layout/RunArrays.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ParagraphLayout. 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The <code>ParagraphLayout</code> object will analyze the text into runs of text in the 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * same font, script and direction, and will create a <code>LayoutEngine</code> object for each run. 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The <code>LayoutEngine</code> will transform the characters into glyph codes in visual order. 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Clients can use this to break a paragraph into lines, and to display the glyphs in each line. 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_LAYOUTEX_API ParagraphLayout : public UObject 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru class VisualRun; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This class represents a single line of text in a <code>ParagraphLayout</code>. They 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * can only be created by calling <code>ParagraphLayout::nextLine()</code>. Each line 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * consists of multiple visual runs, represented by <code>ParagraphLayout::VisualRun</code> 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * objects. 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ParagraphLayout 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ParagraphLayout::VisualRun 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru class U_LAYOUTEX_API Line : public UObject 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The constructor is private since these objects can only be 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created by <code>ParagraphLayout</code>. However, it is the 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * clients responsibility to destroy the objects, so the destructor 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is public. 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~Line(); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Count the number of visual runs in the line. 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the number of visual runs. 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline le_int32 countRuns() const; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the ascent of the line. This is the maximum ascent 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of all the fonts on the line. 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the ascent of the line. 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getAscent() const; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the descent of the line. This is the maximum descent 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of all the fonts on the line. 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the descent of the line. 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getDescent() const; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the leading of the line. This is the maximum leading 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of all the fonts on the line. 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the leading of the line. 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getLeading() const; 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the width of the line. This is a convenience method 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which returns the last X position of the last visual run 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the line. 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the width of the line. 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getWidth() const; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get a <code>ParagraphLayout::VisualRun</code> object for a given 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * visual run in the line. 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param runIndex is the index of the run, in visual order. 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the <code>ParagraphLayout::VisualRun</code> object representing the 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * visual run. This object is owned by the <code>Line</code> object which 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * created it, and will remain valid for as long as the <code>Line</code> 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * object is valid. 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ParagraphLayout::VisualRun 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const VisualRun *getVisualRun(le_int32 runIndex) const; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private: 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The address of this static class variable serves as this class's ID 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for ICU "poor man's RTTI". 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char fgClassID; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class ParagraphLayout; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fAscent; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fDescent; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fLeading; 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fRunCount; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fRunCapacity; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VisualRun **fRuns; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline Line(); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline Line(const Line &other); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline Line &operator=(const Line & /*other*/) { return *this; }; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeMetrics(); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void append(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This object represents a single visual run in a line of text in 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a paragraph. A visual run is text which is in the same font, 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * script, and direction. The text is represented by an array of 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>LEGlyphIDs</code>, an array of (x, y) glyph positions and 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a table which maps indices into the glyph array to indices into 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the original character array which was used to create the paragraph. 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * These objects are only created by <code>ParagraphLayout::Line</code> objects, 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * so their constructors and destructors are private. 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ParagraphLayout::Line 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru class U_LAYOUTEX_API VisualRun : public UObject 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the <code>LEFontInstance</code> object which 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * represents the font of the visual run. This will always 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be a non-composite font. 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the <code>LEFontInstance</code> object which represents the 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * font of the visual run. 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see LEFontInstance 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline const LEFontInstance *getFont() const; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the direction of the visual run. 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the direction of the run. This will be UBIDI_LTR if the 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * run is left-to-right and UBIDI_RTL if the line is right-to-left. 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBiDiDirection getDirection() const; 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the number of glyphs in the visual run. 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the number of glyphs. 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline le_int32 getGlyphCount() const; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the glyphs in the visual run. Glyphs with the values <code>0xFFFE</code> and 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>0xFFFF</code> should be ignored. 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the address of the array of glyphs for this visual run. The storage 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is owned by the <code>VisualRun</code> object and must not be deleted. 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It will remain valid as long as the <code>VisualRun</code> object is valid. 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline const LEGlyphID *getGlyphs() const; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the (x, y) positions of the glyphs in the visual run. To simplify storage 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * management, the x and y positions are stored in a single array with the x positions 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * at even offsets in the array and the corresponding y position in the following odd offset. 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * There is an extra (x, y) pair at the end of the array which represents the advance of 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the final glyph in the run. 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the address of the array of glyph positions for this visual run. The storage 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is owned by the <code>VisualRun</code> object and must not be deleted. 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It will remain valid as long as the <code>VisualRun</code> object is valid. 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline const float *getPositions() const; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the glyph-to-character map for this visual run. This maps the indices into 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the glyph array to indices into the character array used to create the paragraph. 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the address of the character-to-glyph map for this visual run. The storage 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is owned by the <code>VisualRun</code> object and must not be deleted. 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It will remain valid as long as the <code>VisualRun</code> object is valid. 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline const le_int32 *getGlyphToCharMap() const; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A convenience method which returns the ascent value for the font 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * associated with this run. 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the ascent value of this run's font. 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline le_int32 getAscent() const; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A convenience method which returns the descent value for the font 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * associated with this run. 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the descent value of this run's font. 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline le_int32 getDescent() const; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A convenience method which returns the leading value for the font 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * associated with this run. 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the leading value of this run's font. 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline le_int32 getLeading() const; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private: 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The address of this static class variable serves as this class's ID 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for ICU "poor man's RTTI". 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char fgClassID; 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEFontInstance *fFont; 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UBiDiDirection fDirection; 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const le_int32 fGlyphCount; 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEGlyphID *fGlyphs; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const float *fPositions; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const le_int32 *fGlyphToCharMap; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class Line; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline VisualRun(); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline VisualRun(const VisualRun &other); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline VisualRun &operator=(const VisualRun &/*other*/) { return *this; }; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~VisualRun(); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a <code>ParagraphLayout</code> object for a styled paragraph. The paragraph is specified 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as runs of text all in the same font. An <code>LEFontInstance</code> object and a limit offset 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are specified for each font run. The limit offset is the offset of the character immediately 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * after the font run. 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Clients can optionally specify directional runs and / or script runs. If these aren't specified 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * they will be computed. 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If any errors are encountered during construction, <code>status</code> will be set, and the object 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will be set to be empty. 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param chars is an array of the characters in the paragraph 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count is the number of characters in the paragraph. 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fontRuns a pointer to a <code>FontRuns</code> object representing the font runs. 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param levelRuns is a pointer to a <code>ValueRuns</code> object representing the directional levels. 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this pointer in <code>NULL</code> the levels will be determined by running the Unicde 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Bidi algorithm. 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param scriptRuns is a pointer to a <code>ValueRuns</code> object representing script runs. 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If this pointer in <code>NULL</code> the script runs will be determined using the 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Unicode code points. 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param localeRuns is a pointer to a <code>LocaleRuns</code> object representing locale runs. 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The <code>Locale</code> objects are used to determind the language of the text. If this 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pointer is <code>NULL</code> the default locale will be used for all of the text. 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object. 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param vertical is <code>TRUE</code> if the paragraph should be set vertically. 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status will be set to any error code encountered during construction. 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ubidi.h 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see LEFontInstance.h 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see LayoutEngine.h 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see RunArrays.h 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParagraphLayout(const LEUnicode chars[], le_int32 count, 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const FontRuns *fontRuns, 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ValueRuns *levelRuns, 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ValueRuns *scriptRuns, 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LocaleRuns *localeRuns, 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBiDiLevel paragraphLevel, le_bool vertical, 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LEErrorCode &status); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The destructor. Virtual so that it works correctly with 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * sublcasses. 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~ParagraphLayout(); 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Note: the following is #if 0'd out because there's no good 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // way to implement it without either calling layoutEngineFactory() 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // or duplicating the logic there... 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examine the given styled paragraph and determine if it contains any text which 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * requires complex processing. (i.e. that cannot be correctly rendered by 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * just mapping the characters to glyphs and rendering them in order) 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param chars is an array of the characters in the paragraph 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count is the number of characters in the paragraph. 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fontRuns is a pointer to a <code>FontRuns</code> object representing the font runs. 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return <code>TRUE</code> if the paragraph contains complex text. 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static le_bool isComplex(const LEUnicode chars[], le_int32 count, const FontRuns *fontRuns); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examine the given text and determine if it contains characters in any 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * script which requires complex processing to be rendered correctly. 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param chars is an array of the characters in the paragraph 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count is the number of characters in the paragraph. 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return <code>TRUE</code> if any of the text requires complex processing. 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static le_bool isComplex(const LEUnicode chars[], le_int32 count); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the resolved paragraph level. This is useful for those cases 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * where the bidi analysis has determined the level based on the first 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * strong character in the paragraph. 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the resolved paragraph level. 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBiDiLevel getParagraphLevel(); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the directionality of the text in the paragraph. 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return <code>UBIDI_LTR</code> if the text is all left to right, 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>UBIDI_RTL</code> if the text is all right to left, 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * or <code>UBIDI_MIXED</code> if the text has mixed direction. 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline UBiDiDirection getTextDirection(); 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the max ascent value for all the fonts 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the paragraph. 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the ascent value. 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual le_int32 getAscent() const; 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the max descent value for all the fonts 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the paragraph. 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the decent value. 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual le_int32 getDescent() const; 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the max leading value for all the fonts 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the paragraph. 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the leading value. 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual le_int32 getLeading() const; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Reset line breaking to start from the beginning of the paragraph. 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline void reflow(); 50183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 50283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_HIDE_INTERNAL_API 50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 50450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Convenience method for determining if paragraph layout processing is complete ( i.e. there 50650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * are no more lines left to process. ) 50750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @return true if there are no more lines to be processed 50950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal 51150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho inline le_bool isDone() const; 51383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif /* U_HIDE_INTERNAL_API */ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a <code>ParagraphLayout::Line</code> object which represents next line 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the paragraph. The width of the line is specified each time so that it can 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be varied to support arbitrary paragraph shapes. 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param width is the width of the line. If <code>width</code> is less than or equal 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to zero, a <code>ParagraphLayout::Line</code> object representing the 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * rest of the paragraph will be returned. 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a <code>ParagraphLayout::Line</code> object which represents the line. The caller 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is responsible for deleting the object. Returns <code>NULL</code> if there are no 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * more lines in the paragraph. 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see ParagraphLayout::Line 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Line *nextLine(float width); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.2 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The address of this static class variable serves as this class's ID 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for ICU "poor man's RTTI". 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char fgClassID; 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct StyleRunInfo 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LayoutEngine *engine; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEFontInstance *font; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale *locale; 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LEGlyphID *glyphs; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float *positions; 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UScriptCode script; 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBiDiLevel level; 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 runBase; 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 runLimit; 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 glyphBase; 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 glyphCount; 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParagraphLayout() {}; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParagraphLayout(const ParagraphLayout & /*other*/) : UObject( ){}; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline ParagraphLayout &operator=(const ParagraphLayout & /*other*/) { return *this; }; 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeLevels(UBiDiLevel paragraphLevel); 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Line *computeVisualRuns(); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void appendRun(Line *line, le_int32 run, le_int32 firstChar, le_int32 lastChar); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeScripts(); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeLocales(); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeSubFonts(const FontRuns *fontRuns, LEErrorCode &status); 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void computeMetrics(); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getLanguageCode(const Locale *locale); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 getCharRun(le_int32 charIndex); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static le_bool isComplex(UScriptCode script); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 previousBreak(le_int32 charIndex); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEUnicode *fChars; 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fCharCount; 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const FontRuns *fFontRuns; 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ValueRuns *fLevelRuns; 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ValueRuns *fScriptRuns; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LocaleRuns *fLocaleRuns; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_bool fVertical; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_bool fClientLevels; 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_bool fClientScripts; 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_bool fClientLocales; 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBiDiLevel *fEmbeddingLevels; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fAscent; 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fDescent; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fLeading; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 *fGlyphToCharMap; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 *fCharToMinGlyphMap; 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 *fCharToMaxGlyphMap; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float *fGlyphWidths; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fGlyphCount; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBiDi *fParaBidi; 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBiDi *fLineBidi; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 *fStyleRunLimits; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 *fStyleIndices; 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StyleRunInfo *fStyleRunInfo; 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fStyleRunCount; 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *fBreakIterator; 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fLineStart; 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fLineEnd; 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fFirstVisualRun; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 fLastVisualRun; 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float fVisualRunLastX; 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float fVisualRunLastY; 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBiDiLevel ParagraphLayout::getParagraphLevel() 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ubidi_getParaLevel(fParaBidi); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBiDiDirection ParagraphLayout::getTextDirection() 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ubidi_getDirection(fParaBidi); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void ParagraphLayout::reflow() 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fLineEnd = 0; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline ParagraphLayout::Line::Line() 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fAscent(0), fDescent(0), fLeading(0), fRunCount(0), fRunCapacity(0), fRuns(NULL) 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // nothing else to do 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline ParagraphLayout::Line::Line(const Line & /*other*/) 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fAscent(0), fDescent(0), fLeading(0), fRunCount(0), fRunCapacity(0), fRuns(NULL) 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // nothing else to do 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline le_int32 ParagraphLayout::Line::countRuns() const 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fRunCount; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline const LEFontInstance *ParagraphLayout::VisualRun::getFont() const 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fFont; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBiDiDirection ParagraphLayout::VisualRun::getDirection() const 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fDirection; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline le_int32 ParagraphLayout::VisualRun::getGlyphCount() const 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fGlyphCount; 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline const LEGlyphID *ParagraphLayout::VisualRun::getGlyphs() const 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fGlyphs; 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline const float *ParagraphLayout::VisualRun::getPositions() const 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fPositions; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline const le_int32 *ParagraphLayout::VisualRun::getGlyphToCharMap() const 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fGlyphToCharMap; 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline le_int32 ParagraphLayout::VisualRun::getAscent() const 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fFont->getAscent(); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline le_int32 ParagraphLayout::VisualRun::getDescent() const 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fFont->getDescent(); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline le_int32 ParagraphLayout::VisualRun::getLeading() const 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fFont->getLeading(); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline ParagraphLayout::VisualRun::VisualRun() 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fFont(NULL), fDirection(UBIDI_LTR), fGlyphCount(0), fGlyphs(NULL), fPositions(NULL), fGlyphToCharMap(NULL) 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // nothing 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline ParagraphLayout::VisualRun::VisualRun(const VisualRun &/*other*/) 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : UObject(), fFont(NULL), fDirection(UBIDI_LTR), fGlyphCount(0), fGlyphs(NULL), fPositions(NULL), fGlyphToCharMap(NULL) 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // nothing 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline ParagraphLayout::VisualRun::VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]) 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : fFont(font), fDirection(direction), fGlyphCount(glyphCount), 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fGlyphs(glyphs), fPositions(positions), fGlyphToCharMap(glyphToCharMap) 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // nothing else needs to be done! 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 741