]> git.lyx.org Git - lyx.git/blob - src/trans_mgr.h
white-space changes, removed definitions.h several enum changes because of this,...
[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         {
91                 currentState = init_state_;
92                 return false;
93         }
94                 ///
95                 virtual string deadkey(char, KmodInfo);
96 };
97
98
99 /// Combined State
100 class TransCombinedState: 
101         virtual public TransFSMData,
102         public TransState {
103 public:
104                 ///
105                 TransCombinedState();
106                 ///
107                 virtual string normalkey(char, char *);
108                 ///
109                 virtual bool backspace()
110         {
111                 // cancel the second deadkey
112                 deadkey2_ = 0;
113                 deadkey2_info_.accent = TEX_NOACCENT;
114                 currentState = deadkey_state_;
115                 
116                 return false;
117         }
118                 ///
119                 virtual string deadkey(char, KmodInfo);
120 };
121
122
123 ///
124 class TransFSM: 
125         virtual public TransFSMData,
126         public TransInitState,
127         public TransDeadkeyState,
128         public TransCombinedState
129 {
130 public:
131         ///
132         TransFSM();
133 };
134
135 ///
136 class TransManager
137 {
138 private:
139         ///
140         TransFSM trans_fsm_;
141         ///
142         Trans * active_;
143         ///
144         Trans * t1_;
145         ///
146         Trans * t2_;
147         ///
148         static Trans * default_;
149         ///
150         CharacterSet chset_;
151         ///
152         void insert(string, LyXText *);
153         ///
154         void insertVerbatim(string const &, LyXText *);
155 public:
156         ///
157         TransManager();
158         ///
159         virtual ~TransManager();
160         ///
161         int SetPrimary(string const &);
162         ///
163         int SetSecondary(string const &);
164         ///
165         void EnablePrimary();
166         ///
167         void EnableSecondary();
168         ///
169         void DisableKeymap();
170         ///
171         bool setCharset(const char *);
172         ///
173         bool backspace()
174         {
175                 return trans_fsm_.currentState->backspace();
176         }
177         ///
178         void TranslateAndInsert(char, LyXText *);
179         ///
180         inline string deadkey(char, KmodInfo);
181         ///
182         inline string normalkey(char, char *);
183         ///
184         void deadkey(char, tex_accent, LyXText *);
185     
186 };
187
188
189 string TransManager::normalkey(char c, char * t)
190 {
191         return trans_fsm_.currentState->normalkey(c, t);
192 }
193
194
195 string TransManager::deadkey(char c, KmodInfo t)
196 {
197         return trans_fsm_.currentState->deadkey(c, t);
198 }
199
200 #endif