OSDN Git Service

use boost_1_56_0 and build by VS2013
[yamy/yamy.git] / setting.h
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
2 // setting.h\r
3 \r
4 \r
5 #ifndef _SETTING_H\r
6 #  define _SETTING_H\r
7 \r
8 \r
9 #  include "keymap.h"\r
10 #  include "parser.h"\r
11 #  include "multithread.h"\r
12 #  include <set>\r
13 \r
14 \r
15 /// this class contains all of loaded settings\r
16 class Setting\r
17 {\r
18 public:\r
19         typedef std::set<tstringi> Symbols;             ///\r
20         typedef std::list<Modifier> Modifiers;  ///\r
21 \r
22 public:\r
23         Keyboard m_keyboard;                            ///\r
24         Keymaps m_keymaps;                              ///\r
25         KeySeqs m_keySeqs;                              ///\r
26         Symbols m_symbols;                              ///\r
27         bool m_correctKanaLockHandling;         ///\r
28         bool m_sts4mayu;                                ///\r
29         bool m_cts4mayu;                                ///\r
30         bool m_mouseEvent;                              ///\r
31         LONG m_dragThreshold;                   ///\r
32         unsigned int m_oneShotRepeatableDelay;  ///\r
33 \r
34 public:\r
35         Setting()\r
36                         : m_correctKanaLockHandling(false),\r
37                         m_sts4mayu(false),\r
38                         m_cts4mayu(false),\r
39                         m_mouseEvent(false),\r
40                         m_dragThreshold(0),\r
41                         m_oneShotRepeatableDelay(0) { }\r
42 };\r
43 \r
44 \r
45 ///\r
46 namespace Event\r
47 {\r
48 ///\r
49 extern Key prefixed;\r
50 ///\r
51 extern Key before_key_down;\r
52 ///\r
53 extern Key after_key_up;\r
54 ///\r
55 extern Key *events[];\r
56 }\r
57 \r
58 \r
59 ///\r
60 class SettingLoader\r
61 {\r
62 #  define FUNCTION_FRIEND\r
63 #  include "functions.h"\r
64 #  undef FUNCTION_FRIEND\r
65 \r
66 public:\r
67         ///\r
68         class FunctionCreator\r
69         {\r
70         public:\r
71                 const _TCHAR *m_name;                   ///\r
72                 FunctionData *m_creator;                        ///\r
73         };\r
74 \r
75 private:\r
76         typedef std::vector<Token> Tokens;              ///\r
77         typedef std::vector<tstringi> Prefixes; ///\r
78         typedef std::vector<bool> CanReadStack; ///\r
79 \r
80 private:\r
81         Setting *m_setting;                             /// loaded setting\r
82         bool m_isThereAnyError;                 /// is there any error ?\r
83 \r
84         SyncObject *m_soLog;                            /// guard log output stream\r
85         tostream *m_log;                                /// log output stream\r
86 \r
87         tstringi m_currentFilename;                     /// current filename\r
88 \r
89         Tokens m_tokens;                                /// tokens for current line\r
90         Tokens::iterator m_ti;                  /// current processing token\r
91 \r
92         static Prefixes *m_prefixes;                    /// prefix terminal symbol\r
93         static size_t m_prefixesRefCcount;              /// reference count of prefix\r
94 \r
95         Keymap *m_currentKeymap;                        /// current keymap\r
96 \r
97         CanReadStack m_canReadStack;                    /// for &lt;COND_SYMBOL&gt;\r
98 \r
99         Modifier m_defaultAssignModifier;               /** default\r
100                                                     &lt;ASSIGN_MODIFIER&gt; */\r
101         Modifier m_defaultKeySeqModifier;               /** default\r
102                                                     &lt;KEYSEQ_MODIFIER&gt; */\r
103 \r
104 private:\r
105         bool isEOL();                                   /// is there no more tokens ?\r
106         Token *getToken();                              /// get next token\r
107         Token *lookToken();                             /// look next token\r
108         bool getOpenParen(bool i_doesThrow, const _TCHAR *i_name); /// argument "("\r
109         bool getCloseParen(bool i_doesThrow, const _TCHAR *i_name); /// argument ")"\r
110         bool getComma(bool i_doesThrow, const _TCHAR *i_name); /// argument ","\r
111 \r
112         void load_LINE();                               /// &lt;LINE&gt;\r
113         void load_DEFINE();                             /// &lt;DEFINE&gt;\r
114         void load_IF();                         /// &lt;IF&gt;\r
115         void load_ELSE(bool i_isElseIf, const tstringi &i_token);\r
116         /// &lt;ELSE&gt; &lt;ELSEIF&gt;\r
117         bool load_ENDIF(const tstringi &i_token);       /// &lt;ENDIF&gt;\r
118         void load_INCLUDE();                            /// &lt;INCLUDE&gt;\r
119         void load_SCAN_CODES(Key *o_key);               /// &lt;SCAN_CODES&gt;\r
120         void load_DEFINE_KEY();                 /// &lt;DEFINE_KEY&gt;\r
121         void load_DEFINE_MODIFIER();                    /// &lt;DEFINE_MODIFIER&gt;\r
122         void load_DEFINE_SYNC_KEY();                    /// &lt;DEFINE_SYNC_KEY&gt;\r
123         void load_DEFINE_ALIAS();                       /// &lt;DEFINE_ALIAS&gt;\r
124         void load_DEFINE_SUBSTITUTE();          /// &lt;DEFINE_SUBSTITUTE&gt;\r
125         void load_DEFINE_OPTION();                      /// &lt;DEFINE_OPTION&gt;\r
126         void load_KEYBOARD_DEFINITION();                /// &lt;KEYBOARD_DEFINITION&gt;\r
127         Modifier load_MODIFIER(Modifier::Type i_mode, Modifier i_modifier,\r
128                                                    Modifier::Type *o_mode = NULL);\r
129         /// &lt;..._MODIFIER&gt;\r
130         Key *load_KEY_NAME();                           /// &lt;KEY_NAME&gt;\r
131         void load_KEYMAP_DEFINITION(const Token *i_which);\r
132         /// &lt;KEYMAP_DEFINITION&gt;\r
133         void load_ARGUMENT(bool *o_arg);                /// &lt;ARGUMENT&gt;\r
134         void load_ARGUMENT(int *o_arg);         /// &lt;ARGUMENT&gt;\r
135         void load_ARGUMENT(unsigned int *o_arg);        /// &lt;ARGUMENT&gt;\r
136         void load_ARGUMENT(long *o_arg);                /// &lt;ARGUMENT&gt;\r
137         void load_ARGUMENT(unsigned __int64 *o_arg);    /// &lt;ARGUMENT&gt;\r
138         void load_ARGUMENT(__int64 *o_arg);             /// &lt;ARGUMENT&gt;\r
139         void load_ARGUMENT(tstringq *o_arg);            /// &lt;ARGUMENT&gt;\r
140         void load_ARGUMENT(std::list<tstringq> *o_arg); /// &lt;ARGUMENT&gt;\r
141         void load_ARGUMENT(tregex *o_arg);              /// &lt;ARGUMENT&gt;\r
142         void load_ARGUMENT(VKey *o_arg);                /// &lt;ARGUMENT_VK&gt;\r
143         void load_ARGUMENT(ToWindowType *o_arg);        /// &lt;ARGUMENT_WINDOW&gt;\r
144         void load_ARGUMENT(GravityType *o_arg); /// &lt;ARGUMENT&gt;\r
145         void load_ARGUMENT(MouseHookType *o_arg);       /// &lt;ARGUMENT&gt;\r
146         void load_ARGUMENT(MayuDialogType *o_arg);      /// &lt;ARGUMENT&gt;\r
147         void load_ARGUMENT(ModifierLockType *o_arg);    /// &lt;ARGUMENT_LOCK&gt;\r
148         void load_ARGUMENT(ToggleType *o_arg);  /// &lt;ARGUMENT&gt;\r
149         void load_ARGUMENT(ShowCommandType *o_arg);     ///&lt;ARGUMENT_SHOW_WINDOW&gt;\r
150         void load_ARGUMENT(TargetWindowType *o_arg);\r
151         /// &lt;ARGUMENT_TARGET_WINDOW_TYPE&gt;\r
152         void load_ARGUMENT(BooleanType *o_arg); /// &lt;bool&gt;\r
153         void load_ARGUMENT(LogicalOperatorType *o_arg);/// &lt;ARGUMENT&gt;\r
154         void load_ARGUMENT(Modifier *o_arg);            /// &lt;ARGUMENT&gt;\r
155         void load_ARGUMENT(const Keymap **o_arg);       /// &lt;ARGUMENT&gt;\r
156         void load_ARGUMENT(const KeySeq **o_arg);       /// &lt;ARGUMENT&gt;\r
157         void load_ARGUMENT(StrExprArg *o_arg);  /// &lt;ARGUMENT&gt;\r
158         void load_ARGUMENT(WindowMonitorFromType *o_arg);       /// &lt;ARGUMENT&gt;\r
159         KeySeq *load_KEY_SEQUENCE(\r
160                 const tstringi &i_name = _T(""), bool i_isInParen = false,\r
161                 Modifier::Type i_mode = Modifier::Type_KEYSEQ); /// &lt;KEY_SEQUENCE&gt;\r
162         void load_KEY_ASSIGN();                 /// &lt;KEY_ASSIGN&gt;\r
163         void load_EVENT_ASSIGN();                       /// &lt;EVENT_ASSIGN&gt;\r
164         void load_MODIFIER_ASSIGNMENT();                /// &lt;MODIFIER_ASSIGN&gt;\r
165         void load_LOCK_ASSIGNMENT();                    /// &lt;LOCK_ASSIGN&gt;\r
166         void load_KEYSEQ_DEFINITION();          /// &lt;KEYSEQ_DEFINITION&gt;\r
167 \r
168         /// load\r
169         void load(const tstringi &i_filename);\r
170 \r
171         /// is the filename readable ?\r
172         bool isReadable(const tstringi &i_filename, int i_debugLevel = 1) const;\r
173 \r
174         /// get filename\r
175         bool getFilename(const tstringi &i_name,\r
176                                          tstringi *o_path, int i_debugLevel = 1) const;\r
177 \r
178 public:\r
179         ///\r
180         SettingLoader(SyncObject *i_soLog, tostream *i_log);\r
181 \r
182         /// load setting\r
183         bool load(Setting *o_setting, const tstringi &i_filename = _T(""));\r
184 };\r
185 \r
186 \r
187 /// get home directory path\r
188 typedef std::list<tstringi> HomeDirectories;\r
189 extern void getHomeDirectories(HomeDirectories *o_path);\r
190 \r
191 \r
192 #endif // !_SETTING_H\r