/* Declarations having to do with GNU Emacs syntax tables.
- Copyright (C) 1985, 1993, 1994, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1985, 93, 94, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU Emacs.
Style a is always the default.
*/
+/* These macros extract a particular flag for a given character. */
+
#define SYNTAX_COMSTART_FIRST(c) ((SYNTAX_WITH_FLAGS (c) >> 16) & 1)
#define SYNTAX_COMSTART_SECOND(c) ((SYNTAX_WITH_FLAGS (c) >> 17) & 1)
#define SYNTAX_PREFIX(c) ((SYNTAX_WITH_FLAGS (c) >> 20) & 1)
-/* extract the comment style bit from the syntax table entry */
#define SYNTAX_COMMENT_STYLE(c) ((SYNTAX_WITH_FLAGS (c) >> 21) & 1)
+/* These macros extract specific flags from an integer
+ that holds the syntax code and the flags. */
+
+#define SYNTAX_FLAGS_COMSTART_FIRST(flags) (((flags) >> 16) & 1)
+
+#define SYNTAX_FLAGS_COMSTART_SECOND(flags) (((flags) >> 17) & 1)
+
+#define SYNTAX_FLAGS_COMEND_FIRST(flags) (((flags) >> 18) & 1)
+
+#define SYNTAX_FLAGS_COMEND_SECOND(flags) (((flags) >> 19) & 1)
+
+#define SYNTAX_FLAGS_PREFIX(flags) (((flags) >> 20) & 1)
+
+#define SYNTAX_FLAGS_COMMENT_STYLE(flags) (((flags) >> 21) & 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. */
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. */
+ for the object recorded in gl_state with SETUP_SYNTAX_TABLE_FOR_OBJECT.
+
+ The value is meant for use in the UPDATE_SYNTAX_TABLE... macros.
+ These macros do nothing when parse_sexp_lookup_properties is 0,
+ so we return 0 in that case, for speed. */
#define SYNTAX_TABLE_BYTE_TO_CHAR(bytepos) \
- (STRINGP (gl_state.object) \
+ (! parse_sexp_lookup_properties \
+ ? 0 \
+ : 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) \
- ((pos) >= gl_state.e_property - gl_state.offset \
- ? (update_syntax_table ((pos) + gl_state.offset, 1, 0, \
+#define UPDATE_SYNTAX_TABLE_FORWARD(charpos) \
+ (parse_sexp_lookup_properties \
+ && (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) \
- ((pos) <= gl_state.b_property - gl_state.offset \
- ? (update_syntax_table ((pos) + gl_state.offset, -1, 0, \
+#define UPDATE_SYNTAX_TABLE_BACKWARD(charpos) \
+ (parse_sexp_lookup_properties \
+ && (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) \
- ((pos) <= gl_state.b_property - gl_state.offset \
- ? (update_syntax_table ((pos) + gl_state.offset, -1, 0, \
+#define UPDATE_SYNTAX_TABLE(charpos) \
+ (parse_sexp_lookup_properties \
+ && (charpos) <= gl_state.b_property \
+ ? (update_syntax_table ((charpos) + 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, \
+ : (parse_sexp_lookup_properties \
+ && (charpos) >= gl_state.e_property \
+ ? (update_syntax_table ((charpos) + gl_state.offset, 1, 0,\
gl_state.object), \
1) \
: 0))
*/
#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), \
- 1, Qnil);
+if (1) \
+ { \
+ 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), \
+ 1, Qnil); \
+ } \
+else
/* Same as above, but in OBJECT. If OBJECT is nil, use current buffer.
If it is t, ignore properties altogether.
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.b_property = 0; \
+ 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 = BEGV - 1; \
- gl_state.e_property = ZV; \
+ gl_state.b_property = 0; \
+ gl_state.e_property = ZV - BEGV + 1; \
gl_state.offset = BEGV - 1; \
} \
else if (EQ (gl_state.object, Qt)) \
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); \
} \