1 c8b6342d 2005-01-13 devnull #include <u.h>
2 c8b6342d 2005-01-13 devnull #include <libc.h>
3 c8b6342d 2005-01-13 devnull #include <bio.h>
4 c8b6342d 2005-01-13 devnull #include <ctype.h>
5 c8b6342d 2005-01-13 devnull #include "dict.h"
7 c8b6342d 2005-01-13 devnull /* Roget's Thesaurus from project Gutenberg */
9 c8b6342d 2005-01-13 devnull /* static long Last = 0; */
12 c8b6342d 2005-01-13 devnull rogetprintentry(Entry e, int cmd)
15 c8b6342d 2005-01-13 devnull char c, *p;
18 c8b6342d 2005-01-13 devnull p = e.start;
20 c8b6342d 2005-01-13 devnull if(cmd == 'h'){
21 3bd56b04 2005-09-09 devnull while(!isspace((uchar)*p) && p < e.end)
23 c8b6342d 2005-01-13 devnull while(strncmp(p, " -- ", 4) != 0 && p < e.end){
24 3bd56b04 2005-09-09 devnull while(isspace((uchar)*p) && p < e.end)
26 c8b6342d 2005-01-13 devnull if (*p == '[' || *p == '{'){
27 c8b6342d 2005-01-13 devnull c = (*p == '[')? ']': '}';
28 c8b6342d 2005-01-13 devnull while(*p != c && p < e.end)
31 c8b6342d 2005-01-13 devnull continue;
33 3bd56b04 2005-09-09 devnull if (isdigit((uchar)*p) || ispunct((uchar)*p)){
34 3bd56b04 2005-09-09 devnull while(!isspace((uchar)*p) && p < e.end)
36 c8b6342d 2005-01-13 devnull continue;
40 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p))
43 c8b6342d 2005-01-13 devnull if (spc){
44 c8b6342d 2005-01-13 devnull outchar(' ');
48 3bd56b04 2005-09-09 devnull while(!isspace((uchar)*p) && p < e.end)
49 c8b6342d 2005-01-13 devnull outchar(*p++);
54 3bd56b04 2005-09-09 devnull while(p < e.end && !isspace((uchar)*p))
56 3bd56b04 2005-09-09 devnull while(p < e.end && isspace((uchar)*p))
59 c8b6342d 2005-01-13 devnull while (p < e.end){
60 c8b6342d 2005-01-13 devnull if (p < e.end -4 && strncmp(p, " -- ", 4) == 0){ /* first line */
61 c8b6342d 2005-01-13 devnull outnl(2);
66 c8b6342d 2005-01-13 devnull if (p < e.end -2 && strncmp(p, "[ ", 4) == 0){ /* twiddle layout */
67 c8b6342d 2005-01-13 devnull outchars(" [");
68 c8b6342d 2005-01-13 devnull continue;
71 c8b6342d 2005-01-13 devnull if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){ /* usefull xref */
73 c8b6342d 2005-01-13 devnull outchar(' ');
74 c8b6342d 2005-01-13 devnull outchar('/');
75 c8b6342d 2005-01-13 devnull while(p < e.end && *p != '(')
78 c8b6342d 2005-01-13 devnull while(p < e.end && *p != ')')
79 c8b6342d 2005-01-13 devnull outchar(*p++);
81 3bd56b04 2005-09-09 devnull while(p < e.end && isspace((uchar)*p))
83 3bd56b04 2005-09-09 devnull while(p < e.end && isdigit((uchar)*p))
85 c8b6342d 2005-01-13 devnull outchar('/');
86 c8b6342d 2005-01-13 devnull continue;
89 c8b6342d 2005-01-13 devnull if (p < e.end -3 && strncmp(p, "&c ", 3) == 0){ /* less usefull xref */
90 3bd56b04 2005-09-09 devnull while(p < e.end && !isdigit((uchar)*p))
92 3bd56b04 2005-09-09 devnull while(p < e.end && isdigit((uchar)*p))
94 c8b6342d 2005-01-13 devnull continue;
97 c8b6342d 2005-01-13 devnull if (*p == '\n' && p < (e.end -1)){ /* their newlines */
100 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p)){ /* their continuation line */
101 3bd56b04 2005-09-09 devnull while (isspace((uchar)*p))
106 c8b6342d 2005-01-13 devnull outnl(2);
109 c8b6342d 2005-01-13 devnull if (spc && *p != ';' && *p != '.' &&
110 3bd56b04 2005-09-09 devnull *p != ',' && !isspace((uchar)*p)){ /* drop spaces before punct */
111 c8b6342d 2005-01-13 devnull spc = 0;
112 c8b6342d 2005-01-13 devnull outchar(' ');
114 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p))
115 c8b6342d 2005-01-13 devnull spc = 1;
117 c8b6342d 2005-01-13 devnull outchar(*p);
120 c8b6342d 2005-01-13 devnull outnl(0);
124 c8b6342d 2005-01-13 devnull rogetnextoff(long fromoff)
127 c8b6342d 2005-01-13 devnull vlong l;
128 c8b6342d 2005-01-13 devnull char *p;
130 c8b6342d 2005-01-13 devnull Bseek(bdict, fromoff, 0);
131 c8b6342d 2005-01-13 devnull Brdline(bdict, '\n');
132 c8b6342d 2005-01-13 devnull while ((p = Brdline(bdict, '\n')) != nil){
133 c8b6342d 2005-01-13 devnull l = Blinelen(bdict);
134 3bd56b04 2005-09-09 devnull if (!isdigit((uchar)*p))
135 c8b6342d 2005-01-13 devnull continue;
136 c8b6342d 2005-01-13 devnull for (i = 0; i < l-4; i++)
137 c8b6342d 2005-01-13 devnull if (strncmp(p+i, " -- ", 4) == 0)
138 c8b6342d 2005-01-13 devnull return Boffset(bdict)-l;
140 c8b6342d 2005-01-13 devnull return Boffset(bdict);
144 c8b6342d 2005-01-13 devnull rogetprintkey(void)
146 c8b6342d 2005-01-13 devnull Bprint(bout, "No pronunciation key.\n");