/* Declarations having to do with GNU Emacs syntax tables.
-Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2013 Free Software
+Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2016 Free Software
Foundation, Inc.
This file is part of GNU Emacs.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
+#ifndef EMACS_SYNTAX_H
+#define EMACS_SYNTAX_H
+
+#include "buffer.h"
+#include "lisp.h"
+
INLINE_HEADER_BEGIN
extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object);
+extern void update_syntax_table_forward (ptrdiff_t, bool, Lisp_Object);
/* The standard syntax table is stored where it will automatically
be used in all new buffers. */
other side by any char with the same syntaxcode. */
Sstring_fence, /* Starts/ends string which is delimited on the
other side by any char with the same syntaxcode. */
- Smax /* Upper bound on codes that are meaningful */
+ Smax /* Upper bound on codes that are meaningful. */
};
struct gl_state_s
{
- Lisp_Object object; /* The object we are scanning. */
- ptrdiff_t start; /* Where to stop. */
- ptrdiff_t stop; /* Where to stop. */
+ Lisp_Object object; /* The object we are scanning. */
+ ptrdiff_t start; /* Where to stop. */
+ ptrdiff_t stop; /* Where to stop. */
bool use_global; /* Whether to use global_code
- or c_s_t. */
- 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. */
- ptrdiff_t b_property; /* First index where c_s_t is valid. */
+ or c_s_t. */
+ 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. */
+ ptrdiff_t b_property; /* First index where c_s_t is valid. */
ptrdiff_t e_property; /* First index where c_s_t is
- not valid. */
- INTERVAL forward_i; /* Where to start lookup on forward */
+ not valid. */
+ bool e_property_truncated; /* true if e_property if was truncated
+ by parse_sexp_propertize_done. */
+ INTERVAL forward_i; /* Where to start lookup on forward. */
INTERVAL backward_i; /* or backward movement. The
data in c_s_t is valid
between these intervals,
and possibly at the
intervals too, depending
- on: */
+ on: */
/* Offset for positions specified to UPDATE_SYNTAX_TABLE. */
ptrdiff_t offset;
};
INLINE Lisp_Object
SYNTAX_ENTRY (int c)
{
- return syntax_property_entry (c, 0);
+ return syntax_property_entry (c, false);
}
/* Extract the information from the entry for character C
INLINE int
SYNTAX_WITH_FLAGS (int c)
{
- return syntax_property_with_flags (c, 0);
+ return syntax_property_with_flags (c, false);
}
INLINE enum syntaxcode
INLINE enum syntaxcode
SYNTAX (int c)
{
- return syntax_property (c, 0);
+ return syntax_property (c, false);
}
for the object recorded in gl_state with SETUP_SYNTAX_TABLE_FOR_OBJECT.
The value is meant for use in code that does nothing when
- parse_sexp_lookup_properties is 0, so return 0 in that case, for speed. */
+ parse_sexp_lookup_properties is false, so return 0 in that case,
+ for speed. */
INLINE ptrdiff_t
SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos)
INLINE void
UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
+{ /* Performs just-in-time syntax-propertization. */
+ if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
+ update_syntax_table_forward (charpos + gl_state.offset,
+ false, gl_state.object);
+}
+
+INLINE void
+UPDATE_SYNTAX_TABLE_FORWARD_FAST (ptrdiff_t charpos)
{
if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
- update_syntax_table (charpos + gl_state.offset, 1, 0, gl_state.object);
+ update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object);
}
/* Make syntax table state (gl_state) good for CHARPOS, assuming it is
UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos)
{
if (parse_sexp_lookup_properties && charpos < gl_state.b_property)
- update_syntax_table (charpos + gl_state.offset, -1, 0, gl_state.object);
+ update_syntax_table (charpos + gl_state.offset, -1, false, gl_state.object);
}
/* Make syntax table good for CHARPOS. */
UPDATE_SYNTAX_TABLE_FORWARD (charpos);
}
+INLINE void
+UPDATE_SYNTAX_TABLE_FAST (ptrdiff_t charpos)
+{
+ UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
+ UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos);
+}
+
/* Set up the buffer-global syntax table. */
INLINE void
SETUP_BUFFER_SYNTAX_TABLE (void)
{
- gl_state.use_global = 0;
+ gl_state.use_global = false;
+ gl_state.e_property_truncated = false;
gl_state.current_syntax_table = BVAR (current_buffer, syntax_table);
}
extern void SETUP_SYNTAX_TABLE_FOR_OBJECT (Lisp_Object, ptrdiff_t, ptrdiff_t);
INLINE_HEADER_END
+
+#endif /* EMACS_SYNTAX_H */