From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kenichi Handa Newsgroups: gmane.emacs.devel Subject: Re: trunk patch: font.c: font_matching_entity() Date: Wed, 01 Oct 2008 21:38:11 +0900 Message-ID: References: <717CC6DC-7294-4815-9B61-748AEF59D0FB@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya") Content-Type: text/plain; charset=US-ASCII X-Trace: ger.gmane.org 1222864721 26413 80.91.229.12 (1 Oct 2008 12:38:41 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 1 Oct 2008 12:38:41 +0000 (UTC) Cc: emacs-devel@gnu.org To: Adrian Robert Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Oct 01 14:39:39 2008 connect(): Connection refused Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Kl0zM-0001iY-Pa for ged-emacs-devel@m.gmane.org; Wed, 01 Oct 2008 14:39:33 +0200 Original-Received: from localhost ([127.0.0.1]:56050 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kl0yJ-0004I8-WA for ged-emacs-devel@m.gmane.org; Wed, 01 Oct 2008 08:38:28 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kl0yE-0004HQ-RM for emacs-devel@gnu.org; Wed, 01 Oct 2008 08:38:22 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kl0yC-0004GY-RU for emacs-devel@gnu.org; Wed, 01 Oct 2008 08:38:22 -0400 Original-Received: from [199.232.76.173] (port=40956 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kl0yC-0004GR-6j for emacs-devel@gnu.org; Wed, 01 Oct 2008 08:38:20 -0400 Original-Received: from mx1.aist.go.jp ([150.29.246.133]:54248) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kl0yB-0004Y7-G3 for emacs-devel@gnu.org; Wed, 01 Oct 2008 08:38:20 -0400 Original-Received: from rqsmtp1.aist.go.jp (rqsmtp1.aist.go.jp [150.29.254.115]) by mx1.aist.go.jp with ESMTP id m91CcCai008230; Wed, 1 Oct 2008 21:38:12 +0900 (JST) env-from (handa@m17n.org) Original-Received: from smtp3.aist.go.jp by rqsmtp1.aist.go.jp with ESMTP id m91CcCTJ026371; Wed, 1 Oct 2008 21:38:12 +0900 (JST) env-from (handa@m17n.org) Original-Received: by smtp3.aist.go.jp with ESMTP id m91CcBlo014857; Wed, 1 Oct 2008 21:38:11 +0900 (JST) env-from (handa@m17n.org) Original-Received: from handa by etlken.m17n.org with local (Exim 4.69) (envelope-from ) id 1Kl0y3-0004J5-A8; Wed, 01 Oct 2008 21:38:11 +0900 In-reply-to: <717CC6DC-7294-4815-9B61-748AEF59D0FB@gmail.com> (message from Adrian Robert on Mon, 29 Sep 2008 20:54:01 -0400) User-Agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/23.0.60 (i686-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) X-detected-operating-system: by monty-python.gnu.org: Solaris 9 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:104276 Archived-At: In article <717CC6DC-7294-4815-9B61-748AEF59D0FB@gmail.com>, Adrian Robert writes: > [1 ] > Hi, > The function font_matching_entity() in font.c ignores its ATTRS > argument. If, in the sequence > xfaces.c: realize_x_face() > -> font.c: font_load_for_lface() > -> font.c: font_find_for_lface > the last call fails to find anything, font_matching_entity() will be > called, and, as far as I can tell, returns incorrect results. The > attached patch causes ATTRS to be used in both the cache check and the > call to driver->match(), and allows a better-matching font to be found > in the above use case. > (The patch also makes a case-insensitive family name comparison in > font_find_for_lface() case-sensitive when compiling under HAVE_NS.) Thank you for the patch. I've just installed it. --- Kenichi Handa handa@ni.aist.go.jp > -Adrian > [2 fontMatch_20080929.patch ] > Index: font.c > =================================================================== > RCS file: /sources/emacs/emacs/src/font.c,v > retrieving revision 1.83 > diff -u -p -r1.83 font.c > --- font.c 10 Sep 2008 05:54:09 -0000 1.83 > +++ font.c 30 Sep 2008 00:51:43 -0000 > @@ -2765,12 +2765,18 @@ font_matching_entity (f, attrs, spec) > struct font_driver_list *driver_list = f->font_driver_list; > Lisp_Object ftype, size, entity; > Lisp_Object frame; > + Lisp_Object work = Fcopy_font_spec (spec); > XSETFRAME (frame, f); > ftype = AREF (spec, FONT_TYPE_INDEX); > size = AREF (spec, FONT_SIZE_INDEX); > if (FLOATP (size)) > ASET (spec, FONT_SIZE_INDEX, make_number (font_pixel_size (f, spec))); > + > + FONT_SET_STYLE (work, FONT_WEIGHT_INDEX, attrs[LFACE_WEIGHT_INDEX]); > + FONT_SET_STYLE (work, FONT_SLANT_INDEX, attrs[LFACE_SLANT_INDEX]); > + FONT_SET_STYLE (work, FONT_WIDTH_INDEX, attrs[LFACE_SWIDTH_INDEX]); > + > entity = Qnil; > for (; driver_list; driver_list = driver_list->next) > if (driver_list->on > @@ -2779,14 +2785,14 @@ font_matching_entity (f, attrs, spec) > Lisp_Object cache = font_get_cache (f, driver_list->driver); > Lisp_Object copy; > - ASET (spec, FONT_TYPE_INDEX, driver_list->driver->type); > - entity = assoc_no_quit (spec, XCDR (cache)); > + ASET (work, FONT_TYPE_INDEX, driver_list->driver->type); > + entity = assoc_no_quit (work, XCDR (cache)); > if (CONSP (entity)) > entity = XCDR (entity); > else > { > - entity = driver_list->driver->match (frame, spec); > - copy = Fcopy_font_spec (spec); > + entity = driver_list->driver->match (frame, work); > + copy = Fcopy_font_spec (work); > ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); > XSETCDR (cache, Fcons (Fcons (copy, entity), XCDR (cache))); > } > @@ -2795,7 +2801,7 @@ font_matching_entity (f, attrs, spec) > } > ASET (spec, FONT_TYPE_INDEX, ftype); > ASET (spec, FONT_SIZE_INDEX, size); > - font_add_log ("match", spec, entity); > + font_add_log ("match", work, entity); > return entity; > } > @@ -3166,7 +3172,12 @@ font_find_for_lface (f, attrs, spec, c) > else > { > Lisp_Object alters > - = Fassoc_string (val, Vface_alternative_font_family_alist, Qt); > + = Fassoc_string (val, Vface_alternative_font_family_alist, > +#ifndef HAVE_NS > + Qt); > +#else > + Qnil); > +#endif > if (! NILP (alters)) > { > [3 ]