# HG changeset patch # User Kenichi Handa # Date 1273809202 -32400 # Node ID 76b847a165690fdf9aba92626624fdf65771edaa # Parent 58b814d1279763a18617dfd3920c9836aa430e20# Parent fa2c24863c9e721a768412eb7021c979b51a2521 font.c (font_range): Return the range for the font found at first. diff -r 58b814d12797 -r 76b847a16569 src/ChangeLog --- a/src/ChangeLog Thu May 13 20:36:40 2010 -0700 +++ b/src/ChangeLog Fri May 14 12:53:22 2010 +0900 @@ -1,3 +1,8 @@ +2010-05-14 Kenichi Handa + + * font.c (font_range): Return the range for the font found at + first. + 2010-05-14 Glenn Morris * Makefile.in (mktime, X11, register): Move undefs to configure. diff -r 58b814d12797 -r 76b847a16569 src/font.c --- a/src/font.c Thu May 13 20:36:40 2010 -0700 +++ b/src/font.c Fri May 14 12:53:22 2010 +0900 @@ -3961,7 +3961,7 @@ struct face *face; Lisp_Object string; { - EMACS_INT pos_byte, ignore, start, start_byte; + EMACS_INT pos_byte, ignore; int c; Lisp_Object font_object = Qnil; @@ -3983,7 +3983,6 @@ pos_byte = string_char_to_byte (string, pos); } - start = pos, start_byte = pos_byte; while (pos < *limit) { Lisp_Object category; @@ -3992,6 +3991,10 @@ FETCH_CHAR_ADVANCE_NO_CHECK (c, pos, pos_byte); else FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, pos, pos_byte); + category = CHAR_TABLE_REF (Vunicode_category_table, c); + if (EQ (category, QCf) + || CHAR_VARIATION_SELECTOR_P (c)) + continue; if (NILP (font_object)) { font_object = font_for_char (face, c, pos - 1, string); @@ -3999,40 +4002,8 @@ return Qnil; continue; } - - category = CHAR_TABLE_REF (Vunicode_category_table, c); - if (! EQ (category, QCf) - && ! CHAR_VARIATION_SELECTOR_P (c) - && font_encode_char (font_object, c) == FONT_INVALID_CODE) - { - Lisp_Object f = font_for_char (face, c, pos - 1, string); - EMACS_INT i, i_byte; - - - if (NILP (f)) - { - *limit = pos - 1; - return font_object; - } - i = start, i_byte = start_byte; - while (i < pos - 1) - { - - if (NILP (string)) - FETCH_CHAR_ADVANCE_NO_CHECK (c, i, i_byte); - else - FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, i, i_byte); - category = CHAR_TABLE_REF (Vunicode_category_table, c); - if (! EQ (category, QCf) - && ! CHAR_VARIATION_SELECTOR_P (c) - && font_encode_char (f, c) == FONT_INVALID_CODE) - { - *limit = pos - 1; - return font_object; - } - } - font_object = f; - } + if (font_encode_char (font_object, c) == FONT_INVALID_CODE) + *limit = pos - 1; } return font_object; }