summaryrefslogtreecommitdiff
path: root/extra/locale/gen_wctype.c
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2002-11-22 03:05:27 +0000
committerManuel Novoa III <mjn3@codepoet.org>2002-11-22 03:05:27 +0000
commitc386ddb4d8a1b076d94ebe8b85ca5d0dd124892b (patch)
treee30c9d77393721491f4a3a42e223980352b72ff8 /extra/locale/gen_wctype.c
parent2b8a8dc7144328f301390f13fa560d29a410e34f (diff)
Ok... here's the summary:
Hopefully locale support will build when cross compiling now. Collation is still not supported, but that's what I'm currently working on. In the next couple of days, I'll probably put up a couple of files for download that will save people the trouble of generating all the glibc locales. Added *wprintf functions, although they currently don't support floating point. That will be fixed when I rewrite _dtostr... or possibly before. Added the wcsto{inttype} functions. Added iconv() and a mini iconv utility. The require locale support and only provide for conversions involving the various unicode encodings { UCS-4*, UCS-2*, UTF-32*, UTF-16*, UTF-8 }, the 8-bit codesets built with the locale data, and the internal WCHAR_T.
Diffstat (limited to 'extra/locale/gen_wctype.c')
-rw-r--r--extra/locale/gen_wctype.c76
1 files changed, 56 insertions, 20 deletions
diff --git a/extra/locale/gen_wctype.c b/extra/locale/gen_wctype.c
index 9508a3bbf..1c8c10c43 100644
--- a/extra/locale/gen_wctype.c
+++ b/extra/locale/gen_wctype.c
@@ -10,6 +10,12 @@
#include <wchar.h>
#include <ctype.h>
+#ifndef __UCLIBC__
+#ifndef _WCTYPE_H
+#define _WCTYPE_H
+#endif
+#include "../../libc/sysdeps/linux/common/bits/uClibc_ctype.h"
+#endif
/* 0x9 : space blank */
/* 0xa : space */
@@ -61,6 +67,7 @@
#define RANGE 0xffffUL /* Restrict for 16-bit wchar_t... */
#endif
+#if 0
/* Classification codes. */
static const char *typename[] = {
@@ -81,7 +88,9 @@ static const char *typename[] = {
"C_cntrl_nonspace",
"empty_slot"
};
+#endif
+#if 0
/* Taking advantage of the C99 mutual-exclusion guarantees for the various
* (w)ctype classes, including the descriptions of printing and control
* (w)chars, we can place each in one of the following mutually-exlusive
@@ -109,21 +118,8 @@ enum {
__CTYPE_cntrl_space_blank,
__CTYPE_cntrl_nonspace,
};
+#endif
-/* Some macros that test for various (w)ctype classes when passed one of the
- * designator values enumerated above. */
-#define __CTYPE_isalnum(D) ((unsigned int)(D-1) <= (__CTYPE_digit-1))
-#define __CTYPE_isalpha(D) ((unsigned int)(D-1) <= (__CTYPE_alpha_upper-1))
-#define __CTYPE_isblank(D) \
- ((((unsigned int)(D - __CTYPE_print_space_nonblank)) <= 5) && (D & 1))
-#define __CTYPE_iscntrl(D) (((unsigned int)(D - __CTYPE_cntrl_space_nonblank)) <= 2)
-#define __CTYPE_isdigit(D) (D == __CTYPE_digit)
-#define __CTYPE_isgraph(D) ((unsigned int)(D-1) <= (__CTYPE_graph-1))
-#define __CTYPE_islower(D) (((unsigned int)(D - __CTYPE_alpha_lower)) <= 1)
-#define __CTYPE_isprint(D) ((unsigned int)(D-1) <= (__CTYPE_print_space_blank-1))
-#define __CTYPE_ispunct(D) (D == __CTYPE_punct)
-#define __CTYPE_isspace(D) (((unsigned int)(D - __CTYPE_print_space_nonblank)) <= 5)
-#define __CTYPE_isupper(D) (((unsigned int)(D - __CTYPE_alpha_upper_lower)) <= 1)
#define __CTYPE_isxdigit(D,X) \
(__CTYPE_isdigit(D) || (((unsigned int)(((X)|0x20) - 'a')) <= 5))
@@ -232,6 +228,7 @@ int main(int argc, char **argv)
table_data ultable;
table_data combtable;
table_data widthtable;
+ long int last_comb = 0;
unsigned char wct[(RANGE/2)+1]; /* wctype table (nibble per wchar) */
unsigned char ult[RANGE+1]; /* upper/lower table */
@@ -241,8 +238,32 @@ int main(int argc, char **argv)
wctype_t is_comb, is_comb3;
long int typecount[16];
+ const char *typename[16];
+ static const char empty_slot[] = "empty_slot";
int built = 0;
+#define INIT_TYPENAME(X) typename[__CTYPE_##X] = "C_" #X
+
+ for (i=0 ; i < 16 ; i++) {
+ typename[i] = empty_slot;
+ }
+
+ INIT_TYPENAME(unclassified);
+ INIT_TYPENAME(alpha_nonupper_nonlower);
+ INIT_TYPENAME(alpha_lower);
+ INIT_TYPENAME(alpha_upper_lower);
+ INIT_TYPENAME(alpha_upper);
+ INIT_TYPENAME(digit);
+ INIT_TYPENAME(punct);
+ INIT_TYPENAME(graph);
+ INIT_TYPENAME(print_space_nonblank);
+ INIT_TYPENAME(print_space_blank);
+ INIT_TYPENAME(space_nonblank_noncntrl);
+ INIT_TYPENAME(space_blank_noncntrl);
+ INIT_TYPENAME(cntrl_space_nonblank);
+ INIT_TYPENAME(cntrl_space_blank);
+ INIT_TYPENAME(cntrl_nonspace);
+
setvbuf(stdout, NULL, _IONBF, 0);
while (--argc) {
@@ -393,14 +414,27 @@ int main(int argc, char **argv)
/* } */
}
#endif
-
+#if 0
+ if (iswctype(c,is_comb) || iswctype(c,is_comb3)) {
+ if (!last_comb) {
+ printf("%#8x - ", c);
+ last_comb = c;
+ } else if (last_comb + 1 < c) {
+ printf("%#8x\n%#8x - ", last_comb, c);
+ last_comb = c;
+ } else {
+ last_comb = c;
+ }
+ }
+#endif
}
#endif
combt[c/4] |= ((((!!iswctype(c,is_comb)) << 1) | !!iswctype(c,is_comb3))
<< ((c & 3) << 1));
/* comb3t[c/8] |= ((!!iswctype(c,is_comb3)) << (c & 7)); */
- widtht[c/4] |= (wcwidth(c) << ((c & 3) << 1));
+
+/* widtht[c/4] |= (wcwidth(c) << ((c & 3) << 1)); */
if (c & 1) { /* Use the high nibble for odd numbered wchars. */
d <<= 4;
@@ -483,6 +517,7 @@ int main(int argc, char **argv)
newopt(ult, RANGE+1, n, &ultable);
+#if 0
printf("optimizing comb table..\n");
smallest = SIZE_MAX;
combtable.ii = NULL;
@@ -503,8 +538,10 @@ int main(int argc, char **argv)
smallest = SIZE_MAX;
newopt(combt, sizeof(combt), n, &combtable);
combtable.ti_shift += 4; /* correct for 4 entries per */
+#endif
+#if 0
printf("optimizing width table..\n");
smallest = SIZE_MAX;
widthtable.ii = NULL;
@@ -525,7 +562,7 @@ int main(int argc, char **argv)
smallest = SIZE_MAX;
newopt(widtht, sizeof(widtht), n, &widthtable);
widthtable.ti_shift += 4; /* correct for 4 entries per */
-
+#endif
#if 0
printf("optimizing comb3 table..\n");
@@ -553,7 +590,6 @@ int main(int argc, char **argv)
dump_table_data(&cttable);
dump_table_data(&ultable);
dump_table_data(&combtable);
- dump_table_data(&widthtable);
}
printf("verifying for %s...\n", *argv);
@@ -715,8 +751,8 @@ int main(int argc, char **argv)
fprintf(fp, "#endif /* WANT_WCuplow_diff_data */\n\n");
- output_table(fp, "comb", &combtable);
- output_table(fp, "width", &widthtable);
+/* output_table(fp, "comb", &combtable); */
+/* output_table(fp, "width", &widthtable); */
fclose(fp);
}