From: Kenichi Handa Date: Fri, 14 May 2010 03:47:38 +0000 (+0900) Subject: font.c (font_range): Return the range for the font found at first. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~211^2~1 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0e5d78007c37e98a5682a5d4c18966cdf6063c0b;p=emacs.git font.c (font_range): Return the range for the font found at first. --- diff --git a/src/ChangeLog b/src/ChangeLog index 16c20e188b4..f759d0cebcd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-05-14 Kenichi Handa + + * font.c (font_range): Return the range for the font found at + first. + 2010-05-12 Glenn Morris * Makefile.in (YMF_PASS_LDFLAGS, LD, LINKER): Simplify the logic. diff --git a/src/font.c b/src/font.c index 2d55065e9c8..5ee51a6474c 100644 --- a/src/font.c +++ b/src/font.c @@ -3961,7 +3961,7 @@ font_range (pos, limit, w, face, string) 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 @@ font_range (pos, limit, w, face, string) pos_byte = string_char_to_byte (string, pos); } - start = pos, start_byte = pos_byte; while (pos < *limit) { Lisp_Object category; @@ -3992,6 +3991,10 @@ font_range (pos, limit, w, face, string) 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 @@ font_range (pos, limit, w, face, string) 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; }