#include int main() { char *set = calloc(0x110000,1); char buf[128], dummy; int a, b; FILE *f; /* Alphabetic property */ f = fopen("DerivedCoreProperties.txt", "rb"); while (fgets(buf, sizeof buf, f)) { if (sscanf(buf, "%x..%x ; Alphabetic%c", &a, &b, &dummy)==3) for (; a<=b; a++) set[a]=1; else if (sscanf(buf, "%x ; Alphabetic%c", &a, &dummy)==2) set[a] = 1; } fclose(f); /* Plus Nd category */ f = fopen("UnicodeData.txt", "rb"); while (fgets(buf, sizeof buf, f)) { if (sscanf(buf, "%x;%*[^;];Nd%c", &a, &dummy)==2) set[a] = 1; } fclose(f); /* Fix misclassified Thai characters */ set[0xe2f] = set[0xe46] = 0; /* Fill in elided CJK ranges */ for (a=0x3400; a<=0x4db5; a++) set[a]=1; for (a=0x4e00; a<=0x9fcc; a++) set[a]=1; for (a=0xac00; a<=0xd7a3; a++) set[a]=1; for (a=0x20000; a<=0x2a6d6; a++) set[a]=1; for (a=0x2a700; a<=0x2b734; a++) set[a]=1; for (a=0x2b740; a<=0x2b81d; a++) set[a]=1; for (a=0; a<0x110000; a++) { putchar(set[a]?'*':'.'); if (!(a+1&63)) putchar('\n'); } }