1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-19 18:13:55 +00:00

Allow composition striding over PT.

This commit is contained in:
Kenichi Handa 2010-08-25 13:39:30 +09:00
parent e87480069c
commit f6aa6ec68e
2 changed files with 15 additions and 34 deletions

View File

@ -1,3 +1,12 @@
2010-08-25 Kenichi Handa <handa@m17n.org>
* 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 <handa@m17n.org>
* composite.c (composition_compute_stop_pos): In forward search,

View File

@ -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;