From: Kenichi Handa Date: Wed, 25 Aug 2010 04:39:30 +0000 (+0900) Subject: Allow composition striding over PT. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~48^2~240^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f6aa6ec68ed936800ef2c3aefa42102e60b654cb;p=emacs.git Allow composition striding over PT. --- diff --git a/src/ChangeLog b/src/ChangeLog index ef951515f28..5ce4c049c77 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2010-08-25 Kenichi Handa + + * composite.c (composition_compute_stop_pos): Don't break + composition at PT. + (composition_reseat_it): Likewise. Fix calculation of character + position starting a composition. + (Fcomposition_get_gstring): Don't limit the number of components + for automatic composition. + 2010-08-25 Kenichi Handa * composite.c (composition_compute_stop_pos): In forward search, diff --git a/src/composite.c b/src/composite.c index 3b128853c10..233f9ac8969 100644 --- a/src/composite.c +++ b/src/composite.c @@ -969,7 +969,9 @@ autocmp_chars (Lisp_Object rule, EMACS_INT charpos, EMACS_INT bytepos, EMACS_INT static Lisp_Object _work_val; static int _work_char; -/* 1 iff the character C is composable. */ +/* 1 iff the character C is composable. Characters of general + category Z? or C? are not composable except for ZWNJ and ZWJ. */ + #define CHAR_COMPOSABLE_P(C) \ ((C) == 0x200C || (C) == 0x200D \ || (_work_val = CHAR_TABLE_REF (Vunicode_category_table, (C)), \ @@ -1028,19 +1030,6 @@ composition_compute_stop_pos (struct composition_it *cmp_it, EMACS_INT charpos, cmp_it->stop_pos = endpos = start; cmp_it->ch = -1; } - if (NILP (string)) - { - /* A composition never strides over PT. */ - if (PT > charpos) - { - if (PT < endpos) - cmp_it->stop_pos = endpos = PT; - } - else if (PT < charpos && PT > endpos) - { - cmp_it->stop_pos = endpos = PT - 1; - } - } if (NILP (current_buffer->enable_multibyte_characters) || NILP (Vauto_composition_mode)) return; @@ -1233,23 +1222,8 @@ composition_compute_stop_pos (struct composition_it *cmp_it, EMACS_INT charpos, int composition_reseat_it (struct composition_it *cmp_it, EMACS_INT charpos, EMACS_INT bytepos, EMACS_INT endpos, struct window *w, struct face *face, Lisp_Object string) { - if (endpos <= charpos) - { - if (NILP (string)) - { - if (endpos < 0) - endpos = BEGV; - if (endpos < PT && PT < charpos) - endpos = PT; - } - else if (endpos < 0) - endpos = 0; - } - else - { - if (NILP (string) && charpos < PT && PT < endpos) - endpos = PT; - } + if (endpos < 0) + endpos = NILP (string) ? BEGV : 0; if (cmp_it->ch == -2) { @@ -1311,7 +1285,7 @@ composition_reseat_it (struct composition_it *cmp_it, EMACS_INT charpos, EMACS_I elt = XCAR (val); if (cmp_it->lookback > 0) { - cpos -= cmp_it->lookback; + cpos = charpos - cmp_it->lookback; if (STRINGP (string)) bpos = string_char_to_byte (string, cpos); else @@ -1773,8 +1747,6 @@ should be ignored. */) CHECK_NATNUM (from); CHECK_NATNUM (to); - if (XINT (to) > XINT (from) + MAX_COMPOSITION_COMPONENTS) - to = make_number (XINT (from) + MAX_COMPOSITION_COMPONENTS); if (! FONT_OBJECT_P (font_object)) { struct coding_system *coding;