Switch to RFC 3066 based lang names
This commit is contained in:
parent
899e352656
commit
82f4243f22
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.18 2002/06/19 20:08:22 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.19 2002/06/30 23:45:17 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -613,6 +613,9 @@ FcPatternHash (const FcPattern *p);
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
|
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
|
||||||
|
|
||||||
FcResult
|
FcResult
|
||||||
FcPatternGet (FcPattern *p, const char *object, int id, FcValue *v);
|
FcPatternGet (FcPattern *p, const char *object, int id, FcValue *v);
|
||||||
|
|
||||||
|
|
|
@ -29,12 +29,12 @@ EXPATLIB=-lexpat
|
||||||
REQUIREDLIBS=$(LDPRELIBS) $(FREETYPE2LIB) $(EXPATLIB)
|
REQUIREDLIBS=$(LDPRELIBS) $(FREETYPE2LIB) $(EXPATLIB)
|
||||||
|
|
||||||
SRCS=fcatomic.c fcblanks.c fccache.c fccfg.c fccharset.c fcdbg.c \
|
SRCS=fcatomic.c fcblanks.c fccache.c fccfg.c fccharset.c fcdbg.c \
|
||||||
fcdefault.c fcdir.c fcfreetype.c fcfs.c fcinit.c fclist.c fcmatch.c \
|
fcdefault.c fcdir.c fcfreetype.c fcfs.c fcinit.c fclang.c fclist.c \
|
||||||
fcmatrix.c fcname.c fcpat.c fcstr.c fcxml.c
|
fcmatch.c fcmatrix.c fcname.c fcpat.c fcstr.c fcxml.c
|
||||||
|
|
||||||
OBJS=fcatomic.o fcblanks.o fccache.o fccfg.o fccharset.o fcdbg.o \
|
OBJS=fcatomic.o fcblanks.o fccache.o fccfg.o fccharset.o fcdbg.o \
|
||||||
fcdefault.o fcdir.o fcfreetype.o fcfs.o fcinit.o fclist.o fcmatch.o \
|
fcdefault.o fcdir.o fcfreetype.o fcfs.o fcinit.o fclang.o fclist.o \
|
||||||
fcmatrix.o fcname.o fcpat.o fcstr.o fcxml.o
|
fcmatch.o fcmatrix.o fcname.o fcpat.o fcstr.o fcxml.o
|
||||||
|
|
||||||
#include <Library.tmpl>
|
#include <Library.tmpl>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fccharset.c,v 1.13 2002/06/26 22:56:51 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fccharset.c,v 1.14 2002/06/29 20:31:02 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -111,7 +111,7 @@ FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4)
|
||||||
else
|
else
|
||||||
high = mid - 1;
|
high = mid - 1;
|
||||||
}
|
}
|
||||||
if (numbers[high] < ucs4)
|
if (high < 0 || numbers[high] < ucs4)
|
||||||
high++;
|
high++;
|
||||||
return -(high + 1);
|
return -(high + 1);
|
||||||
}
|
}
|
||||||
|
@ -711,7 +711,7 @@ FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result)
|
||||||
* it's not exactly human readable output. As a special case, 0 is encoded as a space
|
* it's not exactly human readable output. As a special case, 0 is encoded as a space
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static unsigned char charToValue[256] = {
|
static const unsigned char charToValue[256] = {
|
||||||
/* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
/* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
/* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
/* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
/* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
/* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
@ -746,7 +746,7 @@ static unsigned char charToValue[256] = {
|
||||||
/* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
/* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
};
|
};
|
||||||
|
|
||||||
static FcChar8 valueToChar[0x55] = {
|
static const FcChar8 valueToChar[0x55] = {
|
||||||
/* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*',
|
/* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*',
|
||||||
/* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4',
|
/* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4',
|
||||||
/* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>',
|
/* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>',
|
||||||
|
|
410
src/fcfreetype.c
410
src/fcfreetype.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcfreetype.c,v 1.4 2002/05/31 23:21:25 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcfreetype.c,v 1.5 2002/06/29 20:31:02 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -29,140 +29,201 @@
|
||||||
#include <freetype/freetype.h>
|
#include <freetype/freetype.h>
|
||||||
#include <freetype/internal/ftobjs.h>
|
#include <freetype/internal/ftobjs.h>
|
||||||
#include <freetype/tttables.h>
|
#include <freetype/tttables.h>
|
||||||
#include "fcknownsets.h"
|
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangLatin1[] = {
|
||||||
|
(FcChar8 *) "br", /* Breton */
|
||||||
|
(FcChar8 *) "ca", /* Catalan */
|
||||||
|
(FcChar8 *) "da", /* Danish */
|
||||||
|
(FcChar8 *) "de", /* German */
|
||||||
|
(FcChar8 *) "en", /* English */
|
||||||
|
(FcChar8 *) "es", /* Spanish */
|
||||||
|
(FcChar8 *) "eu", /* Basque */
|
||||||
|
(FcChar8 *) "fi", /* Finnish */
|
||||||
|
(FcChar8 *) "fo", /* Faroese */
|
||||||
|
(FcChar8 *) "fr", /* French */
|
||||||
|
(FcChar8 *) "ga", /* Irish */
|
||||||
|
(FcChar8 *) "gd", /* Scottish */
|
||||||
|
(FcChar8 *) "gl", /* Galician */
|
||||||
|
(FcChar8 *) "is", /* Islandic */
|
||||||
|
(FcChar8 *) "it", /* Italian */
|
||||||
|
(FcChar8 *) "kl", /* Greenlandic */
|
||||||
|
(FcChar8 *) "la", /* Latin */
|
||||||
|
(FcChar8 *) "nl", /* Dutch */
|
||||||
|
(FcChar8 *) "no", /* Norwegian */
|
||||||
|
(FcChar8 *) "pt", /* Portuguese */
|
||||||
|
(FcChar8 *) "rm", /* Rhaeto-Romanic */
|
||||||
|
(FcChar8 *) "sq", /* Albanian */
|
||||||
|
(FcChar8 *) "sv", /* Swedish */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangLatin2[] = {
|
||||||
|
(FcChar8 *) "cs", /* Czech */
|
||||||
|
(FcChar8 *) "de", /* German */
|
||||||
|
(FcChar8 *) "en", /* English */
|
||||||
|
(FcChar8 *) "fi", /* Finnish */
|
||||||
|
(FcChar8 *) "hr", /* Croatian */
|
||||||
|
(FcChar8 *) "hu", /* Hungarian */
|
||||||
|
(FcChar8 *) "la", /* Latin */
|
||||||
|
(FcChar8 *) "pl", /* Polish */
|
||||||
|
(FcChar8 *) "ro", /* Romanian */
|
||||||
|
(FcChar8 *) "sk", /* Slovak */
|
||||||
|
(FcChar8 *) "sl", /* Slovenian */
|
||||||
|
(FcChar8 *) "sq", /* Albanian */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangCyrillic[] = {
|
||||||
|
(FcChar8 *) "az", /* Azerbaijani */
|
||||||
|
(FcChar8 *) "ba", /* Bashkir */
|
||||||
|
(FcChar8 *) "bg", /* Bulgarian */
|
||||||
|
(FcChar8 *) "be", /* Byelorussian */
|
||||||
|
(FcChar8 *) "kk", /* Kazakh */
|
||||||
|
(FcChar8 *) "ky", /* Kirghiz */
|
||||||
|
(FcChar8 *) "mk", /* Macedonian */
|
||||||
|
(FcChar8 *) "mo", /* Moldavian */
|
||||||
|
(FcChar8 *) "mn", /* Mongolian */
|
||||||
|
(FcChar8 *) "ru", /* Russian */
|
||||||
|
(FcChar8 *) "sr", /* Serbian */
|
||||||
|
(FcChar8 *) "tg", /* Tadzhik */
|
||||||
|
(FcChar8 *) "tt", /* Tatar */
|
||||||
|
(FcChar8 *) "tk", /* Turkmen */
|
||||||
|
(FcChar8 *) "uz", /* Uzbek */
|
||||||
|
(FcChar8 *) "uk", /* Ukrainian */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangGreek[] = {
|
||||||
|
(FcChar8 *) "el", /* Greek */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangTurkish[] = {
|
||||||
|
(FcChar8 *) "tr", /* Turkish */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangHebrew[] = {
|
||||||
|
(FcChar8 *) "he", /* Hebrew */
|
||||||
|
(FcChar8 *) "yi", /* Yiddish */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangArabic[] = {
|
||||||
|
(FcChar8 *) "ar", /* arabic */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangWindowsBaltic[] = {
|
||||||
|
(FcChar8 *) "da", /* Danish */
|
||||||
|
(FcChar8 *) "de", /* German */
|
||||||
|
(FcChar8 *) "en", /* English */
|
||||||
|
(FcChar8 *) "et", /* Estonian */
|
||||||
|
(FcChar8 *) "fi", /* Finnish */
|
||||||
|
(FcChar8 *) "la", /* Latin */
|
||||||
|
(FcChar8 *) "lt", /* Lithuanian */
|
||||||
|
(FcChar8 *) "lv", /* Latvian */
|
||||||
|
(FcChar8 *) "no", /* Norwegian */
|
||||||
|
(FcChar8 *) "pl", /* Polish */
|
||||||
|
(FcChar8 *) "sl", /* Slovenian */
|
||||||
|
(FcChar8 *) "sv", /* Swedish */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangVietnamese[] = {
|
||||||
|
(FcChar8 *) "vi", /* Vietnamese */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangThai[] = {
|
||||||
|
(FcChar8 *) "th", /* Thai */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangJapanese[] = {
|
||||||
|
(FcChar8 *) "ja", /* Japanese */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangSimplifiedChinese[] = {
|
||||||
|
(FcChar8 *) "zh-cn", /* Chinese-China */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangKorean[] = {
|
||||||
|
(FcChar8 *) "ko", /* Korean */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangTraditionalChinese[] = {
|
||||||
|
(FcChar8 *) "zh-tw", /* Chinese-Taiwan */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const FcChar8 *fcLangEnglish[] = {
|
||||||
|
(FcChar8 *) "en", /* English */
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Elide some of the less useful bits
|
||||||
|
*/
|
||||||
static const struct {
|
static const struct {
|
||||||
int bit;
|
int bit;
|
||||||
FcChar8 *name;
|
const FcChar8 **lang;
|
||||||
} FcCodePageRange[] = {
|
} FcCodePageRange[] = {
|
||||||
{ 0, (FcChar8 *) FC_LANG_LATIN_1 },
|
{ 0, fcLangLatin1 },
|
||||||
{ 1, (FcChar8 *) FC_LANG_LATIN_2 },
|
{ 1, fcLangLatin2 },
|
||||||
{ 2, (FcChar8 *) FC_LANG_CYRILLIC },
|
{ 2, fcLangCyrillic },
|
||||||
{ 3, (FcChar8 *) FC_LANG_GREEK },
|
{ 3, fcLangGreek },
|
||||||
{ 4, (FcChar8 *) FC_LANG_TURKISH },
|
{ 4, fcLangTurkish },
|
||||||
{ 5, (FcChar8 *) FC_LANG_HEBREW },
|
{ 5, fcLangHebrew },
|
||||||
{ 6, (FcChar8 *) FC_LANG_ARABIC },
|
{ 6, fcLangArabic },
|
||||||
{ 7, (FcChar8 *) FC_LANG_WINDOWS_BALTIC },
|
{ 7, fcLangWindowsBaltic },
|
||||||
{ 8, (FcChar8 *) FC_LANG_VIETNAMESE },
|
{ 8, fcLangVietnamese },
|
||||||
/* 9-15 reserved for Alternate ANSI */
|
/* 9-15 reserved for Alternate ANSI */
|
||||||
{ 16, (FcChar8 *) FC_LANG_THAI },
|
{ 16, fcLangThai },
|
||||||
{ 17, (FcChar8 *) FC_LANG_JAPANESE },
|
{ 17, fcLangJapanese },
|
||||||
{ 18, (FcChar8 *) FC_LANG_SIMPLIFIED_CHINESE },
|
{ 18, fcLangSimplifiedChinese },
|
||||||
{ 19, (FcChar8 *) FC_LANG_KOREAN_WANSUNG },
|
{ 19, fcLangKorean },
|
||||||
{ 20, (FcChar8 *) FC_LANG_TRADITIONAL_CHINESE },
|
{ 20, fcLangTraditionalChinese },
|
||||||
{ 21, (FcChar8 *) FC_LANG_KOREAN_JOHAB },
|
{ 21, fcLangKorean },
|
||||||
/* 22-28 reserved for Alternate ANSI & OEM */
|
/* 22-28 reserved for Alternate ANSI & OEM */
|
||||||
{ 29, (FcChar8 *) FC_LANG_MACINTOSH },
|
/* { 29, fcLangMacintosh }, */
|
||||||
{ 30, (FcChar8 *) FC_LANG_OEM },
|
/* { 30, fcLangOem }, */
|
||||||
{ 31, (FcChar8 *) FC_LANG_SYMBOL },
|
/* { 31, fcLangSymbol },*/
|
||||||
/* 32-47 reserved for OEM */
|
/* 32-47 reserved for OEM */
|
||||||
{ 48, (FcChar8 *) FC_LANG_IBM_GREEK },
|
{ 48, fcLangGreek },
|
||||||
{ 49, (FcChar8 *) FC_LANG_MSDOS_RUSSIAN },
|
{ 49, fcLangCyrillic },
|
||||||
{ 50, (FcChar8 *) FC_LANG_MSDOS_NORDIC },
|
/* { 50, fcLangMsdosNordic }, */
|
||||||
{ 51, (FcChar8 *) FC_LANG_ARABIC_864 },
|
{ 51, fcLangArabic },
|
||||||
{ 52, (FcChar8 *) FC_LANG_MSDOS_CANADIAN_FRENCH },
|
/* { 52, fcLangMSDOS_CANADIAN_FRENCH }, */
|
||||||
{ 53, (FcChar8 *) FC_LANG_HEBREW_862 },
|
{ 53, fcLangHebrew },
|
||||||
{ 54, (FcChar8 *) FC_LANG_MSDOS_ICELANDIC },
|
/* { 54, fcLangMSDOS_ICELANDIC }, */
|
||||||
{ 55, (FcChar8 *) FC_LANG_MSDOS_PORTUGUESE },
|
/* { 55, fcLangMSDOS_PORTUGUESE }, */
|
||||||
{ 56, (FcChar8 *) FC_LANG_IBM_TURKISH },
|
{ 56, fcLangTurkish },
|
||||||
{ 57, (FcChar8 *) FC_LANG_IBM_CYRILLIC },
|
{ 57, fcLangCyrillic },
|
||||||
{ 58, (FcChar8 *) FC_LANG_LATIN_2 },
|
{ 58, fcLangLatin2 },
|
||||||
{ 59, (FcChar8 *) FC_LANG_MSDOS_BALTIC },
|
{ 59, fcLangWindowsBaltic },
|
||||||
{ 60, (FcChar8 *) FC_LANG_GREEK_437_G },
|
{ 60, fcLangGreek },
|
||||||
{ 61, (FcChar8 *) FC_LANG_ARABIC_ASMO_708 },
|
{ 61, fcLangArabic },
|
||||||
{ 62, (FcChar8 *) FC_LANG_WE_LATIN_1 },
|
{ 62, fcLangLatin1 },
|
||||||
{ 63, (FcChar8 *) FC_LANG_US },
|
{ 63, fcLangEnglish },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_CODE_PAGE_RANGE (sizeof FcCodePageRange / sizeof FcCodePageRange[0])
|
#define NUM_CODE_PAGE_RANGE (sizeof FcCodePageRange / sizeof FcCodePageRange[0])
|
||||||
|
|
||||||
static const struct {
|
FcBool
|
||||||
const FcCharSet *set;
|
FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang)
|
||||||
FcChar32 size;
|
{
|
||||||
FcChar32 missing_tolerance;
|
FcChar8 *old;
|
||||||
FcChar8 *name;
|
int i;
|
||||||
} FcCodePageSet[] = {
|
|
||||||
{
|
|
||||||
&fcCharSet_Latin1_1252,
|
|
||||||
fcCharSet_Latin1_1252_size,
|
|
||||||
8,
|
|
||||||
(FcChar8 *) FC_LANG_LATIN_1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Latin2_1250,
|
|
||||||
fcCharSet_Latin2_1250_size,
|
|
||||||
8,
|
|
||||||
(FcChar8 *) FC_LANG_LATIN_2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Cyrillic_1251,
|
|
||||||
fcCharSet_Cyrillic_1251_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_CYRILLIC,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Greek_1253,
|
|
||||||
fcCharSet_Greek_1253_size,
|
|
||||||
8,
|
|
||||||
(FcChar8 *) FC_LANG_GREEK,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Turkish_1254,
|
|
||||||
fcCharSet_Turkish_1254_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_TURKISH,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Hebrew_1255,
|
|
||||||
fcCharSet_Hebrew_1255_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_HEBREW,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Arabic_1256,
|
|
||||||
fcCharSet_Arabic_1256_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_ARABIC,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Windows_Baltic_1257,
|
|
||||||
fcCharSet_Windows_Baltic_1257_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_WINDOWS_BALTIC,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Thai_874,
|
|
||||||
fcCharSet_Thai_874_size,
|
|
||||||
16,
|
|
||||||
(FcChar8 *) FC_LANG_THAI,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Japanese_932,
|
|
||||||
fcCharSet_Japanese_932_size,
|
|
||||||
500,
|
|
||||||
(FcChar8 *) FC_LANG_JAPANESE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_SimplifiedChinese_936,
|
|
||||||
fcCharSet_SimplifiedChinese_936_size,
|
|
||||||
500,
|
|
||||||
(FcChar8 *) FC_LANG_SIMPLIFIED_CHINESE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_Korean_949,
|
|
||||||
fcCharSet_Korean_949_size,
|
|
||||||
500,
|
|
||||||
(FcChar8 *) FC_LANG_KOREAN_WANSUNG,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
&fcCharSet_TraditionalChinese_950,
|
|
||||||
fcCharSet_TraditionalChinese_950_size,
|
|
||||||
500,
|
|
||||||
(FcChar8 *) FC_LANG_TRADITIONAL_CHINESE,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NUM_CODE_PAGE_SET (sizeof FcCodePageSet / sizeof FcCodePageSet[0])
|
for (i = 0; FcPatternGetString (pattern, FC_LANG, i, &old) == FcResultMatch; i++)
|
||||||
|
if (!FcStrCmp (lang, old))
|
||||||
|
return FcTrue;
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
|
||||||
FcPattern *
|
FcPattern *
|
||||||
FcFreeTypeQuery (const FcChar8 *file,
|
FcFreeTypeQuery (const FcChar8 *file,
|
||||||
|
@ -179,9 +240,10 @@ FcFreeTypeQuery (const FcChar8 *file,
|
||||||
FT_Library ftLibrary;
|
FT_Library ftLibrary;
|
||||||
const FcChar8 *family;
|
const FcChar8 *family;
|
||||||
TT_OS2 *os2;
|
TT_OS2 *os2;
|
||||||
FcBool hasLang = FcFalse;
|
|
||||||
FcChar32 codepoints;
|
FcChar32 codepoints;
|
||||||
FcBool matchCodePage[NUM_CODE_PAGE_SET];
|
FcChar8 *lang;
|
||||||
|
FcBool hasLang = FcFalse;
|
||||||
|
|
||||||
|
|
||||||
if (FT_Init_FreeType (&ftLibrary))
|
if (FT_Init_FreeType (&ftLibrary))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -273,10 +335,16 @@ FcFreeTypeQuery (const FcChar8 *file,
|
||||||
}
|
}
|
||||||
if (bits & (1 << bit))
|
if (bits & (1 << bit))
|
||||||
{
|
{
|
||||||
if (!FcPatternAddString (pat, FC_LANG,
|
int j;
|
||||||
FcCodePageRange[i].name))
|
const FcChar8 *lang;
|
||||||
goto bail1;
|
|
||||||
hasLang = FcTrue;
|
for (j = 0; (lang = FcCodePageRange[i].lang[j]); j++)
|
||||||
|
if (!FcFreeTypeHasLang (pat, lang))
|
||||||
|
{
|
||||||
|
if (!FcPatternAddString (pat, FC_LANG, lang))
|
||||||
|
goto bail1;
|
||||||
|
hasLang = FcTrue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -302,78 +370,18 @@ FcFreeTypeQuery (const FcChar8 *file,
|
||||||
if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
|
if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
|
||||||
goto bail2;
|
goto bail2;
|
||||||
|
|
||||||
if (!hasLang || (FcDebug() & FC_DBG_SCANV))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Use the Unicode coverage to set lang if it wasn't
|
|
||||||
* set from the OS/2 tables
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (FcDebug() & FC_DBG_SCANV)
|
|
||||||
printf ("%s: ", family);
|
|
||||||
for (i = 0; i < NUM_CODE_PAGE_SET; i++)
|
|
||||||
{
|
|
||||||
FcChar32 missing;
|
|
||||||
|
|
||||||
missing = FcCharSetSubtractCount (FcCodePageSet[i].set,
|
|
||||||
cs);
|
|
||||||
matchCodePage[i] = missing <= FcCodePageSet[i].missing_tolerance;
|
|
||||||
if (FcDebug() & FC_DBG_SCANV)
|
|
||||||
printf ("%s(%d) ", FcCodePageSet[i].name, missing);
|
|
||||||
}
|
|
||||||
if (FcDebug() & FC_DBG_SCANV)
|
|
||||||
printf ("\n");
|
|
||||||
|
|
||||||
if (hasLang)
|
|
||||||
{
|
|
||||||
FcChar8 *lang;
|
|
||||||
int j;
|
|
||||||
/*
|
|
||||||
* Validate the lang selections
|
|
||||||
*/
|
|
||||||
for (i = 0; FcPatternGetString (pat, FC_LANG, i, &lang) == FcResultMatch; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < NUM_CODE_PAGE_SET; j++)
|
|
||||||
if (!strcmp ((char *) FcCodePageSet[j].name,
|
|
||||||
(char *) lang))
|
|
||||||
{
|
|
||||||
if (!matchCodePage[j])
|
|
||||||
printf ("%s(%s): missing lang %s\n", file, family, lang);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (j = 0; j < NUM_CODE_PAGE_SET; j++)
|
|
||||||
{
|
|
||||||
if (!matchCodePage[j])
|
|
||||||
continue;
|
|
||||||
lang = 0;
|
|
||||||
for (i = 0; FcPatternGetString (pat, FC_LANG, i, &lang) == FcResultMatch; i++)
|
|
||||||
{
|
|
||||||
if (!strcmp ((char *) FcCodePageSet[j].name, (char *) lang))
|
|
||||||
break;
|
|
||||||
lang = 0;
|
|
||||||
}
|
|
||||||
if (!lang)
|
|
||||||
printf ("%s(%s): extra lang %s\n", file, family, FcCodePageSet[j].name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* None provided, use the charset derived ones
|
|
||||||
*/
|
|
||||||
for (i = 0; i < NUM_CODE_PAGE_SET; i++)
|
|
||||||
if (matchCodePage[i])
|
|
||||||
{
|
|
||||||
if (!FcPatternAddString (pat, FC_LANG,
|
|
||||||
FcCodePageRange[i].name))
|
|
||||||
goto bail1;
|
|
||||||
hasLang = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!hasLang)
|
if (!hasLang)
|
||||||
if (!FcPatternAddString (pat, FC_LANG, (FcChar8 *) FC_LANG_UNKNOWN))
|
{
|
||||||
goto bail1;
|
if (!FcFreeTypeSetLang (pat, cs))
|
||||||
|
goto bail2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure it has a lang entry
|
||||||
|
*/
|
||||||
|
if (FcPatternGetString (pat, FC_LANG, 0, &lang) != FcResultMatch)
|
||||||
|
if (!FcPatternAddString (pat, FC_LANG, (FcChar8 *) "x-unknown"))
|
||||||
|
goto bail2;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Drop our reference to the charset
|
* Drop our reference to the charset
|
||||||
|
|
28
src/fcint.h
28
src/fcint.h
|
@ -163,6 +163,10 @@ typedef struct _FcCharLeaf {
|
||||||
FcChar32 map[256/32];
|
FcChar32 map[256/32];
|
||||||
} FcCharLeaf;
|
} FcCharLeaf;
|
||||||
|
|
||||||
|
typedef enum _FcLangResult {
|
||||||
|
FcLangEqual, FcLangDifferentCountry, FcLangDifferentLang
|
||||||
|
} FcLangResult;
|
||||||
|
|
||||||
struct _FcCharSet {
|
struct _FcCharSet {
|
||||||
int ref; /* reference count */
|
int ref; /* reference count */
|
||||||
FcBool constant; /* in hash table constant */
|
FcBool constant; /* in hash table constant */
|
||||||
|
@ -393,6 +397,10 @@ FcDebug (void);
|
||||||
int
|
int
|
||||||
FcFontDebug (void);
|
FcFontDebug (void);
|
||||||
|
|
||||||
|
/* fcfreetype.c */
|
||||||
|
FcBool
|
||||||
|
FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
|
||||||
|
|
||||||
/* fcfs.c */
|
/* fcfs.c */
|
||||||
/* fcgram.y */
|
/* fcgram.y */
|
||||||
int
|
int
|
||||||
|
@ -460,6 +468,16 @@ FcMemAlloc (int kind, int size);
|
||||||
void
|
void
|
||||||
FcMemFree (int kind, int size);
|
FcMemFree (int kind, int size);
|
||||||
|
|
||||||
|
/* fclang.c */
|
||||||
|
FcBool
|
||||||
|
FcFreeTypeSetLang (FcPattern *pattern, FcCharSet *charset);
|
||||||
|
|
||||||
|
FcLangResult
|
||||||
|
FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
|
|
||||||
|
const FcCharSet *
|
||||||
|
FcCharSetForLang (const FcChar8 *lang);
|
||||||
|
|
||||||
/* fclist.c */
|
/* fclist.c */
|
||||||
|
|
||||||
/* fcmatch.c */
|
/* fcmatch.c */
|
||||||
|
@ -479,6 +497,13 @@ FcPatternFindElt (const FcPattern *p, const char *object);
|
||||||
FcPatternElt *
|
FcPatternElt *
|
||||||
FcPatternInsertElt (FcPattern *p, const char *object);
|
FcPatternInsertElt (FcPattern *p, const char *object);
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternAddWithBinding (FcPattern *p,
|
||||||
|
const char *object,
|
||||||
|
FcValue value,
|
||||||
|
FcValueBinding binding,
|
||||||
|
FcBool append);
|
||||||
|
|
||||||
/* fcrender.c */
|
/* fcrender.c */
|
||||||
|
|
||||||
/* fcmatrix.c */
|
/* fcmatrix.c */
|
||||||
|
@ -510,4 +535,7 @@ FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
|
||||||
FcBool
|
FcBool
|
||||||
FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
|
FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
|
||||||
|
|
||||||
|
int
|
||||||
|
FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
|
||||||
|
|
||||||
#endif /* _FC_INT_H_ */
|
#endif /* _FC_INT_H_ */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.14 2002/06/19 21:32:18 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.15 2002/06/29 20:31:02 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -48,6 +48,33 @@ FcCompareString (char *object, FcValue value1, FcValue value2)
|
||||||
return (double) FcStrCmpIgnoreCase (value1.u.s, value2.u.s) != 0;
|
return (double) FcStrCmpIgnoreCase (value1.u.s, value2.u.s) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
FcCompareFamily (char *object, FcValue value1, FcValue value2)
|
||||||
|
{
|
||||||
|
if (value2.type != FcTypeString || value1.type != FcTypeString)
|
||||||
|
return -1.0;
|
||||||
|
return (double) FcStrCmpIgnoreBlanksAndCase (value1.u.s, value2.u.s) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
FcCompareLang (char *object, FcValue value1, FcValue value2)
|
||||||
|
{
|
||||||
|
FcLangResult result;
|
||||||
|
|
||||||
|
if (value2.type != FcTypeString || value1.type != FcTypeString)
|
||||||
|
return -1.0;
|
||||||
|
result = FcLangCompare (value1.u.s, value2.u.s);
|
||||||
|
switch (result) {
|
||||||
|
case FcLangEqual:
|
||||||
|
return 0;
|
||||||
|
case FcLangDifferentCountry:
|
||||||
|
return 1;
|
||||||
|
case FcLangDifferentLang:
|
||||||
|
default:
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static double
|
static double
|
||||||
FcCompareBool (char *object, FcValue value1, FcValue value2)
|
FcCompareBool (char *object, FcValue value1, FcValue value2)
|
||||||
{
|
{
|
||||||
|
@ -115,10 +142,10 @@ static FcMatcher _FcMatchers [] = {
|
||||||
{ FC_CHARSET, FcCompareCharSet, 1, 1 },
|
{ FC_CHARSET, FcCompareCharSet, 1, 1 },
|
||||||
#define MATCH_CHARSET 1
|
#define MATCH_CHARSET 1
|
||||||
|
|
||||||
{ FC_FAMILY, FcCompareString, 2, 4 },
|
{ FC_FAMILY, FcCompareFamily, 2, 4 },
|
||||||
#define MATCH_FAMILY 2
|
#define MATCH_FAMILY 2
|
||||||
|
|
||||||
{ FC_LANG, FcCompareString, 3, 3 },
|
{ FC_LANG, FcCompareLang, 3, 3 },
|
||||||
#define MATCH_LANG 3
|
#define MATCH_LANG 3
|
||||||
|
|
||||||
{ FC_SPACING, FcCompareInteger, 5, 5 },
|
{ FC_SPACING, FcCompareInteger, 5, 5 },
|
||||||
|
@ -545,6 +572,11 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **cs, FcBool tri
|
||||||
ncs = FcCharSetCopy (ncs);
|
ncs = FcCharSetCopy (ncs);
|
||||||
*cs = ncs;
|
*cs = ncs;
|
||||||
FcPatternReference (node->pattern);
|
FcPatternReference (node->pattern);
|
||||||
|
if (FcDebug () & FC_DBG_MATCH)
|
||||||
|
{
|
||||||
|
printf ("Add ");
|
||||||
|
FcPatternPrint (node->pattern);
|
||||||
|
}
|
||||||
if (!FcFontSetAdd (fs, node->pattern))
|
if (!FcFontSetAdd (fs, node->pattern))
|
||||||
{
|
{
|
||||||
FcPatternDestroy (node->pattern);
|
FcPatternDestroy (node->pattern);
|
||||||
|
@ -582,6 +614,11 @@ FcFontSetSort (FcConfig *config,
|
||||||
int f;
|
int f;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (FcDebug () & FC_DBG_MATCH)
|
||||||
|
{
|
||||||
|
printf ("Sort ");
|
||||||
|
FcPatternPrint (p);
|
||||||
|
}
|
||||||
nnodes = 0;
|
nnodes = 0;
|
||||||
for (set = 0; set < nsets; set++)
|
for (set = 0; set < nsets; set++)
|
||||||
{
|
{
|
||||||
|
|
22
src/fcpat.c
22
src/fcpat.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.9 2002/06/19 20:08:22 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.10 2002/06/29 20:31:02 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -392,7 +392,11 @@ FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSe
|
||||||
}
|
}
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
FcPatternAddWithBinding (FcPattern *p,
|
||||||
|
const char *object,
|
||||||
|
FcValue value,
|
||||||
|
FcValueBinding binding,
|
||||||
|
FcBool append)
|
||||||
{
|
{
|
||||||
FcPatternElt *e;
|
FcPatternElt *e;
|
||||||
FcValueList *new, **prev;
|
FcValueList *new, **prev;
|
||||||
|
@ -408,7 +412,7 @@ FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
||||||
goto bail1;
|
goto bail1;
|
||||||
|
|
||||||
new->value = value;
|
new->value = value;
|
||||||
new->binding = FcValueBindingStrong;
|
new->binding = binding;
|
||||||
new->next = 0;
|
new->next = 0;
|
||||||
|
|
||||||
e = FcPatternInsertElt (p, object);
|
e = FcPatternInsertElt (p, object);
|
||||||
|
@ -449,6 +453,18 @@ bail0:
|
||||||
return FcFalse;
|
return FcFalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
||||||
|
{
|
||||||
|
return FcPatternAddWithBinding (p, object, value, FcValueBindingStrong, append);
|
||||||
|
}
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append)
|
||||||
|
{
|
||||||
|
return FcPatternAddWithBinding (p, object, value, FcValueBindingWeak, append);
|
||||||
|
}
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternDel (FcPattern *p, const char *object)
|
FcPatternDel (FcPattern *p, const char *object)
|
||||||
{
|
{
|
||||||
|
|
25
src/fcstr.c
25
src/fcstr.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcstr.c,v 1.4 2002/05/21 17:06:22 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcstr.c,v 1.5 2002/05/29 22:07:33 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -82,6 +82,29 @@ FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
return (int) c1 - (int) c2;
|
return (int) c1 - (int) c2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
|
{
|
||||||
|
FcChar8 c1, c2;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
c1 = *s1++;
|
||||||
|
while (c1 == ' ');
|
||||||
|
do
|
||||||
|
c2 = *s2++;
|
||||||
|
while (c2 == ' ');
|
||||||
|
if (!c1 || !c2)
|
||||||
|
break;
|
||||||
|
c1 = FcToLower (c1);
|
||||||
|
c2 = FcToLower (c2);
|
||||||
|
if (c1 != c2)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (int) c1 - (int) c2;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
FcStrCmp (const FcChar8 *s1, const FcChar8 *s2)
|
FcStrCmp (const FcChar8 *s1, const FcChar8 *s2)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue