# HG changeset patch # User Kenichi Handa # Date 1151887877 0 # Node ID 69dc5ab6d693f9306a10df7a6997ed048ec26126 # Parent c1ec6b950928964a19c99ad6642dc14852b51cb1 (ftfont_list): Handle QCotf property. (ftfont_open): Set charset related members to -1. diff -r c1ec6b950928 -r 69dc5ab6d693 src/ftfont.c --- a/src/ftfont.c Mon Jul 03 00:50:10 2006 +0000 +++ b/src/ftfont.c Mon Jul 03 00:51:17 2006 +0000 @@ -315,6 +315,7 @@ double dpi = -1; int spacing = -1; int scalable = -1; + char otf_script[15]; /* For "otlayout\:XXXX" */ val = null_vector; @@ -348,8 +349,11 @@ extra = AREF (spec, FONT_EXTRA_INDEX); font_name = Qnil; + otf_script[0] = '\0'; if (CONSP (extra)) { + Lisp_Object script = Qnil; + tmp = assq_no_quit (QCname, extra); if (CONSP (tmp)) { @@ -358,8 +362,15 @@ return val; } tmp = assq_no_quit (QCotf, extra); - if (! NILP (tmp)) - return val; + if (CONSP (tmp) && SYMBOLP (XCDR (tmp))) + { + tmp = XCDR (tmp); + script = assq_no_quit (tmp, Votf_script_alist); + if (CONSP (script) && SYMBOLP (XCDR (script))) + script = XCDR (script); + tmp = SYMBOL_NAME (tmp); + sprintf (otf_script, "otlayout:%s", (char *) SDATA (tmp)); + } tmp = assq_no_quit (QClanguage, extra); if (CONSP (tmp)) { @@ -382,11 +393,12 @@ } } tmp = assq_no_quit (QCscript, extra); - if (CONSP (tmp) && ! charset) + if (CONSP (tmp)) + script = XCDR (tmp); + if (! NILP (script) && ! charset) { - Lisp_Object script = XCDR (tmp); - Lisp_Object chars = assq_no_quit (script, - Vscript_representative_chars); + Lisp_Object chars + = assq_no_quit (script, Vscript_representative_chars); if (CONSP (chars)) { @@ -461,6 +473,8 @@ FC_CHARSET, FC_FILE, NULL); if (! objset) goto err; + if (otf_script[0] && ! FcObjectSetAdd (objset, FC_CAPABILITY)) + goto err; fontset = FcFontList (NULL, pattern, objset); if (! fontset) @@ -501,6 +515,15 @@ || this > FC_WEIGHT_MEDIUM))) continue; } + if (otf_script[0]) + { + FcChar8 *this; + + if (FcPatternGetString (fontset->fonts[i], FC_CAPABILITY, 0, + &this) != FcResultMatch + || ! strstr ((char *) this, otf_script)) + continue; + } entity = ftfont_pattern_entity (fontset->fonts[i], frame, registry); if (! NILP (entity)) val = Fcons (entity, val); @@ -652,6 +675,7 @@ font->font.name = font->font.full_name = NULL; font->file_name = (char *) file; font->font.size = ft_face->size->metrics.max_advance >> 6; + font->font.charset = font->encoding_charset = font->repertory_charset = -1; font->ascent = ft_face->size->metrics.ascender >> 6; font->descent = - ft_face->size->metrics.descender >> 6; font->font.height = ft_face->size->metrics.height >> 6;