| 1738 |
|
|
| 1739 |
/* This function is called when the sequence "[:" or "[." or "[=" is |
/* This function is called when the sequence "[:" or "[." or "[=" is |
| 1740 |
encountered in a character class. It checks whether this is followed by a |
encountered in a character class. It checks whether this is followed by a |
| 1741 |
sequence of characters terminated by a matching ":]" or ".]" or "=]". If we |
sequence of characters terminated by a matching ":]" or ".]" or "=]". If we |
| 1742 |
reach an unescaped ']' without the special preceding character, return FALSE. |
reach an unescaped ']' without the special preceding character, return FALSE. |
| 1743 |
|
|
| 1744 |
Originally, this function only recognized a sequence of letters between the |
Originally, this function only recognized a sequence of letters between the |
| 1745 |
terminators, but it seems that Perl recognizes any sequence of characters, |
terminators, but it seems that Perl recognizes any sequence of characters, |
| 1746 |
though of course unknown POSIX names are subsequently rejected. Perl gives an |
though of course unknown POSIX names are subsequently rejected. Perl gives an |
| 1747 |
"Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE |
"Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE |
| 1748 |
didn't consider this to be a POSIX class. Likewise for [:1234:]. |
didn't consider this to be a POSIX class. Likewise for [:1234:]. |
| 1749 |
|
|
| 1750 |
The problem in trying to be exactly like Perl is in the handling of escapes. We |
The problem in trying to be exactly like Perl is in the handling of escapes. We |
| 1751 |
have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX |
have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX |
| 1752 |
class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code |
class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code |
| 1753 |
below handles the special case of \], but does not try to do any other escape |
below handles the special case of \], but does not try to do any other escape |
| 1754 |
processing. This makes it different from Perl for cases such as [:l\ower:] |
processing. This makes it different from Perl for cases such as [:l\ower:] |
| 1755 |
where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize |
where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize |
| 1756 |
"l\ower". This is a lesser evil that not diagnosing bad classes when Perl does, |
"l\ower". This is a lesser evil that not diagnosing bad classes when Perl does, |
| 1757 |
I think. |
I think. |
| 1758 |
|
|
| 1759 |
Arguments: |
Arguments: |
| 1771 |
for (++ptr; *ptr != 0; ptr++) |
for (++ptr; *ptr != 0; ptr++) |
| 1772 |
{ |
{ |
| 1773 |
if (*ptr == '\\' && ptr[1] == ']') ptr++; else |
if (*ptr == '\\' && ptr[1] == ']') ptr++; else |
| 1774 |
{ |
{ |
| 1775 |
if (*ptr == ']') return FALSE; |
if (*ptr == ']') return FALSE; |
| 1776 |
if (*ptr == terminator && ptr[1] == ']') |
if (*ptr == terminator && ptr[1] == ']') |
| 1777 |
{ |
{ |
| 1778 |
*endptr = ptr; |
*endptr = ptr; |
| 1779 |
return TRUE; |
return TRUE; |
| 1780 |
} |
} |
| 1781 |
} |
} |
| 1782 |
} |
} |
| 1783 |
return FALSE; |
return FALSE; |
| 1784 |
} |
} |
| 1785 |
|
|