Blame


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"
6 c8b6342d 2005-01-13 devnull
7 c8b6342d 2005-01-13 devnull /* Roget's Thesaurus from project Gutenberg */
8 c8b6342d 2005-01-13 devnull
9 c8b6342d 2005-01-13 devnull /* static long Last = 0; */
10 c8b6342d 2005-01-13 devnull
11 c8b6342d 2005-01-13 devnull void
12 c8b6342d 2005-01-13 devnull rogetprintentry(Entry e, int cmd)
13 c8b6342d 2005-01-13 devnull {
14 c8b6342d 2005-01-13 devnull int spc;
15 c8b6342d 2005-01-13 devnull char c, *p;
16 c8b6342d 2005-01-13 devnull
17 c8b6342d 2005-01-13 devnull spc = 0;
18 c8b6342d 2005-01-13 devnull p = e.start;
19 c8b6342d 2005-01-13 devnull
20 c8b6342d 2005-01-13 devnull if(cmd == 'h'){
21 3bd56b04 2005-09-09 devnull while(!isspace((uchar)*p) && p < e.end)
22 c8b6342d 2005-01-13 devnull p++;
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)
25 c8b6342d 2005-01-13 devnull p++;
26 fa325e9b 2020-01-10 cross if (*p == '[' || *p == '{'){
27 c8b6342d 2005-01-13 devnull c = (*p == '[')? ']': '}';
28 c8b6342d 2005-01-13 devnull while(*p != c && p < e.end)
29 c8b6342d 2005-01-13 devnull p++;
30 c8b6342d 2005-01-13 devnull p++;
31 c8b6342d 2005-01-13 devnull continue;
32 c8b6342d 2005-01-13 devnull }
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)
35 c8b6342d 2005-01-13 devnull p++;
36 c8b6342d 2005-01-13 devnull continue;
37 c8b6342d 2005-01-13 devnull }
38 c8b6342d 2005-01-13 devnull
39 c8b6342d 2005-01-13 devnull
40 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p))
41 c8b6342d 2005-01-13 devnull spc = 1;
42 c8b6342d 2005-01-13 devnull else
43 c8b6342d 2005-01-13 devnull if (spc){
44 c8b6342d 2005-01-13 devnull outchar(' ');
45 c8b6342d 2005-01-13 devnull spc = 0;
46 c8b6342d 2005-01-13 devnull }
47 c8b6342d 2005-01-13 devnull
48 3bd56b04 2005-09-09 devnull while(!isspace((uchar)*p) && p < e.end)
49 c8b6342d 2005-01-13 devnull outchar(*p++);
50 c8b6342d 2005-01-13 devnull }
51 c8b6342d 2005-01-13 devnull return;
52 fa325e9b 2020-01-10 cross }
53 c8b6342d 2005-01-13 devnull
54 3bd56b04 2005-09-09 devnull while(p < e.end && !isspace((uchar)*p))
55 c8b6342d 2005-01-13 devnull p++;
56 3bd56b04 2005-09-09 devnull while(p < e.end && isspace((uchar)*p))
57 c8b6342d 2005-01-13 devnull p++;
58 c8b6342d 2005-01-13 devnull
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);
62 c8b6342d 2005-01-13 devnull p += 4;
63 c8b6342d 2005-01-13 devnull spc = 0;
64 c8b6342d 2005-01-13 devnull }
65 fa325e9b 2020-01-10 cross
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;
69 c8b6342d 2005-01-13 devnull }
70 c8b6342d 2005-01-13 devnull
71 c8b6342d 2005-01-13 devnull if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){ /* usefull xref */
72 c8b6342d 2005-01-13 devnull if (spc)
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 != '(')
76 c8b6342d 2005-01-13 devnull p++;
77 c8b6342d 2005-01-13 devnull p++;
78 c8b6342d 2005-01-13 devnull while(p < e.end && *p != ')')
79 c8b6342d 2005-01-13 devnull outchar(*p++);
80 c8b6342d 2005-01-13 devnull p++;
81 3bd56b04 2005-09-09 devnull while(p < e.end && isspace((uchar)*p))
82 c8b6342d 2005-01-13 devnull p++;
83 3bd56b04 2005-09-09 devnull while(p < e.end && isdigit((uchar)*p))
84 c8b6342d 2005-01-13 devnull p++;
85 c8b6342d 2005-01-13 devnull outchar('/');
86 c8b6342d 2005-01-13 devnull continue;
87 c8b6342d 2005-01-13 devnull }
88 c8b6342d 2005-01-13 devnull
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))
91 c8b6342d 2005-01-13 devnull p++;
92 3bd56b04 2005-09-09 devnull while(p < e.end && isdigit((uchar)*p))
93 c8b6342d 2005-01-13 devnull p++;
94 c8b6342d 2005-01-13 devnull continue;
95 c8b6342d 2005-01-13 devnull }
96 c8b6342d 2005-01-13 devnull
97 c8b6342d 2005-01-13 devnull if (*p == '\n' && p < (e.end -1)){ /* their newlines */
98 c8b6342d 2005-01-13 devnull spc = 0;
99 c8b6342d 2005-01-13 devnull p++;
100 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p)){ /* their continuation line */
101 3bd56b04 2005-09-09 devnull while (isspace((uchar)*p))
102 c8b6342d 2005-01-13 devnull p++;
103 c8b6342d 2005-01-13 devnull p--;
104 c8b6342d 2005-01-13 devnull }
105 c8b6342d 2005-01-13 devnull else{
106 c8b6342d 2005-01-13 devnull outnl(2);
107 c8b6342d 2005-01-13 devnull }
108 c8b6342d 2005-01-13 devnull }
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(' ');
113 c8b6342d 2005-01-13 devnull }
114 3bd56b04 2005-09-09 devnull if (isspace((uchar)*p))
115 c8b6342d 2005-01-13 devnull spc = 1;
116 c8b6342d 2005-01-13 devnull else
117 c8b6342d 2005-01-13 devnull outchar(*p);
118 c8b6342d 2005-01-13 devnull p++;
119 c8b6342d 2005-01-13 devnull }
120 c8b6342d 2005-01-13 devnull outnl(0);
121 c8b6342d 2005-01-13 devnull }
122 c8b6342d 2005-01-13 devnull
123 c8b6342d 2005-01-13 devnull long
124 c8b6342d 2005-01-13 devnull rogetnextoff(long fromoff)
125 c8b6342d 2005-01-13 devnull {
126 c8b6342d 2005-01-13 devnull int i;
127 c8b6342d 2005-01-13 devnull vlong l;
128 c8b6342d 2005-01-13 devnull char *p;
129 c8b6342d 2005-01-13 devnull
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;
139 c8b6342d 2005-01-13 devnull }
140 c8b6342d 2005-01-13 devnull return Boffset(bdict);
141 c8b6342d 2005-01-13 devnull }
142 c8b6342d 2005-01-13 devnull
143 c8b6342d 2005-01-13 devnull void
144 c8b6342d 2005-01-13 devnull rogetprintkey(void)
145 c8b6342d 2005-01-13 devnull {
146 c8b6342d 2005-01-13 devnull Bprint(bout, "No pronunciation key.\n");
147 c8b6342d 2005-01-13 devnull }