Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* 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]))