OSDN Git Service

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