/* Definitions and global variables for intervals.
- Copyright (C) 1990, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
along with GNU Emacs; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#ifdef USE_INTERVALS
+#ifdef USE_TEXT_PROPERTIES
+#ifndef NORMAL_FACE
#include "dispextern.h"
+#endif
#define NULL_INTERVAL 0
#define INTERVAL_DEFAULT NULL_INTERVAL
/* Is this interval visible? Replace later with cache access */
#define INTERVAL_VISIBLE_P(i) \
- (! NULL_INTERVAL_P (i) && ! NILP (Fmemq (Qinvisible, (i)->plist)))
+ (! NULL_INTERVAL_P (i) && NILP (textget ((i)->plist, Qinvisible)))
/* Is this interval writable? Replace later with cache access */
-#define INTERVAL_WRITABLE_P(i) \
- (! NULL_INTERVAL_P (i) && NILP (Fmemq (Qread_only, (i)->plist)))
+#define INTERVAL_WRITABLE_P(i) \
+ (! NULL_INTERVAL_P (i) \
+ && (NILP (textget ((i)->plist, Qread_only)) \
+ || ((CONSP (Vinhibit_read_only) \
+ ? !NILP (Fmemq (textget ((i)->plist, Qread_only), \
+ Vinhibit_read_only)) \
+ : !NILP (Vinhibit_read_only))))) \
/* Macros to tell whether insertions before or after this interval
should stick to it. */
/* Declared in intervals.c */
-extern INTERVAL mouse_interval;
-extern Lisp_Object Vmouse_buffer;
-extern int mouse_buffer_offset;
extern Lisp_Object interval_balance_threshold;
extern INTERVAL create_root_interval ();
extern int intervals_equal ();
extern void traverse_intervals ();
extern INTERVAL split_interval_right (), split_interval_left ();
-extern INTERVAL find_interval (), next_interval (), previous_interval ();
+extern INLINE INTERVAL find_interval ();
+extern INTERVAL next_interval (), previous_interval ();
extern INTERVAL merge_interval_left (), merge_interval_right ();
extern void delete_interval ();
extern INLINE void offset_intervals ();
extern void graft_intervals_into_buffer ();
extern void set_point ();
+extern INLINE void temp_set_point ();
extern void verify_interval_modification ();
extern INTERVAL balance_intervals ();
-extern void copy_intervals_to_string ();
+extern INLINE void copy_intervals_to_string ();
+extern INTERVAL copy_intervals ();
+extern Lisp_Object textget ();
+extern Lisp_Object get_local_map ();
/* Declared in textprop.c */
extern Lisp_Object Qmouse_entered;
extern Lisp_Object Qpoint_left;
extern Lisp_Object Qpoint_entered;
-extern Lisp_Object Qmodification;
+extern Lisp_Object Qmodification_hooks;
+extern Lisp_Object Qcategory;
+extern Lisp_Object Qlocal_map;
/* Visual properties text (including strings) may have. */
extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
extern Lisp_Object Fnext_property_change (), Fprevious_property_change ();
extern Lisp_Object Fadd_text_properties (), Fset_text_properties ();
extern Lisp_Object Fremove_text_properties (), Ferase_text_properties ();
+extern Lisp_Object Ftext_property_any (), Ftext_property_all ();
+extern Lisp_Object copy_text_properties ();
extern void syms_of_textprop ();
-#else /* intervals not used */
+#else /* don't support text properties */
#define NULL_INTERVAL_P(i) 1
#define INTERVAL_SIZE 0
#define insert_interval_copy(source,position,end,sink,at)
#define graft_intervals_into_buffer(tree,position,bufferptr)
#define offset_intervals(buffer,position,length)
+#define copy_intervals(tree,start,length)
-#endif /* intervals not used */
+#define syms_of_textprop()
+
+#endif /* don't support text properties */