1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-19 01:10:57 -08:00

(w32font_encode_char): Detect missing glyphs that are misreported as space.

(add_font_entity_to_list): Support unicode-bmp and unicode-sip
as aliases for registry iso10646-1.
This commit is contained in:
Jason Rumney 2008-06-11 22:40:06 +00:00
parent 0408f85857
commit f42adef67d
2 changed files with 20 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2008-06-11 Jason Rumney <jasonr@gnu.org>
* w32font.c (w32font_encode_char): Detect missing glyphs that are
misreported as space.
(add_font_entity_to_list): Support unicode-bmp and unicode-sip
as aliases for registry iso10646-1.
2008-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
* buffer.c (clone_per_buffer_values): Skip `name'.

View file

@ -310,6 +310,9 @@ w32font_encode_char (font, c)
dc = get_frame_dc (f);
old_font = SelectObject (dc, w32_font->compat_w32_font->hfont);
/* GetCharacterPlacement is used here rather than GetGlyphIndices because
it is supported on Windows NT 4 and 9x/ME. But it cannot reliably report
missing glyphs, see below for workaround. */
retval = GetCharacterPlacementW (dc, in, len, 0, &result, 0);
SelectObject (dc, old_font);
@ -317,7 +320,11 @@ w32font_encode_char (font, c)
if (retval)
{
if (result.nGlyphs != 1 || !result.lpGlyphs[0])
if (result.nGlyphs != 1 || !result.lpGlyphs[0]
/* GetCharacterPlacementW seems to return 3, which seems to be
the space glyph in most/all truetype fonts, instead of 0
for unsupported glyphs. */
|| (result.lpGlyphs[0] == 3 && !iswspace (in[0])))
return FONT_INVALID_CODE;
return result.lpGlyphs[0];
}
@ -1360,7 +1367,9 @@ add_font_entity_to_list (logical_font, physical_font, font_type, lParam)
/* If registry was specified as iso10646-1, only report
ANSI and DEFAULT charsets, as most unicode fonts will
contain one of those plus others. */
if (EQ (spec_charset, Qiso10646_1)
if ((EQ (spec_charset, Qiso10646_1)
|| EQ (spec_charset, Qunicode_bmp)
|| EQ (spec_charset, Qunicode_sip))
&& logical_font->elfLogFont.lfCharSet != DEFAULT_CHARSET
&& logical_font->elfLogFont.lfCharSet != ANSI_CHARSET)
return 1;
@ -1370,6 +1379,8 @@ add_font_entity_to_list (logical_font, physical_font, font_type, lParam)
least it eliminates known definite mismatches. */
else if (!NILP (spec_charset)
&& !EQ (spec_charset, Qiso10646_1)
&& !EQ (spec_charset, Qunicode_bmp)
&& !EQ (spec_charset, Qunicode_sip)
&& match_data->pattern.lfCharSet == DEFAULT_CHARSET
&& logical_font->elfLogFont.lfCharSet != DEFAULT_CHARSET)
return 1;