diff options
Diffstat (limited to 'libs/minikin/FontCollection.cpp')
-rw-r--r-- | libs/minikin/FontCollection.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libs/minikin/FontCollection.cpp b/libs/minikin/FontCollection.cpp index 009584e..ca5b1d1 100644 --- a/libs/minikin/FontCollection.cpp +++ b/libs/minikin/FontCollection.cpp @@ -19,6 +19,9 @@ #define LOG_TAG "Minikin" #include <cutils/log.h> +#include "unicode/unistr.h" +#include "unicode/unorm2.h" + #include "MinikinInternal.h" #include <minikin/CmapCoverage.h> #include <minikin/FontCollection.h> @@ -143,7 +146,18 @@ const FontCollection::FontInstance* FontCollection::getInstanceForChar(uint32_t } } } - if (bestInstance == NULL) { + if (bestInstance == NULL && !mInstanceVec.empty()) { + UErrorCode errorCode = U_ZERO_ERROR; + const UNormalizer2* normalizer = unorm2_getNFDInstance(&errorCode); + if (U_SUCCESS(errorCode)) { + UChar decomposed[4]; + int len = unorm2_getRawDecomposition(normalizer, ch, decomposed, 4, &errorCode); + if (U_SUCCESS(errorCode) && len > 0) { + int off = 0; + U16_NEXT_UNSAFE(decomposed, off, ch); + return getInstanceForChar(ch, lang, variant); + } + } bestInstance = &mInstances[0]; } return bestInstance; |