changeset 109976:26e31bcc4b06

Allow composition striding over PT.
author Kenichi Handa <handa@m17n.org>
date Wed, 25 Aug 2010 13:39:30 +0900
parents 19fca2eb1b9f
children 35753506eda5 272a81ae14c6
files src/ChangeLog src/composite.c
diffstat 2 files changed, 15 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Aug 25 13:06:15 2010 +0900
+++ b/src/ChangeLog	Wed Aug 25 13:39:30 2010 +0900
@@ -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,
--- a/src/composite.c	Wed Aug 25 13:06:15 2010 +0900
+++ b/src/composite.c	Wed Aug 25 13:39:30 2010 +0900
@@ -969,7 +969,9 @@
 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 @@
       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 @@
 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 @@
 	      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 @@
 
   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;