X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/7bc1ffdf483a88503d15cbc657de6fbc945bc3f0..4e95a413c2909c807226e5efc09da4c8ba24740e:/minibidi.c diff --git a/minibidi.c b/minibidi.c index c13276d0..c3581803 100644 --- a/minibidi.c +++ b/minibidi.c @@ -38,6 +38,14 @@ #define OISL 0x80 /* Override is L */ #define OISR 0x40 /* Override is R */ +/* For standalone compilation in a testing mode. + * Still depends on the PuTTY headers for snewn and sfree, but can avoid + * _linking_ with any other PuTTY code. */ +#ifdef TEST_GETTYPE +#define safemalloc malloc +#define safefree free +#endif + /* Shaping Helpers */ #define STYPE(xh) ((((xh) >= SHAPE_FIRST) && ((xh) <= SHAPE_LAST)) ? \ shapetypes[(xh)-SHAPE_FIRST].type : SU) /*))*/ @@ -84,7 +92,7 @@ enum { B, S, WS, - ON, + ON }; /* Shaping Types */ @@ -148,7 +156,7 @@ const shape_node shapetypes[] = { /* 647 */ {SD, 0xFEE9}, /* 648 */ {SR, 0xFEED}, /* 649 */ {SR, 0xFEEF}, /* SD */ - /* 64A */ {SD, 0xFEF1}, + /* 64A */ {SD, 0xFEF1} }; /* @@ -840,7 +848,7 @@ unsigned char getType(int ch) {0xe0020, 0xe007f, BN}, {0xe0100, 0xe01ef, NSM}, {0xf0000, 0xffffd, L}, - {0x100000, 0x10fffd, L}, + {0x100000, 0x10fffd, L} }; int i, j, k; @@ -848,7 +856,7 @@ unsigned char getType(int ch) i = -1; j = lenof(lookup); - while (j - i > 2) { + while (j - i > 1) { k = (i + j) / 2; if (ch < lookup[k].first) j = k; @@ -1810,3 +1818,47 @@ void doMirror(wchar_t* ch) } } } + +#ifdef TEST_GETTYPE + +#include +#include + +int main(int argc, char **argv) +{ + static const struct { int type; char *name; } typetoname[] = { +#define TYPETONAME(X) { X , #X } + TYPETONAME(L), + TYPETONAME(LRE), + TYPETONAME(LRO), + TYPETONAME(R), + TYPETONAME(AL), + TYPETONAME(RLE), + TYPETONAME(RLO), + TYPETONAME(PDF), + TYPETONAME(EN), + TYPETONAME(ES), + TYPETONAME(ET), + TYPETONAME(AN), + TYPETONAME(CS), + TYPETONAME(NSM), + TYPETONAME(BN), + TYPETONAME(B), + TYPETONAME(S), + TYPETONAME(WS), + TYPETONAME(ON), +#undef TYPETONAME + }; + int i; + + for (i = 1; i < argc; i++) { + unsigned long chr = strtoul(argv[i], NULL, 0); + int type = getType(chr); + assert(typetoname[type].type == type); + printf("U+%04x: %s\n", chr, typetoname[type].name); + } + + return 0; +} + +#endif