| 38 |
"*", "*?", "+", "+?", "?", "??", "{", "{", "{", |
"*", "*?", "+", "+?", "?", "??", "{", "{", "{", |
| 39 |
"*", "*?", "+", "+?", "?", "??", "{", "{", "{", |
"*", "*?", "+", "+?", "?", "??", "{", "{", "{", |
| 40 |
"*", "*?", "+", "+?", "?", "??", "{", "{", |
"*", "*?", "+", "+?", "?", "??", "{", "{", |
| 41 |
"class", "Ref", |
"class", "negclass", "Ref", |
| 42 |
"Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", "Once", |
"Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", "Once", |
| 43 |
"Brazero", "Braminzero", "Bra" |
"Brazero", "Braminzero", "Bra" |
| 44 |
}; |
}; |
| 122 |
case OP_TYPEUPTO: |
case OP_TYPEUPTO: |
| 123 |
case OP_TYPEMINUPTO: |
case OP_TYPEMINUPTO: |
| 124 |
printf(" %s{", OP_names[code[3]]); |
printf(" %s{", OP_names[code[3]]); |
| 125 |
if (*code != OP_TYPEEXACT) printf(","); |
if (*code != OP_TYPEEXACT) printf("0,"); |
| 126 |
printf("%d}", (code[1] << 8) + code[2]); |
printf("%d}", (code[1] << 8) + code[2]); |
| 127 |
if (*code == OP_TYPEMINUPTO) printf("?"); |
if (*code == OP_TYPEMINUPTO) printf("?"); |
| 128 |
code += 3; |
code += 3; |
| 157 |
|
|
| 158 |
case OP_REF: |
case OP_REF: |
| 159 |
printf(" \\%d", *(++code)); |
printf(" \\%d", *(++code)); |
| 160 |
break; |
code++; |
| 161 |
|
goto CLASS_REF_REPEAT; |
| 162 |
|
|
| 163 |
case OP_CLASS: |
case OP_CLASS: |
| 164 |
|
case OP_NEGCLASS: |
| 165 |
{ |
{ |
| 166 |
int i, min, max; |
int i, min, max; |
| 167 |
|
if (*code++ == OP_CLASS) printf(" ["); |
| 168 |
code++; |
else printf(" ^["); |
|
printf(" ["); |
|
| 169 |
|
|
| 170 |
for (i = 0; i < 256; i++) |
for (i = 0; i < 256; i++) |
| 171 |
{ |
{ |
| 188 |
printf("]"); |
printf("]"); |
| 189 |
code += 32; |
code += 32; |
| 190 |
|
|
| 191 |
|
CLASS_REF_REPEAT: |
| 192 |
|
|
| 193 |
switch(*code) |
switch(*code) |
| 194 |
{ |
{ |
| 195 |
case OP_CRSTAR: |
case OP_CRSTAR: |
| 268 |
int showinfo = 0; |
int showinfo = 0; |
| 269 |
int posix = 0; |
int posix = 0; |
| 270 |
int debug = 0; |
int debug = 0; |
| 271 |
|
int done = 0; |
| 272 |
unsigned char buffer[30000]; |
unsigned char buffer[30000]; |
| 273 |
unsigned char dbuffer[1024]; |
unsigned char dbuffer[1024]; |
| 274 |
|
|
| 327 |
|
|
| 328 |
/* Main loop */ |
/* Main loop */ |
| 329 |
|
|
| 330 |
for (;;) |
while (!done) |
| 331 |
{ |
{ |
| 332 |
pcre *re = NULL; |
pcre *re = NULL; |
| 333 |
pcre_extra *extra = NULL; |
pcre_extra *extra = NULL; |
| 376 |
if (fgets((char *)pp, len, infile) == NULL) |
if (fgets((char *)pp, len, infile) == NULL) |
| 377 |
{ |
{ |
| 378 |
fprintf(outfile, "** Unexpected EOF\n"); |
fprintf(outfile, "** Unexpected EOF\n"); |
| 379 |
goto END_OFF; |
done = 1; |
| 380 |
|
goto CONTINUE; |
| 381 |
} |
} |
| 382 |
if (infile != stdin) fprintf(outfile, (char *)pp); |
if (infile != stdin) fprintf(outfile, (char *)pp); |
| 383 |
} |
} |
| 404 |
case 'P': do_posix = 1; break; |
case 'P': do_posix = 1; break; |
| 405 |
case 'S': do_study = 1; break; |
case 'S': do_study = 1; break; |
| 406 |
case 'I': study_options |= PCRE_CASELESS; break; |
case 'I': study_options |= PCRE_CASELESS; break; |
| 407 |
|
case 'U': options |= PCRE_UNGREEDY; break; |
| 408 |
case 'X': options |= PCRE_EXTRA; break; |
case 'X': options |= PCRE_EXTRA; break; |
| 409 |
case '\n': case ' ': break; |
case '\n': case ' ': break; |
| 410 |
default: |
default: |
| 413 |
} |
} |
| 414 |
} |
} |
| 415 |
|
|
| 416 |
/* Handle compiing via the POSIX interface, which doesn't support the |
/* Handle compiling via the POSIX interface, which doesn't support the |
| 417 |
timing, showing, or debugging options. */ |
timing, showing, or debugging options. */ |
| 418 |
|
|
| 419 |
if (posix || do_posix) |
if (posix || do_posix) |
| 468 |
for (;;) |
for (;;) |
| 469 |
{ |
{ |
| 470 |
if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) |
if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) |
| 471 |
goto END_OFF; |
{ |
| 472 |
|
done = 1; |
| 473 |
|
goto CONTINUE; |
| 474 |
|
} |
| 475 |
len = (int)strlen((char *)buffer); |
len = (int)strlen((char *)buffer); |
| 476 |
while (len > 0 && isspace(buffer[len-1])) len--; |
while (len > 0 && isspace(buffer[len-1])) len--; |
| 477 |
if (len == 0) break; |
if (len == 0) break; |
| 496 |
{ |
{ |
| 497 |
fprintf(outfile, "Identifying subpattern count = %d\n", count); |
fprintf(outfile, "Identifying subpattern count = %d\n", count); |
| 498 |
if (options == 0) fprintf(outfile, "No options\n"); |
if (options == 0) fprintf(outfile, "No options\n"); |
| 499 |
else fprintf(outfile, "Options:%s%s%s%s%s%s%s\n", |
else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s\n", |
| 500 |
((options & PCRE_ANCHORED) != 0)? " anchored" : "", |
((options & PCRE_ANCHORED) != 0)? " anchored" : "", |
| 501 |
((options & PCRE_CASELESS) != 0)? " caseless" : "", |
((options & PCRE_CASELESS) != 0)? " caseless" : "", |
| 502 |
((options & PCRE_EXTENDED) != 0)? " extended" : "", |
((options & PCRE_EXTENDED) != 0)? " extended" : "", |
| 503 |
((options & PCRE_MULTILINE) != 0)? " multiline" : "", |
((options & PCRE_MULTILINE) != 0)? " multiline" : "", |
| 504 |
((options & PCRE_DOTALL) != 0)? " dotall" : "", |
((options & PCRE_DOTALL) != 0)? " dotall" : "", |
| 505 |
((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "", |
((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "", |
| 506 |
((options & PCRE_EXTRA) != 0)? " extra" : ""); |
((options & PCRE_EXTRA) != 0)? " extra" : "", |
| 507 |
|
((options & PCRE_UNGREEDY) != 0)? " ungreedy" : ""); |
| 508 |
if (first_char == -1) |
if (first_char == -1) |
| 509 |
{ |
{ |
| 510 |
fprintf(outfile, "First char at start or follows \\n\n"); |
fprintf(outfile, "First char at start or follows \\n\n"); |
| 591 |
|
|
| 592 |
for (;;) |
for (;;) |
| 593 |
{ |
{ |
| 594 |
unsigned char *pp; |
unsigned char *q; |
| 595 |
int count, c; |
int count, c; |
| 596 |
int offsets[30]; |
int offsets[30]; |
| 597 |
int size_offsets = sizeof(offsets)/sizeof(int); |
int size_offsets = sizeof(offsets)/sizeof(int); |
| 599 |
options = 0; |
options = 0; |
| 600 |
|
|
| 601 |
if (infile == stdin) printf(" data> "); |
if (infile == stdin) printf(" data> "); |
| 602 |
if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) goto END_OFF; |
if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) |
| 603 |
|
{ |
| 604 |
|
done = 1; |
| 605 |
|
goto CONTINUE; |
| 606 |
|
} |
| 607 |
if (infile != stdin) fprintf(outfile, (char *)buffer); |
if (infile != stdin) fprintf(outfile, (char *)buffer); |
| 608 |
|
|
| 609 |
len = (int)strlen((char *)buffer); |
len = (int)strlen((char *)buffer); |
| 614 |
p = buffer; |
p = buffer; |
| 615 |
while (isspace(*p)) p++; |
while (isspace(*p)) p++; |
| 616 |
|
|
| 617 |
pp = dbuffer; |
q = dbuffer; |
| 618 |
while ((c = *p++) != 0) |
while ((c = *p++) != 0) |
| 619 |
{ |
{ |
| 620 |
int i = 0; |
int i = 0; |
| 676 |
|
|
| 677 |
case 'O': |
case 'O': |
| 678 |
while(isdigit(*p)) n = n * 10 + *p++ - '0'; |
while(isdigit(*p)) n = n * 10 + *p++ - '0'; |
| 679 |
if (n <= (int)sizeof(offsets)/sizeof(int)) size_offsets = n; |
if (n <= (int)(sizeof(offsets)/sizeof(int))) size_offsets = n; |
| 680 |
continue; |
continue; |
| 681 |
|
|
| 682 |
case 'Z': |
case 'Z': |
| 683 |
options |= PCRE_NOTEOL; |
options |= PCRE_NOTEOL; |
| 684 |
continue; |
continue; |
| 685 |
} |
} |
| 686 |
*pp++ = c; |
*q++ = c; |
| 687 |
} |
} |
| 688 |
*pp = 0; |
*q = 0; |
| 689 |
len = pp - dbuffer; |
len = q - dbuffer; |
| 690 |
|
|
| 691 |
/* Handle matching via the POSIX interface, which does not |
/* Handle matching via the POSIX interface, which does not |
| 692 |
support timing. */ |
support timing. */ |
| 773 |
} |
} |
| 774 |
} |
} |
| 775 |
|
|
| 776 |
|
CONTINUE: |
| 777 |
if (posix || do_posix) regfree(&preg); |
if (posix || do_posix) regfree(&preg); |
| 778 |
if (re != NULL) free(re); |
if (re != NULL) free(re); |
| 779 |
if (extra != NULL) free(extra); |
if (extra != NULL) free(extra); |
| 780 |
} |
} |
| 781 |
|
|
|
END_OFF: |
|
| 782 |
fprintf(outfile, "\n"); |
fprintf(outfile, "\n"); |
| 783 |
return 0; |
return 0; |
| 784 |
} |
} |