|
 |
2135ec |
From b5bd2d1d8d09a44af354584ff187d9e935ffd973 Mon Sep 17 00:00:00 2001
|
|
 |
2135ec |
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
 |
2135ec |
Date: Tue, 4 Jun 2013 17:13:13 +0100
|
|
 |
2135ec |
Subject: [PATCH] Related: rhbz#968892 discard impossible languages for glyph
|
|
 |
2135ec |
fallback
|
|
 |
2135ec |
|
|
 |
2135ec |
Change-Id: I14f1bab09eb0be9c2c896a1dde45913b99aab6df
|
|
 |
2135ec |
---
|
|
 |
2135ec |
vcl/generic/fontmanager/fontconfig.cxx | 39 ++++++++++++++++++++++++++++++++++
|
|
 |
2135ec |
1 file changed, 39 insertions(+)
|
|
 |
2135ec |
|
|
 |
2135ec |
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
|
|
 |
2135ec |
index 1b36980..ff471fa 100644
|
|
 |
2135ec |
--- a/vcl/generic/fontmanager/fontconfig.cxx
|
|
 |
2135ec |
+++ b/vcl/generic/fontmanager/fontconfig.cxx
|
|
 |
2135ec |
@@ -847,6 +847,41 @@
|
|
 |
2135ec |
#endif
|
|
 |
2135ec |
}
|
|
 |
2135ec |
|
|
 |
2135ec |
+ //returns true if the given code-point couldn't possibly be in rLangTag.
|
|
 |
2135ec |
+ bool isImpossibleCodePointForLang(const LanguageTag &rLangTag, sal_uInt32 currentChar)
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ //a non-default script is set, lets believe it
|
|
 |
2135ec |
+ if (rLangTag.hasScript())
|
|
 |
2135ec |
+ return false;
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
|
|
 |
2135ec |
+ UScriptCode eScript = static_cast<UScriptCode>(script);
|
|
 |
2135ec |
+ bool bIsImpossible = false;
|
|
 |
2135ec |
+ OUString sLang = rLangTag.getLanguage();
|
|
 |
2135ec |
+ switch (eScript)
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ case USCRIPT_TELUGU:
|
|
 |
2135ec |
+ bIsImpossible = sLang != "te";
|
|
 |
2135ec |
+ break;
|
|
 |
2135ec |
+ case USCRIPT_BENGALI:
|
|
 |
2135ec |
+ bIsImpossible = sLang != "bn" &&
|
|
 |
2135ec |
+ sLang != "as" && sLang != "mkb" &&
|
|
 |
2135ec |
+ sLang != "kfv" && sLang != "ccp" &&
|
|
 |
2135ec |
+ sLang != "tnv" && sLang != "ctg" &&
|
|
 |
2135ec |
+ sLang != "haj" && sLang != "ksy" &&
|
|
 |
2135ec |
+ sLang != "rkt" && sLang != "rjs" &&
|
|
 |
2135ec |
+ sLang != "rhg" && sLang != "syl" &&
|
|
 |
2135ec |
+ sLang != "kyv" && sLang != "zrg" &&
|
|
 |
2135ec |
+ sLang != "nhh";
|
|
 |
2135ec |
+ break;
|
|
 |
2135ec |
+ default:
|
|
 |
2135ec |
+ break;
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+ SAL_WARN_IF(bIsImpossible, "vcl", "Throwing away user set language of "
|
|
 |
2135ec |
+ << sLang << " for finding a font for glyph fallback and autodetecting instead");
|
|
 |
2135ec |
+ return bIsImpossible;
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+
|
|
 |
2135ec |
LanguageTag getExemplerLangTagForCodePoint(sal_uInt32 currentChar)
|
|
 |
2135ec |
{
|
|
 |
2135ec |
int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
|
|
 |
2135ec |
@@ -954,6 +989,10 @@
|
|
 |
2135ec |
// also handle unicode surrogates
|
|
 |
2135ec |
const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
|
|
 |
2135ec |
FcCharSetAddChar( unicodes, nCode );
|
|
 |
2135ec |
+ //if the codepoint is impossible for this lang tag, then clear it
|
|
 |
2135ec |
+ //and autodetect something useful
|
|
 |
2135ec |
+ if (!aLangAttrib.isEmpty() && isImpossibleCodePointForLang(aLangTag, nCode))
|
|
 |
2135ec |
+ aLangAttrib = OString();
|
|
 |
2135ec |
//#i105784#/rhbz#527719 improve selection of fallback font
|
|
 |
2135ec |
if (aLangAttrib.isEmpty())
|
|
 |
2135ec |
{
|