Files
strans/dat.h

201 lines
2.5 KiB
C

#include <u.h>
#include <libc.h>
#include <thread.h>
#include <bio.h>
#include "ipc.h"
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
enum
{
LangEN = 0x14,
LangJP = 0x0e,
LangJPK = 0x0b,
LangKO = 0x13,
LangHANJA = 0x08,
LangEMOJI = 0x05,
LangVI = 0x16,
Fontsz = 32,
Maxfonts = 4,
Maxrunes = 64,
Maxutf = Maxrunes * UTFmax + 1,
};
enum
{
Maxclients = 64,
Maxkouho = 32,
Maxdisp = 9,
Wlkeymax = 0x300,
Imgw = (Maxrunes + 3) * Fontsz,
Imgh = (Maxdisp + 1) * Fontsz,
Colfg = 0x000000,
Colbg = 0xffffff,
Colsel = 0xcccccc,
};
typedef struct Str Str;
struct Str
{
Rune r[Maxrunes];
int n;
};
typedef struct Wlstate Wlstate;
struct Wlstate
{
uchar down[Wlkeymax];
u32int repeatkey;
uvlong repeatat;
int rate;
int delay;
int repeating;
};
typedef struct Emit Emit;
struct Emit
{
int eat;
Str s;
Str next;
Str dict;
};
typedef struct Hnode Hnode;
struct Hnode
{
int filled;
int next;
char *key;
int klen;
char *val;
int vlen;
};
typedef struct Tnode Tnode;
struct Tnode
{
int child;
int sibling;
char c;
char *val;
int vlen;
};
typedef struct Trie Trie;
struct Trie
{
int root;
Tnode *nodes;
int n;
int cap;
};
typedef struct Hmap Hmap;
struct Hmap
{
int nbs;
int nsz;
int len;
int cap;
uchar *nodes;
};
typedef struct Lang Lang;
typedef struct Im Im;
struct Lang
{
int lang;
char *mapname;
char *dictname;
Emit (*trans)(Im*, Rune);
void (*back)(Im*);
void (*dictq)(Im*);
Trie *map;
Hmap *dict;
};
struct Im
{
Lang *l;
Str pre;
/* Telex history, or the short pending romaji in a Japanese mode. */
Str raw;
Str kouho[Maxkouho];
int nkouho;
int sel;
};
typedef struct Drawcmd Drawcmd;
typedef struct Caret Caret;
struct Caret
{
int valid;
int x;
int y;
int h;
};
struct Drawcmd
{
Str pre;
Str kouho[Maxdisp];
int nkouho;
int sel;
Caret caret;
};
typedef struct Keyreq Keyreq;
typedef struct Keyres Keyres;
enum
{
Keypress,
Keyreset,
Keyrelease,
Keycaret,
};
struct Keyres
{
int eaten;
Str commit;
Str preedit;
};
struct Keyreq
{
uvlong owner;
int op;
u32int ks;
u32int mod;
Caret caret;
int want; /* nonzero: include preedit in reply */
Channel *reply;
};
typedef struct Dictreq Dictreq;
struct Dictreq
{
Str key;
Str pre;
int lang;
};
typedef struct Dictres Dictres;
struct Dictres
{
Str key;
Str kouho[Maxkouho];
int nkouho;
int lang;
};
extern Lang langs[];
extern int nlang;
extern Channel *drawc;
extern Channel *keyc;
extern Channel *dictreqc;
extern Channel *dictresc;