engine: one trans contract for every language
Japanese was never dispatched through the Lang table: dotrans and transstr both special-cased it into transjp, which edited Im in place and wrote commits through a side argument, while transko popped and cleared a pre that every caller overwrote anyway, and Vietnamese kept its key history in dotrans. Emit now carries the new raw state next to the new pre; transjp, transko and transvi are pure functions of (Im, key), and dotrans and transstr have a single path. Vietnamese history bookkeeping lives in vi.c, where the full-history flush no longer resets the caret as a side effect; istone was toneidx() >= 0.
This commit is contained in:
6
dat.h
6
dat.h
@@ -48,12 +48,18 @@ struct Str
|
||||
int n;
|
||||
};
|
||||
|
||||
/*
|
||||
* What one key does to a composition: text to commit, the new pending
|
||||
* text, and the new raw state (Telex key history, or pending Japanese
|
||||
* romaji), given the old ones in Im.
|
||||
*/
|
||||
typedef struct Emit Emit;
|
||||
struct Emit
|
||||
{
|
||||
int eat;
|
||||
Str s;
|
||||
Str next;
|
||||
Str raw;
|
||||
};
|
||||
|
||||
typedef struct Tnode Tnode;
|
||||
|
||||
Reference in New Issue
Block a user