Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-68
[bpt/emacs.git] / src / syntax.h
index 5036c4a..34727af 100644 (file)
@@ -15,8 +15,8 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
 
 
 extern Lisp_Object Qsyntax_table_p;
@@ -57,40 +57,17 @@ enum syntaxcode
 
 /* Set the syntax entry VAL for char C in table TABLE.  */
 
-#define SET_RAW_SYNTAX_ENTRY(table, c, val)                            \
-  ((c) < CHAR_TABLE_SINGLE_BYTE_SLOTS                                  \
-   ? (XCHAR_TABLE (table)->contents[(unsigned char) (c)] = (val))      \
-   : Faset ((table), make_number (c), (val)))
+#define SET_RAW_SYNTAX_ENTRY(table, c, val)    \
+  CHAR_TABLE_SET ((table), c, (val))
 
-/* Fetch the syntax entry for char C in syntax table TABLE.
-   This macro is called only when C is less than CHAR_TABLE_ORDINARY_SLOTS.
-   Do inheritance.  */
+/* Set the syntax entry VAL for char-range RANGE in table TABLE.
+   RANGE is a cons (FROM . TO) specifying the range of characters.  */
 
-#ifdef __GNUC__
-#define SYNTAX_ENTRY_FOLLOW_PARENT(table, c)                   \
-  ({ Lisp_Object tbl = table;                                  \
-     Lisp_Object temp = XCHAR_TABLE (tbl)->contents[(c)];      \
-     while (NILP (temp))                                       \
-       {                                                       \
-        tbl = XCHAR_TABLE (tbl)->parent;                       \
-        if (NILP (tbl))                                        \
-          break;                                               \
-        temp = XCHAR_TABLE (tbl)->contents[(c)];               \
-       }                                                       \
-     temp; })
-#else
-extern Lisp_Object syntax_temp;
-extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
-
-#define SYNTAX_ENTRY_FOLLOW_PARENT(table, c)           \
-  (syntax_temp = XCHAR_TABLE (table)->contents[(c)],   \
-   (NILP (syntax_temp)                                 \
-    ? syntax_parent_lookup (table, (c))                        \
-    : syntax_temp))
-#endif
+#define SET_RAW_SYNTAX_ENTRY_RANGE(table, range, val)  \
+  Fset_char_table_range ((table), (range), (val))
 
 /* SYNTAX_ENTRY fetches the information from the entry for character C
-   in syntax table TABLE, or from globally kept data (gl_state).  
+   in syntax table TABLE, or from globally kept data (gl_state).
    Does inheritance.  */
 /* CURRENT_SYNTAX_TABLE gives the syntax table valid for current
    position, it is either the buffer's syntax table, or syntax table
@@ -105,38 +82,34 @@ 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                  \
-   ? SYNTAX_ENTRY_FOLLOW_PARENT (CURRENT_SYNTAX_TABLE, \
-                                (unsigned char) (c))   \
-   : Faref (CURRENT_SYNTAX_TABLE,                      \
-           make_number (c)))
+#define SYNTAX_ENTRY_INT(c) CHAR_TABLE_REF (CURRENT_SYNTAX_TABLE, (c))
 
 /* Extract the information from the entry for character C
    in the current syntax table.  */
 
 #ifdef __GNUC__
 #define SYNTAX(c)                                                      \
-  ({ Lisp_Object temp;                                                 \
-     temp = SYNTAX_ENTRY (c);                                          \
-     (CONSP (temp)                                                     \
-      ? (enum syntaxcode) (XINT (XCAR (temp)) & 0xff)          \
+  ({ Lisp_Object _syntax_temp;                                         \
+     _syntax_temp = SYNTAX_ENTRY (c);                                  \
+     (CONSP (_syntax_temp)                                             \
+      ? (enum syntaxcode) (XINT (XCAR (_syntax_temp)) & 0xff)          \
       : Swhitespace); })
 
 #define SYNTAX_WITH_FLAGS(c)                                           \
-  ({ Lisp_Object temp;                                                 \
-     temp = SYNTAX_ENTRY (c);                                          \
-     (CONSP (temp)                                                     \
-      ? XINT (XCAR (temp))                                     \
+  ({ Lisp_Object _syntax_temp;                                         \
+     _syntax_temp = SYNTAX_ENTRY (c);                                  \
+     (CONSP (_syntax_temp)                                             \
+      ? XINT (XCAR (_syntax_temp))                                     \
       : (int) Swhitespace); })
 
 #define SYNTAX_MATCH(c)                                                        \
-  ({ Lisp_Object temp;                                                 \
-     temp = SYNTAX_ENTRY (c);                                          \
-     (CONSP (temp)                                                     \
-      ? XCDR (temp)                                            \
+  ({ Lisp_Object _syntax_temp;                                         \
+     _syntax_temp = SYNTAX_ENTRY (c);                                  \
+     (CONSP (_syntax_temp)                                             \
+      ? XCDR (_syntax_temp)                                            \
       : Qnil); })
 #else
+extern Lisp_Object syntax_temp;
 #define SYNTAX(c)                                                      \
   (syntax_temp = SYNTAX_ENTRY ((c)),                                   \
    (CONSP (syntax_temp)                                                        \
@@ -252,7 +225,7 @@ extern char syntax_code_spec[16];
 
 #define UPDATE_SYNTAX_TABLE_BACKWARD(charpos)                  \
   (parse_sexp_lookup_properties                                        \
-   && (charpos) <= gl_state.b_property                         \
+   && (charpos) < gl_state.b_property                          \
    ? (update_syntax_table ((charpos) + gl_state.offset, -1, 0, \
                           gl_state.object),                    \
       1)                                                       \
@@ -262,7 +235,7 @@ extern char syntax_code_spec[16];
 
 #define UPDATE_SYNTAX_TABLE(charpos)                           \
   (parse_sexp_lookup_properties                                        \
-   && (charpos) <= gl_state.b_property                         \
+   && (charpos) < gl_state.b_property                          \
    ? (update_syntax_table ((charpos) + gl_state.offset, -1, 0, \
                           gl_state.object),                    \
       1)                                                       \
@@ -277,14 +250,14 @@ extern char syntax_code_spec[16];
    search, or after the last position of the backward search.  It
    makes sure that the first char is picked up with correct table, so
    one does not need to call UPDATE_SYNTAX_TABLE immediately after the
-   call. 
+   call.
    Sign of COUNT gives the direction of the search.
  */
 
 #define SETUP_SYNTAX_TABLE(FROM, COUNT)                                        \
 if (1)                                                                 \
   {                                                                    \
-    gl_state.b_property = BEGV - 1;                                    \
+    gl_state.b_property = BEGV;                                                \
     gl_state.e_property = ZV + 1;                                      \
     gl_state.object = Qnil;                                            \
     gl_state.use_global = 0;                                           \
@@ -311,26 +284,26 @@ if (1)                                                                    \
     if (BUFFERP (gl_state.object))                                     \
       {                                                                        \
        struct buffer *buf = XBUFFER (gl_state.object);                 \
-       gl_state.b_property = 0;                                        \
+       gl_state.b_property = 1;                                        \
        gl_state.e_property = BUF_ZV (buf) - BUF_BEGV (buf) + 1;        \
        gl_state.offset = BUF_BEGV (buf) - 1;                           \
       }                                                                        \
     else if (NILP (gl_state.object))                                   \
       {                                                                        \
-       gl_state.b_property = 0;                                        \
+       gl_state.b_property = 1;                                        \
        gl_state.e_property = ZV - BEGV + 1;                            \
        gl_state.offset = BEGV - 1;                                     \
       }                                                                        \
     else if (EQ (gl_state.object, Qt))                                 \
       {                                                                        \
-       gl_state.b_property = - 1;                                      \
+       gl_state.b_property = 0;                                        \
        gl_state.e_property = 1500000000;                               \
        gl_state.offset = 0;                                            \
       }                                                                        \
     else                                                               \
       {                                                                        \
-       gl_state.b_property = -1;                                       \
-       gl_state.e_property = 1 + XSTRING (gl_state.object)->size;      \
+       gl_state.b_property = 0;                                        \
+       gl_state.e_property = 1 + SCHARS (gl_state.object);             \
        gl_state.offset = 0;                                            \
       }                                                                        \
     gl_state.use_global = 0;                                           \
@@ -352,8 +325,7 @@ struct gl_state_s
   Lisp_Object global_code;             /* Syntax code of current char. */
   Lisp_Object current_syntax_table;    /* Syntax table for current pos. */
   Lisp_Object old_prop;                        /* Syntax-table prop at prev pos. */
-  int b_property;                      /* Last index where c_s_t is 
-                                          not valid. */
+  int b_property;                      /* First index where c_s_t is valid. */
   int e_property;                      /* First index where c_s_t is
                                           not valid. */
   INTERVAL forward_i;                  /* Where to start lookup on forward */
@@ -365,8 +337,6 @@ struct gl_state_s
                                           on: */
   /* Offset for positions specified to UPDATE_SYNTAX_TABLE.  */
   int offset;
-  char left_ok;
-  char right_ok;
 };
 
 extern struct gl_state_s gl_state;
@@ -374,3 +344,6 @@ extern int parse_sexp_lookup_properties;
 extern INTERVAL interval_of P_ ((int, Lisp_Object));
 
 extern int scan_words P_ ((int, int));
+
+/* arch-tag: 28833cca-cd73-4741-8c85-a3111166a0e0
+   (do not change this comment) */