ref: 4d69aacea023546a7150d92e147e531c38de822f
dir: /sys/src/cmd/dict/thesaurus.c/
#include <u.h> #include <libc.h> #include <bio.h> #include "dict.h" void thesprintentry(Entry e, int cmd) { char *p, *pe; int c, i; p = e.start; pe = e.end; while(p < pe) { c = *p++; if(cmd == 'r') { outchar(c); continue; } switch(c) { case '*': c = *p++; if(cmd == 'h' && c != 'L') { outnl(0); return; } if(c == 'L' && cmd != 'h') outnl(0); if(c == 'S') { outchar('('); outchar(*p++); outchar(')'); } break; case '#': c = *p++; i = *p++ - '0' - 1; if(i < 0 || i > 4) break; switch(c) { case 'a': outrune(L"áàâäa"[i]); break; case 'e': outrune(L"éèêëe"[i]); break; case 'o': outrune(L"óòôöo"[i]); break; case 'c': outrune(L"ccccç"[i]); break; default: outchar(c); break; } break; case '+': case '<': break; case ' ': if(cmd == 'h' && *p == '*') { outnl(0); return; } default: outchar(c); } } outnl(0); } long thesnextoff(long fromoff) { long a; char *p; a = Bseek(bdict, fromoff, 0); if(a < 0) return -1; for(;;) { p = Brdline(bdict, '\n'); if(!p) break; if(p[0] == '*' && p[1] == 'L') return (Boffset(bdict)-Blinelen(bdict)); } return -1; } void thesprintkey(void) { Bprint(bout, "No key\n"); }