X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b75a7d8f3b4adbae880cab104ce2c6a50eee4db2..f59164e3d128c7675a4d3934206346a3384e53a5:/icuSources/layoutex/layout/ParagraphLayout.h
diff --git a/icuSources/layoutex/layout/ParagraphLayout.h b/icuSources/layoutex/layout/ParagraphLayout.h
index a2c8e172..4d031925 100644
--- a/icuSources/layoutex/layout/ParagraphLayout.h
+++ b/icuSources/layoutex/layout/ParagraphLayout.h
@@ -1,6 +1,6 @@
/*
**********************************************************************
- * Copyright (C) 2002-2003, International Business Machines
+ * Copyright (C) 2002-2014, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
@@ -9,6 +9,11 @@
#define __PARAGRAPHLAYOUT_H
+/**
+ * \file
+ * \brief C++ API: Paragraph Layout
+ */
+
/*
* ParagraphLayout doesn't make much sense without
* BreakIterator...
@@ -35,6 +40,13 @@ U_NAMESPACE_BEGIN
*
* Clients can use this to break a paragraph into lines, and to display the glyphs in each line.
*
+ * Note that {@link icu::LayoutEngine} is deprecated, but this class is not.
+ * You may use this class with the HarfBuzz icu-le-hb wrapper,
+ * see http://www.freedesktop.org/wiki/Software/HarfBuzz/
+ *
+ * See http://userguide.icu-project.org/layoutengine for special build instructions.
+ *
+ * @see icu::LayoutEngine
*/
class U_LAYOUTEX_API ParagraphLayout : public UObject
{
@@ -50,7 +62,7 @@ public:
* @see ParagraphLayout
* @see ParagraphLayout::VisualRun
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
class U_LAYOUTEX_API Line : public UObject
{
@@ -61,7 +73,7 @@ public:
* clients responsibility to destroy the objects, so the destructor
* is public.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
~Line();
@@ -70,9 +82,9 @@ public:
*
* @return the number of visual runs.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- le_int32 countRuns() const;
+ inline le_int32 countRuns() const;
/**
* Get the ascent of the line. This is the maximum ascent
@@ -80,7 +92,7 @@ public:
*
* @return the ascent of the line.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
le_int32 getAscent() const;
@@ -90,7 +102,7 @@ public:
*
* @return the descent of the line.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
le_int32 getDescent() const;
@@ -100,9 +112,20 @@ public:
*
* @return the leading of the line.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
le_int32 getLeading() const;
+
+ /**
+ * Get the width of the line. This is a convenience method
+ * which returns the last X position of the last visual run
+ * in the line.
+ *
+ * @return the width of the line.
+ *
+ * @stable ICU 2.8
+ */
+ le_int32 getWidth() const;
/**
* Get a ParagraphLayout::VisualRun
object for a given
@@ -117,23 +140,23 @@ public:
*
* @see ParagraphLayout::VisualRun
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
const VisualRun *getVisualRun(le_int32 runIndex) const;
/**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ * ICU "poor man's RTTI", returns a UClassID for this class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
/**
- * ICU "poor man's RTTI", returns a UClassID for this class.
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+ virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
private:
@@ -154,9 +177,9 @@ public:
VisualRun **fRuns;
- Line();
- Line(const Line &other);
- Line &operator=(const Line & /*other*/) { return *this; };
+ inline Line();
+ inline Line(const Line &other);
+ inline Line &operator=(const Line & /*other*/) { return *this; };
void computeMetrics();
@@ -172,12 +195,12 @@ public:
* a table which maps indices into the glyph array to indices into
* the original character array which was used to create the paragraph.
*
- * These objects are only created by ParagraphLayout::Line objects,
+ * These objects are only created by ParagraphLayout::Line
objects,
* so their constructors and destructors are private.
*
* @see ParagraphLayout::Line
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
class U_LAYOUTEX_API VisualRun : public UObject
{
@@ -192,9 +215,9 @@ public:
*
* @see LEFontInstance
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- const LEFontInstance *getFont() const;
+ inline const LEFontInstance *getFont() const;
/**
* Get the direction of the visual run.
@@ -202,18 +225,18 @@ public:
* @return the direction of the run. This will be UBIDI_LTR if the
* run is left-to-right and UBIDI_RTL if the line is right-to-left.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- UBiDiDirection getDirection() const;
+ inline UBiDiDirection getDirection() const;
/**
* Get the number of glyphs in the visual run.
*
* @return the number of glyphs.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- le_int32 getGlyphCount() const;
+ inline le_int32 getGlyphCount() const;
/**
* Get the glyphs in the visual run. Glyphs with the values 0xFFFE
and
@@ -223,9 +246,9 @@ public:
* is owned by the VisualRun
object and must not be deleted.
* It will remain valid as long as the VisualRun
object is valid.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- const LEGlyphID *getGlyphs() const;
+ inline const LEGlyphID *getGlyphs() const;
/**
* Get the (x, y) positions of the glyphs in the visual run. To simplify storage
@@ -238,9 +261,9 @@ public:
* is owned by the VisualRun
object and must not be deleted.
* It will remain valid as long as the VisualRun
object is valid.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- const float *getPositions() const;
+ inline const float *getPositions() const;
/**
* Get the glyph-to-character map for this visual run. This maps the indices into
@@ -250,9 +273,9 @@ public:
* is owned by the VisualRun
object and must not be deleted.
* It will remain valid as long as the VisualRun
object is valid.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- const le_int32 *getGlyphToCharMap() const;
+ inline const le_int32 *getGlyphToCharMap() const;
/**
* A convenience method which returns the ascent value for the font
@@ -260,9 +283,9 @@ public:
*
* @return the ascent value of this run's font.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- le_int32 getAscent() const;
+ inline le_int32 getAscent() const;
/**
* A convenience method which returns the descent value for the font
@@ -270,9 +293,9 @@ public:
*
* @return the descent value of this run's font.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- le_int32 getDescent() const;
+ inline le_int32 getDescent() const;
/**
* A convenience method which returns the leading value for the font
@@ -280,23 +303,23 @@ public:
*
* @return the leading value of this run's font.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- le_int32 getLeading() const;
+ inline le_int32 getLeading() const;
/**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ * ICU "poor man's RTTI", returns a UClassID for this class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
/**
- * ICU "poor man's RTTI", returns a UClassID for this class.
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+ virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
private:
@@ -317,11 +340,11 @@ public:
friend class Line;
- VisualRun();
- VisualRun(const VisualRun &other);
- VisualRun &operator=(const VisualRun &other) { return *this; };
+ inline VisualRun();
+ inline VisualRun(const VisualRun &other);
+ inline VisualRun &operator=(const VisualRun &/*other*/) { return *this; };
- VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount,
+ inline VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount,
const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]);
~VisualRun();
@@ -336,6 +359,9 @@ public:
* Clients can optionally specify directional runs and / or script runs. If these aren't specified
* they will be computed.
*
+ * If any errors are encountered during construction, status
will be set, and the object
+ * will be set to be empty.
+ *
* @param chars is an array of the characters in the paragraph
*
* @param count is the number of characters in the paragraph.
@@ -356,27 +382,30 @@ public:
*
* @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object.
*
- * @param vertical is true
if the paragraph should be set vertically.
+ * @param vertical is TRUE
if the paragraph should be set vertically.
+ *
+ * @param status will be set to any error code encountered during construction.
*
* @see ubidi.h
* @see LEFontInstance.h
* @see LayoutEngine.h
* @see RunArrays.h
*
- * @draft ICU 2.6
+ * @stable ICU 2.8
*/
ParagraphLayout(const LEUnicode chars[], le_int32 count,
const FontRuns *fontRuns,
const ValueRuns *levelRuns,
const ValueRuns *scriptRuns,
const LocaleRuns *localeRuns,
- UBiDiLevel paragraphLevel, le_bool vertical);
+ UBiDiLevel paragraphLevel, le_bool vertical,
+ LEErrorCode &status);
/**
* The destructor. Virtual so that it works correctly with
* sublcasses.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
~ParagraphLayout();
@@ -395,9 +424,9 @@ public:
*
* @param fontRuns is a pointer to a FontRuns
object representing the font runs.
*
- * @return true
if the paragraph contains complex text.
+ * @return TRUE
if the paragraph contains complex text.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
static le_bool isComplex(const LEUnicode chars[], le_int32 count, const FontRuns *fontRuns);
#else
@@ -409,9 +438,9 @@ public:
*
* @param count is the number of characters in the paragraph.
*
- * @return true
if any of the text requires complex processing.
+ * @return TRUE
if any of the text requires complex processing.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
static le_bool isComplex(const LEUnicode chars[], le_int32 count);
@@ -424,9 +453,9 @@ public:
*
* @return the resolved paragraph level.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- UBiDiLevel getParagraphLevel();
+ inline UBiDiLevel getParagraphLevel();
/**
* Return the directionality of the text in the paragraph.
@@ -435,9 +464,9 @@ public:
* UBIDI_RTL
if the text is all right to left,
* or UBIDI_MIXED
if the text has mixed direction.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- UBiDiDirection getTextDirection();
+ inline UBiDiDirection getTextDirection();
/**
* Return the max ascent value for all the fonts
@@ -445,7 +474,7 @@ public:
*
* @return the ascent value.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
virtual le_int32 getAscent() const;
@@ -455,7 +484,7 @@ public:
*
* @return the decent value.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
virtual le_int32 getDescent() const;
@@ -465,7 +494,7 @@ public:
*
* @return the leading value.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
virtual le_int32 getLeading() const;
@@ -473,9 +502,22 @@ public:
* Reset line breaking to start from the beginning of the paragraph.
*
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
+ */
+ inline void reflow();
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ *
+ * Convenience method for determining if paragraph layout processing is complete ( i.e. there
+ * are no more lines left to process. )
+ *
+ * @return true if there are no more lines to be processed
+ *
+ * @internal
*/
- void reflow();
+ inline le_bool isDone() const;
+#endif /* U_HIDE_INTERNAL_API */
/**
* Return a ParagraphLayout::Line
object which represents next line
@@ -488,27 +530,27 @@ public:
*
* @return a ParagraphLayout::Line
object which represents the line. The caller
* is responsible for deleting the object. Returns NULL
if there are no
- * more lines in the paragraph.
+ * more lines in the paragraph.
*
* @see ParagraphLayout::Line
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
Line *nextLine(float width);
/**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ * ICU "poor man's RTTI", returns a UClassID for this class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
/**
- * ICU "poor man's RTTI", returns a UClassID for this class.
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
*
- * @draft ICU 2.6
+ * @stable ICU 3.2
*/
- static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+ virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
private:
@@ -536,7 +578,7 @@ private:
ParagraphLayout() {};
ParagraphLayout(const ParagraphLayout & /*other*/) : UObject( ){};
- ParagraphLayout &operator=(const ParagraphLayout & /*other*/) { return *this; };
+ inline ParagraphLayout &operator=(const ParagraphLayout & /*other*/) { return *this; };
void computeLevels(UBiDiLevel paragraphLevel);
@@ -547,7 +589,7 @@ private:
void computeLocales();
- void computeSubFonts(const FontRuns *fontRuns);
+ void computeSubFonts(const FontRuns *fontRuns, LEErrorCode &status);
void computeMetrics();
@@ -580,7 +622,8 @@ private:
le_int32 fLeading;
le_int32 *fGlyphToCharMap;
- le_int32 *fCharToGlyphMap;
+ le_int32 *fCharToMinGlyphMap;
+ le_int32 *fCharToMaxGlyphMap;
float *fGlyphWidths;
le_int32 fGlyphCount;
@@ -685,7 +728,7 @@ inline ParagraphLayout::VisualRun::VisualRun()
// nothing
}
-inline ParagraphLayout::VisualRun::VisualRun(const VisualRun &other)
+inline ParagraphLayout::VisualRun::VisualRun(const VisualRun &/*other*/)
: UObject(), fFont(NULL), fDirection(UBIDI_LTR), fGlyphCount(0), fGlyphs(NULL), fPositions(NULL), fGlyphToCharMap(NULL)
{
// nothing
@@ -699,13 +742,6 @@ inline ParagraphLayout::VisualRun::VisualRun(const LEFontInstance *font, UBiDiDi
// nothing else needs to be done!
}
-inline ParagraphLayout::VisualRun::~VisualRun()
-{
- LE_DELETE_ARRAY(fGlyphToCharMap);
- LE_DELETE_ARRAY(fPositions);
- LE_DELETE_ARRAY(fGlyphs);
-}
-
U_NAMESPACE_END
#endif
#endif