Mercurial > emacs
changeset 103887:427b644c9e3b
(ftfont_spec_pattern): New arg langname. Caller
changed.
(ftfont_list): Adjusted for the change of ftfont_spec_pattern.
Reject a font who has adstyle property that is different from a
langname derived from registry property.
(ftfont_match): Adjusted for the change of ftfont_spec_pattern.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 14 Jul 2009 11:55:03 +0000 |
parents | d9b3b49cf6d3 |
children | 0cebb3e8f85d |
files | src/ftfont.c |
diffstat | 1 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ftfont.c Tue Jul 14 08:40:58 2009 +0000 +++ b/src/ftfont.c Tue Jul 14 11:55:03 2009 +0000 @@ -700,13 +700,15 @@ } static FcPattern *ftfont_spec_pattern P_ ((Lisp_Object, char *, - struct OpenTypeSpec **)); + struct OpenTypeSpec **, + char **langname)); static FcPattern * -ftfont_spec_pattern (spec, otlayout, otspec) +ftfont_spec_pattern (spec, otlayout, otspec, langname) Lisp_Object spec; char *otlayout; struct OpenTypeSpec **otspec; + char **langname; { Lisp_Object tmp, extra; FcPattern *pattern = NULL; @@ -744,7 +746,8 @@ if (fc_charset_idx < 0) return NULL; charset = fc_charset_table[fc_charset_idx].fc_charset; - lang = (FcChar8 *) fc_charset_table[fc_charset_idx].lang; + *langname = fc_charset_table[fc_charset_idx].lang; + lang = (FcChar8 *) *langname; if (lang) { langset = FcLangSetCreate (); @@ -876,6 +879,7 @@ char otlayout[15]; /* For "otlayout:XXXX" */ struct OpenTypeSpec *otspec = NULL; int spacing = -1; + char *langname = NULL; if (! fc_initialized) { @@ -883,7 +887,7 @@ fc_initialized = 1; } - pattern = ftfont_spec_pattern (spec, otlayout, &otspec); + pattern = ftfont_spec_pattern (spec, otlayout, &otspec, &langname); if (! pattern) return Qnil; if (FcPatternGetCharSet (pattern, FC_CHARSET, 0, &charset) != FcResultMatch) @@ -1023,13 +1027,18 @@ if (j == ASIZE (chars)) continue; } - if (! NILP (adstyle)) + if (! NILP (adstyle) || langname) { Lisp_Object this_adstyle = get_adstyle_property (fontset->fonts[i]); - if (NILP (this_adstyle) - || xstrcasecmp (SDATA (SYMBOL_NAME (adstyle)), - SDATA (SYMBOL_NAME (this_adstyle))) != 0) + if (! NILP (adstyle) + && (NILP (this_adstyle) + || xstrcasecmp (SDATA (SYMBOL_NAME (adstyle)), + SDATA (SYMBOL_NAME (this_adstyle))) != 0)) + continue; + if (langname + && ! NILP (this_adstyle) + && xstrcasecmp (langname, SDATA (SYMBOL_NAME (this_adstyle)))) continue; } entity = ftfont_pattern_entity (fontset->fonts[i], @@ -1062,6 +1071,7 @@ FcResult result; char otlayout[15]; /* For "otlayout:XXXX" */ struct OpenTypeSpec *otspec = NULL; + char *langname = NULL; if (! fc_initialized) { @@ -1069,7 +1079,7 @@ fc_initialized = 1; } - pattern = ftfont_spec_pattern (spec, otlayout, &otspec); + pattern = ftfont_spec_pattern (spec, otlayout, &otspec, &langname); if (! pattern) return Qnil;