This commit was manufactured by cvs2svn to create tag
[lyx.git] / src / trans_mgr.h
blobd75a56e871dd5a4cde9cf6badc9410672c30b421
1 // -*- C++ -*-
2 #ifndef _Trans_Manager_h_
3 #define _Trans_Manager_h_
5 #ifdef __GNUG__
6 #pragma interface
7 #endif
9 #include "tex-accent.h"
10 #include "trans_decl.h"
12 class LyXText;
13 class LString;
14 class CharacterSet;
15 class Trans;
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 const char TOKEN_SEP;
33 /// Translation FSM
34 class TransFSMData {
35 protected:
36 ///
37 virtual ~TransFSMData()
39 ///
40 char deadkey_;
41 ///
42 KmodInfo deadkey_info_;
43 ///
44 char deadkey2_;
45 ///
46 KmodInfo deadkey2_info_;
47 ///
48 KmodException comb_info_;
49 ///
50 TransState* init_state_;
51 ///
52 TransState* deadkey_state_;
53 ///
54 TransState* combined_state_;
55 ///
56 public:
57 ///
58 TransFSMData();
59 ///
60 TransState* currentState;
64 /// Init State
65 class TransInitState:
66 virtual public TransFSMData,
67 public TransState {
68 public:
69 ///
70 TransInitState();
71 ///
72 virtual string normalkey(char,char*);
73 ///
74 virtual bool backspace() { return true; }
75 ///
76 virtual string deadkey(char,KmodInfo);
80 /// Deadkey State
81 class TransDeadkeyState:
82 virtual public TransFSMData,
83 public TransState {
84 public:
85 ///
86 TransDeadkeyState();
87 ///
88 virtual string normalkey(char,char*);
89 ///
90 virtual bool backspace()
92 currentState=init_state_;
93 return false;
95 ///
96 virtual string deadkey(char,KmodInfo);
100 /// Combined State
101 class TransCombinedState:
102 virtual public TransFSMData,
103 public TransState {
104 public:
106 TransCombinedState();
108 virtual string normalkey(char,char*);
110 virtual bool backspace()
112 // cancel the second deadkey
113 deadkey2_=0;
114 deadkey2_info_.accent=TEX_NOACCENT;
115 currentState=deadkey_state_;
117 return false;
120 virtual string deadkey(char,KmodInfo);
125 class TransFSM:
126 virtual public TransFSMData,
127 public TransInitState,
128 public TransDeadkeyState,
129 public TransCombinedState
131 public:
133 TransFSM();
137 class TransManager
139 private:
141 TransFSM trans_fsm_;
143 Trans* active_;
145 Trans* t1_;
147 Trans* t2_;
149 static Trans* default_;
151 CharacterSet* chset_;
153 void insert(string,LyXText*);
155 void insertVerbatim(const string&,LyXText*);
156 public:
158 TransManager();
160 virtual ~TransManager();
162 int SetPrimary(string const &);
164 int SetSecondary(string const &);
166 void EnablePrimary();
168 void EnableSecondary();
170 void DisableKeymap();
172 bool setCharset(const char*);
174 bool backspace()
176 return trans_fsm_.currentState->backspace();
179 void TranslateAndInsert(char,LyXText*);
181 inline string deadkey(char,KmodInfo);
183 inline string normalkey(char,char*);
185 void deadkey(char,tex_accent,LyXText*);
190 string TransManager::normalkey(char c,char *t)
192 return trans_fsm_.currentState->normalkey(c,t);
196 string TransManager::deadkey(char c,KmodInfo t)
198 return trans_fsm_.currentState->deadkey(c,t);
201 #endif