8076325
diff -ru vcl.orig/unx/source/fontmanager/fontconfig.cxx vcl/unx/source/fontmanager/fontconfig.cxx
8076325
--- vcl.orig/unx/source/fontmanager/fontconfig.cxx	2009-10-08 13:25:00.000000000 +0100
8076325
+++ vcl/unx/source/fontmanager/fontconfig.cxx	2009-10-08 13:51:51.000000000 +0100
5050f39
@@ -92,6 +92,9 @@
8076325
 
8076325
 #include "sal/alloca.h"
8076325
 
8076325
+#include <i18nutil/unicode.hxx>  //unicode::getUnicodeScriptType
8076325
+#include <com/sun/star/i18n/ScriptType.hdl> //ScriptType
8076325
+
8076325
 #include <utility>
8076325
 #include <algorithm>
8076325
 
5050f39
@@ -1108,6 +1111,138 @@
8076325
     }
8076325
 }
8076325
 
8076325
+static const char* pick_sample_language(const sal_uInt32 cCode)
8076325
+{
8076325
+    using namespace ::com::sun::star::i18n;
8076325
+
8076325
+    static ScriptTypeList aScripts[] =
8076325
+    {
8076325
+        { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin },
8076325
+        { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement },
8076325
+        { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA },
8076325
+        { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB },
8076325
+        { UnicodeScript_kGreek, UnicodeScript_kGreek, UnicodeScript_kGreek },
8076325
+        { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic, UnicodeScript_kCyrillic },
8076325
+        { UnicodeScript_kArmenian, UnicodeScript_kArmenian, UnicodeScript_kArmenian },
8076325
+        { UnicodeScript_kHebrew, UnicodeScript_kHebrew, UnicodeScript_kHebrew },
8076325
+        { UnicodeScript_kArabic, UnicodeScript_kArabic, UnicodeScript_kArabic },
8076325
+        { UnicodeScript_kSyriac, UnicodeScript_kSyriac, UnicodeScript_kSyriac },
8076325
+        { UnicodeScript_kThaana, UnicodeScript_kThaana, UnicodeScript_kThaana },
8076325
+        { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, UnicodeScript_kDevanagari },
8076325
+        { UnicodeScript_kBengali, UnicodeScript_kBengali, UnicodeScript_kBengali },
8076325
+        { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi },
8076325
+        { UnicodeScript_kGujarati, UnicodeScript_kGujarati, UnicodeScript_kGujarati },
8076325
+        { UnicodeScript_kOriya, UnicodeScript_kOriya, UnicodeScript_kOriya },
8076325
+        { UnicodeScript_kTamil, UnicodeScript_kTamil, UnicodeScript_kTamil },
8076325
+        { UnicodeScript_kTelugu, UnicodeScript_kTelugu, UnicodeScript_kTelugu },
8076325
+        { UnicodeScript_kKannada, UnicodeScript_kKannada, UnicodeScript_kKannada },
8076325
+        { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam, UnicodeScript_kMalayalam },
8076325
+        { UnicodeScript_kSinhala, UnicodeScript_kSinhala, UnicodeScript_kSinhala },
8076325
+        { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai },
8076325
+        { UnicodeScript_kLao, UnicodeScript_kLao, UnicodeScript_kLao },
8076325
+        { UnicodeScript_kTibetan, UnicodeScript_kTibetan, UnicodeScript_kTibetan },
8076325
+        { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar, UnicodeScript_kMyanmar },
8076325
+        { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian, UnicodeScript_kGeorgian },
8076325
+        { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo },
8076325
+        { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic, UnicodeScript_kEthiopic },
8076325
+        { UnicodeScript_kCherokee, UnicodeScript_kCherokee, UnicodeScript_kCherokee },
8076325
+        { UnicodeScript_kUnifiedCanadianAboriginalSyllabics, 
8076325
+            UnicodeScript_kUnifiedCanadianAboriginalSyllabics, 
8076325
+            UnicodeScript_kUnifiedCanadianAboriginalSyllabics },
8076325
+        { UnicodeScript_kKhmer, UnicodeScript_kKhmer, UnicodeScript_kKhmer },
8076325
+        { UnicodeScript_kMongolian, UnicodeScript_kMongolian, UnicodeScript_kMongolian },
8076325
+        { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional,
8076325
+          UnicodeScript_kLatinExtendedAdditional },
8076325
+        { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended },
8076325
+        { UnicodeScript_kHiragana, UnicodeScript_kHiragana, UnicodeScript_kHiragana },
8076325
+        { UnicodeScript_kKatakana, UnicodeScript_kKatakana, UnicodeScript_kKatakana },
8076325
+        { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo, 
8076325
+          UnicodeScript_kHangulCompatibilityJamo },
8076325
+        { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable,
8076325
+          UnicodeScript_kHangulSyllable },
8076325
+        { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB,
8076325
+          UnicodeScript_kArabicPresentationB },
8076325
+        { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount }
8076325
+    };
8076325
+
8076325
+    switch (unicode::getUnicodeScriptType(cCode, aScripts, UnicodeScript_kScriptCount))
8076325
+    {
8076325
+        case UnicodeScript_kBasicLatin:
8076325
+        case UnicodeScript_kLatin1Supplement:
8076325
+        case UnicodeScript_kLatinExtendedA:
8076325
+        case UnicodeScript_kLatinExtendedB:
8076325
+        case UnicodeScript_kLatinExtendedAdditional:
8076325
+            return "en";
8076325
+        case UnicodeScript_kGreek:
8076325
+        case UnicodeScript_kGreekExtended:
8076325
+            return "el";
8076325
+        case UnicodeScript_kCyrillic:
8076325
+            return "ru";
8076325
+        case UnicodeScript_kArmenian:
8076325
+            return "hy";
8076325
+        case UnicodeScript_kHebrew:
8076325
+            return "he";
8076325
+        case UnicodeScript_kArabic:
8076325
+        case UnicodeScript_kArabicPresentationB:
8076325
+            return "ar";
8076325
+        case UnicodeScript_kSyriac:
8076325
+            return "syr";
8076325
+        case UnicodeScript_kThaana:
8076325
+            return "dv";
8076325
+        case UnicodeScript_kDevanagari:
8076325
+            return "hi";
8076325
+        case UnicodeScript_kBengali:
8076325
+            return "bn";
8076325
+        case UnicodeScript_kGurmukhi:
8076325
+            return "pa";
8076325
+        case UnicodeScript_kGujarati:
8076325
+            return "gu";
8076325
+        case UnicodeScript_kOriya:
8076325
+            return "or";
8076325
+        case UnicodeScript_kTamil:
8076325
+            return "ta";
8076325
+        case UnicodeScript_kTelugu:
8076325
+            return "te";
8076325
+        case UnicodeScript_kKannada:
8076325
+            return "ka";
8076325
+        case UnicodeScript_kMalayalam:
8076325
+            return "ml";
8076325
+        case UnicodeScript_kSinhala:
8076325
+            return "si";
8076325
+        case UnicodeScript_kThai:
8076325
+            return "th";
8076325
+        case UnicodeScript_kLao:
8076325
+            return "lo";
8076325
+        case UnicodeScript_kTibetan:
8076325
+            return "bo";
8076325
+        case UnicodeScript_kMyanmar:
8076325
+            return "my";
8076325
+        case UnicodeScript_kGeorgian:
8076325
+            return "ka";
8076325
+        case UnicodeScript_kHangulJamo:
8076325
+        case UnicodeScript_kHangulCompatibilityJamo:
8076325
+        case UnicodeScript_kHangulSyllable:
8076325
+            return "ko";
8076325
+        case UnicodeScript_kEthiopic:
8076325
+            return "am";
8076325
+        case UnicodeScript_kCherokee:
8076325
+            return "chr";
8076325
+        case UnicodeScript_kUnifiedCanadianAboriginalSyllabics:
8076325
+            return "ui";
8076325
+        case UnicodeScript_kKhmer:
8076325
+            return "km";
8076325
+        case UnicodeScript_kMongolian:
8076325
+            return "mn";
8076325
+        case UnicodeScript_kHiragana:
8076325
+        case UnicodeScript_kKatakana:
8076325
+            return "ja";
8076325
+        default:
8076325
+            break;
8076325
+    }
8076325
+
8076325
+    return NULL;
8076325
+}
8076325
+
8076325
 rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
8076325
     rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib,
8076325
     italic::type &rItalic, weight::type &rWeight,
5050f39
@@ -1128,14 +1263,13 @@
5050f39
     const FcChar8* pTargetNameUtf8 = (FcChar8*)aTargetName.getStr();
8076325
     rWrapper.FcPatternAddString( pPattern, FC_FAMILY, pTargetNameUtf8 );
8076325
 
5050f39
+    const FcChar8* pLangAttribUtf8 = NULL;
5050f39
     if( rLangAttrib.getLength() )
5050f39
     {
5050f39
-        const FcChar8* pLangAttribUtf8;
5050f39
         if (rLangAttrib.equalsIgnoreAsciiCase(OString(RTL_CONSTASCII_STRINGPARAM("pa-in"))))
5050f39
             pLangAttribUtf8 = (FcChar8*)"pa";
5050f39
         else
5050f39
             pLangAttribUtf8 = (FcChar8*)rLangAttrib.getStr();
8076325
-        rWrapper.FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 );
5050f39
     }
8076325
 
8076325
     // Add required Unicode characters, if any
5050f39
@@ -1147,11 +1281,16 @@
8076325
            // also handle unicode surrogates
8076325
            const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
8076325
            rWrapper.FcCharSetAddChar( unicodes, nCode );
8076325
+           if (!pLangAttribUtf8)
8076325
+               pLangAttribUtf8 = (const FcChar8*)pick_sample_language(nCode);
8076325
        }
8076325
        rWrapper.FcPatternAddCharSet( pPattern, FC_CHARSET, unicodes);
8076325
        rWrapper.FcCharSetDestroy( unicodes );
8076325
     }
8076325
 
8076325
+    if( pLangAttribUtf8 )
8076325
+        rWrapper.FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 );
8076325
+
8076325
     addtopattern(rWrapper, pPattern, rItalic, rWeight, rWidth, rPitch);
8076325
 
8076325
     // query fontconfig for a substitute
8076325
diff -ru vcl.orig/util/makefile.mk vcl/util/makefile.mk
8076325
--- vcl.orig/util/makefile.mk	2009-10-08 13:25:00.000000000 +0100
8076325
+++ vcl/util/makefile.mk	2009-10-08 13:25:09.000000000 +0100
8076325
@@ -298,6 +298,7 @@
8076325
 # libs for generic plugin
8076325
 SHL2STDLIBS=\
8076325
 			$(VCLLIB)\
8076325
+            $(I18NUTILLIB)     \
8076325
             $(I18NPAPERLIB)     \
8076325
             $(I18NISOLANGLIB)     \
8076325
             $(TOOLSLIB)         \