/* shindou11_no_ucase.c - Don Yang (uguu.org) 02/24/07 */ #include #include #include #define F(_) static void _(void) #define G(_, H) static int _(void) { return H; } #define l(_) } else if(_) { int N,E,K,O,n,e,k,o,s,f,t,w, Z=255, Y = 33089, W = 41378, V = 12289, U = 0xe38081, T = 0xefbc81, y = 65281; FILE *a; unsigned char *b, *q = " \0!\0 \1\xff\1\xef\xbc\x81I\xa1\xaa" " 'PoPoPo\4""0?PoPo\3\20\17Po\2\1" "QO\220,\2""0?\220,\2\1" "qxq.\2}}q.\2`$q.\2,q.\2^^q.\2__q.q.\3\1", *d, *p; void g(void *r, int m) { fwrite(r, m, 1, stdout); } F(i) { if( O == f ) { p = b; b = malloc((f *= 2) + 3); memcpy(b, p, O); free(p); } O += fread(b + O, 1, f - O, a); } F(h) { w = t = 0; for(p = d; *p > 4 && w + 1; p++) { if( b[n + t] < (*p ^ 208) || b[n + t] > (p[1] ^ 208) ) { if( t ) { w = -1; l(1) for(; *p > 4; p++); } l(1) t++; p++; } } for(t = 0; w + 1 && t < *p; t++) w = (w << 8) | b[n++]; if( o & 8 ) w = (w >> 8) | ((w & Z) << 8); } F(j) { N = E = K = O = 0; for(o = 7; !feof(a) && (o & (o - 1));) { i(); if( !(o & 24) ) { if( *b == Z && b[1] == Z-1 ) { o = 8; l( *b == Z-1 && b[1] == Z ) o = 16; l(1) for(n = 0; n < O - 1; n += 2) { if( b[n] == 10 && !b[n + 1] ) { o = 8; goto m; } if( !b[n] && b[n + 1] == 10 ) { o = 16; goto m; } } if( *b == 239 && b[1] == 187 && b[2] == 191 ) { o = 1; l(1) d = q + 14; for(n = 0; n < O - 3 && o & 1;) { h(); if( w < 0 ) { o &= ~1; l( (w > U+Z && w < U+319) || (w > U+Z+Z && w < U+531) ) N++; } } d += 22; for(n = 0; n < O - 1 && o & 2;) { h(); if( w < 0 ) { o &= ~2; l( w > Y+349 && w < Y+433 ) E++; } } d += 11; for(n = 0; n < O - 2 && o & 4;) { h(); if( w < 0 ) { o &= ~4; l( w > W+766 && w < W+850 ) K++; } } } } } } m: if( !(o & 24) ) { if( !(o & 1) ) N = -1; if( !(o & 2) ) E = -1; if( !(o & 4) ) K = -1; o = N < E ? E < K ? 4 : 2 : N < K ? 4 : o & 1 ? 1 : 4; } } G(x, w == 33 || (o & 24 && w == y) || (o & 1 && w == T) || (o & 2 && w == Y+8) || (o & 4 && w == W+8)) G(z, w == 46 || w == 63 || (o & 24 && (w == y+30 || w == y+13 || w == V+1 || w == y+96)) || (o & 1 && (w == T+30 || w == T+13 || w == U+1 || w == T+288)) || (o & 2 && (w == Y+7 || w == Y+3 || w == Y+1)) || (o & 4 && (w == W+7 || w == W+3 || w == W+1)) || x()) G(c, w == 44 || w == 10 || (o & 24 && (w == y+11 || w == V || w == y+99)) || (o & 1 && (w == T+11 || w == U || w == T+291)) || (o & 2 && (w == Y+2 || w == Y)) || (o & 4 && (w == W+2 || w == W)) || z()) F(X) { g(q + (w > Z ? o & 16 ? 6 : o & 8 ? 5 : o & 1 ? 8 : o & 2 ? 10 : 12 : o & 16 ? 1 : 2), w > Z ? o & 1 ? 3 : 2 : o & 24 ? 2 : 1); } int main(int r, char **m) { f = 4096; b = malloc(f); if( *++m ) { for(; *m; ++m) { g(*m, strlen(*m)); g(": ", 2); if( (a = fopen(*m, "rb")) ) { j(); puts(o - 8 ? o - 16 ? o - 1 ? o - 2 ? "EUC-JP" : "Shift_JIS" : "UTF-8" : "UCS-2BE" : "UCS-2LE"); fclose(a); l(1) puts("can not open"); } } l(1) a = stdin; j(); d = q + ( o - 1 ? o - 2 ? o - 4 ? 34 : 47 : 36 : 14 ); for(n = e = k = 0; !feof(a) || n < O;) { s = n; h(); if( w < 0 ) n++; if( n < O - 3 ) { memmove(b, b + e, O - e); O -= e; n -= e; s -= e; e = 0; i(); } if( k ) { if( c() ) { if( z() ) { for(n = e; n < s; e = n) { h(); g(b + e, n - e); g(q + (o & 16 ? 3 : 0), o & 24 ? 2 : 1); } h(); } if( e < s ) g(b + e, s - e); if( x() ) { X(); X(); l( c() && w - 10 ) X(); l(1) g(b + s, n - s); } k = 0; } l( w < 0 || c() ) g(b + s, n - s); l(1) k = 1; e = s; } } } free(b); return 0; }