]> git.lyx.org Git - lyx.git/blob - src/trans_mgr.h
2145f6a5df839fa3454529e822abe5743cfec860
[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 #if 0
23         ///
24         virtual string const normalkey(char, string const &) = 0;
25 #else
26         ///
27         virtual string const normalkey(char) = 0;
28 #endif
29         ///
30         virtual bool backspace() = 0;
31         ///
32         virtual string const deadkey(char, KmodInfo) = 0;
33         ///
34         static char const TOKEN_SEP;
35 };
36
37
38 /// Translation FSM
39 class TransFSMData {
40 protected:
41         ///
42         virtual ~TransFSMData() {}
43         ///
44         char deadkey_;
45         ///
46         KmodInfo deadkey_info_;
47         ///
48         char deadkey2_;
49         ///
50         KmodInfo deadkey2_info_;
51         ///
52         KmodException comb_info_;
53         ///
54         TransState * init_state_;
55         ///
56         TransState * deadkey_state_;
57         ///
58         TransState * combined_state_;
59         ///
60 public:
61         ///
62         TransFSMData();
63         ///
64         TransState * currentState;
65 };
66
67
68 /// Init State
69 class TransInitState :  virtual public TransFSMData, public TransState {
70 public:
71         ///
72         TransInitState();
73 #if 0
74         ///
75         virtual string const normalkey(char, string const &);
76 #else
77         ///
78         virtual string const normalkey(char);
79 #endif
80         ///
81         virtual bool backspace() { return true; }
82         ///
83         virtual string const deadkey(char, KmodInfo);
84 };
85
86
87 /// Deadkey State
88 class TransDeadkeyState : virtual public TransFSMData, public TransState {
89 public:
90         ///
91         TransDeadkeyState();
92 #if 0
93         ///
94         virtual string const normalkey(char, string const &);
95 #else
96         ///
97         virtual string const normalkey(char);
98 #endif
99         ///
100         virtual bool backspace() {
101                 currentState = init_state_;
102                 return false;
103         }
104         ///
105         virtual string const deadkey(char, KmodInfo);
106 };
107
108
109 /// Combined State
110 class TransCombinedState : virtual public TransFSMData, public TransState {
111 public:
112         ///
113         TransCombinedState();
114 #if 0
115         ///
116         virtual string const normalkey(char, string const &);
117 #else
118         ///
119         virtual string const normalkey(char);
120 #endif
121         ///
122         virtual bool backspace() {
123                 // cancel the second deadkey
124                 deadkey2_ = 0;
125                 deadkey2_info_.accent = TEX_NOACCENT;
126                 currentState = deadkey_state_;
127                 
128                 return false;
129         }
130         ///
131         virtual string const deadkey(char, KmodInfo);
132 };
133
134
135 ///
136 class TransFSM : virtual public TransFSMData,
137                  public TransInitState,
138                  public TransDeadkeyState,
139                  public TransCombinedState {
140 public:
141         ///
142         TransFSM();
143 };
144
145
146 ///
147 class TransManager {
148 private:
149         ///
150         TransFSM trans_fsm_;
151         ///
152         Trans * active_;
153         ///
154         Trans * t1_;
155         ///
156         Trans * t2_;
157         ///
158         static Trans default_;
159         ///
160         CharacterSet chset_;
161         ///
162         void insert(string const &, LyXText *);
163         ///
164         void insertVerbatim(string const &, LyXText *);
165 public:
166         ///
167         TransManager();
168         ///
169         virtual ~TransManager();
170         ///
171         int SetPrimary(string const &);
172         ///
173         int SetSecondary(string const &);
174         ///
175         void EnablePrimary();
176         ///
177         void EnableSecondary();
178         ///
179         void DisableKeymap();
180         ///
181         bool setCharset(string const &);
182         ///
183         bool backspace() {
184                 return trans_fsm_.currentState->backspace();
185         }
186         ///
187         void TranslateAndInsert(char, LyXText *);
188         ///
189         string const deadkey(char, KmodInfo);
190 #if 0
191         ///
192         string const normalkey(char, string const &);
193 #else
194         ///
195         string const normalkey(char);
196 #endif
197         ///
198         void deadkey(char, tex_accent, LyXText *);
199 };
200
201
202 #if 0
203 inline
204 string const TransManager::normalkey(char c, string const & t)
205 {
206         return trans_fsm_.currentState->normalkey(c, t);
207 }
208 #else
209 inline
210 string const TransManager::normalkey(char c)
211 {
212         return trans_fsm_.currentState->normalkey(c);
213 }
214 #endif
215
216
217 inline
218 string const TransManager::deadkey(char c, KmodInfo t)
219 {
220         return trans_fsm_.currentState->deadkey(c, t);
221 }
222
223 #endif