]> git.eshelyaron.com Git - emacs.git/commitdiff
(SYNTAX_TABLE_BYTE_TO_CHAR): New macro.
authorRichard M. Stallman <rms@gnu.org>
Fri, 16 Jan 1998 17:52:16 +0000 (17:52 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 16 Jan 1998 17:52:16 +0000 (17:52 +0000)
(struct gl_state_s): New field `object'.
(SETUP_SYNTAX_TABLE_FOR_OBJECT): Set it.
Handle non-current buffer properly.  Args renamed to all caps.
(SETUP_SYNTAX_TABLE): Set `object'.  Args renamed to all caps.
(UPDATE_SYNTAX_TABLE): Use gl_state.object.
(UPDATE_SYNTAX_TABLE_FORWARD, UPDATE_SYNTAX_TABLE_BACKWARD): Likewise.

(SETUP_SYNTAX_TABLE_FOR_OBJECT): Add gl_state.offset
when using the arg FROM.  Use BYTE_TO_CHAR.

src/syntax.h

index da243e8cce5910a8a562271de974360cf6762060..d1acaa33994655b0799781fcd4c0784ed7e78524 100644 (file)
@@ -194,27 +194,50 @@ extern unsigned char syntax_spec_code[0400];
 
 extern char syntax_code_spec[16];
 
+/* Convert the byte offset BYTEPOS into a character position,
+   for the object recorded in gl_state with SETUP_SYNTAX_TABLE_FOR_OBJECT.  */
+
+#define SYNTAX_TABLE_BYTE_TO_CHAR(bytepos)                             \
+  (STRINGP (gl_state.object)                                           \
+   ? string_byte_to_char (gl_state.object, (bytepos))                  \
+   : BUFFERP (gl_state.object)                                         \
+   ? buf_bytepos_to_charpos (XBUFFER (gl_state.object), (bytepos))     \
+   : NILP (gl_state.object)                                            \
+   ? BYTE_TO_CHAR ((bytepos))                                          \
+   : (bytepos))
+
 /* 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 - gl_state.offset      \
-   ? (update_syntax_table ((pos) + gl_state.offset, 1, 0, Qnil), 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,      \
+                          gl_state.object),                    \
+      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 - gl_state.offset      \
-   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0, Qnil), 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,     \
+                          gl_state.object),                    \
+      1)                                                       \
+   : 0)
 
 /* Make syntax table good for POS.  */
 
-#define UPDATE_SYNTAX_TABLE(pos)                                       \
-  ((pos) <= gl_state.b_property - gl_state.offset                      \
-   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0, Qnil), 1)   \
-   : ((pos) >= gl_state.e_property - gl_state.offset                   \
-      ? (update_syntax_table ((pos) + gl_state.offset, 1, 0, Qnil), 1) : 0))
+#define UPDATE_SYNTAX_TABLE(pos)                               \
+  ((pos) <= gl_state.b_property - gl_state.offset              \
+   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0,     \
+                          gl_state.object),                    \
+      1)                                                       \
+   : ((pos) >= gl_state.e_property - gl_state.offset           \
+      ? (update_syntax_table ((pos) + gl_state.offset, 1, 0,   \
+                             gl_state.object),                 \
+        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
@@ -224,14 +247,15 @@ extern char syntax_code_spec[16];
    Sign of COUNT gives the direction of the search.
  */
 
-#define SETUP_SYNTAX_TABLE(from,count)                                 \
+#define SETUP_SYNTAX_TABLE(FROM, COUNT)                                        \
   gl_state.b_property = BEGV - 1;                                      \
   gl_state.e_property = ZV + 1;                                                \
+  gl_state.object = Qnil;                                              \
   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),   \
+    update_syntax_table ((COUNT) > 0 ? (FROM) : (FROM) - 1, (COUNT),   \
                         1, Qnil);
 
 /* Same as above, but in OBJECT.  If OBJECT is nil, use current buffer.
@@ -241,16 +265,24 @@ extern char syntax_code_spec[16];
    to the UPDATE_SYNTAX_TABLE macros which are relative to BEGV.
    So if it is a buffer, we set the offset field to BEGV.  */
 
-#define SETUP_SYNTAX_TABLE_FOR_OBJECT(object, from, count)             \
+#define SETUP_SYNTAX_TABLE_FOR_OBJECT(OBJECT, FROM, COUNT)             \
 if (1)                                                                 \
   {                                                                    \
-    if (BUFFERP (object) || NILP (object))                             \
+    gl_state.object = (OBJECT);                                                \
+    if (BUFFERP (gl_state.object))                                     \
+      {                                                                        \
+       struct buffer *buf = XBUFFER (gl_state.object);                 \
+       gl_state.b_property = BUF_BEGV (buf) - 1;                       \
+       gl_state.e_property = BUF_ZV (buf);                             \
+       gl_state.offset = BUF_BEGV (buf) - 1;                           \
+      }                                                                        \
+    else if (NILP (gl_state.object))                                   \
       {                                                                        \
        gl_state.b_property = BEGV - 1;                                 \
        gl_state.e_property = ZV;                                       \
        gl_state.offset = BEGV - 1;                                     \
       }                                                                        \
-    else if (EQ (object, Qt))                                          \
+    else if (EQ (gl_state.object, Qt))                                 \
       {                                                                        \
        gl_state.b_property = - 1;                                      \
        gl_state.e_property = 1500000000;                               \
@@ -259,20 +291,21 @@ if (1)                                                                    \
     else                                                               \
       {                                                                        \
        gl_state.b_property = -1;                                       \
-       gl_state.e_property = 1 + XSTRING (object)->size;               \
+       gl_state.e_property = 1 + XSTRING (gl_state.object)->size;      \
        gl_state.offset = 0;                                            \
       }                                                                        \
     gl_state.use_global = 0;                                           \
     gl_state.current_syntax_table = current_buffer->syntax_table;      \
     if (parse_sexp_lookup_properties)                                  \
-      update_syntax_table ((bytepos_to_charpos (from)                  \
-                           + (count > 0 ? 0 :  -1)),                   \
-                          count, 1, object);                           \
+      update_syntax_table ((BYTE_TO_CHAR ((FROM) + gl_state.offset)    \
+                           + (COUNT > 0 ? 0 :  -1)),                   \
+                          COUNT, 1, gl_state.object);                  \
   }                                                                    \
 else
 
 struct gl_state_s
 {
+  Lisp_Object object;                  /* The object we are scanning. */
   int start;                           /* Where to stop. */
   int stop;                            /* Where to stop. */
   int use_global;                      /* Whether to use global_code