changeset 18678:d26f9720e55f

(struct gl_state_s): New field `offset'. (SETUP_SYNTAX_TABLE_FOR_OBJECT): Set offset field. (SETUP_SYNTAX_TABLE): Clear offset field. (UPDATE_SYNTAX_TABLE, UPDATE_SYNTAX_TABLE_FORWARD): (UPDATE_SYNTAX_TABLE_BACKWARD): Use the offset field.
author Richard M. Stallman <rms@gnu.org>
date Tue, 08 Jul 1997 11:12:53 +0000
parents 7648eb8e46d2
children 554594d88cd3
files src/syntax.h
diffstat 1 files changed, 27 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/syntax.h	Tue Jul 08 11:12:13 1997 +0000
+++ b/src/syntax.h	Tue Jul 08 11:12:53 1997 +0000
@@ -197,23 +197,25 @@
 
 /* Make syntax table state (gl_state) good for POS, assuming it is
    currently good for a position before POS.  */
-#define UPDATE_SYNTAX_TABLE_FORWARD(pos)				\
-		((pos) >= gl_state.e_property ?				\
-		 ( update_syntax_table ((pos), 1, 0), 1 ) : 0)
 
+#define UPDATE_SYNTAX_TABLE_FORWARD(pos)		\
+  ((pos) >= gl_state.e_property - gl_state.offset	\
+   ? (update_syntax_table ((pos) + gl_state.offset, 1, 0), 1) : 0)
 
 /* Make syntax table state (gl_state) good for POS, assuming it is
    currently good for a position after POS.  */
-#define UPDATE_SYNTAX_TABLE_BACKWARD(pos)				\
-		((pos) <= gl_state.b_property ?				\
-		 ( update_syntax_table ((pos), -1, 0), 1 ) : 0)
+
+#define UPDATE_SYNTAX_TABLE_BACKWARD(pos)		\
+  ((pos) <= gl_state.b_property - gl_state.offset	\
+   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0), 1) : 0)
 
-/* Make syntax table good for POS. */
+/* Make syntax table good for POS.  */
+
 #define UPDATE_SYNTAX_TABLE(pos)					\
-		((pos) <= gl_state.b_property ?				\
-		 ( update_syntax_table ((pos), -1, 0), 1 ) :		\
-		 ( (pos) >= gl_state.e_property ?			\
-		   ( update_syntax_table ((pos), 1, 0), 1 ) : 0))
+  ((pos) <= gl_state.b_property - gl_state.offset			\
+   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0), 1)		\
+   : ((pos) >= gl_state.e_property - gl_state.offset			\
+      ? (update_syntax_table ((pos) + gl_state.offset, 1, 0), 1) : 0))
 
 /* This macro should be called with FROM at the start of forward
    search, or after the last position of the backward search.  It
@@ -227,28 +229,37 @@
   gl_state.b_property = BEGV - 1;					\
   gl_state.e_property = ZV + 1;						\
   gl_state.use_global = 0;						\
+  gl_state.offset = 0;							\
   gl_state.current_syntax_table = current_buffer->syntax_table;		\
   if (parse_sexp_lookup_properties) 					\
-      update_syntax_table ((count) > 0 ? (from) : (from) - 1, (count), 1, Qnil);
+    update_syntax_table ((count) > 0 ? (from) : (from) - 1, (count),	\
+			 1, Qnil);
 
 /* Same as above, but in OBJECT.  If OBJECT is nil, use current buffer.
-   If it is t, ignore properties altogether. */
+   If it is t, ignore properties altogether.
+
+   This is meant for regex.c to use.  For buffers, regex.c passes arguments
+   to the UPDATE_SYNTAX_TABLE macros which are relative to BEGV.
+   So if it is a buffer,a we set the offset field to BEGV.  */
 
 #define SETUP_SYNTAX_TABLE_FOR_OBJECT(object, from, count)		\
   if (BUFFERP (object) || NILP (object))				\
     {									\
       gl_state.b_property = BEGV - 1;					\
       gl_state.e_property = ZV;						\
+      gl_state.offset = BEGV;						\
     }									\
   else if (EQ (object, Qt))						\
     {									\
       gl_state.b_property = - 1;					\
       gl_state.e_property = 1500000000;					\
+      gl_state.offset = 0;						\
     }									\
   else									\
     {									\
       gl_state.b_property = -1;						\
       gl_state.e_property = 1 + XSTRING (object)->size;			\
+      gl_state.offset = 0;						\
     }									\
   gl_state.use_global = 0;						\
   gl_state.current_syntax_table = current_buffer->syntax_table;		\
@@ -275,10 +286,12 @@
 					   and possibly at the
 					   intervals too, depending
 					   on: */
+  /* Offset for positions specified to UPDATE_SYNTAX_TABLE.  */
+  int offset;
   char left_ok;
   char right_ok;
 };
 
 extern struct gl_state_s gl_state;
 extern int parse_sexp_lookup_properties;
-extern INTERVAL interval_of();
+extern INTERVAL interval_of ();