[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/textprop.c
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/textprop.c |
Date: |
Thu, 14 Mar 2002 03:10:35 -0500 |
Index: emacs/src/textprop.c
diff -c emacs/src/textprop.c:1.123 emacs/src/textprop.c:1.124
*** emacs/src/textprop.c:1.123 Fri Jan 25 17:42:05 2002
--- emacs/src/textprop.c Thu Mar 14 03:10:35 2002
***************
*** 1,5 ****
/* Interface code for dealing with text properties.
! Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GNU Emacs.
--- 1,5 ----
/* Interface code for dealing with text properties.
! Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of GNU Emacs.
***************
*** 1554,1559 ****
--- 1554,1616 ----
}
return Qnil;
}
+
+
+ /* Return the direction from which the text-property PROP would be
+ inherited by any new text inserted at POS: 1 if it would be
+ inherited from the char after POS, -1 if it would be inherited from
+ the char before POS, and 0 if from neither. */
+
+ int
+ text_property_stickiness (prop, pos)
+ Lisp_Object prop;
+ Lisp_Object pos;
+ {
+ Lisp_Object prev_pos, front_sticky;
+ int is_rear_sticky = 1, is_front_sticky = 0; /* defaults */
+
+ if (XINT (pos) > BEGV)
+ /* Consider previous character. */
+ {
+ Lisp_Object rear_non_sticky;
+
+ prev_pos = make_number (XINT (pos) - 1);
+ rear_non_sticky = Fget_text_property (prev_pos, Qrear_nonsticky, Qnil);
+
+ if (!NILP (CONSP (rear_non_sticky)
+ ? Fmemq (prop, rear_non_sticky)
+ : rear_non_sticky))
+ /* PROP is rear-non-sticky. */
+ is_rear_sticky = 0;
+ }
+
+ /* Consider following character. */
+ front_sticky = Fget_text_property (pos, Qfront_sticky, Qnil);
+
+ if (EQ (front_sticky, Qt)
+ || (CONSP (front_sticky)
+ && !NILP (Fmemq (prop, front_sticky))))
+ /* PROP is inherited from after. */
+ is_front_sticky = 1;
+
+ /* Simple cases, where the properties are consistent. */
+ if (is_rear_sticky && !is_front_sticky)
+ return -1;
+ else if (!is_rear_sticky && is_front_sticky)
+ return 1;
+ else if (!is_rear_sticky && !is_front_sticky)
+ return 0;
+
+ /* The stickiness properties are inconsistent, so we have to
+ disambiguate. Basically, rear-sticky wins, _except_ if the
+ property that would be inherited has a value of nil, in which case
+ front-sticky wins. */
+ if (XINT (pos) == BEGV || NILP (Fget_text_property (prev_pos, prop, Qnil)))
+ return 1;
+ else
+ return -1;
+ }
+
/* I don't think this is the right interface to export; how often do you
want to do something like this, other than when you're copying objects
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/src/textprop.c,
Miles Bader <=