use baserune routines Reference: /n/sources/patch/applied/rune7-dict Date: Thu Apr 25 01:01:51 CES 2013 Signed-off-by: geoff@plan9.bell-labs.com --- /sys/src/cmd/dict/utils.c Thu Apr 25 01:01:42 2013 +++ /sys/src/cmd/dict/utils.c Thu Apr 25 01:01:42 2013 @@ -230,34 +230,6 @@ [MES-MULTI] L" ", }; -#define risupper(r) (L'A' <= (r) && (r) <= L'Z') -#define rislatin1(r) (0xC0 <= (r) && (r) <= 0xFF) -#define rtolower(r) ((r)-'A'+'a') - -static Rune latin_fold_tab[] = -{ -/* Table to fold latin 1 characters to ASCII equivalents - based at Rune value 0xc0 - - À Á Â Ã Ä Å Æ Ç - È É Ê Ë Ì Í Î Ï - Ð Ñ Ò Ó Ô Õ Ö × - Ø Ù Ú Û Ü Ý Þ ß - à á â ã ä å æ ç - è é ê ë ì í î ï - ð ñ ò ó ô õ ö ÷ - ø ù ú û ü ý þ ÿ -*/ - 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', - 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', - 'd', 'n', 'o', 'o', 'o', 'o', 'o', 0 , - 'o', 'u', 'u', 'u', 'u', 'y', 0 , 0 , - 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', - 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', - 'd', 'n', 'o', 'o', 'o', 'o', 'o', 0 , - 'o', 'u', 'u', 'u', 'u', 'y', 0 , 'y', -}; - static Rune *ttabstack[20]; static int ntt; @@ -426,7 +398,7 @@ /* * Fold the runes in null-terminated rp. * Use the sort(1) definition of folding (uppercase to lowercase, - * latin1-accented characters to corresponding unaccented chars) + * accented characters to corresponding unaccented chars) */ void fold(Rune *rp) @@ -434,10 +406,9 @@ Rune r; while((r = *rp) != 0) { - if (rislatin1(r) && latin_fold_tab[r-0xc0]) - r = latin_fold_tab[r-0xc0]; - if(risupper(r)) - r = rtolower(r); + r = tobaserune(r); + if(isupperrune(r)) + r = tolowerrune(r); *rp++ = r; } } @@ -455,10 +426,9 @@ while(*old) { old += chartorune(&r, old); - if (rislatin1(r) && latin_fold_tab[r-0xc0]) - r = latin_fold_tab[r-0xc0]; - if(risupper(r)) - r = rtolower(r); + r = tobaserune(r); + if(isupperrune(r)) + r = tolowerrune(r); new += runetochar(new, &r); } *new = 0;