(U+6215): Apply new conventions for glyph granularity.
[chise/xemacs-chise.git.1] / src / extents.h
index e9f1dff..ff3fd1c 100644 (file)
@@ -20,14 +20,13 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: Not in FSF. */
 
-#ifndef _XEMACS_EXTENTS_H_
-#define _XEMACS_EXTENTS_H_
+#ifndef INCLUDED_extents_h_
+#define INCLUDED_extents_h_
 
 DECLARE_LRECORD (extent, struct extent);
 #define XEXTENT(x) XRECORD (x, extent, struct extent)
 #define XSETEXTENT(x, p) XSETRECORD (x, p, extent)
 #define EXTENTP(x) RECORDP (x, extent)
-#define GC_EXTENTP(x) GC_RECORDP (x, extent)
 #define CHECK_EXTENT(x) CHECK_RECORD (x, extent)
 #define CONCHECK_EXTENT(x) CONCHECK_RECORD (x, extent)
 
@@ -82,17 +81,14 @@ struct extent
     unsigned int has_aux           :1; /*  6 extent has an aux. structure */
     unsigned int start_open        :1; /*  7 insertion behavior at start  */
     unsigned int end_open          :1; /*  8 insertion behavior at end    */
-    unsigned int unused9           :1; /*  9 unused                       */
-    unsigned int unique                    :1; /* 10 there may be only one attached  */
-    unsigned int duplicable        :1; /* 11 copied to strings by kill/undo  */
-    unsigned int REPLICATING       :1; /* 12 invoke old extent-replica behav.*/
-                                       /*    Not used any more */
-    unsigned int detachable        :1; /* 13 extent detaches if text deleted */
-    unsigned int internal          :1; /* 14 used by map-extents etc.        */
-    unsigned int in_red_event       :1; /* 15 An event has been spawned for
+    unsigned int unique                    :1; /*  9 there may be only one attached  */
+    unsigned int duplicable        :1; /* 10 copied to strings by kill/undo  */
+    unsigned int detachable        :1; /* 11 extent detaches if text deleted */
+    unsigned int internal          :1; /* 12 used by map-extents etc.        */
+    unsigned int in_red_event       :1; /* 13 An event has been spawned for
                                              initial redisplay.
-                                             Not exported to the lisp level */
-    unsigned int unused16          :1;  /* 16 unused                        */
+                                             (not exported to lisp) */
+    unsigned int unused16          :1;  /* 16 unused bits                   */
     /* --- Adding more flags will cause the extent struct to grow by another
        word.  It's not clear that this would make a difference, however,
        because on 32-bit machines things tend to get allocated in chunks
@@ -106,8 +102,8 @@ struct extent
 #define extent_object(e) ((e)->object)
 #define extent_start(e) ((e)->start + 0)
 #define extent_end(e) ((e)->end + 0)
-#define set_extent_start(e, val) ((e)->start = (val))
-#define set_extent_end(e, val) ((e)->end = (val))
+#define set_extent_start(e, val) ((void) ((e)->start = (val)))
+#define set_extent_end(e, val) ((void) ((e)->end = (val)))
 #define extent_endpoint(e, endp) ((endp) ? extent_end (e) : extent_start (e))
 #define set_extent_endpoint(e, val, endp) \
   ((endp) ? set_extent_end (e, val) : set_extent_start (e, val))
@@ -139,6 +135,7 @@ struct extent_auxiliary
   Lisp_Object read_only;
   Lisp_Object mouse_face;
   Lisp_Object initial_redisplay_function;
+  Lisp_Object before_change_functions, after_change_functions;
   int priority;
 };
 
@@ -149,7 +146,6 @@ DECLARE_LRECORD (extent_auxiliary, struct extent_auxiliary);
   XRECORD (x, extent_auxiliary, struct extent_auxiliary)
 #define XSETEXTENT_AUXILIARY(x, p) XSETRECORD (x, p, extent_auxiliary)
 #define EXTENT_AUXILIARYP(x) RECORDP (x, extent_auxiliary)
-#define GC_EXTENT_AUXILIARYP(x) GC_RECORDP (x, extent_auxiliary)
 #define CHECK_EXTENT_AUXILIARY(x) CHECK_RECORD (x, extent_auxiliary)
 #define CONCHECK_EXTENT_AUXILIARY(x) CONCHECK_RECORD (x, extent_auxiliary)
 
@@ -165,7 +161,6 @@ DECLARE_LRECORD (extent_info, struct extent_info);
 #define XEXTENT_INFO(x) XRECORD (x, extent_info, struct extent_info)
 #define XSETEXTENT_INFO(x, p) XSETRECORD (x, p, extent_info)
 #define EXTENT_INFOP(x) RECORDP (x, extent_info)
-#define GC_EXTENT_INFOP(x) GC_RECORDP (x, extent_info)
 #define CHECK_EXTENT_INFO(x) CHECK_RECORD (x, extent_info)
 #define CONCHECK_EXTENT_INFO(x) CONCHECK_RECORD (x, extent_info)
 
@@ -182,8 +177,8 @@ void flush_cached_extent_info (Lisp_Object extent_info);
 
 #define extent_no_chase_normal_field(e, field) ((e)->flags.field)
 
-INLINE struct extent_auxiliary *extent_aux_or_default (EXTENT e);
-INLINE struct extent_auxiliary *
+INLINE_HEADER struct extent_auxiliary *extent_aux_or_default (EXTENT e);
+INLINE_HEADER struct extent_auxiliary *
 extent_aux_or_default (EXTENT e)
 {
   return e->flags.has_aux ?
@@ -230,6 +225,8 @@ extent_aux_or_default (EXTENT e)
 #define extent_read_only(e)    extent_aux_field (e, read_only)
 #define extent_mouse_face(e)   extent_aux_field (e, mouse_face)
 #define extent_initial_redisplay_function(e)   extent_aux_field (e, initial_redisplay_function)
+#define extent_before_change_functions(e) extent_aux_field (e, before_change_functions)
+#define extent_after_change_functions(e)  extent_aux_field (e, after_change_functions)
 
 #define set_extent_begin_glyph(e, value)       \
   set_extent_aux_field (e, begin_glyph, value)
@@ -246,6 +243,10 @@ extent_aux_or_default (EXTENT e)
 /* Use Fset_extent_initial_redisplay_function unless you know what you're doing */
 #define set_extent_initial_redisplay_function(e, value) \
   set_extent_aux_field (e, initial_redisplay_function, value)
+#define set_extent_before_change_functions(e, value)   \
+  set_extent_aux_field (e, before_change_functions, value)
+#define set_extent_after_change_functions(e, value)    \
+  set_extent_aux_field (e, after_change_functions, value)
 
 #define extent_face(e)              extent_normal_field (e, face)
 #define extent_begin_glyph_layout(e) extent_normal_field (e, begin_glyph_layout)
@@ -258,8 +259,8 @@ extent_aux_or_default (EXTENT e)
 #define extent_internal_p(e)        extent_normal_field (e, internal)
 #define extent_in_red_event_p(e)     extent_normal_field (e, in_red_event)
 
-INLINE Lisp_Object * extent_no_chase_plist_addr (EXTENT e);
-INLINE Lisp_Object *
+INLINE_HEADER Lisp_Object * extent_no_chase_plist_addr (EXTENT e);
+INLINE_HEADER Lisp_Object *
 extent_no_chase_plist_addr (EXTENT e)
 {
   return e->flags.has_aux ? &XCDR (e->plist) : &e->plist;
@@ -312,18 +313,23 @@ EXFUN (Fextent_end_position, 1);
 EXFUN (Fextent_object, 1);
 EXFUN (Fextent_start_position, 1);
 EXFUN (Fmake_extent, 3);
+EXFUN (Fnext_single_property_change, 4);
 EXFUN (Fprevious_single_property_change, 4);
 EXFUN (Fset_extent_endpoints, 4);
+EXFUN (Fnext_extent_change, 2);
+EXFUN (Fprevious_extent_change, 2);
 EXFUN (Fset_extent_parent, 2);
+EXFUN (Fget_char_property, 4);
 
 extern int inside_undo;
+extern int in_modeline_generation;
 
 struct extent_fragment *extent_fragment_new (Lisp_Object buffer_or_string,
                                             struct frame *frm);
 face_index extent_fragment_update (struct window *w,
                                   struct extent_fragment *ef,
                                   /* Note this is in Bytinds */
-                                  Bytind pos);
+                                  Bytind pos, Lisp_Object last_glyph);
 void extent_fragment_delete (struct extent_fragment *ef);
 
 \f
@@ -338,8 +344,8 @@ EXTENT extent_ancestor_1 (EXTENT e);
 /* extent_ancestor() chases all the parent links until there aren't any
    more.  extent_ancestor_1() does the same thing but it a function;
    the following optimizes the most common case. */
-INLINE EXTENT extent_ancestor (EXTENT e);
-INLINE EXTENT
+INLINE_HEADER EXTENT extent_ancestor (EXTENT e);
+INLINE_HEADER EXTENT
 extent_ancestor (EXTENT e)
 {
   return e->flags.has_parent ? extent_ancestor_1 (e) : e;
@@ -366,6 +372,7 @@ void process_extents_for_insertion (Lisp_Object object,
                                    Bytind opoint, Bytecount length);
 void process_extents_for_deletion (Lisp_Object object, Bytind from,
                                   Bytind to, int destroy_them);
+void report_extent_modification (Lisp_Object, Bufpos, Bufpos, int);
 
 void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp,
                       glyph_layout layout);
@@ -395,4 +402,4 @@ int compute_buffer_extent_usage (struct buffer *b,
 
 #endif /* emacs */
 
-#endif /* _XEMACS_EXTENTS_H_ */
+#endif /* INCLUDED_extents_h_ */