/* "$Id: $" * * Author: Jean-Marc Lienher ( http://oksid.ch ) * Copyright 2000-2003 by O'ksi'D. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. * * Please report all bugs and problems on the following page: * * http://www.fltk.org/str.php */ #include #include char buffer[1000000]; /*** you can try to modifie this value to have better performences **/ #define MAX_DELTA 0x80 int main(int argc, char **argv) { char buf[80]; int len; unsigned int i = 0; unsigned char *ptr; size_t nb; int nbb = 0; len = fread(buffer, 1, 1000000, stdin); buffer[len] = '\0'; ptr = (unsigned char *)buffer; while (*ptr != '\n') ptr++; ptr++; while (*ptr != '\n') { if (*ptr == ',') nbb++; ptr++; } ptr = (unsigned char *)buffer; printf("/* %s */\n", argv[1]); while (len > 0) { unsigned int ucs = 0; char *p = ptr; char pp[20]; nb = 0; pp[0] = '\0'; while (*p != 'U') p++; strncat(pp, p, 6); *pp = '0'; *(pp+1) = 'x'; ucs = (unsigned int)strtoul(pp, NULL, 16);; if (ucs < 1) { printf("ERROR %d %d\n", len, ucs); abort(); } if (i != ucs - 1 || !i) { if ((ucs - i) > MAX_DELTA || !i) { if (i) { printf("};\n"); fprintf(stderr, "\t/* end: U+%04X */\n", i); } if (strcmp(argv[1], "spacing")) { printf("\nstatic const char unicode_to_%s_%db_%04X[] = {\n", argv[1], nbb, ucs); fprintf(stderr, "unicode_to_%s_%db_%04X[]; ", argv[1], nbb, ucs); } else { printf("\nstatic const unsigned short" " ucs_table_%04X[]" " = {\n", ucs); fprintf(stderr, "ucs_table_%04X[]; ", ucs); } } else { while (i < ucs - 1) { i++; if (nbb == 1) { printf("0x00,\n"); } else { printf("0x00, 0x00,\n"); } }; } } i = ucs; while (*ptr != '\n') { printf("%c", *ptr); ptr++; len--; } printf("\n"); ptr++; len--; } printf("};\n"); fprintf(stderr, "\t/* end: U+%04X */\n", i); return 0; } /* * End of "$Id$". */