]> git.lyx.org Git - lyx.git/blob - src/trans_mgr.h
1a6917386f585e9708336643c3e1ab2654074819
[lyx.git] / src / trans_mgr.h
1 // -*- C++ -*-
2 #ifndef Trans_Manager_h
3 #define Trans_Manager_h
4
5 #ifdef __GNUG__
6 #pragma interface
7 #endif
8
9 #include "tex-accent.h"
10 #include "trans_decl.h"
11 #include "chset.h"
12 #include "LString.h"
13
14 class LyXText;
15 class Trans;
16
17 /// Translation State
18 class TransState {
19 public:
20         ///
21         virtual ~TransState() {}
22         ///
23         virtual string normalkey(char, char *) = 0;
24         ///
25         virtual bool backspace() = 0;
26         ///
27         virtual string deadkey(char, KmodInfo) = 0;
28         ///
29         static char const TOKEN_SEP;
30 };
31
32
33 /// Translation FSM
34 class TransFSMData {
35 protected:
36         ///
37         virtual ~TransFSMData() {}
38         ///
39         char deadkey_;
40         ///
41         KmodInfo deadkey_info_;
42         ///
43         char deadkey2_;
44         ///
45         KmodInfo deadkey2_info_;
46         ///
47         KmodException comb_info_;
48         ///
49         TransState * init_state_;
50         ///
51         TransState * deadkey_state_;
52         ///
53         TransState * combined_state_;
54         ///
55 public:
56         ///
57         TransFSMData();
58         ///
59         TransState * currentState;
60 };
61
62
63 /// Init State
64 class TransInitState : 
65         virtual public TransFSMData,
66         public TransState {
67 public:
68         ///
69         TransInitState();
70         ///
71         virtual string normalkey(char, char *);
72         ///
73         virtual bool backspace() { return true; }
74         ///
75         virtual string deadkey(char, KmodInfo);
76 };
77
78
79 /// Deadkey State
80 class TransDeadkeyState : 
81         virtual public TransFSMData,
82         public TransState {
83 public:
84         ///
85         TransDeadkeyState();
86         ///
87         virtual string normalkey(char, char *);
88         ///
89         virtual bool backspace() {
90                 currentState = init_state_;
91                 return false;
92         }
93         ///
94         virtual string deadkey(char, KmodInfo);
95 };
96
97
98 /// Combined State
99 class TransCombinedState: 
100         virtual public TransFSMData,
101         public TransState {
102 public:
103         ///
104         TransCombinedState();
105         ///
106         virtual string normalkey(char, char *);
107         ///
108         virtual bool backspace() {
109                 // cancel the second deadkey
110                 deadkey2_ = 0;
111                 deadkey2_info_.accent = TEX_NOACCENT;
112                 currentState = deadkey_state_;
113                 
114                 return false;
115         }
116         ///
117         virtual string deadkey(char, KmodInfo);
118 };
119
120
121 ///
122 class TransFSM :        
123         virtual public TransFSMData,
124         public TransInitState,
125         public TransDeadkeyState,
126         public TransCombinedState
127 {
128 public:
129         ///
130         TransFSM();
131 };
132
133
134 ///
135 class TransManager {
136 private:
137         ///
138         TransFSM trans_fsm_;
139         ///
140         Trans * active_;
141         ///
142         Trans * t1_;
143         ///
144         Trans * t2_;
145         ///
146         static Trans * default_;
147         ///
148         CharacterSet chset_;
149         ///
150         void insert(string const &, LyXText *);
151         ///
152         void insertVerbatim(string const &, LyXText *);
153 public:
154         ///
155         TransManager();
156         ///
157         virtual ~TransManager();
158         ///
159         int SetPrimary(string const &);
160         ///
161         int SetSecondary(string const &);
162         ///
163         void EnablePrimary();
164         ///
165         void EnableSecondary();
166         ///
167         void DisableKeymap();
168         ///
169         bool setCharset(const char *);
170         ///
171         bool backspace() {
172                 return trans_fsm_.currentState->backspace();
173         }
174         ///
175         void TranslateAndInsert(char, LyXText *);
176         ///
177         inline string deadkey(char, KmodInfo);
178         ///
179         inline string normalkey(char, char *);
180         ///
181         void deadkey(char, tex_accent, LyXText *);
182 };
183
184
185 string TransManager::normalkey(char c, char * t)
186 {
187         return trans_fsm_.currentState->normalkey(c, t);
188 }
189
190
191 string TransManager::deadkey(char c, KmodInfo t)
192 {
193         return trans_fsm_.currentState->deadkey(c, t);
194 }
195
196 #endif