diff options
Diffstat (limited to 'unicode/precompose.c.tail')
-rw-r--r-- | unicode/precompose.c.tail | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/unicode/precompose.c.tail b/unicode/precompose.c.tail new file mode 100644 index 0000000..1f530f1 --- /dev/null +++ b/unicode/precompose.c.tail @@ -0,0 +1,26 @@ +}; + +#define UNICODE_SHIFT 21 + +int do_precomposition(int base, int comb) { + int min = 0; + int max = sizeof(precompositions) / sizeof(precompositions[0]) - 1; + int mid; + unsigned long sought = ((unsigned) base << UNICODE_SHIFT) | (unsigned) comb; + unsigned long that; + + /* binary search */ + while (max >= min) { + mid = (min + max) / 2; + that = ((unsigned) precompositions[mid].base << UNICODE_SHIFT) | ((unsigned) precompositions[mid].comb); + if (that < sought) { + min = mid + 1; + } else if (that > sought) { + max = mid - 1; + } else { + return precompositions[mid].replacement; + } + } + /* no match */ + return -1; +} |