URI:
       troget.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       troget.c (2627B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <bio.h>
            4 #include <ctype.h>
            5 #include "dict.h"
            6 
            7 /* Roget's Thesaurus from project Gutenberg */
            8 
            9 /* static long Last = 0; */
           10 
           11 void
           12 rogetprintentry(Entry e, int cmd)
           13 {
           14         int spc;
           15         char c, *p;
           16 
           17         spc = 0;
           18         p = e.start;
           19 
           20         if(cmd == 'h'){
           21                 while(!isspace((uchar)*p) && p < e.end)
           22                         p++;
           23                 while(strncmp(p, " -- ", 4) != 0 && p < e.end){
           24                         while(isspace((uchar)*p) && p < e.end)
           25                                 p++;
           26                         if (*p == '[' || *p == '{'){
           27                                 c = (*p == '[')? ']': '}';
           28                                 while(*p != c && p < e.end)
           29                                         p++;
           30                                 p++;
           31                                 continue;
           32                         }
           33                         if (isdigit((uchar)*p) || ispunct((uchar)*p)){
           34                                 while(!isspace((uchar)*p) && p < e.end)
           35                                         p++;
           36                                 continue;
           37                         }
           38 
           39 
           40                         if (isspace((uchar)*p))
           41                                 spc = 1;
           42                         else
           43                         if (spc){
           44                                 outchar(' ');
           45                                 spc = 0;
           46                         }
           47 
           48                         while(!isspace((uchar)*p) && p < e.end)
           49                                 outchar(*p++);
           50                 }
           51                 return;
           52         }
           53 
           54         while(p < e.end && !isspace((uchar)*p))
           55                 p++;
           56         while(p < e.end && isspace((uchar)*p))
           57                 p++;
           58 
           59         while (p < e.end){
           60                 if (p < e.end -4 && strncmp(p, " -- ", 4) == 0){        /* first line */
           61                         outnl(2);
           62                         p += 4;
           63                         spc = 0;
           64                 }
           65 
           66                 if (p < e.end -2 && strncmp(p, "[ ", 4) == 0){                /* twiddle layout */
           67                         outchars(" [");
           68                         continue;
           69                 }
           70 
           71                 if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){        /* usefull xref */
           72                         if (spc)
           73                                 outchar(' ');
           74                         outchar('/');
           75                         while(p < e.end && *p != '(')
           76                                 p++;
           77                         p++;
           78                         while(p < e.end && *p != ')')
           79                                 outchar(*p++);
           80                         p++;
           81                         while(p < e.end && isspace((uchar)*p))
           82                                 p++;
           83                         while(p < e.end && isdigit((uchar)*p))
           84                                 p++;
           85                         outchar('/');
           86                         continue;
           87                 }
           88 
           89                 if (p < e.end -3 && strncmp(p, "&c ", 3) == 0){                /* less usefull xref */
           90                         while(p < e.end && !isdigit((uchar)*p))
           91                                 p++;
           92                         while(p < e.end && isdigit((uchar)*p))
           93                                 p++;
           94                         continue;
           95                 }
           96 
           97                 if (*p == '\n' && p < (e.end -1)){                        /* their newlines */
           98                         spc = 0;
           99                         p++;
          100                         if (isspace((uchar)*p)){                                /* their continuation line */
          101                                 while (isspace((uchar)*p))
          102                                         p++;
          103                                 p--;
          104                         }
          105                         else{
          106                                 outnl(2);
          107                         }
          108                 }
          109                 if (spc && *p != ';' && *p != '.' &&
          110                     *p != ',' && !isspace((uchar)*p)){                                /* drop spaces before punct */
          111                         spc = 0;
          112                         outchar(' ');
          113                 }
          114                 if (isspace((uchar)*p))
          115                         spc = 1;
          116                 else
          117                         outchar(*p);
          118                 p++;
          119         }
          120         outnl(0);
          121 }
          122 
          123 long
          124 rogetnextoff(long fromoff)
          125 {
          126         int i;
          127         vlong l;
          128         char *p;
          129 
          130         Bseek(bdict, fromoff, 0);
          131         Brdline(bdict, '\n');
          132         while ((p = Brdline(bdict, '\n')) != nil){
          133                 l = Blinelen(bdict);
          134                 if (!isdigit((uchar)*p))
          135                         continue;
          136                 for (i = 0; i < l-4; i++)
          137                         if (strncmp(p+i, " -- ", 4) == 0)
          138                                 return Boffset(bdict)-l;
          139         }
          140         return Boffset(bdict);
          141 }
          142 
          143 void
          144 rogetprintkey(void)
          145 {
          146         Bprint(bout, "No pronunciation key.\n");
          147 }