/[packages]/cauldron/libreoffice/branches/3.5/current/SOURCES/openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch
ViewVC logotype

Contents of /cauldron/libreoffice/branches/3.5/current/SOURCES/openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 183165 - (show annotations) (download)
Sat Dec 17 16:48:38 2011 UTC (12 years, 4 months ago) by dmorgan
File size: 9080 byte(s)
Fix P5/P6
1 From 36644331aad8382ccab7fb19d7ab3339bbff0c20 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
3 Date: Thu, 1 Dec 2011 14:18:09 +0100
4 Subject: [PATCH 2/2] #i105784# vcl: improve selection of fallback font by
5 supplying language hint when none exists
6
7 ---
8 vcl/generic/fontmanager/fontconfig.cxx | 143 +++++++++++++++++++++++++++++++-
9 1 files changed, 141 insertions(+), 2 deletions(-)
10
11 diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
12 index 4d02a76..ecd3b5d 100644
13 --- a/vcl/generic/fontmanager/fontconfig.cxx
14 +++ b/vcl/generic/fontmanager/fontconfig.cxx
15 @@ -89,6 +89,9 @@ using namespace psp;
16
17 #include "sal/alloca.h"
18
19 +#include <i18nutil/unicode.hxx> //unicode::getUnicodeScriptType
20 +#include <com/sun/star/i18n/ScriptType.hdl> //ScriptType
21 +
22 #include <utility>
23 #include <algorithm>
24
25 @@ -747,6 +750,138 @@ static void addtopattern(FcPattern *pPattern,
26 }
27 }
28
29 +static const char* pick_sample_language(const sal_uInt32 cCode)
30 +{
31 + using namespace ::com::sun::star::i18n;
32 +
33 + static ScriptTypeList aScripts[] =
34 + {
35 + { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin },
36 + { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement },
37 + { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA },
38 + { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB },
39 + { UnicodeScript_kGreek, UnicodeScript_kGreek, UnicodeScript_kGreek },
40 + { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic, UnicodeScript_kCyrillic },
41 + { UnicodeScript_kArmenian, UnicodeScript_kArmenian, UnicodeScript_kArmenian },
42 + { UnicodeScript_kHebrew, UnicodeScript_kHebrew, UnicodeScript_kHebrew },
43 + { UnicodeScript_kArabic, UnicodeScript_kArabic, UnicodeScript_kArabic },
44 + { UnicodeScript_kSyriac, UnicodeScript_kSyriac, UnicodeScript_kSyriac },
45 + { UnicodeScript_kThaana, UnicodeScript_kThaana, UnicodeScript_kThaana },
46 + { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, UnicodeScript_kDevanagari },
47 + { UnicodeScript_kBengali, UnicodeScript_kBengali, UnicodeScript_kBengali },
48 + { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi },
49 + { UnicodeScript_kGujarati, UnicodeScript_kGujarati, UnicodeScript_kGujarati },
50 + { UnicodeScript_kOriya, UnicodeScript_kOriya, UnicodeScript_kOriya },
51 + { UnicodeScript_kTamil, UnicodeScript_kTamil, UnicodeScript_kTamil },
52 + { UnicodeScript_kTelugu, UnicodeScript_kTelugu, UnicodeScript_kTelugu },
53 + { UnicodeScript_kKannada, UnicodeScript_kKannada, UnicodeScript_kKannada },
54 + { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam, UnicodeScript_kMalayalam },
55 + { UnicodeScript_kSinhala, UnicodeScript_kSinhala, UnicodeScript_kSinhala },
56 + { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai },
57 + { UnicodeScript_kLao, UnicodeScript_kLao, UnicodeScript_kLao },
58 + { UnicodeScript_kTibetan, UnicodeScript_kTibetan, UnicodeScript_kTibetan },
59 + { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar, UnicodeScript_kMyanmar },
60 + { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian, UnicodeScript_kGeorgian },
61 + { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo },
62 + { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic, UnicodeScript_kEthiopic },
63 + { UnicodeScript_kCherokee, UnicodeScript_kCherokee, UnicodeScript_kCherokee },
64 + { UnicodeScript_kUnifiedCanadianAboriginalSyllabics,
65 + UnicodeScript_kUnifiedCanadianAboriginalSyllabics,
66 + UnicodeScript_kUnifiedCanadianAboriginalSyllabics },
67 + { UnicodeScript_kKhmer, UnicodeScript_kKhmer, UnicodeScript_kKhmer },
68 + { UnicodeScript_kMongolian, UnicodeScript_kMongolian, UnicodeScript_kMongolian },
69 + { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional,
70 + UnicodeScript_kLatinExtendedAdditional },
71 + { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended },
72 + { UnicodeScript_kHiragana, UnicodeScript_kHiragana, UnicodeScript_kHiragana },
73 + { UnicodeScript_kKatakana, UnicodeScript_kKatakana, UnicodeScript_kKatakana },
74 + { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo,
75 + UnicodeScript_kHangulCompatibilityJamo },
76 + { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable,
77 + UnicodeScript_kHangulSyllable },
78 + { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB,
79 + UnicodeScript_kArabicPresentationB },
80 + { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount }
81 + };
82 +
83 + switch (unicode::getUnicodeScriptType(cCode, aScripts, UnicodeScript_kScriptCount))
84 + {
85 + case UnicodeScript_kBasicLatin:
86 + case UnicodeScript_kLatin1Supplement:
87 + case UnicodeScript_kLatinExtendedA:
88 + case UnicodeScript_kLatinExtendedB:
89 + case UnicodeScript_kLatinExtendedAdditional:
90 + return "en";
91 + case UnicodeScript_kGreek:
92 + case UnicodeScript_kGreekExtended:
93 + return "el";
94 + case UnicodeScript_kCyrillic:
95 + return "ru";
96 + case UnicodeScript_kArmenian:
97 + return "hy";
98 + case UnicodeScript_kHebrew:
99 + return "he";
100 + case UnicodeScript_kArabic:
101 + case UnicodeScript_kArabicPresentationB:
102 + return "ar";
103 + case UnicodeScript_kSyriac:
104 + return "syr";
105 + case UnicodeScript_kThaana:
106 + return "dv";
107 + case UnicodeScript_kDevanagari:
108 + return "hi";
109 + case UnicodeScript_kBengali:
110 + return "bn";
111 + case UnicodeScript_kGurmukhi:
112 + return "pa";
113 + case UnicodeScript_kGujarati:
114 + return "gu";
115 + case UnicodeScript_kOriya:
116 + return "or";
117 + case UnicodeScript_kTamil:
118 + return "ta";
119 + case UnicodeScript_kTelugu:
120 + return "te";
121 + case UnicodeScript_kKannada:
122 + return "ka";
123 + case UnicodeScript_kMalayalam:
124 + return "ml";
125 + case UnicodeScript_kSinhala:
126 + return "si";
127 + case UnicodeScript_kThai:
128 + return "th";
129 + case UnicodeScript_kLao:
130 + return "lo";
131 + case UnicodeScript_kTibetan:
132 + return "bo";
133 + case UnicodeScript_kMyanmar:
134 + return "my";
135 + case UnicodeScript_kGeorgian:
136 + return "ka";
137 + case UnicodeScript_kHangulJamo:
138 + case UnicodeScript_kHangulCompatibilityJamo:
139 + case UnicodeScript_kHangulSyllable:
140 + return "ko";
141 + case UnicodeScript_kEthiopic:
142 + return "am";
143 + case UnicodeScript_kCherokee:
144 + return "chr";
145 + case UnicodeScript_kUnifiedCanadianAboriginalSyllabics:
146 + return "ui";
147 + case UnicodeScript_kKhmer:
148 + return "km";
149 + case UnicodeScript_kMongolian:
150 + return "mn";
151 + case UnicodeScript_kHiragana:
152 + case UnicodeScript_kKatakana:
153 + return "ja";
154 + default:
155 + break;
156 + }
157 +
158 + return NULL;
159 +}
160 +
161 bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& rMissingCodes ) const
162 {
163 bool bRet = false;
164 @@ -764,14 +899,13 @@ bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& r
165 FcPatternAddString(pPattern, FC_FAMILY, pTargetNameUtf8);
166
167 const rtl::OString aLangAttrib = MsLangId::convertLanguageToIsoByteString(rPattern.meLanguage);
168 + const FcChar8* pLangAttribUtf8 = NULL;
169 if( aLangAttrib.getLength() )
170 {
171 - const FcChar8* pLangAttribUtf8;
172 if (aLangAttrib.equalsIgnoreAsciiCase(OString(RTL_CONSTASCII_STRINGPARAM("pa-in"))))
173 pLangAttribUtf8 = (FcChar8*)"pa";
174 else
175 pLangAttribUtf8 = (FcChar8*)aLangAttrib.getStr();
176 - FcPatternAddString(pPattern, FC_LANG, pLangAttribUtf8);
177 }
178
179 // Add required Unicode characters, if any
180 @@ -783,11 +917,16 @@ bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& r
181 // also handle unicode surrogates
182 const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
183 FcCharSetAddChar( unicodes, nCode );
184 + if (!pLangAttribUtf8)
185 + pLangAttribUtf8 = (const FcChar8*)pick_sample_language(nCode);
186 }
187 FcPatternAddCharSet(pPattern, FC_CHARSET, unicodes);
188 FcCharSetDestroy(unicodes);
189 }
190
191 + if( pLangAttribUtf8 )
192 + FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 );
193 +
194 addtopattern(pPattern, rPattern.meItalic, rPattern.meWeight,
195 rPattern.meWidthType, rPattern.mePitch);
196
197 --
198 1.7.7.3
199

  ViewVC Help
Powered by ViewVC 1.1.30