plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

thesaurus.c (1273B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <bio.h>
      4 #include "dict.h"
      5 
      6 void
      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
     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
     83 thesprintkey(void)
     84 {
     85 	Bprint(bout, "No key\n");
     86 }