1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\r
10 # include "parser.h"
\r
11 # include "multithread.h"
\r
15 /// this class contains all of loaded settings
\r
19 typedef std::set<tstringi> Symbols; ///
\r
20 typedef std::list<Modifier> Modifiers; ///
\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
36 : m_correctKanaLockHandling(false),
\r
39 m_mouseEvent(false),
\r
41 m_oneShotRepeatableDelay(0) { }
\r
49 extern Key prefixed;
\r
51 extern Key before_key_down;
\r
53 extern Key after_key_up;
\r
55 extern Key *events[];
\r
62 # define FUNCTION_FRIEND
\r
63 # include "functions.h"
\r
64 # undef FUNCTION_FRIEND
\r
68 class FunctionCreator
\r
71 const _TCHAR *m_name; ///
\r
72 FunctionData *m_creator; ///
\r
76 typedef std::vector<Token> Tokens; ///
\r
77 typedef std::vector<tstringi> Prefixes; ///
\r
78 typedef std::vector<bool> CanReadStack; ///
\r
81 Setting *m_setting; /// loaded setting
\r
82 bool m_isThereAnyError; /// is there any error ?
\r
84 SyncObject *m_soLog; /// guard log output stream
\r
85 tostream *m_log; /// log output stream
\r
87 tstringi m_currentFilename; /// current filename
\r
89 Tokens m_tokens; /// tokens for current line
\r
90 Tokens::iterator m_ti; /// current processing token
\r
92 static Prefixes *m_prefixes; /// prefix terminal symbol
\r
93 static size_t m_prefixesRefCcount; /// reference count of prefix
\r
95 Keymap *m_currentKeymap; /// current keymap
\r
97 CanReadStack m_canReadStack; /// for <COND_SYMBOL>
\r
99 Modifier m_defaultAssignModifier; /** default
\r
100 <ASSIGN_MODIFIER> */
\r
101 Modifier m_defaultKeySeqModifier; /** default
\r
102 <KEYSEQ_MODIFIER> */
\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
112 void load_LINE(); /// <LINE>
\r
113 void load_DEFINE(); /// <DEFINE>
\r
114 void load_IF(); /// <IF>
\r
115 void load_ELSE(bool i_isElseIf, const tstringi &i_token);
\r
116 /// <ELSE> <ELSEIF>
\r
117 bool load_ENDIF(const tstringi &i_token); /// <ENDIF>
\r
118 void load_INCLUDE(); /// <INCLUDE>
\r
119 void load_SCAN_CODES(Key *o_key); /// <SCAN_CODES>
\r
120 void load_DEFINE_KEY(); /// <DEFINE_KEY>
\r
121 void load_DEFINE_MODIFIER(); /// <DEFINE_MODIFIER>
\r
122 void load_DEFINE_SYNC_KEY(); /// <DEFINE_SYNC_KEY>
\r
123 void load_DEFINE_ALIAS(); /// <DEFINE_ALIAS>
\r
124 void load_DEFINE_SUBSTITUTE(); /// <DEFINE_SUBSTITUTE>
\r
125 void load_DEFINE_OPTION(); /// <DEFINE_OPTION>
\r
126 void load_KEYBOARD_DEFINITION(); /// <KEYBOARD_DEFINITION>
\r
127 Modifier load_MODIFIER(Modifier::Type i_mode, Modifier i_modifier,
\r
128 Modifier::Type *o_mode = NULL);
\r
129 /// <..._MODIFIER>
\r
130 Key *load_KEY_NAME(); /// <KEY_NAME>
\r
131 void load_KEYMAP_DEFINITION(const Token *i_which);
\r
132 /// <KEYMAP_DEFINITION>
\r
133 void load_ARGUMENT(bool *o_arg); /// <ARGUMENT>
\r
134 void load_ARGUMENT(int *o_arg); /// <ARGUMENT>
\r
135 void load_ARGUMENT(unsigned int *o_arg); /// <ARGUMENT>
\r
136 void load_ARGUMENT(long *o_arg); /// <ARGUMENT>
\r
137 void load_ARGUMENT(unsigned __int64 *o_arg); /// <ARGUMENT>
\r
138 void load_ARGUMENT(__int64 *o_arg); /// <ARGUMENT>
\r
139 void load_ARGUMENT(tstringq *o_arg); /// <ARGUMENT>
\r
140 void load_ARGUMENT(std::list<tstringq> *o_arg); /// <ARGUMENT>
\r
141 void load_ARGUMENT(tregex *o_arg); /// <ARGUMENT>
\r
142 void load_ARGUMENT(VKey *o_arg); /// <ARGUMENT_VK>
\r
143 void load_ARGUMENT(ToWindowType *o_arg); /// <ARGUMENT_WINDOW>
\r
144 void load_ARGUMENT(GravityType *o_arg); /// <ARGUMENT>
\r
145 void load_ARGUMENT(MouseHookType *o_arg); /// <ARGUMENT>
\r
146 void load_ARGUMENT(MayuDialogType *o_arg); /// <ARGUMENT>
\r
147 void load_ARGUMENT(ModifierLockType *o_arg); /// <ARGUMENT_LOCK>
\r
148 void load_ARGUMENT(ToggleType *o_arg); /// <ARGUMENT>
\r
149 void load_ARGUMENT(ShowCommandType *o_arg); ///<ARGUMENT_SHOW_WINDOW>
\r
150 void load_ARGUMENT(TargetWindowType *o_arg);
\r
151 /// <ARGUMENT_TARGET_WINDOW_TYPE>
\r
152 void load_ARGUMENT(BooleanType *o_arg); /// <bool>
\r
153 void load_ARGUMENT(LogicalOperatorType *o_arg);/// <ARGUMENT>
\r
154 void load_ARGUMENT(Modifier *o_arg); /// <ARGUMENT>
\r
155 void load_ARGUMENT(const Keymap **o_arg); /// <ARGUMENT>
\r
156 void load_ARGUMENT(const KeySeq **o_arg); /// <ARGUMENT>
\r
157 void load_ARGUMENT(StrExprArg *o_arg); /// <ARGUMENT>
\r
158 void load_ARGUMENT(WindowMonitorFromType *o_arg); /// <ARGUMENT>
\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); /// <KEY_SEQUENCE>
\r
162 void load_KEY_ASSIGN(); /// <KEY_ASSIGN>
\r
163 void load_EVENT_ASSIGN(); /// <EVENT_ASSIGN>
\r
164 void load_MODIFIER_ASSIGNMENT(); /// <MODIFIER_ASSIGN>
\r
165 void load_LOCK_ASSIGNMENT(); /// <LOCK_ASSIGN>
\r
166 void load_KEYSEQ_DEFINITION(); /// <KEYSEQ_DEFINITION>
\r
169 void load(const tstringi &i_filename);
\r
171 /// is the filename readable ?
\r
172 bool isReadable(const tstringi &i_filename, int i_debugLevel = 1) const;
\r
175 bool getFilename(const tstringi &i_name,
\r
176 tstringi *o_path, int i_debugLevel = 1) const;
\r
180 SettingLoader(SyncObject *i_soLog, tostream *i_log);
\r
183 bool load(Setting *o_setting, const tstringi &i_filename = _T(""));
\r
187 /// get home directory path
\r
188 typedef std::list<tstringi> HomeDirectories;
\r
189 extern void getHomeDirectories(HomeDirectories *o_path);
\r
192 #endif // !_SETTING_H
\r