summaryrefslogtreecommitdiff
path: root/src/xutf8/utils/create_table.c
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2008-09-10 23:56:49 +0000
committerMatthias Melcher <fltk@matthiasm.com>2008-09-10 23:56:49 +0000
commitb6bde2e4569aa617c8a6af64947c688c624ed7f8 (patch)
tree010d15843eb7d4faf7cd1b0cd44d5b9c00462a83 /src/xutf8/utils/create_table.c
parentdfb50e85292687561927610e689eb5ab30d0ba26 (diff)
Merging the UTF8 patch, consisting of O'ksi'd s original 1.1.6 patch and additions by Ian. PLEASE BE AWARE that the patch in its current incarnation is a regression in many aspects and further work is required before we can announce Unicode support.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6212 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/xutf8/utils/create_table.c')
-rw-r--r--src/xutf8/utils/create_table.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/xutf8/utils/create_table.c b/src/xutf8/utils/create_table.c
new file mode 100644
index 000000000..5bc702952
--- /dev/null
+++ b/src/xutf8/utils/create_table.c
@@ -0,0 +1,89 @@
+#include <wchar.h>
+#include <stdio.h>
+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;
+}