diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2012-05-29 05:15:53 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-30 01:54:45 +0200 |
commit | 32c39330ef3b7a7adc00ab955549ab3a4742352c (patch) | |
tree | 6361b872d9c4f8dfa5eef9f4484374c7734392c6 /src/corelib/tools/qunicodetools.cpp | |
parent | c16455dbcf7aae140524b391c99b97a7b10b41dc (diff) |
Introduce QUnicodeTools
Add QUnicodeTools namespace and rename qGetCharAttributes to initCharAttributes;
Make it possible to disable tailoring globally by overriding
qt_initcharattributes_default_algorithm_only value
(useful for i.e. running the specification conformance tests);
This is mostly a preparation step for the upcoming patches.
Change-Id: I783879fd17b63b52d7983e25dad5b820f0515e7f
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/tools/qunicodetools.cpp')
-rw-r--r-- | src/corelib/tools/qunicodetools.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/corelib/tools/qunicodetools.cpp b/src/corelib/tools/qunicodetools.cpp index 814eba771a..0b784010a9 100644 --- a/src/corelib/tools/qunicodetools.cpp +++ b/src/corelib/tools/qunicodetools.cpp @@ -45,6 +45,10 @@ QT_BEGIN_NAMESPACE +Q_AUTOTEST_EXPORT int qt_initcharattributes_default_algorithm_only = 0; + +namespace QUnicodeTools { + // ----------------------------------------------------------------------------------------------------- // // The line breaking algorithm. See http://www.unicode.org/reports/tr14/tr14-19.html @@ -55,8 +59,6 @@ QT_BEGIN_NAMESPACE // // ----------------------------------------------------------------------------------------------------- -namespace { - /* The Unicode algorithm does in our opinion allow line breaks at some places they shouldn't be allowed. The following changes were thus made in comparison to the Unicode reference: @@ -374,25 +376,33 @@ static void calcSentenceBreaks(const ushort *string, quint32 len, HB_CharAttribu } } -} // namespace - -Q_CORE_EXPORT void qGetCharAttributes(const ushort *string, int length, +Q_CORE_EXPORT void initCharAttributes(const ushort *string, int length, const HB_ScriptItem *items, int numItems, - HB_CharAttributes *attributes, QCharAttributeOptions options) + HB_CharAttributes *attributes, CharAttributeOptions options) { if (length <= 0) return; - memset(attributes, 0, length * sizeof(HB_CharAttributes)); + if (!(options & DontClearAttributes)) { + ::memset(attributes, 0, length * sizeof(HB_CharAttributes)); + if (options & (WordBreaks | SentenceBreaks)) + options |= GraphemeBreaks; + } - calcGraphemeAndLineBreaks(string, length, attributes); - if (options & GetWordBreaks) + if (options & (GraphemeBreaks | LineBreaks | WhiteSpaces)) + calcGraphemeAndLineBreaks(string, length, attributes); + if (options & WordBreaks) calcWordBreaks(string, length, attributes); - if (options & GetSentenceBreaks) + if (options & SentenceBreaks) calcSentenceBreaks(string, length, attributes); - HB_GetTailoredCharAttributes(string, length, items, numItems, attributes); + if (!items || numItems <= 0) + return; + if (!qt_initcharattributes_default_algorithm_only) + HB_GetTailoredCharAttributes(string, length, items, numItems, attributes); } +} // namespace QUnicodeTools + QT_END_NAMESPACE |