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