xref: /plan9-contrib/sys/src/cmd/dict/thesaurus.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "dict.h"
5 
6 void
thesprintentry(Entry e,int cmd)7 thesprintentry(Entry e, int cmd)
8 {
9 	char *p, *pe;
10 	int c, i;
11 
12 	p = e.start;
13 	pe = e.end;
14 	while(p < pe) {
15 		c = *p++;
16 		if(cmd == 'r') {
17 			outchar(c);
18 			continue;
19 		}
20 		switch(c) {
21 		case '*':
22 			c = *p++;
23 			if(cmd == 'h' && c != 'L') {
24 				outnl(0);
25 				return;
26 			}
27 			if(c == 'L' && cmd != 'h')
28 				outnl(0);
29 			if(c == 'S') {
30 				outchar('(');
31 				outchar(*p++);
32 				outchar(')');
33 			}
34 			break;
35 		case '#':
36 			c = *p++;
37 			i = *p++ - '0' - 1;
38 			if(i < 0 || i > 4)
39 				break;
40 			switch(c) {
41 			case 'a': outrune(L"áàâäa"[i]); break;
42 			case 'e': outrune(L"éèêëe"[i]); break;
43 			case 'o': outrune(L"óòôöo"[i]); break;
44 			case 'c': outrune(L"ccccç"[i]); break;
45 			default: outchar(c); break;
46 			}
47 			break;
48 		case '+':
49 		case '<':
50 			break;
51 		case ' ':
52 			if(cmd == 'h' && *p == '*') {
53 				outnl(0);
54 				return;
55 			}
56 		default:
57 			outchar(c);
58 		}
59 	}
60 	outnl(0);
61 }
62 
63 long
thesnextoff(long fromoff)64 thesnextoff(long fromoff)
65 {
66 	long a;
67 	char *p;
68 
69 	a = Bseek(bdict, fromoff, 0);
70 	if(a < 0)
71 		return -1;
72 	for(;;) {
73 		p = Brdline(bdict, '\n');
74 		if(!p)
75 			break;
76 		if(p[0] == '*' && p[1] == 'L')
77 			return (Boffset(bdict)-Blinelen(bdict));
78 	}
79 	return -1;
80 }
81 
82 void
thesprintkey(void)83 thesprintkey(void)
84 {
85 	Bprint(bout, "No key\n");
86 }
87