1#!/usr/bin/awk -f 2# 3# Description: a script that generates a single byte code set to Unicode 4# mapping table. 5# 6 7function conv(str) { 8 if (!match(str, "^0[xX]")) { 9 return 0 + str 10 } 11 12 retval = 0 13 14 for (i = 3; i <= length(str); i++) { 15 n = index("0123456789abcdefABCDEF", substr(str, i, 1)) - 1 16 17 if (n < 0) { 18 return 0 + str; 19 } else if (n >= 16) { 20 n -= 6; 21 } 22 23 retval = retval * 16 + n 24 } 25 26 return retval 27} 28 29BEGIN { 30 FS="[ \t#]" 31} 32 33/^#/ { 34 # Do nothing 35} 36 37{ 38 tbl[conv($1)] = conv($2) 39} 40 41END { 42 print "/* This file is automatically generated. Do not edit! */" 43 if (IFNDEF_NAME) { 44 print "#ifndef " IFNDEF_NAME 45 } 46 47 print "static const int " TABLE_NAME "[] = {" 48 i = 160; 49 for (;;) { 50 printf("\t0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x", tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++]); 51 if (i != 256) { 52 printf(",\n"); 53 } else { 54 print "" 55 break; 56 } 57 } 58 print "};" 59 60 if (IFNDEF_NAME) { 61 print "#endif /* " IFNDEF_NAME " */" 62 } 63} 64