diff -rup pango-1.18.3.orig/pango/pangowin32-fontmap.c pango-1.18.3/pango/pangowin32-fontmap.c
--- pango-1.18.3.orig/pango/pangowin32-fontmap.c	Tue Jan  8 18:16:16 2008
+++ pango-1.18.3/pango/pangowin32-fontmap.c	Tue Jan  8 20:41:50 2008
@@ -57,6 +57,10 @@ struct _PangoWin32SizeInfo
 # define NTM_PS_OPENTYPE 0x20000
 #endif
 
+#if !defined(NTM_TYPE1)
+# define NTM_TYPE1 0x100000
+#endif
+
 #define PANGO_WIN32_TYPE_FAMILY              (pango_win32_family_get_type ())
 #define PANGO_WIN32_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_WIN32_TYPE_FAMILY, PangoWin32Family))
 #define PANGO_WIN32_IS_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_WIN32_TYPE_FAMILY))
@@ -168,10 +172,10 @@ logfontw_nosize_equal (const LOGFONTW *l
 }
 
 static int CALLBACK
-pango_win32_inner_enum_proc (LOGFONTW    *lfp,
-			     TEXTMETRICW *metrics,
-			     DWORD        fontType,
-			     LPARAM       lParam)
+pango_win32_inner_enum_proc (LOGFONTW       *lfp,
+			     NEWTEXTMETRICW *metrics,
+			     DWORD           fontType,
+			     LPARAM          lParam)
 {
   PangoWin32FontMap *win32fontmap = (PangoWin32FontMap *)lParam;
 
@@ -196,7 +200,7 @@ pango_win32_enum_proc (LOGFONTW       *l
 
   if (fontType == TRUETYPE_FONTTYPE ||
       (_pango_win32_os_version_info.dwMajorVersion >= 5 &&
-       (metrics->ntmFlags & NTM_PS_OPENTYPE)))
+       ((metrics->ntmFlags & NTM_PS_OPENTYPE) || (metrics->ntmFlags & NTM_TYPE1))))
     {
       lf = *lfp;
 
@@ -1098,6 +1102,7 @@ pango_win32_insert_font (PangoWin32FontM
 
   win32face->is_synthetic = is_synthetic;
 
+  win32face->has_cmap = TRUE;
   win32face->cmap_format = 0;
   win32face->cmap = NULL;
 
diff -rup pango-1.18.3.orig/pango/pangowin32-private.h pango-1.18.3/pango/pangowin32-private.h
--- pango-1.18.3.orig/pango/pangowin32-private.h	Tue Oct 16 06:44:33 2007
+++ pango-1.18.3/pango/pangowin32-private.h	Tue Jan  8 20:31:18 2008
@@ -165,6 +165,7 @@ struct _PangoWin32Face
   char *face_name;
   gboolean is_synthetic;
 
+  gboolean has_cmap;
   guint16 cmap_format;
   gpointer cmap;
 
diff -rup pango-1.18.3.orig/pango/pangowin32.c pango-1.18.3/pango/pangowin32.c
--- pango-1.18.3.orig/pango/pangowin32.c	Tue Oct 16 06:44:33 2007
+++ pango-1.18.3/pango/pangowin32.c	Wed Jan  9 01:23:32 2008
@@ -1463,6 +1463,26 @@ font_get_cmap (PangoFont *font)
   return cmap;
 }
 
+static gint
+pango_win32_font_get_type1_glyph_index (PangoFont *font,
+                                        gunichar   wc)
+{
+  wchar_t unicode[2];
+  WORD glyph_index;
+  gint32 res;
+
+  unicode[0] = wc;
+  unicode[1] = 0;
+  pango_win32_font_select_font (font, _pango_win32_hdc);
+  res = GetGlyphIndicesW (_pango_win32_hdc, unicode, 1, &glyph_index, 0);
+  pango_win32_font_done_font (font);
+
+  if (res == 1)
+      return glyph_index;
+  else
+      return 0;
+}
+
 /**
  * pango_win32_font_get_glyph_index:
  * @font: a #PangoFont.
@@ -1481,11 +1501,16 @@ pango_win32_font_get_glyph_index (PangoF
   gpointer cmap;
   guint16 glyph;
 
-  /* Do GetFontData magic on font->hfont here. */
-  cmap = font_get_cmap (font);
+  if (win32font->win32face->has_cmap)
+    {
+      /* Do GetFontData magic on font->hfont here. */
+      cmap = font_get_cmap (font);
+      if (cmap == NULL)
+	win32font->win32face->has_cmap = FALSE;
+    }
 
-  if (cmap == NULL)
-    return 0;
+  if (!win32font->win32face->has_cmap)
+    return pango_win32_font_get_type1_glyph_index (font, wc);
 
   if (win32font->win32face->cmap_format == 4)
     {
@@ -1636,6 +1661,41 @@ font_has_name_in (PangoFont             
 }
 
 static void
+pango_win32_font_calc_type1_coverage (PangoFont     *font,
+				      PangoCoverage *coverage,
+				      PangoLanguage *lang)
+{
+  GLYPHSET *glyph_set;
+  gint32 res;
+  guint32 ch;
+  guint32 i;
+  
+  pango_win32_font_select_font (font, _pango_win32_hdc);
+  res = GetFontUnicodeRanges(_pango_win32_hdc, NULL);
+  if (res == 0)
+    goto fail1;
+
+  glyph_set = g_malloc (res);
+  res = GetFontUnicodeRanges(_pango_win32_hdc, glyph_set);
+  if (res == 0)
+    goto fail2;
+  
+  for (i = 0; i < glyph_set->cRanges; i++) 
+    {
+      guint32 end = glyph_set->ranges[i].wcLow + glyph_set->ranges[i].cGlyphs;
+
+      for (ch = glyph_set->ranges[i].wcLow; ch < end; ch++)
+	pango_coverage_set (coverage, ch, PANGO_COVERAGE_EXACT);
+    }
+
+ fail2:
+  g_free (glyph_set);
+
+ fail1:
+  pango_win32_font_done_font (font);
+}
+
+static void
 pango_win32_font_calc_coverage (PangoFont     *font,
 				PangoCoverage *coverage,
 				PangoLanguage *lang)
@@ -1659,11 +1719,17 @@ pango_win32_font_calc_coverage (PangoFon
       hide_unihan = TRUE;
     }
 
-  /* Do GetFontData magic on font->hfont here. */
-  cmap = font_get_cmap (font);
-  if (cmap == NULL)
+  if (win32font->win32face->has_cmap)
+    {
+      /* Do GetFontData magic on font->hfont here. */
+      cmap = font_get_cmap (font);
+      if (cmap == NULL)
+	win32font->win32face->has_cmap = FALSE;
+    }
+
+  if (!win32font->win32face->has_cmap)
     {
-      PING(("no table"));
+      pango_win32_font_calc_type1_coverage (font, coverage, lang);
       return;
     }
 
