changeset 89285:8ee5fad31b16

(it_props): Add an entry for Qauto_composed. (handle_auto_composed_prop): New function.
author Kenichi Handa <handa@m17n.org>
date Thu, 07 Nov 2002 06:24:40 +0000
parents 310352c6e65c
children f7a6aae74894
files src/xdisp.c
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Thu Nov 07 06:24:09 2002 +0000
+++ b/src/xdisp.c	Thu Nov 07 06:24:40 2002 +0000
@@ -637,11 +637,13 @@
 static enum prop_handled handle_composition_prop P_ ((struct it *));
 static enum prop_handled handle_overlay_change P_ ((struct it *));
 static enum prop_handled handle_fontified_prop P_ ((struct it *));
+static enum prop_handled handle_auto_composed_prop P_ ((struct it *));
 
 /* Properties handled by iterators.  */
 
 static struct props it_props[] =
 {
+  {&Qauto_composed,	AUTO_COMPOSED_PROP_IDX,	handle_auto_composed_prop},
   {&Qfontified,		FONTIFIED_PROP_IDX,	handle_fontified_prop},
   /* Handle `face' before `display' because some sub-properties of
      `display' need to know the face.  */
@@ -3285,6 +3287,44 @@
 			`composition' property
  ***********************************************************************/
 
+static enum prop_handled
+handle_auto_composed_prop (it)
+     struct it *it;
+{
+  enum prop_handled handled = HANDLED_NORMALLY;
+
+  if (! NILP (Vauto_composition_function))
+    {
+      Lisp_Object val;
+      int pos;
+
+      if (STRINGP (it->string))
+	pos = IT_STRING_CHARPOS (*it);
+      else
+	pos = IT_CHARPOS (*it);
+
+      val =Fget_char_property (make_number (pos), Qauto_composed, it->string);
+      if (NILP (val))
+	{
+	  int count = BINDING_STACK_SIZE ();
+	  Lisp_Object args[3];
+
+	  args[0] = Vauto_composition_function;
+	  specbind (Qauto_composition_function, Qnil);
+	  args[1] = make_number (pos);
+	  args[2] = it->string;
+	  safe_call (3, args);
+	  unbind_to (count, Qnil);
+
+	  val = Fget_char_property (args[1], Qauto_composed, it->string);
+	  if (! NILP (val))
+	    handled = HANDLED_RECOMPUTE_PROPS;
+	}
+    }
+
+  return handled;
+}
+
 /* Set up iterator IT from `composition' property at its current
    position.  Called from handle_stop.  */