1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 # include "multithread.h"
15 /// this class contains all of loaded settings
19 typedef std::set<tstringi> Symbols; ///
20 typedef std::list<Modifier> Modifiers; ///
23 Keyboard m_keyboard; ///
24 Keymaps m_keymaps; ///
25 KeySeqs m_keySeqs; ///
26 Symbols m_symbols; ///
27 bool m_correctKanaLockHandling; ///
30 unsigned int m_oneShotRepeatableDelay; ///
34 : m_correctKanaLockHandling(false),
37 m_oneShotRepeatableDelay(0) { }
47 extern Key before_key_down;
49 extern Key after_key_up;
58 # define FUNCTION_FRIEND
59 # include "functions.h"
60 # undef FUNCTION_FRIEND
67 const _TCHAR *m_name; ///
68 FunctionData *m_creator; ///
72 typedef std::vector<Token> Tokens; ///
73 typedef std::vector<tstringi> Prefixes; ///
74 typedef std::vector<bool> CanReadStack; ///
77 Setting *m_setting; /// loaded setting
78 bool m_isThereAnyError; /// is there any error ?
80 SyncObject *m_soLog; /// guard log output stream
81 tostream *m_log; /// log output stream
83 tstringi m_currentFilename; /// current filename
85 Tokens m_tokens; /// tokens for current line
86 Tokens::iterator m_ti; /// current processing token
88 static Prefixes *m_prefixes; /// prefix terminal symbol
89 static size_t m_prefixesRefCcount; /// reference count of prefix
91 Keymap *m_currentKeymap; /// current keymap
93 CanReadStack m_canReadStack; /// for <COND_SYMBOL>
95 Modifier m_defaultAssignModifier; /** default
96 <ASSIGN_MODIFIER> */
97 Modifier m_defaultKeySeqModifier; /** default
98 <KEYSEQ_MODIFIER> */
101 bool isEOL(); /// is there no more tokens ?
102 Token *getToken(); /// get next token
103 Token *lookToken(); /// look next token
104 bool getOpenParen(bool i_doesThrow, const _TCHAR *i_name); /// argument "("
105 bool getCloseParen(bool i_doesThrow, const _TCHAR *i_name); /// argument ")"
106 bool getComma(bool i_doesThrow, const _TCHAR *i_name); /// argument ","
108 void load_LINE(); /// <LINE>
109 void load_DEFINE(); /// <DEFINE>
110 void load_IF(); /// <IF>
111 void load_ELSE(bool i_isElseIf, const tstringi &i_token);
112 /// <ELSE> <ELSEIF>
113 bool load_ENDIF(const tstringi &i_token); /// <ENDIF>
114 void load_INCLUDE(); /// <INCLUDE>
115 void load_SCAN_CODES(Key *o_key); /// <SCAN_CODES>
116 void load_DEFINE_KEY(); /// <DEFINE_KEY>
117 void load_DEFINE_MODIFIER(); /// <DEFINE_MODIFIER>
118 void load_DEFINE_SYNC_KEY(); /// <DEFINE_SYNC_KEY>
119 void load_DEFINE_ALIAS(); /// <DEFINE_ALIAS>
120 void load_DEFINE_SUBSTITUTE(); /// <DEFINE_SUBSTITUTE>
121 void load_DEFINE_OPTION(); /// <DEFINE_OPTION>
122 void load_KEYBOARD_DEFINITION(); /// <KEYBOARD_DEFINITION>
123 Modifier load_MODIFIER(Modifier::Type i_mode, Modifier i_modifier,
124 Modifier::Type *o_mode = NULL);
125 /// <..._MODIFIER>
126 Key *load_KEY_NAME(); /// <KEY_NAME>
127 void load_KEYMAP_DEFINITION(const Token *i_which);
128 /// <KEYMAP_DEFINITION>
129 void load_ARGUMENT(bool *o_arg); /// <ARGUMENT>
130 void load_ARGUMENT(int *o_arg); /// <ARGUMENT>
131 void load_ARGUMENT(unsigned int *o_arg); /// <ARGUMENT>
132 void load_ARGUMENT(long *o_arg); /// <ARGUMENT>
133 void load_ARGUMENT(unsigned __int64 *o_arg); /// <ARGUMENT>
134 void load_ARGUMENT(__int64 *o_arg); /// <ARGUMENT>
135 void load_ARGUMENT(tstringq *o_arg); /// <ARGUMENT>
136 void load_ARGUMENT(std::list<tstringq> *o_arg); /// <ARGUMENT>
137 void load_ARGUMENT(tregex *o_arg); /// <ARGUMENT>
138 void load_ARGUMENT(VKey *o_arg); /// <ARGUMENT_VK>
139 void load_ARGUMENT(ToWindowType *o_arg); /// <ARGUMENT_WINDOW>
140 void load_ARGUMENT(GravityType *o_arg); /// <ARGUMENT>
141 void load_ARGUMENT(MouseHookType *o_arg); /// <ARGUMENT>
142 void load_ARGUMENT(MayuDialogType *o_arg); /// <ARGUMENT>
143 void load_ARGUMENT(ModifierLockType *o_arg); /// <ARGUMENT_LOCK>
144 void load_ARGUMENT(ToggleType *o_arg); /// <ARGUMENT>
145 void load_ARGUMENT(ShowCommandType *o_arg); ///<ARGUMENT_SHOW_WINDOW>
146 void load_ARGUMENT(TargetWindowType *o_arg);
147 /// <ARGUMENT_TARGET_WINDOW_TYPE>
148 void load_ARGUMENT(BooleanType *o_arg); /// <bool>
149 void load_ARGUMENT(LogicalOperatorType *o_arg);/// <ARGUMENT>
150 void load_ARGUMENT(Modifier *o_arg); /// <ARGUMENT>
151 void load_ARGUMENT(const Keymap **o_arg); /// <ARGUMENT>
152 void load_ARGUMENT(const KeySeq **o_arg); /// <ARGUMENT>
153 void load_ARGUMENT(StrExprArg *o_arg); /// <ARGUMENT>
154 void load_ARGUMENT(WindowMonitorFromType *o_arg); /// <ARGUMENT>
155 KeySeq *load_KEY_SEQUENCE(
156 const tstringi &i_name = _T(""), bool i_isInParen = false,
157 Modifier::Type i_mode = Modifier::Type_KEYSEQ); /// <KEY_SEQUENCE>
158 void load_KEY_ASSIGN(); /// <KEY_ASSIGN>
159 void load_EVENT_ASSIGN(); /// <EVENT_ASSIGN>
160 void load_MODIFIER_ASSIGNMENT(); /// <MODIFIER_ASSIGN>
161 void load_LOCK_ASSIGNMENT(); /// <LOCK_ASSIGN>
162 void load_KEYSEQ_DEFINITION(); /// <KEYSEQ_DEFINITION>
165 void load(const tstringi &i_filename);
167 /// is the filename readable ?
168 bool isReadable(const tstringi &i_filename, int i_debugLevel = 1) const;
171 bool getFilename(const tstringi &i_name,
172 tstringi *o_path, int i_debugLevel = 1) const;
176 SettingLoader(SyncObject *i_soLog, tostream *i_log);
179 bool load(Setting *o_setting, const tstringi &i_filename = _T(""));
183 /// get home directory path
184 typedef std::list<tstringi> HomeDirectories;
185 extern void getHomeDirectories(HomeDirectories *o_path);
188 #endif // !_SETTING_H