3 ($progname = $0) =~ s,.*/,,;
5 print "/* This file is autogenerated by $progname */\n";
9 #define HCTYPE_SPACE 0x01
10 #define HCTYPE_NAME_FIRST 0x02
11 #define HCTYPE_NAME_CHAR 0x04
12 #define HCTYPE_NOT_SPACE_GT 0x08
13 #define HCTYPE_NOT_SPACE_EQ_GT 0x10
14 #define HCTYPE_NOT_SPACE_SLASH_GT 0x20
15 #define HCTYPE_NOT_SPACE_EQ_SLASH_GT 0x40
17 #define HCTYPE(c) hctype[(unsigned char)(c)]
18 #define isHCTYPE(c, w) (HCTYPE(c) & (w))
20 #define isHSPACE(c) isHCTYPE(c, HCTYPE_SPACE)
21 #define isHNAME_FIRST(c) isHCTYPE(c, HCTYPE_NAME_FIRST)
22 #define isHNAME_CHAR(c) isHCTYPE(c, HCTYPE_NAME_CHAR)
23 #define isHNOT_SPACE_GT(c) isHCTYPE(c, HCTYPE_NOT_SPACE_GT)
25 typedef unsigned char hctype_t;
29 print "static hctype_t hctype[] = {\n";
31 for my $c (0 .. 255) {
32 print " " unless $c % 8;
36 if (/^\s$/) { # isSPACE
41 $v |= 0x10 if $_ ne "=";
42 $v |= 0x20 if $_ ne "/";
43 $v |= 0x40 if $_ ne "=";
48 $v |= 0x2 unless /^[\d.-]$/; # XML allow /[:_]/ as first char
51 printf "0x%02x, ", $v;
53 printf " /* %3d - %3d */\n", $c - 7, $c;