/* Runes for special purposes (0xe800-0xfdff is Private Use Area) */ enum { NONE=0xe800, /* Emit nothing */ TAGS, /* Start of tag */ TAGE, /* End of tag */ SPCS, /* Start of special character name */ PAR, /* Newline, indent */ LIGS, /* Start of ligature codes */ LACU=LIGS, /* Acute (´) ligatures */ LGRV, /* Grave (ˋ) ligatures */ LUML, /* Umlaut (¨) ligatures */ LCED, /* Cedilla (¸) ligatures */ LTIL, /* Tilde (˜) ligatures */ LBRV, /* Breve (˘) ligatures */ LRNG, /* Ring (˚) ligatures */ LDOT, /* Dot (˙) ligatures */ LDTB, /* Dot below (.) ligatures */ LFRN, /* Frown (⌢) ligatures */ LFRB, /* Frown below (̯) ligatures */ LOGO, /* Ogonek (˛) ligatures */ LMAC, /* Macron (¯) ligatures */ LHCK, /* Hacek (ˇ) ligatures */ LASP, /* Asper (ʽ) ligatures */ LLEN, /* Lenis (ʼ) ligatures */ LBRB, /* Breve below (̮) ligatures */ LIGE, /* End of ligature codes */ MULTI, /* Start of multi-rune codes */ MAAS=MULTI, /* ʽα */ MALN, /* ʼα */ MAND, /* and */ MAOQ, /* a/q */ MBRA, /* <| */ MDD, /* .. */ MDDD, /* ... */ MEAS, /* ʽε */ MELN, /* ʼε */ MEMM, /* —— */ MHAS, /* ʽη */ MHLN, /* ʼη */ MIAS, /* ʽι */ MILN, /* ʼι */ MLCT, /* ct */ MLFF, /* ff */ MLFFI, /* ffi */ MLFFL, /* ffl */ MLFL, /* fl */ MLFI, /* fi */ MLLS, /* ll with swing */ MLST, /* st */ MOAS, /* ʽο */ MOLN, /* ʼο */ MOR, /* or */ MRAS, /* ʽρ */ MRLN, /* ʼρ */ MTT, /* ~~ */ MUAS, /* ʽυ */ MULN, /* ʼυ */ MWAS, /* ʽω */ MWLN, /* ʼω */ MOE, /* oe */ MES, /* em space */ MULTIE, /* End of multi-rune codes */ }; #define Nligs (LIGE-LIGS) #define Nmulti (MULTIE-MULTI) typedef struct Entry Entry; typedef struct Assoc Assoc; typedef struct Nassoc Nassoc; typedef struct Dict Dict; struct Entry { char *start; /* entry starts at start */ char *end; /* and finishes just before end */ long doff; /* dictionary offset (for debugging) */ }; struct Assoc { char *key; long val; }; struct Nassoc { long key; long val; }; struct Dict { char *name; /* dictionary name */ char *desc; /* description */ char *path; /* path to dictionary data */ char *indexpath; /* path to index data */ long (*nextoff)(long); /* function to find next entry offset from arg */ void (*printentry)(Entry, int); /* function to print entry */ void (*printkey)(void); /* function to print pronunciation key */ }; int acomp(Rune*, Rune*); Rune *changett(Rune *, Rune *, int); void err(char*, ...); void fold(Rune *); void foldre(char*, char*); Rune liglookup(Rune, Rune); long lookassoc(Assoc*, int, char*); long looknassoc(Nassoc*, int, long); void outprint(char*, ...); void outrune(long); void outrunes(Rune *); void outchar(int); void outchars(char *); void outnl(int); void outpiece(char *, char *); void runescpy(Rune*, Rune*); long runetol(Rune*); long oednextoff(long); void oedprintentry(Entry, int); void oedprintkey(void); long ahdnextoff(long); void ahdprintentry(Entry, int); void ahdprintkey(void); long pcollnextoff(long); void pcollprintentry(Entry, int); void pcollprintkey(void); long pcollgnextoff(long); void pcollgprintentry(Entry, int); void pcollgprintkey(void); long movienextoff(long); void movieprintentry(Entry, int); void movieprintkey(void); long pgwnextoff(long); void pgwprintentry(Entry,int); void pgwprintkey(void); void rogetprintentry(Entry, int); long rogetnextoff(long); void rogetprintkey(void); long slangnextoff(long); void slangprintentry(Entry, int); void slangprintkey(void); long robertnextoff(long); void robertindexentry(Entry, int); void robertprintkey(void); long robertnextflex(long); void robertflexentry(Entry, int); long simplenextoff(long); void simpleprintentry(Entry, int); void simpleprintkey(void); long thesnextoff(long); void thesprintentry(Entry, int); void thesprintkey(void); long worldnextoff(long); void worldprintentry(Entry, int); void worldprintkey(void); extern Biobuf *bdict; extern Biobuf *bout; extern int linelen; extern int breaklen; extern int outinhibit; extern int debug; extern Rune *multitab[]; extern Dict dicts[]; #define asize(a) (sizeof (a)/sizeof(a[0]))