1 ###############################################################################
5 ###############################################################################
11 # * <...> is a non-terminal symbol
12 # * "..." is a terminal symbol
13 # * /.../ is a terminal symbol (regular expression)
21 # * the default of <...MODIFIED_KEY_NAME>'s modifier-settings is:
22 # 1. "IL-", "NL-", "CL-", "SL-", "KL-",
23 # "MAX-", "MIN-", "MMAX-", "MMIN-",
25 # /L[0-9]/, "U-" and "D-"
26 # are specified with "*"
27 # 2. all other modifiers are specified with "~"
28 # 3. they can be changed by
29 # "key" <ASSIGN_MODIFIER> "=" <ASSIGN_MODIFIER>
36 <MAYU_FILE> : ( <LINE> <COMMENT>? <CRLF> )*
40 | <KEYBOARD_DEFINITION>
45 | <MODIFIER_ASSIGNMENT>
46 # each <LINE> can be divided into some lines by \
55 /[-+]?[0-9]+/ # decimal
56 | /[-+]?0[0-9]+/ # octal
57 | /[-+]?0x[0-9a-f]+/ # hexadecimal
64 /([/?_a-z]|\MBCS|\EC)([-+/?_a-z0-9]|\MBCS|\EC)*/
65 | /"([^"]|\MBCS|\EC)*"/
66 | /'([^']|\MBCS|\EC)*'/
67 # \MBCS : Multi Byte Character (such as Shift_JIS)
68 # \EC : Escaped Characters
73 # | "\r" # carriage return
74 # | "\t" # horizontal tab
76 # | /\\[0-7]+/ # character as octal
77 # | /\\x[0-9a-f]+/ # character as hexadecimal
81 | \m@\REGEXP@ # @ can be any character
84 # | "*" # Match 0 or more times
85 # | "+" # Match 1 or more times
86 # | "?" # Match 1 or 0 times
87 # | "." # Match any character
88 # | "^" # Match the beginning of the string
89 # | "$" # Match the end of the string
90 # | "\b" # Match a word boundary
91 # | "\B" # Match a non word boundary
92 # | "\w" # Match a word character (alphanumeric, "_")
93 # | "\W" # Match a non word character
94 # | "\s" # Match a whitespace character
95 # | "\S" # Match a non-whitespace character
96 # | "\d" # Match a digit character
97 # | "\D" # Match a non-digit character
98 # | "(" ")" # Grouping
99 # | "[" "]" # Character class
105 <COND_SYMBOL> : <DEFINE> | <IF> | <ELSE> | <ELSEIF> | <ENDIF>
106 <DEFINE> : "define" <SYMBOL>
107 <IF> : ( "if" | "and" ) <IF_BODY>
108 <IF_BODY> : "(" "!"? <SYMBOL> ")" ( <LINE> )?
109 <ELSE> : "else" ( <LINE> )?
110 <ELSEIF> : ( "elseif" | "elsif" | "elif" ) <IF_BODY>
118 <INCLUDE> : "include" <MAYU_FILE_NAME>
119 <MAYU_FILE_NAME> : <string>
122 # KEYBOARD DEFINITION
125 <KEYBOARD_DEFINITION>
127 | "def" <DEFINE_MODIFIER>
128 | "def" <DEFINE_LOCK>
129 | "def" <DEFINE_SYNC_KEY>
130 | "def" <DEFINE_ALIAS>
131 | "def" <DEFINE_SUBSTITUTE>
132 | "def" <DEFINE_OPTION>
134 <DEFINE_KEY> : "key" <KEY_NAMES> "=" <SCAN_CODES>
137 : "(" <KEY_NAME>+ ")"
139 <KEY_NAME> : <string>
140 <SCAN_CODES> : <SCAN_CODE> <SCAN_CODE>? <SCAN_CODE>? <SCAN_CODE>?
141 <SCAN_CODE> : <SCAN_CODE_EXTENTION>* <number>
142 <SCAN_CODE_EXTENTION> : "E0-" | "E1-"
144 <DEFINE_MODIFIER> : "mod" <BASIC_MODIFIER_NAME> "=" <KEY_NAME>*
145 <BASIC_MODIFIER_NAME>
147 | "alt" | "meta" | "menu"
151 <BASIC_LOCK_NAME> : "num" | "caps" | "scroll"
152 <BASIC_MODIFIER> : "S-" | "A-" | "M-" | "C-" | "W-"
153 | "*" # we don't care the next modifier
154 | "~" # the next modifier must be released
156 <DEFINE_SYNC_KEY> : "sync" "=" <SCAN_CODES>
158 <DEFINE_ALIAS> : "alias" <ALIAS_NAME> "=" <KEY_NAME>
159 <ALIAS_NAME> : <string>
165 : "subst" <ASSIGN_MODIFIED_KEY_NAME>+ "=" <SUBST_KEY_SEQUENCE>
168 : "option" "KL-" "=" <bool>
169 | "option" "delay-of" "!!!" "=" <number>
176 : "keymap" <KEYMAP_NAME> <KEYMAP_PARENT>? <KEYSEQ_DEFAULT>?
177 | "keymap2" <KEYMAP_NAME> <KEYMAP_PARENT>? <KEYSEQ_DEFAULT>?
178 | "window" <KEYMAP_NAME> <WINDOW>? <KEYMAP_PARENT>? \
180 <KEYMAP_NAME> : <string>
181 <KEYMAP_PARENT> : ":" <KEYMAP_NAME>
182 <KEYSEQ_DEFAULT> : "=" <KEY_SEQUENCE>
184 : <WINDOW_CLASS_NAME>
185 | "(" <WINDOW_CLASS_NAME> "&&" <WINDOW_TITLE_NAME> ")"
186 | "(" <WINDOW_CLASS_NAME> "||" <WINDOW_TITLE_NAME> ")"
187 <WINDOW_CLASS_NAME> : <regexp>
188 <WINDOW_TITLE_NAME> : <regexp>
191 # KEY TO KEY SEQUENCE ASSIGNMENT
195 : "key" <ASSIGN_MODIFIED_KEY_NAME>+ "=" <KEY_SEQUENCE>
196 | "key" <ASSIGN_MODIFIER>* "=" <KEYSEQ_MODIFIER>*
197 <ASSIGN_MODIFIED_KEY_NAME> : <ASSIGN_MODIFIER>* <ALIASED_KEY_NAME>
200 | "R-" # auto repeated key
202 | "IC-" | "I-" # if IME on and compositioning
203 | "NL-" # if Num Lock on
204 | "CL-" # if Caps Lock on
205 | "SL-" # if Scroll Lock on
206 | "KL-" # if Kana Lock on
207 | "MAX-" # if Window maximized
208 | "MIN-" # if Window minimized
209 | "MMAX-" # if MDI child Window maximized
210 | "MMIN-" # if MDI child Window minimized
211 | "T-" # if finger on touchpad
212 | "TS-" # same as "T-" except for sticky up to release all keys
213 | /M[0-9]/ # user defined modifier
214 | /L[0-9]/ # user defined lock
217 # EVENT TO KEY SEQUENCE ASSIGNMENT
221 : "event" <EVENT_NAME> "=" <KEY_SEQUENCE>
228 # MODIFIER ASSIGNMENT
231 <MODIFIER_ASSIGNMENT>
232 : "mod" ( <ASSIGN_MODE> <MODIFIER_NAME> )* \
233 <MODIFIER_NAME> <ASSIGN_OP> \
234 ( <ASSIGN_MODE>? <ALIASED_KEY_NAME> )+
235 <MODIFIER_NAME> : <BASIC_MODIFIER_NAME> | /mod[0-9]/
237 <ASSIGN_OP> : "=" | "-=" | "+="
239 : "!" # true modifier (doesn't generate scan code)
240 | "!!" # one shot modifier
241 | "!!!" # one shot repeatable modifier
244 # KEY SEQUENCE DEFINITION
248 : "keyseq" "$" <KEYSEQ_NAME> "=" <KEY_SEQUENCE>
249 | "keyseq" "$" <SUBST_KEYSEQ_NAME> "=" <SUBST_KEY_SEQUENCE>
251 <SUBST_KEY_SEQUENCE> : <SUBST_ACTION>+
253 : <ASSIGN_MODIFIED_KEY_NAME>
254 | "$" ( <SUBST_KEYSEQ_NAME> | <KEYSEQ_NAME> )
255 | <ASSIGN_MODIFIER>* "&" <FUNCTION_NAME> <ARGUMENTS>?
256 | "(" <SUBST_KEY_SEQUENCE> ")"
258 <KEY_SEQUENCE> : <ACTION>+
260 : <KEYSEQ_MODIFIED_KEY_NAME>
262 | <KEYSEQ_MODIFIER>* "&" <FUNCTION_NAME> <ARGUMENTS>?
263 | "(" <KEY_SEQUENCE> ")"
264 <ARGUMENTS> : "(" ( <ARGUMENT> ( "," <ARGUMENT> )* )? ")"
265 <KEYSEQ_MODIFIED_KEY_NAME> : <KEYSEQ_MODIFIER>* <ALIASED_KEY_NAME>
266 <KEYSEQ_MODIFIED_KEY_NAME> : <KEYSEQ_MODIFIER>* <ALIASED_KEY_NAME>
271 <KEYSEQ_NAME> : <string>
272 <SUBST_KEYSEQ_NAME> : <string>
273 <FUNCTION_NAME> : <string>
276 | "$" <KEYSEQ_NAME> | "(" <KEY_SEQUENCE> ")"
281 | <ARGUMENT_SHOW_WINDOW>
283 | <ARGUMENT_TARGET_WINDOW_TYPE>
287 <ARGUMENT_LOCK> : /lock\d/ # &Toggle()
289 <ARGUMENT_VK> # &VK()
290 : <VK_MODIFIER>* <VK_NAME>
291 <VK_MODIFIER> : "E-" | "U-" | "D-"
294 <ARGUMENT_SHOW_WINDOW> # &ShellExecute()
295 : "HIDE" | "MAXIMIZE" | "MINIMIZE" | "RESTORE" | "SHOW"
296 | "SHOWDEFAULT" | "SHOWMAXIMIZED" | "SHOWMINIMIZED"
297 | "SHOWMINNOACTIVE" | "SHOWNA" | "SHOWNOACTIVATE"
300 <ARGUMENT_WINDOW> # &PostMessage()
302 | "toOverlappedWindow"
307 <ARGUMENT_TARGET_WINDOW_TYPE> : "overlapped" | "mdi"
311 # eval: (progn (font-lock-mode) (font-lock-add-keywords nil '(("#.*$" . font-lock-comment-face) ("\\\\$" (0 font-lock-warning-face)) ("/\\(\\[[^]\n]*\\]\\|[^/\n]\\)*/" (0 font-lock-string-face)) ("'[^'\n]*'" (0 font-lock-string-face)) ("\"[^\"\n]*\"" (0 font-lock-string-face)) ("<\\([A-Za-z_][A-Za-z_0-9]*\\)>" (1 font-lock-constant-face)) ("[*?+]" (0 font-lock-keyword-face)) )) (font-lock-fontify-buffer))