2 #ifndef Trans_Manager_h
3 #define Trans_Manager_h
9 #include "tex-accent.h"
10 #include "trans_decl.h"
21 virtual ~TransState() {}
23 virtual string normalkey(char, char *) = 0;
25 virtual bool backspace() = 0;
27 virtual string deadkey(char, KmodInfo) = 0;
29 static char const TOKEN_SEP;
37 virtual ~TransFSMData() {}
41 KmodInfo deadkey_info_;
45 KmodInfo deadkey2_info_;
47 KmodException comb_info_;
49 TransState * init_state_;
51 TransState * deadkey_state_;
53 TransState * combined_state_;
59 TransState * currentState;
64 class TransInitState : virtual public TransFSMData, public TransState {
69 virtual string normalkey(char, char *);
71 virtual bool backspace() { return true; }
73 virtual string deadkey(char, KmodInfo);
78 class TransDeadkeyState : virtual public TransFSMData, public TransState {
83 virtual string normalkey(char, char *);
85 virtual bool backspace() {
86 currentState = init_state_;
90 virtual string deadkey(char, KmodInfo);
95 class TransCombinedState : virtual public TransFSMData, public TransState {
100 virtual string normalkey(char, char *);
102 virtual bool backspace() {
103 // cancel the second deadkey
105 deadkey2_info_.accent = TEX_NOACCENT;
106 currentState = deadkey_state_;
111 virtual string deadkey(char, KmodInfo);
116 class TransFSM : virtual public TransFSMData,
117 public TransInitState,
118 public TransDeadkeyState,
119 public TransCombinedState {
138 static Trans * default_;
142 void insert(string const &, LyXText *);
144 void insertVerbatim(string const &, LyXText *);
149 virtual ~TransManager();
151 int SetPrimary(string const &);
153 int SetSecondary(string const &);
155 void EnablePrimary();
157 void EnableSecondary();
159 void DisableKeymap();
161 bool setCharset(const char *);
164 return trans_fsm_.currentState->backspace();
167 void TranslateAndInsert(char, LyXText *);
169 inline string deadkey(char, KmodInfo);
171 inline string normalkey(char, char *);
173 void deadkey(char, tex_accent, LyXText *);
177 string TransManager::normalkey(char c, char * t)
179 return trans_fsm_.currentState->normalkey(c, t);
183 string TransManager::deadkey(char c, KmodInfo t)
185 return trans_fsm_.currentState->deadkey(c, t);