#include #define q(R,y) #y,*o,*s,*h,i,n,o_[]=R"()"; y char d[1<<16], p[] = /* Prologue */ "#include" "#define q(R,y) #y,*o,*s,*h,i,n,o_[]=R\"()\"; y" "char " "d[1<<16]," "p[] =\"" /* Format data */ "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" "(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!(zz!" /* Code */ "\"" q(, int main() { /* Compress whitespaces in input */ for(o = s = p; *o; o++) { if( *o != 32 ) /* Space */ *(s++) = *o; } *(s++) = 41; /* Closing parenthesis */ *s = 0; /* Select format */ h = p + (sizeof('c') > 1 ? 90 /* C90 */ : o_[0] ? 98 /* C++98 */ : 11); /* C++11 */ /* XXX temporary */ h = p + 76; /* Output states (toggle on double quote before output character): 0 = copy data as is 1 = copy data as is 2 = copy data as is 3 = r = 0, escape double quote and newline 4 = escape double quote and newline 5 = escape double quote and newline 6 = escape double quote and newline 7 = copy data as is, write '"q(,' */ i = 0; /* Generate output */ o = p; s = d; for(; *o; h++) { if( *h < 92 ) { if( *h == 33 ) { /* Newline */ if( i >= 3 && i <= 6 ) { s[-1] = 92; /* Backslash */ o--; } *(s++) = 10; } else { /* Space */ for(n = *h - 34; n > 0; n--) *(s++) = 32; } } else { /* Characters */ for(n = *h - 92; n > 0 && *o; n--) { if( *o == 34 ) { i++; o = (i == 3 ? p : o + 1); if( i >= 4 && i <= 7 ) { /* Backslash escaped double quote */ *(s++) = 92; n--; } *(s++) = 34; /* Double quote */ if( i == 7 ) { *(s++) = 34; /* double quote */ *(s++) = 113; /* 'q' */ *(s++) = 40; /* '(' */ *(s++) = 44; /* ',' */ n -= 4; } } else { *(s++) = *(o++); } } } } *s = 0; return puts(d); })