blob: d953636588dbe5f673c61b41b57bd84d61eaf31a [file] [log] [blame]
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ctype.h>
#include "dict.h"
/* Roget's Thesaurus from project Gutenberg */
/* static long Last = 0; */
void
rogetprintentry(Entry e, int cmd)
{
int spc;
char c, *p;
spc = 0;
p = e.start;
if(cmd == 'h'){
while(!isspace((uchar)*p) && p < e.end)
p++;
while(strncmp(p, " -- ", 4) != 0 && p < e.end){
while(isspace((uchar)*p) && p < e.end)
p++;
if (*p == '[' || *p == '{'){
c = (*p == '[')? ']': '}';
while(*p != c && p < e.end)
p++;
p++;
continue;
}
if (isdigit((uchar)*p) || ispunct((uchar)*p)){
while(!isspace((uchar)*p) && p < e.end)
p++;
continue;
}
if (isspace((uchar)*p))
spc = 1;
else
if (spc){
outchar(' ');
spc = 0;
}
while(!isspace((uchar)*p) && p < e.end)
outchar(*p++);
}
return;
}
while(p < e.end && !isspace((uchar)*p))
p++;
while(p < e.end && isspace((uchar)*p))
p++;
while (p < e.end){
if (p < e.end -4 && strncmp(p, " -- ", 4) == 0){ /* first line */
outnl(2);
p += 4;
spc = 0;
}
if (p < e.end -2 && strncmp(p, "[ ", 4) == 0){ /* twiddle layout */
outchars(" [");
continue;
}
if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){ /* usefull xref */
if (spc)
outchar(' ');
outchar('/');
while(p < e.end && *p != '(')
p++;
p++;
while(p < e.end && *p != ')')
outchar(*p++);
p++;
while(p < e.end && isspace((uchar)*p))
p++;
while(p < e.end && isdigit((uchar)*p))
p++;
outchar('/');
continue;
}
if (p < e.end -3 && strncmp(p, "&c ", 3) == 0){ /* less usefull xref */
while(p < e.end && !isdigit((uchar)*p))
p++;
while(p < e.end && isdigit((uchar)*p))
p++;
continue;
}
if (*p == '\n' && p < (e.end -1)){ /* their newlines */
spc = 0;
p++;
if (isspace((uchar)*p)){ /* their continuation line */
while (isspace((uchar)*p))
p++;
p--;
}
else{
outnl(2);
}
}
if (spc && *p != ';' && *p != '.' &&
*p != ',' && !isspace((uchar)*p)){ /* drop spaces before punct */
spc = 0;
outchar(' ');
}
if (isspace((uchar)*p))
spc = 1;
else
outchar(*p);
p++;
}
outnl(0);
}
long
rogetnextoff(long fromoff)
{
int i;
vlong l;
char *p;
Bseek(bdict, fromoff, 0);
Brdline(bdict, '\n');
while ((p = Brdline(bdict, '\n')) != nil){
l = Blinelen(bdict);
if (!isdigit((uchar)*p))
continue;
for (i = 0; i < l-4; i++)
if (strncmp(p+i, " -- ", 4) == 0)
return Boffset(bdict)-l;
}
return Boffset(bdict);
}
void
rogetprintkey(void)
{
Bprint(bout, "No pronunciation key.\n");
}