OSDN Git Service

fix script detection for surrogates in text engine
authorIvailo Monev <xakepa10@gmail.com>
Fri, 21 Jan 2022 22:06:47 +0000 (00:06 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Fri, 21 Jan 2022 22:06:47 +0000 (00:06 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/text/qtextengine.cpp

index 2b39013..1f10a46 100644 (file)
@@ -317,7 +317,12 @@ void QTextEngine::itemize() const
             analysis->flags = QScriptAnalysis::Tab;
             break;
         default:
-            QUnicodeTables::Script script = QUnicodeTables::script(*uc);
+            uint ucs4 = *uc;
+            if (QChar::isHighSurrogate(*uc) && (uc + 1) < e && QChar::isLowSurrogate(*(uc + 1))) {
+                ucs4 = QChar::surrogateToUcs4(*uc, *(uc + 1));
+                ++uc;
+            }
+            QUnicodeTables::Script script = QUnicodeTables::script(ucs4);
             analysis->script = script == QUnicodeTables::Inherited ? lastScript : script;
             analysis->flags = QScriptAnalysis::None;
             break;