Mercurial > emacs
comparison src/regex.c @ 83542:2d56e13fd23d
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-413
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-414
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-415
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-416
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-417
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-418
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-419
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-420
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-421
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-422
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-423
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-424
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-425
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-426
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-427
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-428
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-429
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-430
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-431
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-432
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-433
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-434
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-435
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-436
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-437
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-438
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-439
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-440
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-441
lisp/url/url-methods.el: Fix format error when http_proxy is empty string
* emacs@sv.gnu.org/emacs--devo--0--patch-442
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-443
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-444
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-445
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-446
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-447
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-448
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-449
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-450
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-451
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-452
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-453
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-454
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-455
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-456
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-457
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-458
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-459
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-460
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-461
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-462
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-463
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-464
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-465
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-466
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-467
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-468
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-469
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-470
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-471
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-472
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-473
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-128
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-129
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-130
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-131
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-132
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-133
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-134
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-135
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-136
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-137
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-138
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-139
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-140
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-141
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-142
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-143
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-144
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-145
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-146
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-147
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-148
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-149
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-582
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sat, 14 Oct 2006 17:36:28 +0000 |
parents | 866effff65a4 3501fcb2e68c |
children | c71725faff1a |
comparison
equal
deleted
inserted
replaced
83541:694bbb62a75d | 83542:2d56e13fd23d |
---|---|
2528 | 2528 |
2529 /* Initialize the pattern buffer. */ | 2529 /* Initialize the pattern buffer. */ |
2530 bufp->syntax = syntax; | 2530 bufp->syntax = syntax; |
2531 bufp->fastmap_accurate = 0; | 2531 bufp->fastmap_accurate = 0; |
2532 bufp->not_bol = bufp->not_eol = 0; | 2532 bufp->not_bol = bufp->not_eol = 0; |
2533 bufp->used_syntax = 0; | |
2533 | 2534 |
2534 /* Set `used' to zero, so that if we return an error, the pattern | 2535 /* Set `used' to zero, so that if we return an error, the pattern |
2535 printer (for debugging) will think there's no pattern. We reset it | 2536 printer (for debugging) will think there's no pattern. We reset it |
2536 at the end. */ | 2537 at the end. */ |
2537 bufp->used = 0; | 2538 bufp->used = 0; |
2940 int translated = TRANSLATE (ch); | 2941 int translated = TRANSLATE (ch); |
2941 if (re_iswctype (btowc (ch), cc)) | 2942 if (re_iswctype (btowc (ch), cc)) |
2942 SET_LIST_BIT (translated); | 2943 SET_LIST_BIT (translated); |
2943 } | 2944 } |
2944 | 2945 |
2946 /* In most cases the matching rule for char classes | |
2947 only uses the syntax table for multibyte chars, | |
2948 so that the content of the syntax-table it is not | |
2949 hardcoded in the range_table. SPACE and WORD are | |
2950 the two exceptions. */ | |
2951 if ((1 << cc) & ((1 << RECC_SPACE) | (1 << RECC_WORD))) | |
2952 bufp->used_syntax = 1; | |
2953 | |
2945 /* Repeat the loop. */ | 2954 /* Repeat the loop. */ |
2946 continue; | 2955 continue; |
2947 } | 2956 } |
2948 else | 2957 else |
2949 { | 2958 { |
3875 | 3884 |
3876 case exactn: | 3885 case exactn: |
3877 if (fastmap) | 3886 if (fastmap) |
3878 { | 3887 { |
3879 int c = RE_STRING_CHAR (p + 1, pend - p); | 3888 int c = RE_STRING_CHAR (p + 1, pend - p); |
3880 | 3889 /* When fast-scanning, the fastmap can be indexed either with |
3890 a char (smaller than 256) or with the first byte of | |
3891 a char's byte sequence. So we have to conservatively add | |
3892 both to the table. */ | |
3881 if (SINGLE_BYTE_CHAR_P (c)) | 3893 if (SINGLE_BYTE_CHAR_P (c)) |
3882 fastmap[c] = 1; | 3894 fastmap[c] = 1; |
3883 else | 3895 fastmap[p[1]] = 1; |
3884 fastmap[p[1]] = 1; | |
3885 } | 3896 } |
3886 break; | 3897 break; |
3887 | 3898 |
3888 | 3899 |
3889 case anychar: | 3900 case anychar: |
3897 /* Chars beyond end of bitmap are possible matches. | 3908 /* Chars beyond end of bitmap are possible matches. |
3898 All the single-byte codes can occur in multibyte buffers. | 3909 All the single-byte codes can occur in multibyte buffers. |
3899 So any that are not listed in the charset | 3910 So any that are not listed in the charset |
3900 are possible matches, even in multibyte buffers. */ | 3911 are possible matches, even in multibyte buffers. */ |
3901 if (!fastmap) break; | 3912 if (!fastmap) break; |
3913 /* We don't need to mark LEADING_CODE_8_BIT_CONTROL specially | |
3914 because it will automatically be set when needed by virtue of | |
3915 being larger than the highest char of its charset (0xbf) but | |
3916 smaller than (1<<BYTEWIDTH). */ | |
3902 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH; | 3917 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH; |
3903 j < (1 << BYTEWIDTH); j++) | 3918 j < (1 << BYTEWIDTH); j++) |
3904 fastmap[j] = 1; | 3919 fastmap[j] = 1; |
3905 /* Fallthrough */ | 3920 /* Fallthrough */ |
3906 case charset: | 3921 case charset: |
3907 if (!fastmap) break; | 3922 if (!fastmap) break; |
3908 not = (re_opcode_t) *(p - 1) == charset_not; | 3923 not = (re_opcode_t) *(p - 1) == charset_not; |
3909 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++; | 3924 for (j = CHARSET_BITMAP_SIZE (&p[-1]) * BYTEWIDTH - 1, p++; |
3910 j >= 0; j--) | 3925 j >= 0; j--) |
3911 if (!!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) ^ not) | 3926 if (!!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) ^ not) |
3912 fastmap[j] = 1; | 3927 { |
3928 fastmap[j] = 1; | |
3929 #ifdef emacs | |
3930 if (j >= 0x80 && j < 0xa0) | |
3931 fastmap[LEADING_CODE_8_BIT_CONTROL] = 1; | |
3932 #endif | |
3933 } | |
3913 | 3934 |
3914 if ((not && multibyte) | 3935 if ((not && multibyte) |
3915 /* Any character set can possibly contain a character | 3936 /* Any character set can possibly contain a character |
3916 which doesn't match the specified set of characters. */ | 3937 which doesn't match the specified set of characters. */ |
3917 || (CHARSET_RANGE_TABLE_EXISTS_P (&p[-2]) | 3938 || (CHARSET_RANGE_TABLE_EXISTS_P (&p[-2]) |
4350 range--; | 4371 range--; |
4351 } | 4372 } |
4352 } | 4373 } |
4353 } | 4374 } |
4354 else | 4375 else |
4355 while (range > lim && !fastmap[*d]) | 4376 do |
4356 { | 4377 { |
4357 d++; | 4378 re_char *d_start = d; |
4358 range--; | 4379 while (range > lim && !fastmap[*d]) |
4359 } | 4380 { |
4381 d++; | |
4382 range--; | |
4383 } | |
4384 #ifdef emacs | |
4385 if (multibyte && range > lim) | |
4386 { | |
4387 /* Check that we are at the beginning of a char. */ | |
4388 int at_boundary; | |
4389 AT_CHAR_BOUNDARY_P (at_boundary, d, d_start); | |
4390 if (at_boundary) | |
4391 break; | |
4392 else | |
4393 { /* We have matched an internal byte of a char | |
4394 rather than the leading byte, so it's a false | |
4395 positive: we should keep scanning. */ | |
4396 d++; range--; | |
4397 } | |
4398 } | |
4399 else | |
4400 #endif | |
4401 break; | |
4402 } while (1); | |
4360 | 4403 |
4361 startpos += irange - range; | 4404 startpos += irange - range; |
4362 } | 4405 } |
4363 else /* Searching backwards. */ | 4406 else /* Searching backwards. */ |
4364 { | 4407 { |
6195 size_t length; | 6238 size_t length; |
6196 struct re_pattern_buffer *bufp; | 6239 struct re_pattern_buffer *bufp; |
6197 { | 6240 { |
6198 reg_errcode_t ret; | 6241 reg_errcode_t ret; |
6199 | 6242 |
6243 #ifdef emacs | |
6244 gl_state.current_syntax_table = current_buffer->syntax_table; | |
6245 #endif | |
6246 | |
6200 /* GNU code is written to assume at least RE_NREGS registers will be set | 6247 /* GNU code is written to assume at least RE_NREGS registers will be set |
6201 (and at least one extra will be -1). */ | 6248 (and at least one extra will be -1). */ |
6202 bufp->regs_allocated = REGS_UNALLOCATED; | 6249 bufp->regs_allocated = REGS_UNALLOCATED; |
6203 | 6250 |
6204 /* And GNU code determines whether or not to get register information | 6251 /* And GNU code determines whether or not to get register information |