From 1dde1e536afb77edba29ba6b880b77fc8eb3ebc8 Mon Sep 17 00:00:00 2001
From: Hidenori Takeshima <hidenori@a2.ctktv.ne.jp>
Date: Sat, 15 Jul 2000 21:28:05 +0000
Subject: [PATCH] Added DBCS/unicode encoding templates.

---
 graphics/x11drv/xfont.c | 59 ++++++++++++++++++++++++++++++++++-------
 1 file changed, 50 insertions(+), 9 deletions(-)

diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index 1b2f3491cd0..6a92fd4d845 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -175,6 +175,31 @@ static SuffixCharset sufch_koi8[] = {
     { "u", RUSSIAN_CHARSET, 20866 },
     { NULL, RUSSIAN_CHARSET, 20866 }};
 
+/* FIXME: DBCS charsets need 2 or more fonts */
+static SuffixCharset sufch_jisx0201[] = {
+    { "0", ANSI_CHARSET, 932 },
+    { NULL, ANSI_CHARSET, 932 }};
+
+static SuffixCharset sufch_jisx0208[] = {
+    { "0", SHIFTJIS_CHARSET, 932 },
+    { NULL, SHIFTJIS_CHARSET, 932 }};
+
+static SuffixCharset sufch_ksc5601[] = {
+    { "0", HANGEUL_CHARSET, 949 },
+    { NULL, HANGEUL_CHARSET, 949 }};
+
+static SuffixCharset sufch_gb2312[] = {
+    { "0", GB2312_CHARSET, 936 },
+    { NULL, GB2312_CHARSET, 936 }};
+
+static SuffixCharset sufch_big5[] = {
+    { "0", CHINESEBIG5_CHARSET, 950 },
+    { NULL, CHINESEBIG5_CHARSET, 950 }};
+
+static SuffixCharset sufch_unicode[] = {
+    { "0", DEFAULT_CHARSET, 0 },
+    { NULL, DEFAULT_CHARSET, 0 }};
+
 /* Each of these must be matched explicitly */
 static SuffixCharset sufch_any[] = {
     { "fontspecific", SYMBOL_CHARSET, CP_SYMBOL },
@@ -201,7 +226,15 @@ static fontEncodingTemplate __fETTable[] = {
 			{ "tis620.2533",  sufch_tis620,       &__fETTable[7] },
 			{ "viscii1.1",    sufch_viscii,       &__fETTable[8] },
 			{ "windows",      sufch_windows,      &__fETTable[9] },
-			{ "koi8",         sufch_koi8,         &__fETTable[10] },
+			{ "koi8",         sufch_koi8,         &__fETTable[10]},
+			{ "jisx0201.1976",sufch_jisx0201,     &__fETTable[11]},
+			{ "jisc6226.1978",sufch_jisx0208,     &__fETTable[12]},
+			{ "jisx0208.1983",sufch_jisx0208,     &__fETTable[13]},
+			{ "jisx0208.1990",sufch_jisx0208,     &__fETTable[14]},
+			{ "ksc5601.1987", sufch_ksc5601,      &__fETTable[15]},
+			{ "gb2312.1980",  sufch_gb2312,       &__fETTable[16]},
+			{ "big5.et",      sufch_big5,         &__fETTable[17]},
+			{ "unicode",      sufch_unicode,      &__fETTable[18]},
 			/* NULL prefix matches anything so put it last */
 			{   NULL,         sufch_any,          NULL },
 };
@@ -606,14 +639,13 @@ static int LFD_InitFontInfo( fontInfo* fi, const LFD* lfd, LPCSTR fullname )
 
 /* charset registry, charset encoding - */
    lpstr = lfd->charset_registry;
-   if( strstr(lpstr, "jisx") || 
+   if( strstr(lpstr, "jisx") ||
+       strstr(lpstr, "jisc") || 
        strstr(lpstr, "ksc") || 
        strstr(lpstr, "gb2312") ||
-       strstr(lpstr, "big5") ||
-       strstr(lpstr, "unicode") )
+       strstr(lpstr, "big5") )
    {
-       TRACE(" 2-byte fonts like '%s' are not supported\n", fullname);
-       return FALSE;
+       FIXME("DBCS fonts like '%s' are not worked correctly now.\n", fullname);
    }
 
    fi->df.dfCharSet = ANSI_CHARSET;
@@ -2244,12 +2276,21 @@ static UINT XFONT_Match( fontMatch* pfm )
    pfm->flags &= FO_MATCH_MASK;
 
 /* Charset */
-   if( plf->lfCharSet == DEFAULT_CHARSET )
+   if (pfi->df.dfCharSet == DEFAULT_CHARSET)
+   {
+      /* special case(unicode font) */
+      /* priority: unmatched charset < unicode < matched charset */
+      penalty += 0x50;
+   }
+   else
    {
-       if( (pfi->df.dfCharSet != ANSI_CHARSET) && (pfi->df.dfCharSet != DEFAULT_CHARSET) ) 
+     if( plf->lfCharSet == DEFAULT_CHARSET )
+     {
+         if (pfi->df.dfCharSet != ANSI_CHARSET)
 	    penalty += 0x200;
+     }
+     else if (plf->lfCharSet != pfi->df.dfCharSet) penalty += 0x200;
    }
-   else if (plf->lfCharSet != pfi->df.dfCharSet) penalty += 0x200;
 
 /* Height */
    height = -1;
-- 
GitLab