From 6f716644981a7b93e085dc86dd8c74e55da0936f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 17 May 2003 18:46:36 +0000 Subject: [PATCH] (text_property_stickiness): New arg `buffer'. --- src/intervals.h | 6 +++--- src/textprop.c | 22 +++++++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/intervals.h b/src/intervals.h index e29e7d3aa01..8ecc36a9c9f 100644 --- a/src/intervals.h +++ b/src/intervals.h @@ -1,5 +1,5 @@ /* Definitions and global variables for intervals. - Copyright (C) 1993, 1994, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -134,7 +134,7 @@ Boston, MA 02111-1307, USA. */ { \ (i)->total_length = (i)->position = 0; \ (i)->left = (i)->right = NULL_INTERVAL; \ - SET_INTERVAL_PARENT (i, NULL_INTERVAL); \ + SET_INTERVAL_PARENT (i, NULL_INTERVAL); \ (i)->write_protect = 0; \ (i)->visible = 0; \ (i)->front_sticky = (i)->rear_sticky = 0; \ @@ -304,7 +304,7 @@ int add_text_properties_from_list P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); void extend_property_ranges P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); Lisp_Object get_char_property_and_overlay P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object*)); -extern int text_property_stickiness P_ ((Lisp_Object prop, Lisp_Object pos)); +extern int text_property_stickiness P_ ((Lisp_Object prop, Lisp_Object pos, Lisp_Object buffer)); extern void syms_of_textprop (); diff --git a/src/textprop.c b/src/textprop.c index 176607c5de4..d75e1cf2020 100644 --- a/src/textprop.c +++ b/src/textprop.c @@ -1,5 +1,5 @@ /* Interface code for dealing with text properties. - Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -1703,23 +1703,26 @@ markers). If OBJECT is a string, START and END are 0-based indices into it. */ /* 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. */ + the char before POS, and 0 if from neither. + BUFFER can be either a buffer or nil (meaning current buffer). */ int -text_property_stickiness (prop, pos) - Lisp_Object prop; - Lisp_Object pos; +text_property_stickiness (prop, pos, buffer) + Lisp_Object prop, pos, buffer; { Lisp_Object prev_pos, front_sticky; int is_rear_sticky = 1, is_front_sticky = 0; /* defaults */ - if (XINT (pos) > BEGV) + if (NILP (buffer)) + XSETBUFFER (buffer, current_buffer); + + if (XINT (pos) > BUF_BEGV (XBUFFER (buffer))) /* 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); + rear_non_sticky = Fget_text_property (prev_pos, Qrear_nonsticky, buffer); if (!NILP (CONSP (rear_non_sticky) ? Fmemq (prop, rear_non_sticky) @@ -1729,7 +1732,7 @@ text_property_stickiness (prop, pos) } /* Consider following character. */ - front_sticky = Fget_text_property (pos, Qfront_sticky, Qnil); + front_sticky = Fget_text_property (pos, Qfront_sticky, buffer); if (EQ (front_sticky, Qt) || (CONSP (front_sticky) @@ -1749,7 +1752,8 @@ text_property_stickiness (prop, pos) 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))) + if (XINT (pos) == BUF_BEGV (XBUFFER (buffer)) + || NILP (Fget_text_property (prev_pos, prop, buffer))) return 1; else return -1; -- 2.39.2