Debian lenny version packages
[pkg-perl] / deb-src / libhtml-parser-perl / libhtml-parser-perl-3.56 / mkhctype
1 #!/usr/bin/perl
2
3 ($progname = $0) =~ s,.*/,,;
4
5 print "/* This file is autogenerated by $progname */\n";
6
7 print <<'EOT';
8
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
16
17 #define HCTYPE(c)       hctype[(unsigned char)(c)]
18 #define isHCTYPE(c, w)  (HCTYPE(c) & (w))
19
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)
24
25 typedef unsigned char hctype_t;
26
27 EOT
28
29 print "static hctype_t hctype[] = {\n";
30
31 for my $c (0 .. 255) {
32     print "    " unless $c % 8;
33
34     local $_ = chr($c);
35     my $v = 0;
36     if (/^\s$/) { # isSPACE
37         $v |= 0x1
38     }
39     elsif ($_ ne ">") {
40         $v |= 0x08;
41         $v |= 0x10 if $_ ne "=";
42         $v |= 0x20 if $_ ne "/";
43         $v |= 0x40 if $_ ne "=";
44     }
45
46     if (/^[\w.\-:]$/) {
47         $v |= 0x4;
48         $v |= 0x2 unless /^[\d.-]$/;  # XML allow /[:_]/ as first char
49     }
50
51     printf "0x%02x, ", $v;
52     unless (($c+1) % 8) {
53         printf " /* %3d - %3d */\n", $c - 7, $c;
54     }
55 }
56 print "};\n";
57