#define VCT_CRLF (1<<1)
#define VCT_LWS (VCT_CRLF | VCT_SP)
#define VCT_CTL (1<<2)
-#define VCT_UALPHA (1<<3)
-#define VCT_LOALPHA (1<<4)
+#define VCT_ALPHA (1<<3)
+#define VCT_SEPARATOR (1<<4)
#define VCT_DIGIT (1<<5)
#define VCT_HEX (1<<6)
#define vct_iscrlf(x) vct_is(x, VCT_CRLF)
#define vct_islws(x) vct_is(x, VCT_LWS)
#define vct_isctl(x) vct_is(x, VCT_CTL)
+#define vct_isalpha(x) vct_is(x, VCT_ALPHA)
+#define vct_issep(x) vct_is(x, VCT_SEPARATOR)
/* NB: VCT always operate in ASCII, don't replace 0x0d with \r etc. */
#define vct_skipcrlf(p) (p[0] == 0x0d && p[1] == 0x0a ? 2 : 1)
/* NB: VCT always operate in ASCII, don't replace 0x0d with \r etc. */
+#define VCT_UPALPHA VCT_ALPHA
+#define VCT_LOALPHA VCT_ALPHA
+
unsigned char vct_typtab[256] = {
[0x00] = VCT_CTL,
[0x01] = VCT_CTL,
[0x06] = VCT_CTL,
[0x07] = VCT_CTL,
[0x08] = VCT_CTL,
- [0x09] = VCT_CTL | VCT_SP,
+ [0x09] = VCT_CTL | VCT_SP | VCT_SEPARATOR,
[0x0a] = VCT_CTL | VCT_CRLF,
[0x0b] = VCT_CTL,
[0x0c] = VCT_CTL,
[0x1d] = VCT_CTL,
[0x1e] = VCT_CTL,
[0x1f] = VCT_CTL,
- [0x20] = VCT_SP,
+ [0x20] = VCT_SP | VCT_SEPARATOR,
+ [0x22] = VCT_SEPARATOR,
+ [0x28] = VCT_SEPARATOR,
+ [0x29] = VCT_SEPARATOR,
+ [0x2c] = VCT_SEPARATOR,
+ [0x2f] = VCT_SEPARATOR,
[0x30] = VCT_DIGIT | VCT_HEX,
[0x31] = VCT_DIGIT | VCT_HEX,
[0x32] = VCT_DIGIT | VCT_HEX,
[0x37] = VCT_DIGIT | VCT_HEX,
[0x38] = VCT_DIGIT | VCT_HEX,
[0x39] = VCT_DIGIT | VCT_HEX,
- [0x41] = VCT_UALPHA | VCT_HEX,
- [0x42] = VCT_UALPHA | VCT_HEX,
- [0x43] = VCT_UALPHA | VCT_HEX,
- [0x44] = VCT_UALPHA | VCT_HEX,
- [0x45] = VCT_UALPHA | VCT_HEX,
- [0x46] = VCT_UALPHA | VCT_HEX,
- [0x47] = VCT_UALPHA,
- [0x48] = VCT_UALPHA,
- [0x49] = VCT_UALPHA,
- [0x4a] = VCT_UALPHA,
- [0x4b] = VCT_UALPHA,
- [0x4c] = VCT_UALPHA,
- [0x4d] = VCT_UALPHA,
- [0x4e] = VCT_UALPHA,
- [0x4f] = VCT_UALPHA,
- [0x50] = VCT_UALPHA,
- [0x51] = VCT_UALPHA,
- [0x52] = VCT_UALPHA,
- [0x53] = VCT_UALPHA,
- [0x54] = VCT_UALPHA,
- [0x55] = VCT_UALPHA,
- [0x56] = VCT_UALPHA,
- [0x57] = VCT_UALPHA,
- [0x58] = VCT_UALPHA,
- [0x59] = VCT_UALPHA,
- [0x5a] = VCT_UALPHA,
+ [0x3a] = VCT_SEPARATOR,
+ [0x3b] = VCT_SEPARATOR,
+ [0x3c] = VCT_SEPARATOR,
+ [0x3d] = VCT_SEPARATOR,
+ [0x3e] = VCT_SEPARATOR,
+ [0x3f] = VCT_SEPARATOR,
+ [0x40] = VCT_SEPARATOR,
+ [0x41] = VCT_UPALPHA | VCT_HEX,
+ [0x42] = VCT_UPALPHA | VCT_HEX,
+ [0x43] = VCT_UPALPHA | VCT_HEX,
+ [0x44] = VCT_UPALPHA | VCT_HEX,
+ [0x45] = VCT_UPALPHA | VCT_HEX,
+ [0x46] = VCT_UPALPHA | VCT_HEX,
+ [0x47] = VCT_UPALPHA,
+ [0x48] = VCT_UPALPHA,
+ [0x49] = VCT_UPALPHA,
+ [0x4a] = VCT_UPALPHA,
+ [0x4b] = VCT_UPALPHA,
+ [0x4c] = VCT_UPALPHA,
+ [0x4d] = VCT_UPALPHA,
+ [0x4e] = VCT_UPALPHA,
+ [0x4f] = VCT_UPALPHA,
+ [0x50] = VCT_UPALPHA,
+ [0x51] = VCT_UPALPHA,
+ [0x52] = VCT_UPALPHA,
+ [0x53] = VCT_UPALPHA,
+ [0x54] = VCT_UPALPHA,
+ [0x55] = VCT_UPALPHA,
+ [0x56] = VCT_UPALPHA,
+ [0x57] = VCT_UPALPHA,
+ [0x58] = VCT_UPALPHA,
+ [0x59] = VCT_UPALPHA,
+ [0x5a] = VCT_UPALPHA,
+ [0x5b] = VCT_SEPARATOR,
+ [0x5c] = VCT_SEPARATOR,
+ [0x5d] = VCT_SEPARATOR,
[0x61] = VCT_LOALPHA | VCT_HEX,
[0x62] = VCT_LOALPHA | VCT_HEX,
[0x63] = VCT_LOALPHA | VCT_HEX,
[0x78] = VCT_LOALPHA,
[0x79] = VCT_LOALPHA,
[0x7a] = VCT_LOALPHA,
+ [0x7b] = VCT_SEPARATOR,
+ [0x7d] = VCT_SEPARATOR,
[0x7f] = VCT_CTL,
};