Mercurial > emacs
changeset 56116:6725db0f57d5
(skip_chars): Only recognize [:class:] when it has the
proper format and class is a lower-case word.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Tue, 15 Jun 2004 09:42:31 +0000 |
parents | f54273435989 |
children | 75f76430cc6c |
files | src/syntax.c |
diffstat | 1 files changed, 7 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/syntax.c Tue Jun 15 09:42:18 2004 +0000 +++ b/src/syntax.c Tue Jun 15 09:42:31 2004 +0000 @@ -1455,7 +1455,7 @@ { const unsigned char *class_beg = str + i_byte + 1; const unsigned char *class_end = class_beg; - const unsigned char *class_limit = str + size_byte; + const unsigned char *class_limit = str + size_byte - 2; /* Leave room for the null. */ unsigned char class_name[CHAR_CLASS_MAX_LENGTH + 1]; re_wctype_t cc; @@ -1463,17 +1463,13 @@ if (class_limit - class_beg > CHAR_CLASS_MAX_LENGTH) class_limit = class_beg + CHAR_CLASS_MAX_LENGTH; - while (class_end != class_limit - && ! (*class_end >= 0200 - || *class_end <= 040 - || (*class_end == ':' - && class_end[1] == ']'))) + while (class_end < class_limit + && *class_end >= 'a' && *class_end <= 'z') class_end++; - if (class_end == class_limit - || *class_end >= 0200 - || *class_end <= 040) - error ("Invalid ISO C character class"); + if (class_end == class_beg + || *class_end != ':' || class_end[1] != ']') + goto not_a_class_name; bcopy (class_beg, class_name, class_end - class_beg); class_name[class_end - class_beg] = 0; @@ -1488,6 +1484,7 @@ continue; } + not_a_class_name: if (c == '\\') { if (i_byte == size_byte)