Mercurial > emacs
changeset 108560:76b847a16569
font.c (font_range): Return the range for the font found at first.
author | Kenichi Handa <handa@etlken> |
---|---|
date | Fri, 14 May 2010 12:53:22 +0900 |
parents | 58b814d12797 (current diff) fa2c24863c9e (diff) |
children | 23f4cd23ea89 3088b1e22407 |
files | |
diffstat | 2 files changed, 12 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- 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 <handa@m17n.org> + + * font.c (font_range): Return the range for the font found at + first. + 2010-05-14 Glenn Morris <rgm@gnu.org> * Makefile.in (mktime, X11, register): Move undefs to configure.
--- 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; }