(mail-setup): Call set-buffer-multibyte because
[bpt/emacs.git] / src / syntax.h
index e72012a..5036c4a 100644 (file)
@@ -105,11 +105,12 @@ extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
 #  define CURRENT_SYNTAX_TABLE current_buffer->syntax_table
 #endif
 
-#define SYNTAX_ENTRY_INT(c)                                            \
-  ((c) < CHAR_TABLE_SINGLE_BYTE_SLOTS                          \
+#define SYNTAX_ENTRY_INT(c)                            \
+  ((c) < CHAR_TABLE_SINGLE_BYTE_SLOTS                  \
    ? SYNTAX_ENTRY_FOLLOW_PARENT (CURRENT_SYNTAX_TABLE, \
-                                (unsigned char) (c))           \
-   : Faref (CURRENT_SYNTAX_TABLE, make_number ((c))))
+                                (unsigned char) (c))   \
+   : Faref (CURRENT_SYNTAX_TABLE,                      \
+           make_number (c)))
 
 /* Extract the information from the entry for character C
    in the current syntax table.  */
@@ -119,48 +120,50 @@ extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
   ({ Lisp_Object temp;                                                 \
      temp = SYNTAX_ENTRY (c);                                          \
      (CONSP (temp)                                                     \
-      ? (enum syntaxcode) (XINT (XCONS (temp)->car) & 0xff)            \
+      ? (enum syntaxcode) (XINT (XCAR (temp)) & 0xff)          \
       : Swhitespace); })
 
 #define SYNTAX_WITH_FLAGS(c)                                           \
   ({ Lisp_Object temp;                                                 \
      temp = SYNTAX_ENTRY (c);                                          \
      (CONSP (temp)                                                     \
-      ? XINT (XCONS (temp)->car)                                       \
+      ? XINT (XCAR (temp))                                     \
       : (int) Swhitespace); })
 
 #define SYNTAX_MATCH(c)                                                        \
   ({ Lisp_Object temp;                                                 \
      temp = SYNTAX_ENTRY (c);                                          \
      (CONSP (temp)                                                     \
-      ? XCONS (temp)->cdr                                              \
+      ? XCDR (temp)                                            \
       : Qnil); })
 #else
 #define SYNTAX(c)                                                      \
   (syntax_temp = SYNTAX_ENTRY ((c)),                                   \
    (CONSP (syntax_temp)                                                        \
-    ? (enum syntaxcode) (XINT (XCONS (syntax_temp)->car) & 0xff)       \
+    ? (enum syntaxcode) (XINT (XCAR (syntax_temp)) & 0xff)     \
     : Swhitespace))
 
 #define SYNTAX_WITH_FLAGS(c)                                           \
   (syntax_temp = SYNTAX_ENTRY ((c)),                                   \
    (CONSP (syntax_temp)                                                        \
-    ? XINT (XCONS (syntax_temp)->car)                                  \
+    ? XINT (XCAR (syntax_temp))                                        \
     : (int) Swhitespace))
 
 #define SYNTAX_MATCH(c)                                                        \
   (syntax_temp = SYNTAX_ENTRY ((c)),                                   \
    (CONSP (syntax_temp)                                                        \
-    ? XCONS (syntax_temp)->cdr                                         \
+    ? XCDR (syntax_temp)                                               \
     : Qnil))
 #endif
 
-/* Then there are six single-bit flags that have the following meanings:
+/* Then there are seven single-bit flags that have the following meanings:
   1. This character is the first of a two-character comment-start sequence.
   2. This character is the second of a two-character comment-start sequence.
   3. This character is the first of a two-character comment-end sequence.
   4. This character is the second of a two-character comment-end sequence.
   5. This character is a prefix, for backward-prefix-chars.
+  6. see below
+  7. This character is part of a nestable comment sequence.
   Note that any two-character sequence whose first character has flag 1
   and whose second character has flag 2 will be interpreted as a comment start.
 
@@ -185,6 +188,8 @@ extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
 
 #define SYNTAX_COMMENT_STYLE(c) ((SYNTAX_WITH_FLAGS (c) >> 21) & 1)
 
+#define SYNTAX_COMMENT_NESTED(c) ((SYNTAX_WITH_FLAGS (c) >> 22) & 1)
+
 /* These macros extract specific flags from an integer
    that holds the syntax code and the flags.  */
 
@@ -200,6 +205,8 @@ extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
 
 #define SYNTAX_FLAGS_COMMENT_STYLE(flags) (((flags) >> 21) & 1)
 
+#define SYNTAX_FLAGS_COMMENT_NESTED(flags) (((flags) >> 22) & 1)
+
 /* This array, indexed by a character, contains the syntax code which that
  character signifies (as a char).  For example,
  (enum syntaxcode) syntax_spec_code['w'] is Sword.  */
@@ -223,44 +230,45 @@ extern char syntax_code_spec[16];
    : 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))     \
+   ? buf_bytepos_to_charpos (XBUFFER (gl_state.object),                        \
+                            (bytepos) + BUF_BEGV_BYTE (XBUFFER (gl_state.object)) - 1) - BUF_BEGV (XBUFFER (gl_state.object)) + 1      \
    : NILP (gl_state.object)                                            \
-   ? BYTE_TO_CHAR ((bytepos))                                          \
+   ? BYTE_TO_CHAR ((bytepos) + BEGV_BYTE - 1) - BEGV + 1               \
    : (bytepos))
 
-/* Make syntax table state (gl_state) good for POS, assuming it is
-   currently good for a position before POS.  */
+/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
+   currently good for a position before CHARPOS.  */
 
-#define UPDATE_SYNTAX_TABLE_FORWARD(pos)                       \
+#define UPDATE_SYNTAX_TABLE_FORWARD(charpos)                   \
   (parse_sexp_lookup_properties                                        \
-   && (pos) >= gl_state.e_property                             \
-   ? (update_syntax_table ((pos) + gl_state.offset, 1, 0,      \
+   && (charpos) >= gl_state.e_property                         \
+   ? (update_syntax_table ((charpos) + 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.  */
+/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
+   currently good for a position after CHARPOS.  */
 
-#define UPDATE_SYNTAX_TABLE_BACKWARD(pos)                      \
+#define UPDATE_SYNTAX_TABLE_BACKWARD(charpos)                  \
   (parse_sexp_lookup_properties                                        \
-   && (pos) <= gl_state.b_property                             \
-   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0,     \
+   && (charpos) <= gl_state.b_property                         \
+   ? (update_syntax_table ((charpos) + gl_state.offset, -1, 0, \
                           gl_state.object),                    \
       1)                                                       \
    : 0)
 
-/* Make syntax table good for POS.  */
+/* Make syntax table good for CHARPOS.  */
 
-#define UPDATE_SYNTAX_TABLE(pos)                               \
+#define UPDATE_SYNTAX_TABLE(charpos)                           \
   (parse_sexp_lookup_properties                                        \
-   && (pos) <= gl_state.b_property                             \
-   ? (update_syntax_table ((pos) + gl_state.offset, -1, 0,     \
+   && (charpos) <= gl_state.b_property                         \
+   ? (update_syntax_table ((charpos) + gl_state.offset, -1, 0, \
                           gl_state.object),                    \
       1)                                                       \
    : (parse_sexp_lookup_properties                             \
-      && (pos) >= gl_state.e_property                          \
-      ? (update_syntax_table ((pos) + gl_state.offset, 1, 0,   \
+      && (charpos) >= gl_state.e_property                      \
+      ? (update_syntax_table ((charpos) + gl_state.offset, 1, 0,\
                              gl_state.object),                 \
         1)                                                     \
       : 0))
@@ -283,8 +291,9 @@ if (1)                                                                      \
     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);                                    \
+      if ((COUNT) > 0 || (FROM) > BEGV)                                        \
+        update_syntax_table ((COUNT) > 0 ? (FROM) : (FROM) - 1, (COUNT),\
+                            1, Qnil);                                  \
   }                                                                    \
 else
 
@@ -327,7 +336,7 @@ if (1)                                                                      \
     gl_state.use_global = 0;                                           \
     gl_state.current_syntax_table = current_buffer->syntax_table;      \
     if (parse_sexp_lookup_properties)                                  \
-      update_syntax_table ((BYTE_TO_CHAR ((FROM) + gl_state.offset)    \
+      update_syntax_table (((FROM) + gl_state.offset                   \
                            + (COUNT > 0 ? 0 :  -1)),                   \
                           COUNT, 1, gl_state.object);                  \
   }                                                                    \