]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow composition striding over PT.
authorKenichi Handa <handa@m17n.org>
Wed, 25 Aug 2010 04:39:30 +0000 (13:39 +0900)
committerKenichi Handa <handa@m17n.org>
Wed, 25 Aug 2010 04:39:30 +0000 (13:39 +0900)
src/ChangeLog
src/composite.c

index ef951515f2837ef6175f80a4311bff61bcfb9dd0..5ce4c049c77a559c45966b08c2d5e7140663762e 100644 (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,
index 3b128853c10d34c132cad57f26a520185937e82b..233f9ac896999040884e7029c48b15301e302663 100644 (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;