diff options
| author | Kenichi Handa | 2010-05-14 12:47:38 +0900 |
|---|---|---|
| committer | Kenichi Handa | 2010-05-14 12:47:38 +0900 |
| commit | 0e5d78007c37e98a5682a5d4c18966cdf6063c0b (patch) | |
| tree | 2b985fdfd03c8a4605493fba76d2ca6182cb91fb /src | |
| parent | e05aebe90549195bedca9ac550297233aeae9ac4 (diff) | |
| download | emacs-0e5d78007c37e98a5682a5d4c18966cdf6063c0b.tar.gz emacs-0e5d78007c37e98a5682a5d4c18966cdf6063c0b.zip | |
font.c (font_range): Return the range for the font found at first.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/font.c | 43 |
2 files changed, 12 insertions, 36 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 16c20e188b4..f759d0cebcd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2010-05-14 Kenichi Handa <handa@m17n.org> | ||
| 2 | |||
| 3 | * font.c (font_range): Return the range for the font found at | ||
| 4 | first. | ||
| 5 | |||
| 1 | 2010-05-12 Glenn Morris <rgm@gnu.org> | 6 | 2010-05-12 Glenn Morris <rgm@gnu.org> |
| 2 | 7 | ||
| 3 | * Makefile.in (YMF_PASS_LDFLAGS, LD, LINKER): Simplify the logic. | 8 | * 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) | |||
| 3961 | struct face *face; | 3961 | struct face *face; |
| 3962 | Lisp_Object string; | 3962 | Lisp_Object string; |
| 3963 | { | 3963 | { |
| 3964 | EMACS_INT pos_byte, ignore, start, start_byte; | 3964 | EMACS_INT pos_byte, ignore; |
| 3965 | int c; | 3965 | int c; |
| 3966 | Lisp_Object font_object = Qnil; | 3966 | Lisp_Object font_object = Qnil; |
| 3967 | 3967 | ||
| @@ -3983,7 +3983,6 @@ font_range (pos, limit, w, face, string) | |||
| 3983 | pos_byte = string_char_to_byte (string, pos); | 3983 | pos_byte = string_char_to_byte (string, pos); |
| 3984 | } | 3984 | } |
| 3985 | 3985 | ||
| 3986 | start = pos, start_byte = pos_byte; | ||
| 3987 | while (pos < *limit) | 3986 | while (pos < *limit) |
| 3988 | { | 3987 | { |
| 3989 | Lisp_Object category; | 3988 | Lisp_Object category; |
| @@ -3992,6 +3991,10 @@ font_range (pos, limit, w, face, string) | |||
| 3992 | FETCH_CHAR_ADVANCE_NO_CHECK (c, pos, pos_byte); | 3991 | FETCH_CHAR_ADVANCE_NO_CHECK (c, pos, pos_byte); |
| 3993 | else | 3992 | else |
| 3994 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, pos, pos_byte); | 3993 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, pos, pos_byte); |
| 3994 | category = CHAR_TABLE_REF (Vunicode_category_table, c); | ||
| 3995 | if (EQ (category, QCf) | ||
| 3996 | || CHAR_VARIATION_SELECTOR_P (c)) | ||
| 3997 | continue; | ||
| 3995 | if (NILP (font_object)) | 3998 | if (NILP (font_object)) |
| 3996 | { | 3999 | { |
| 3997 | font_object = font_for_char (face, c, pos - 1, string); | 4000 | font_object = font_for_char (face, c, pos - 1, string); |
| @@ -3999,40 +4002,8 @@ font_range (pos, limit, w, face, string) | |||
| 3999 | return Qnil; | 4002 | return Qnil; |
| 4000 | continue; | 4003 | continue; |
| 4001 | } | 4004 | } |
| 4002 | 4005 | if (font_encode_char (font_object, c) == FONT_INVALID_CODE) | |
| 4003 | category = CHAR_TABLE_REF (Vunicode_category_table, c); | 4006 | *limit = pos - 1; |
| 4004 | if (! EQ (category, QCf) | ||
| 4005 | && ! CHAR_VARIATION_SELECTOR_P (c) | ||
| 4006 | && font_encode_char (font_object, c) == FONT_INVALID_CODE) | ||
| 4007 | { | ||
| 4008 | Lisp_Object f = font_for_char (face, c, pos - 1, string); | ||
| 4009 | EMACS_INT i, i_byte; | ||
| 4010 | |||
| 4011 | |||
| 4012 | if (NILP (f)) | ||
| 4013 | { | ||
| 4014 | *limit = pos - 1; | ||
| 4015 | return font_object; | ||
| 4016 | } | ||
| 4017 | i = start, i_byte = start_byte; | ||
| 4018 | while (i < pos - 1) | ||
| 4019 | { | ||
| 4020 | |||
| 4021 | if (NILP (string)) | ||
| 4022 | FETCH_CHAR_ADVANCE_NO_CHECK (c, i, i_byte); | ||
| 4023 | else | ||
| 4024 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, i, i_byte); | ||
| 4025 | category = CHAR_TABLE_REF (Vunicode_category_table, c); | ||
| 4026 | if (! EQ (category, QCf) | ||
| 4027 | && ! CHAR_VARIATION_SELECTOR_P (c) | ||
| 4028 | && font_encode_char (f, c) == FONT_INVALID_CODE) | ||
| 4029 | { | ||
| 4030 | *limit = pos - 1; | ||
| 4031 | return font_object; | ||
| 4032 | } | ||
| 4033 | } | ||
| 4034 | font_object = f; | ||
| 4035 | } | ||
| 4036 | } | 4007 | } |
| 4037 | return font_object; | 4008 | return font_object; |
| 4038 | } | 4009 | } |