164 lines
4.1 KiB
C
164 lines
4.1 KiB
C
/* 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]))
|