summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qunicodetools.cpp
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2012-05-29 05:15:53 +0300
committerQt by Nokia <qt-info@nokia.com>2012-05-30 01:54:45 +0200
commit32c39330ef3b7a7adc00ab955549ab3a4742352c (patch)
tree6361b872d9c4f8dfa5eef9f4484374c7734392c6 /src/corelib/tools/qunicodetools.cpp
parentc16455dbcf7aae140524b391c99b97a7b10b41dc (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.cpp32
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