3535#define FL_ALPHA (0x08)
3636#define FL_UPPER (0x10)
3737#define FL_LOWER (0x20)
38+ #define FL_XDIGIT (0x40)
3839
3940// shorthand character attributes
4041#define AT_PR (FL_PRINT)
4142#define AT_SP (FL_SPACE | FL_PRINT)
42- #define AT_DI (FL_DIGIT | FL_PRINT)
43+ #define AT_DI (FL_DIGIT | FL_PRINT | FL_XDIGIT )
4344#define AT_AL (FL_ALPHA | FL_PRINT)
4445#define AT_UP (FL_UPPER | FL_ALPHA | FL_PRINT)
4546#define AT_LO (FL_LOWER | FL_ALPHA | FL_PRINT)
47+ #define AT_UX (FL_UPPER | FL_ALPHA | FL_PRINT | FL_XDIGIT)
48+ #define AT_LX (FL_LOWER | FL_ALPHA | FL_PRINT | FL_XDIGIT)
4649
4750// table of attributes for ascii characters
4851STATIC const uint8_t attr [] = {
@@ -54,11 +57,11 @@ STATIC const uint8_t attr[] = {
5457 AT_PR , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR ,
5558 AT_DI , AT_DI , AT_DI , AT_DI , AT_DI , AT_DI , AT_DI , AT_DI ,
5659 AT_DI , AT_DI , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR ,
57- AT_PR , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP ,
60+ AT_PR , AT_UX , AT_UX , AT_UX , AT_UX , AT_UX , AT_UX , AT_UP ,
5861 AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP ,
5962 AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP , AT_UP ,
6063 AT_UP , AT_UP , AT_UP , AT_PR , AT_PR , AT_PR , AT_PR , AT_PR ,
61- AT_PR , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO ,
64+ AT_PR , AT_LX , AT_LX , AT_LX , AT_LX , AT_LX , AT_LX , AT_LO ,
6265 AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO ,
6366 AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO , AT_LO ,
6467 AT_LO , AT_LO , AT_LO , AT_PR , AT_PR , AT_PR , AT_PR , 0
@@ -139,7 +142,7 @@ bool unichar_isdigit(unichar c) {
139142}
140143
141144bool unichar_isxdigit (unichar c ) {
142- return unichar_isdigit ( c ) || ( c >= 'a' && c <= 'f' ) || ( c >= 'A' && c <= 'F' ) ;
145+ return c < 128 && ( attr [ c ] & FL_XDIGIT ) != 0 ;
143146}
144147
145148/*
0 commit comments