]> git.lyx.org Git - lyx.git/blob - src/trans_mgr.h
no log...
[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 const normalkey(char, string const &) = 0;
24         ///
25         virtual bool backspace() = 0;
26         ///
27         virtual string const 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 :  virtual public TransFSMData, public TransState {
65 public:
66         ///
67         TransInitState();
68         ///
69         virtual string const normalkey(char, string const &);
70         ///
71         virtual bool backspace() { return true; }
72         ///
73         virtual string const deadkey(char, KmodInfo);
74 };
75
76
77 /// Deadkey State
78 class TransDeadkeyState : virtual public TransFSMData, public TransState {
79 public:
80         ///
81         TransDeadkeyState();
82         ///
83         virtual string const normalkey(char, string const &);
84         ///
85         virtual bool backspace() {
86                 currentState = init_state_;
87                 return false;
88         }
89         ///
90         virtual string const deadkey(char, KmodInfo);
91 };
92
93
94 /// Combined State
95 class TransCombinedState : virtual public TransFSMData, public TransState {
96 public:
97         ///
98         TransCombinedState();
99         ///
100         virtual string const normalkey(char, string const &);
101         ///
102         virtual bool backspace() {
103                 // cancel the second deadkey
104                 deadkey2_ = 0;
105                 deadkey2_info_.accent = TEX_NOACCENT;
106                 currentState = deadkey_state_;
107                 
108                 return false;
109         }
110         ///
111         virtual string const deadkey(char, KmodInfo);
112 };
113
114
115 ///
116 class TransFSM : virtual public TransFSMData,
117                  public TransInitState,
118                  public TransDeadkeyState,
119                  public TransCombinedState {
120 public:
121         ///
122         TransFSM();
123 };
124
125
126 ///
127 class TransManager {
128 private:
129         ///
130         TransFSM trans_fsm_;
131         ///
132         Trans * active_;
133         ///
134         Trans * t1_;
135         ///
136         Trans * t2_;
137         ///
138         static Trans default_;
139         ///
140         CharacterSet chset_;
141         ///
142         void insert(string const &, LyXText *);
143         ///
144         void insertVerbatim(string const &, LyXText *);
145 public:
146         ///
147         TransManager();
148         ///
149         virtual ~TransManager();
150         ///
151         int SetPrimary(string const &);
152         ///
153         int SetSecondary(string const &);
154         ///
155         void EnablePrimary();
156         ///
157         void EnableSecondary();
158         ///
159         void DisableKeymap();
160         ///
161         bool setCharset(string const &);
162         ///
163         bool backspace() {
164                 return trans_fsm_.currentState->backspace();
165         }
166         ///
167         void TranslateAndInsert(char, LyXText *);
168         ///
169         inline string const deadkey(char, KmodInfo);
170         ///
171         inline string const normalkey(char, string const &);
172         ///
173         void deadkey(char, tex_accent, LyXText *);
174 };
175
176
177 string const TransManager::normalkey(char c, string const & t)
178 {
179         return trans_fsm_.currentState->normalkey(c, t);
180 }
181
182
183 string const TransManager::deadkey(char c, KmodInfo t)
184 {
185         return trans_fsm_.currentState->deadkey(c, t);
186 }
187
188 #endif