if (invalidate)
invalidate = !EQ (tmp_table, gl_state.old_prop); /* Need to invalidate? */
-
+
if (invalidate) /* Did not get to adjacent interval. */
{ /* with the same table => */
/* invalidate the old range. */
if (EQ (Fsyntax_table_p (tmp_table), Qt))
{
gl_state.use_global = 0;
- }
+ }
else if (CONSP (tmp_table))
{
gl_state.use_global = 1;
gl_state.global_code = tmp_table;
}
- else
+ else
{
gl_state.use_global = 0;
gl_state.current_syntax_table = current_buffer->syntax_table;
}
return;
}
- else if (cnt == INTERVALS_AT_ONCE)
+ else if (cnt == INTERVALS_AT_ONCE)
{
if (count > 0)
{
* int pos, pos_byte;
* {
* int c, val;
- *
+ *
* DEC_BOTH (pos, pos_byte);
* UPDATE_SYNTAX_TABLE_BACKWARD (pos);
* c = FETCH_CHAR (pos_byte);
int string_style = -1; /* Presumed outside of any string. */
int string_lossage = 0;
/* Not a real lossage: indicates that we have passed a matching comment
- starter plus an non-matching comment-ender, meaning that any matching
+ starter plus a non-matching comment-ender, meaning that any matching
comment-starter we might see later could be a false positive (hidden
inside another comment).
Test case: { a (* b } c (* d *) */
There's no way to grok this scanning backwards. */
string_lossage = 1;
break;
-
+
case Scomment:
/* We've already checked that it is the relevant comstyle. */
if (string_style != -1 || comment_lossage || string_lossage)
from_byte = CHAR_TO_BYTE (from);
UPDATE_SYNTAX_TABLE_FORWARD (from - 1);
}
-
+
done:
*charpos_ptr = from;
*bytepos_ptr = from_byte;
if (!(CHAR_TABLE_P (obj)
&& EQ (XCHAR_TABLE (obj)->purpose, Qsyntax_table)))
wrong_type_argument (Qsyntax_table_p, obj);
-}
+}
DEFUN ("syntax-table", Fsyntax_table, Ssyntax_table, 0, 0, 0,
doc: /* Return the current syntax table.
(string)
Lisp_Object string;
{
- register unsigned char *p;
+ register const unsigned char *p;
register enum syntaxcode code;
int val;
Lisp_Object match;
CHECK_STRING (string);
- p = XSTRING (string)->data;
+ p = SDATA (string);
code = (enum syntaxcode) syntax_spec_code[*p++];
if (((int) code & 0377) == 0377)
error ("invalid syntax description letter: %c", p[-1]);
{
int len;
int character = (STRING_CHAR_AND_LENGTH
- (p, STRING_BYTES (XSTRING (string)) - 1, len));
+ (p, SBYTES (string) - 1, len));
XSETINT (match, character);
if (XFASTINT (match) == ' ')
match = Qnil;
val |= 1 << 22;
break;
}
-
+
if (val < XVECTOR (Vsyntax_code_object)->size && NILP (match))
return XVECTOR (Vsyntax_code_object)->contents[val];
else
/* I really don't know why this is interactive
help-form should at least be made useful whilst reading the second arg. */
-DEFUN ("modify-syntax-entry", Fmodify_syntax_entry, Smodify_syntax_entry, 2, 3,
+DEFUN ("modify-syntax-entry", Fmodify_syntax_entry, Smodify_syntax_entry, 2, 3,
"cSet syntax for character: \nsSet syntax for %s to: ",
doc: /* Set syntax for character CHAR according to string NEWENTRY.
The syntax is changed only for table SYNTAX_TABLE, which defaults to
return syntax;
}
-
-
-static void
-describe_syntax (value, args)
- Lisp_Object value, args;
-{
- Findent_to (make_number (16), make_number (1));
- Finternal_describe_syntax_value (value);
- insert_string ("\n");
-}
-
-
-static Lisp_Object
-describe_syntax_1 (vector)
- Lisp_Object vector;
-{
- struct buffer *old = current_buffer;
- set_buffer_internal (XBUFFER (Vstandard_output));
- describe_vector (vector, Qnil, Qnil, describe_syntax,
- 0, Qnil, Qnil, NULL, 0);
- while (! NILP (XCHAR_TABLE (vector)->parent))
- {
- vector = XCHAR_TABLE (vector)->parent;
- insert_string ("\nThe parent syntax table is:");
- describe_vector (vector, Qnil, Qnil, describe_syntax,
- 0, Qnil, Qnil, NULL, 0);
- }
-
- call0 (intern ("help-mode"));
- set_buffer_internal (old);
- return Qnil;
-}
-
-DEFUN ("describe-syntax", Fdescribe_syntax, Sdescribe_syntax, 0, 0, "",
- doc: /* Describe the syntax specifications in the syntax table.
-The descriptions are inserted in a buffer, which is then displayed. */)
- ()
-{
- internal_with_output_to_temp_buffer
- ("*Help*", describe_syntax_1, current_buffer->syntax_table);
-
- return Qnil;
-}
\f
int parse_sexp_ignore_comments;
/* Avoid jumping out of an input field. */
val = XFASTINT (Fconstrain_to_field (make_number (val), make_number (PT),
Qt, Qnil, Qnil));
-
+
SET_PT (val);
return val == orig_val ? Qt : Qnil;
}
int multibyte = !NILP (current_buffer->enable_multibyte_characters);
int string_multibyte;
int size_byte;
- unsigned char *str;
+ const unsigned char *str;
int len;
CHECK_STRING (string);
- char_ranges = (int *) alloca (XSTRING (string)->size * (sizeof (int)) * 2);
+ char_ranges = (int *) alloca (SCHARS (string) * (sizeof (int)) * 2);
string_multibyte = STRING_MULTIBYTE (string);
- str = XSTRING (string)->data;
- size_byte = STRING_BYTES (XSTRING (string));
+ str = SDATA (string);
+ size_byte = SBYTES (string);
/* Adjust the multibyteness of the string to that of the buffer. */
if (multibyte != string_multibyte)
int nbytes;
if (multibyte)
- nbytes = count_size_as_multibyte (XSTRING (string)->data,
- XSTRING (string)->size);
+ nbytes = count_size_as_multibyte (SDATA (string),
+ SCHARS (string));
else
- nbytes = XSTRING (string)->size;
+ nbytes = SCHARS (string);
if (nbytes != size_byte)
{
- str = (unsigned char *) alloca (nbytes);
- copy_text (XSTRING (string)->data, str, size_byte,
+ unsigned char *tmp = (unsigned char *) alloca (nbytes);
+ copy_text (SDATA (string), tmp, size_byte,
string_multibyte, multibyte);
size_byte = nbytes;
+ str = tmp;
}
}
i_byte = 0;
if (i_byte < size_byte
- && XSTRING (string)->data[0] == '^')
+ && SREF (string, 0) == '^')
{
negate = 1; i_byte++;
}
nesting++;
INC_BOTH (from, from_byte);
UPDATE_SYNTAX_TABLE_FORWARD (from);
-
+
forw_incomment:
if (from < stop && SYNTAX_FLAGS_COMEND_FIRST (syntax)
&& SYNTAX_FLAGS_COMMENT_STYLE (syntax) == style
&& (c1 = FETCH_CHAR (from_byte),
SYNTAX_COMSTART_SECOND (c1)))
{
- /* We have encountered a comment start sequence and we
+ /* We have encountered a comment start sequence and we
are ignoring all text inside comments. We must record
the comment style this sequence begins so that later,
only a comment end of the same style actually ends
{
/* Skip until first preceding unquoted comment_fence. */
int found = 0, ini = from, ini_byte = from_byte;
-
+
while (1)
{
DEC_BOTH (from, from_byte);
UPDATE_SYNTAX_TABLE_BACKWARD (from);
c = FETCH_CHAR (from_byte);
if (SYNTAX (c) == Scomment_fence
- && !char_quoted (from, from_byte))
+ && !char_quoted (from, from_byte))
{
- found = 1;
+ found = 1;
break;
}
}
&& SYNTAX_COMSTART_SECOND (FETCH_CHAR (from_byte))
&& parse_sexp_ignore_comments)
{
- /* we have encountered a comment start sequence and we
+ /* we have encountered a comment start sequence and we
are ignoring all text inside comments. We must record
the comment style this sequence begins so that later,
only a comment end of the same style actually ends
INC_BOTH (from, from_byte);
UPDATE_SYNTAX_TABLE_FORWARD (from);
}
-
+
if (prefix)
continue;
INC_BOTH (from, from_byte);
if (!depth && sexpflag) goto done;
break;
+ default:
+ /* Ignore whitespace, punctuation, quote, endcomment. */
+ break;
}
}
comstyle = SYNTAX_COMMENT_STYLE (c1);
comnested = comnested || SYNTAX_COMMENT_NESTED (c1);
}
-
+
/* Quoting turns anything except a comment-ender
into a word character. Note that this cannot be true
if we decremented FROM in the if-statement above. */
if (code != Sendcomment && char_quoted (from, from_byte))
- code = Sword;
+ {
+ DEC_BOTH (from, from_byte);
+ code = Sword;
+ }
else if (SYNTAX_PREFIX (c))
continue;
DEC_BOTH (from, from_byte);
if (from == stop) goto lose;
UPDATE_SYNTAX_TABLE_BACKWARD (from);
- if (!char_quoted (from, from_byte)
+ if (!char_quoted (from, from_byte)
&& (c = FETCH_CHAR (from_byte),
SYNTAX_WITH_MULTIBYTE_CHECK (c) == code))
break;
}
if (code == Sstring_fence && !depth && sexpflag) goto done2;
break;
-
+
case Sstring:
stringterm = FETCH_CHAR (from_byte);
while (1)
DEC_BOTH (from, from_byte);
if (!depth && sexpflag) goto done2;
break;
+ default:
+ /* Ignore whitespace, punctuation, quote, endcomment. */
+ break;
}
}
int pos_byte = PT_BYTE;
int c;
- if (pos <= beg)
+ if (pos <= beg)
{
SET_PT_BOTH (opoint, opoint_byte);
oldstate = Fcdr (oldstate);
tem = Fcar (oldstate);
/* Check whether we are inside string_fence-style string: */
- state.instring = (!NILP (tem)
- ? (INTEGERP (tem) ? XINT (tem) : ST_STRING_STYLE)
+ state.instring = (!NILP (tem)
+ ? (INTEGERP (tem) ? XINT (tem) : ST_STRING_STYLE)
: -1);
oldstate = Fcdr (oldstate);
oldstate = Fcdr (oldstate);
oldstate = Fcdr (oldstate);
tem = Fcar (oldstate);
- state.comstyle = NILP (tem) ? 0 : (EQ (tem, Qsyntax_table)
+ state.comstyle = NILP (tem) ? 0 : (EQ (tem, Qsyntax_table)
? ST_COMMENT_STYLE : 1);
oldstate = Fcdr (oldstate);
curlevel->prev = curlevel->last;
break;
+ case Scomment_fence: /* Can't happen because it's handled above. */
case Scomment:
if (commentstop || boundary_stop) goto done;
startincomment:
state.comstr_start = from - 1;
if (stopbefore) goto stop; /* this arg means stop at sexp start */
curlevel->last = prev_from;
- state.instring = (code == Sstring
+ state.instring = (code == Sstring
? (FETCH_CHAR (prev_from_byte))
: ST_STRING_STYLE);
if (boundary_stop) goto done;
startinstring:
{
nofence = state.instring != ST_STRING_STYLE;
-
+
while (1)
{
int c;
break;
case Smath:
+ /* FIXME: We should do something with it. */
+ break;
+ default:
+ /* Ignore whitespace, punctuation, quote, endcomment. */
break;
}
}
3. non-nil if inside a string.
(it is the character that will terminate the string,
or t if the string should be terminated by a generic string delimiter.)
- 4. nil if outside a comment, t if inside a non-nestable comment,
+ 4. nil if outside a comment, t if inside a non-nestable comment,
else an integer (the current comment nesting).
5. t if following a quote character.
6. the minimum paren-depth encountered during this scan.
scan_sexps_forward (&state, XINT (from), CHAR_TO_BYTE (XINT (from)),
XINT (to),
target, !NILP (stopbefore), oldstate,
- (NILP (commentstop)
+ (NILP (commentstop)
? 0 : (EQ (commentstop, Qsyntax_table) ? -1 : 1)));
SET_PT (state.location);
-
+
return Fcons (make_number (state.depth),
Fcons (state.prevlevelstart < 0 ? Qnil : make_number (state.prevlevelstart),
Fcons (state.thislevelstart < 0 ? Qnil : make_number (state.thislevelstart),
- Fcons (state.instring >= 0
- ? (state.instring == ST_STRING_STYLE
+ Fcons (state.instring >= 0
+ ? (state.instring == ST_STRING_STYLE
? Qt : make_number (state.instring)) : Qnil,
Fcons (state.incomment < 0 ? Qt :
(state.incomment == 0 ? Qnil :
make_number (state.incomment)),
Fcons (state.quoted ? Qt : Qnil,
Fcons (make_number (state.mindepth),
- Fcons ((state.comstyle
+ Fcons ((state.comstyle
? (state.comstyle == ST_COMMENT_STYLE
? Qsyntax_table : Qt) :
Qnil),
defsubr (&Smatching_paren);
defsubr (&Sstring_to_syntax);
defsubr (&Smodify_syntax_entry);
- defsubr (&Sdescribe_syntax);
defsubr (&Sinternal_describe_syntax_value);
defsubr (&Sforward_word);