Fix pattern classes in string lib.
```
local ref = {
}
for cl in string.gmatch('acdglpsuwxACDGLPSUWX', '.') do
local list = ''
for i = 0, 255 do
if string.match(string.char(i), '%'..cl) then
list = list..i..','
end
end
if ref[cl] then
assert(ref[cl] == list, cl..':\n'..list..'\n'..ref[cl])
else
print(cl..' = "'..list..'",')
end
end
print('+')
```
This commit is contained in:
@@ -821,7 +821,7 @@ public class StringLib extends TwoArgFunction {
|
|||||||
static {
|
static {
|
||||||
CHAR_TABLE = new byte[256];
|
CHAR_TABLE = new byte[256];
|
||||||
|
|
||||||
for ( int i = 0; i < 256; ++i ) {
|
for ( int i = 0; i < 128; ++i ) {
|
||||||
final char c = (char) i;
|
final char c = (char) i;
|
||||||
CHAR_TABLE[i] = (byte)( ( Character.isDigit( c ) ? MASK_DIGIT : 0 ) |
|
CHAR_TABLE[i] = (byte)( ( Character.isDigit( c ) ? MASK_DIGIT : 0 ) |
|
||||||
( Character.isLowerCase( c ) ? MASK_LOWERCASE : 0 ) |
|
( Character.isLowerCase( c ) ? MASK_LOWERCASE : 0 ) |
|
||||||
@@ -830,7 +830,7 @@ public class StringLib extends TwoArgFunction {
|
|||||||
if ( ( c >= 'a' && c <= 'f' ) || ( c >= 'A' && c <= 'F' ) || ( c >= '0' && c <= '9' ) ) {
|
if ( ( c >= 'a' && c <= 'f' ) || ( c >= 'A' && c <= 'F' ) || ( c >= '0' && c <= '9' ) ) {
|
||||||
CHAR_TABLE[i] |= MASK_HEXDIGIT;
|
CHAR_TABLE[i] |= MASK_HEXDIGIT;
|
||||||
}
|
}
|
||||||
if ( ( c >= '!' && c <= '/' ) || ( c >= ':' && c <= '@' ) ) {
|
if ( ( c >= '!' && c <= '/' ) || ( c >= ':' && c <= '@' ) || ( c >= '[' && c <= '`' ) || ( c >= '{' && c <= '~' ) ) {
|
||||||
CHAR_TABLE[i] |= MASK_PUNCT;
|
CHAR_TABLE[i] |= MASK_PUNCT;
|
||||||
}
|
}
|
||||||
if ( ( CHAR_TABLE[i] & ( MASK_LOWERCASE | MASK_UPPERCASE ) ) != 0 ) {
|
if ( ( CHAR_TABLE[i] & ( MASK_LOWERCASE | MASK_UPPERCASE ) ) != 0 ) {
|
||||||
@@ -842,7 +842,7 @@ public class StringLib extends TwoArgFunction {
|
|||||||
CHAR_TABLE['\r'] |= MASK_SPACE;
|
CHAR_TABLE['\r'] |= MASK_SPACE;
|
||||||
CHAR_TABLE['\n'] |= MASK_SPACE;
|
CHAR_TABLE['\n'] |= MASK_SPACE;
|
||||||
CHAR_TABLE['\t'] |= MASK_SPACE;
|
CHAR_TABLE['\t'] |= MASK_SPACE;
|
||||||
CHAR_TABLE[0x0C /* '\v' */ ] |= MASK_SPACE;
|
CHAR_TABLE[0x0B /* '\v' */ ] |= MASK_SPACE;
|
||||||
CHAR_TABLE['\f'] |= MASK_SPACE;
|
CHAR_TABLE['\f'] |= MASK_SPACE;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1008,9 +1008,10 @@ public class StringLib extends TwoArgFunction {
|
|||||||
case 'c': res = ( cdata & MASK_CONTROL ) != 0; break;
|
case 'c': res = ( cdata & MASK_CONTROL ) != 0; break;
|
||||||
case 'p': res = ( cdata & MASK_PUNCT ) != 0; break;
|
case 'p': res = ( cdata & MASK_PUNCT ) != 0; break;
|
||||||
case 's': res = ( cdata & MASK_SPACE ) != 0; break;
|
case 's': res = ( cdata & MASK_SPACE ) != 0; break;
|
||||||
|
case 'g': res = ( cdata & ( MASK_ALPHA | MASK_DIGIT | MASK_PUNCT ) ) != 0; break;
|
||||||
case 'w': res = ( cdata & ( MASK_ALPHA | MASK_DIGIT ) ) != 0; break;
|
case 'w': res = ( cdata & ( MASK_ALPHA | MASK_DIGIT ) ) != 0; break;
|
||||||
case 'x': res = ( cdata & MASK_HEXDIGIT ) != 0; break;
|
case 'x': res = ( cdata & MASK_HEXDIGIT ) != 0; break;
|
||||||
case 'z': res = ( c == 0 ); break;
|
case 'z': res = ( c == 0 ); break; /* deprecated option */
|
||||||
default: return cl == c;
|
default: return cl == c;
|
||||||
}
|
}
|
||||||
return ( lcl == cl ) ? res : !res;
|
return ( lcl == cl ) ? res : !res;
|
||||||
|
|||||||
Reference in New Issue
Block a user