comparison src/syntax.c @ 18079:5fbb5aef5649

(back_comment): Detect 2-char comment starts properly. New arg COMSTYLE; callers changed.
author Richard M. Stallman <rms@gnu.org>
date Sat, 31 May 1997 18:16:22 +0000
parents 90d9682afa28
children 55e03c524041
comparison
equal deleted inserted replaced
18078:cd5f9bda791e 18079:5fbb5aef5649
339 of comment. Global syntax data remains valid for 339 of comment. Global syntax data remains valid for
340 backward search starting at the returned value (or at FROM, if 340 backward search starting at the returned value (or at FROM, if
341 the search was not successful). */ 341 the search was not successful). */
342 342
343 static int 343 static int
344 back_comment (from, stop) 344 back_comment (from, stop, comstyle)
345 int from, stop; 345 int from, stop, comstyle;
346 { 346 {
347 /* Look back, counting the parity of string-quotes, 347 /* Look back, counting the parity of string-quotes,
348 and recording the comment-starters seen. 348 and recording the comment-starters seen.
349 When we reach a safe place, assume that's not in a string; 349 When we reach a safe place, assume that's not in a string;
350 then step the main scan to the earliest comment-starter seen 350 then step the main scan to the earliest comment-starter seen
359 int comment_end = from; 359 int comment_end = from;
360 int comstart_pos = 0; 360 int comstart_pos = 0;
361 int comstart_parity = 0; 361 int comstart_parity = 0;
362 int scanstart = from - 1; 362 int scanstart = from - 1;
363 register enum syntaxcode code; 363 register enum syntaxcode code;
364 int c, comstyle = 0; 364 int c;
365 365
366 /* At beginning of range to scan, we're outside of strings; 366 /* At beginning of range to scan, we're outside of strings;
367 that determines quote parity to the comment-end. */ 367 that determines quote parity to the comment-end. */
368 while (from != stop) 368 while (from != stop)
369 { 369 {
386 c = FETCH_CHAR (from); 386 c = FETCH_CHAR (from);
387 } 387 }
388 388
389 /* If this char starts a 2-char comment start sequence, 389 /* If this char starts a 2-char comment start sequence,
390 treat it like a 1-char comment starter. */ 390 treat it like a 1-char comment starter. */
391 if (from < scanstart && SYNTAX_COMSTART_FIRST (c) 391 if (from < scanstart && SYNTAX_COMSTART_SECOND (c)
392 && SYNTAX_COMSTART_SECOND (FETCH_CHAR (from + 1)) 392 && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from - 1))
393 && comstyle == SYNTAX_COMMENT_STYLE (FETCH_CHAR (from + 1))) 393 && comstyle == SYNTAX_COMMENT_STYLE (c))
394 code = Scomment; 394 {
395 code = Scomment;
396 DEC_POS (from);
397 /* This is apparently the best we can do: */
398 UPDATE_SYNTAX_TABLE_BACKWARD (from);
399 c = FETCH_CHAR (from);
400 }
395 401
396 /* Ignore escaped characters. */ 402 /* Ignore escaped characters. */
397 if (char_quoted (from)) 403 if (char_quoted (from))
398 continue; 404 continue;
399 405
1583 break; 1589 break;
1584 } 1590 }
1585 break; 1591 break;
1586 } 1592 }
1587 #endif /* 0 */ 1593 #endif /* 0 */
1588 found = back_comment (from, stop); 1594 found = back_comment (from, stop, comstyle);
1589 if (found != -1) from = found; 1595 if (found != -1) from = found;
1590 #if 0 1596 #if 0
1591 /* Look back, counting the parity of string-quotes, 1597 /* Look back, counting the parity of string-quotes,
1592 and recording the comment-starters seen. 1598 and recording the comment-starters seen.
1593 When we reach a safe place, assume that's not in a string; 1599 When we reach a safe place, assume that's not in a string;
2030 break; 2036 break;
2031 } 2037 }
2032 break; 2038 break;
2033 } 2039 }
2034 #endif /* 0 */ 2040 #endif /* 0 */
2035 found = back_comment (from, stop); 2041 found = back_comment (from, stop, comstyle);
2036 if (found != -1) from = found; 2042 if (found != -1) from = found;
2037 #if 0 2043 #if 0
2038 /* Look back, counting the parity of string-quotes, 2044 /* Look back, counting the parity of string-quotes,
2039 and recording the comment-starters seen. 2045 and recording the comment-starters seen.
2040 When we reach a safe place, assume that's not in a string; 2046 When we reach a safe place, assume that's not in a string;