/* Composite sequence support.
Copyright (C) 2001, 2002, 2003, 2004, 2005,
- 2006 Free Software Foundation, Inc.
- Copyright (C) 1999
+ 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H14PRO021
Copyright (C) 2003, 2006
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
float leftmost = 0.0, rightmost;
ch = XINT (key_contents[0]);
- rightmost = CHAR_WIDTH (ch);
+ rightmost = ch != '\t' ? CHAR_WIDTH (ch) : 1;
for (i = 1; i < glyph_len; i += 2)
{
rule = XINT (key_contents[i]);
ch = XINT (key_contents[i + 1]);
- this_width = CHAR_WIDTH (ch);
+ this_width = ch != '\t' ? CHAR_WIDTH (ch) : 1;
/* A composition rule is specified by an integer value
that encodes global and new reference points (GREF and
avoid it, in such a case, we change the property of the
latter to the copy of it. */
if (from > BEGV
- && find_composition (from - 1, -1, &start, &end, &prop, Qnil))
+ && find_composition (from - 1, -1, &start, &end, &prop, Qnil)
+ && COMPOSITION_VALID_P (start, end, prop))
{
min_pos = start;
if (end > to)
from = end;
}
else if (from < ZV
- && find_composition (from, -1, &start, &from, &prop, Qnil))
+ && find_composition (from, -1, &start, &from, &prop, Qnil)
+ && COMPOSITION_VALID_P (start, from, prop))
{
if (from > to)
max_pos = from;
(to - 1). */
while (from < to - 1
&& find_composition (from, to, &start, &from, &prop, Qnil)
+ && COMPOSITION_VALID_P (start, from, prop)
&& from < to - 1)
run_composition_function (start, from, prop);
}
if (check_mask & CHECK_TAIL)
{
if (from < to
- && find_composition (to - 1, -1, &start, &end, &prop, Qnil))
+ && find_composition (to - 1, -1, &start, &end, &prop, Qnil)
+ && COMPOSITION_VALID_P (start, end, prop))
{
/* TO should be also at composition boundary. But,
insertion or deletion will make two compositions adjacent
run_composition_function (start, end, prop);
}
else if (to < ZV
- && find_composition (to, -1, &start, &end, &prop, Qnil))
+ && find_composition (to, -1, &start, &end, &prop, Qnil)
+ && COMPOSITION_VALID_P (start, end, prop))
{
run_composition_function (start, end, prop);
max_pos = end;