changeset 96111:365321a44102

(font_matches_spec): Use csb bitfield from font signature to determine language support.
author Jason Rumney <jasonr@gnu.org>
date Fri, 20 Jun 2008 15:27:28 +0000
parents 80b036683b35
children 6a07d6deb052
files src/w32font.c
diffstat 1 files changed, 15 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32font.c	Fri Jun 20 15:20:34 2008 +0000
+++ b/src/w32font.c	Fri Jun 20 15:27:28 2008 +0000
@@ -1103,6 +1103,11 @@
   return 1;
 }
 
+/* Codepage Bitfields in FONTSIGNATURE struct.  */
+#define CSB_JAPANESE (1 << 17)
+#define CSB_KOREAN ((1 << 19) | (1 << 21))
+#define CSB_CHINESE ((1 << 18) | (1 << 20))
+
 static int
 font_matches_spec (type, font, spec, backend, logfont)
      DWORD type;
@@ -1247,30 +1252,32 @@
             }
 	  else if (EQ (key, QClang) && SYMBOLP (val))
 	    {
-	      /* Just handle the CJK languages here, as the language
+	      /* Just handle the CJK languages here, as the lang
 		 parameter is used to select a font with appropriate
 		 glyphs in the cjk unified ideographs block. Other fonts
 	         support for a language can be solely determined by
 	         its character coverage.  */
 	      if (EQ (val, Qja))
 		{
-		  if (font->ntmTm.tmCharSet != SHIFTJIS_CHARSET)
+		  if (!(font->ntmFontSig.fsCsb[0] & CSB_JAPANESE))
 		    return 0;
 		}
 	      else if (EQ (val, Qko))
 		{
-		  if (font->ntmTm.tmCharSet != HANGUL_CHARSET
-		      && font->ntmTm.tmCharSet != JOHAB_CHARSET)
+		  if (!(font->ntmFontSig.fsCsb[0] & CSB_KOREAN))
 		    return 0;
 		}
 	      else if (EQ (val, Qzh))
 		{
-		  if (font->ntmTm.tmCharSet != GB2312_CHARSET
-		      && font->ntmTm.tmCharSet != CHINESEBIG5_CHARSET)
-		return 0;
+		  if (!(font->ntmFontSig.fsCsb[0] & CSB_CHINESE))
+                    return 0;
 		}
 	      else
-		/* Any other language, we don't recognize it. Fontset
+		/* Any other language, we don't recognize it. Only the above
+                   currently appear in fontset.el, so it isn't worth
+                   creating a mapping table of codepages/scripts to languages
+                   or opening the font to see if there are any language tags
+                   in it that the W32 API does not expose. Fontset
 		   spec should have a fallback, as some backends do
 		   not recognize language at all.  */
 		return 0;