1" Vim syntax file
2" Language:         AutoHotkey script file
3" Maintainer:       SungHyun Nam <[email protected]>
4" Previous Maintainer:       Nikolai Weibull <[email protected]>
5" Latest Revision:  2015-10-29
6
7if exists("b:current_syntax")
8  finish
9endif
10
11let s:cpo_save = &cpo
12set cpo&vim
13
14syn case ignore
15
16syn keyword autohotkeyTodo
17      \ contained
18      \ TODO FIXME XXX NOTE
19
20syn cluster autohotkeyCommentGroup
21      \ contains=
22      \   autohotkeyTodo,
23      \   @Spell
24
25syn match   autohotkeyComment
26      \ display
27      \ contains=@autohotkeyCommentGroup
28      \ '`\@<!;.*$'
29
30syn region  autohotkeyComment
31      \ contains=@autohotkeyCommentGroup
32      \ matchgroup=autohotkeyCommentStart
33      \ start='/\*'
34      \ end='\*/'
35
36syn match   autohotkeyEscape
37      \ display
38      \ '`.'
39
40syn match   autohotkeyHotkey
41      \ contains=autohotkeyKey,
42      \   autohotkeyHotkeyDelimiter
43      \ display
44      \ '^.\{-}::'
45
46syn match   autohotkeyKey
47      \ contained
48      \ display
49      \ '^.\{-}'
50
51syn match   autohotkeyDelimiter
52      \ contained
53      \ display
54      \ '::'
55
56syn match   autohotkeyHotstringDefinition
57      \ contains=autohotkeyHotstring,
58      \   autohotkeyHotstringDelimiter
59      \ display
60      \ '^:\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\)*:.\{-}::'
61
62syn match   autohotkeyHotstring
63      \ contained
64      \ display
65      \ '.\{-}'
66
67syn match   autohotkeyHotstringDelimiter
68      \ contained
69      \ display
70      \ '::'
71
72syn match   autohotkeyHotstringDelimiter
73      \ contains=autohotkeyHotstringOptions
74      \ contained
75      \ display
76      \ ':\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\):'
77
78syn match   autohotkeyHotstringOptions
79      \ contained
80      \ display
81      \ '\%(B0\|C1\|K\d\+\|P\d\+\|S[IPE]\|Z\d\=\|[*?COR]\)'
82
83syn region autohotkeyString
84      \ display
85      \ oneline
86      \ matchgroup=autohotkeyStringDelimiter
87      \ start=+"+
88      \ end=+"+
89      \ contains=autohotkeyEscape
90
91syn region autohotkeyVariable
92      \ display
93      \ oneline
94      \ contains=autohotkeyBuiltinVariable
95      \ matchgroup=autohotkeyVariableDelimiter
96      \ start="%"
97      \ end="%"
98      \ keepend
99
100syn keyword autohotkeyBuiltinVariable
101      \ A_Space A_Tab
102      \ A_WorkingDir A_ScriptDir A_ScriptName A_ScriptFullPath A_LineNumber
103      \ A_LineFile A_AhkVersion A_AhkPAth A_IsCompiled A_ExitReason
104      \ A_YYYY A_MM A_DD A_MMMM A_MMM A_DDDD A_DDD A_WDay A_YWeek A_Hour A_Min
105      \ A_Sec A_MSec A_Now A_NowUTC A_TickCount
106      \ A_IsSuspended A_BatchLines A_TitleMatchMode A_TitleMatchModeSpeed
107      \ A_DetectHiddenWindows A_DetectHiddenText A_AutoTrim A_STringCaseSense
108      \ A_FormatInteger A_FormatFloat A_KeyDelay A_WinDelay A_ControlDelay
109      \ A_MouseDelay A_DefaultMouseSpeed A_IconHidden A_IconTip A_IconFile
110      \ A_IconNumber
111      \ A_TimeIdle A_TimeIdlePhysical
112      \ A_Gui A_GuiControl A_GuiWidth A_GuiHeight A_GuiX A_GuiY A_GuiEvent
113      \ A_GuiControlEvent A_EventInfo
114      \ A_ThisMenuItem A_ThisMenu A_ThisMenuItemPos A_ThisHotkey A_PriorHotkey
115      \ A_TimeSinceThisHotkey A_TimeSincePriorHotkey A_EndChar
116      \ ComSpec A_Temp A_OSType A_OSVersion A_Language A_ComputerName A_UserName
117      \ A_WinDir A_ProgramFiles ProgramFiles A_AppData A_AppDataCommon A_Desktop
118      \ A_DesktopCommon A_StartMenu A_StartMenuCommon A_Programs
119      \ A_ProgramsCommon A_Startup A_StartupCommon A_MyDocuments A_IsAdmin
120      \ A_ScreenWidth A_ScreenHeight A_IPAddress1 A_IPAddress2 A_IPAddress3
121      \ A_IPAddress4
122      \ A_Cursor A_CaretX A_CaretY Clipboard ClipboardAll ErrorLevel A_LastError
123      \ A_Index A_LoopFileName A_LoopRegName A_LoopReadLine A_LoopField
124
125syn match   autohotkeyBuiltinVariable
126      \ contained
127      \ display
128      \ '%\d\+%'
129
130syn keyword autohotkeyCommand
131      \ ClipWait EnvGet EnvSet EnvUpdate
132      \ Drive DriveGet DriveSpaceFree FileAppend FileCopy FileCopyDir
133      \ FileCreateDir FileCreateShortcut FileDelete FileGetAttrib
134      \ FileGetShortcut FileGetSize FileGetTime FileGetVersion FileInstall
135      \ FileMove FileMoveDir FileReadLine FileRead FileRecycle FileRecycleEmpty
136      \ FileRemoveDir FileSelectFolder FileSelectFile FileSetAttrib FileSetTime
137      \ IniDelete IniRead IniWrite SetWorkingDir
138      \ SplitPath
139      \ Gui GuiControl GuiControlGet IfMsgBox InputBox MsgBox Progress
140      \ SplashImage SplashTextOn SplashTextOff ToolTip TrayTip
141      \ Hotkey ListHotkeys BlockInput ControlSend ControlSendRaw GetKeyState
142      \ KeyHistory KeyWait Input Send SendRaw SendInput SendPlay SendEvent
143      \ SendMode SetKeyDelay SetNumScrollCapsLockState SetStoreCapslockMode
144      \ EnvAdd EnvDiv EnvMult EnvSub Random SetFormat Transform
145      \ AutoTrim BlockInput CoordMode Critical Edit ImageSearch
146      \ ListLines ListVars Menu OutputDebug PixelGetColor PixelSearch
147      \ SetBatchLines SetEnv SetTimer SysGet Thread Transform URLDownloadToFile
148      \ Click ControlClick MouseClick MouseClickDrag MouseGetPos MouseMove
149      \ SetDefaultMouseSpeed SetMouseDelay
150      \ Process Run RunWait RunAs Shutdown Sleep
151      \ RegDelete RegRead RegWrite
152      \ SoundBeep SoundGet SoundGetWaveVolume SoundPlay SoundSet
153      \ SoundSetWaveVolume
154      \ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos
155      \ StringLeft StringRight StringLower StringUpper StringMid StringReplace
156      \ StringSplit StringTrimLeft StringTrimRight
157      \ Control ControlClick ControlFocus ControlGet ControlGetFocus
158      \ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw
159      \ ControlSetText Menu PostMessage SendMessage SetControlDelay
160      \ WinMenuSelectItem GroupActivate GroupAdd GroupClose GroupDeactivate
161      \ DetectHiddenText DetectHiddenWindows SetTitleMatchMode SetWinDelay
162      \ StatusBarGetText StatusBarWait WinActivate WinActivateBottom WinClose
163      \ WinGet WinGetActiveStats WinGetActiveTitle WinGetClass WinGetPos
164      \ WinGetText WinGetTitle WinHide WinKill WinMaximize WinMinimize
165      \ WinMinimizeAll WinMinimizeAllUndo WinMove WinRestore WinSet
166      \ WinSetTitle WinShow WinWait WinWaitActive WinWaitNotActive WinWaitClose
167
168syn keyword autohotkeyFunction
169      \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr
170      \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
171      \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan
172      \ FileExist GetKeyState
173
174syn keyword autohotkeyStatement
175      \ Break Continue Exit ExitApp Gosub Goto OnExit Pause Return
176      \ Suspend Reload
177
178syn keyword autohotkeyRepeat
179      \ Loop
180
181syn keyword autohotkeyConditional
182      \ IfExist IfNotExist If IfEqual IfLess IfGreater Else
183      \ IfWinExist IfWinNotExist
184
185syn match   autohotkeyPreProcStart
186      \ nextgroup=
187      \   autohotkeyInclude,
188      \   autohotkeyPreProc
189      \ skipwhite
190      \ display
191      \ '^\s*\zs#'
192
193syn keyword autohotkeyInclude
194      \ contained
195      \ Include
196      \ IncludeAgain
197
198syn keyword autohotkeyPreProc
199      \ contained
200      \ HotkeyInterval HotKeyModifierTimeout
201      \ Hotstring
202      \ IfWinActive IfWinNotActive IfWinExist IfWinNotExist
203      \ MaxHotkeysPerInterval MaxThreads MaxThreadsBuffer MaxThreadsPerHotkey
204      \ UseHook InstallKeybdHook InstallMouseHook
205      \ KeyHistory
206      \ NoTrayIcon SingleInstance
207      \ WinActivateForce
208      \ AllowSameLineComments
209      \ ClipboardTimeout
210      \ CommentFlag
211      \ ErrorStdOut
212      \ EscapeChar
213      \ MaxMem
214      \ NoEnv
215      \ Persistent
216
217syn keyword autohotkeyMatchClass
218      \ ahk_group ahk_class ahk_id ahk_pid
219
220syn match   autohotkeyNumbers
221      \ display
222      \ transparent
223      \ contains=
224      \   autohotkeyInteger,
225      \   autohotkeyFloat
226      \ '\<\d\|\.\d'
227
228syn match   autohotkeyInteger
229      \ contained
230      \ display
231      \ '\d\+\>'
232
233syn match   autohotkeyInteger
234      \ contained
235      \ display
236      \ '0x\x\+\>'
237
238syn match   autohotkeyFloat
239      \ contained
240      \ display
241      \ '\d\+\.\d*\|\.\d\+\>'
242
243syn keyword autohotkeyType
244      \ local
245      \ global
246
247syn keyword autohotkeyBoolean
248      \ true
249      \ false
250
251" TODO: Shouldn't we look for g:, b:,  variables before defaulting to
252" something?
253if exists("g:autohotkey_syntax_sync_minlines")
254  let b:autohotkey_syntax_sync_minlines = g:autohotkey_syntax_sync_minlines
255else
256  let b:autohotkey_syntax_sync_minlines = 50
257endif
258exec "syn sync ccomment autohotkeyComment minlines=" . b:autohotkey_syntax_sync_minlines
259
260hi def link autohotkeyTodo                Todo
261hi def link autohotkeyComment             Comment
262hi def link autohotkeyCommentStart        autohotkeyComment
263hi def link autohotkeyEscape              Special
264hi def link autohotkeyHotkey              Type
265hi def link autohotkeyKey                 Type
266hi def link autohotkeyDelimiter           Delimiter
267hi def link autohotkeyHotstringDefinition Type
268hi def link autohotkeyHotstring           Type
269hi def link autohotkeyHotstringDelimiter  autohotkeyDelimiter
270hi def link autohotkeyHotstringOptions    Special
271hi def link autohotkeyString              String
272hi def link autohotkeyStringDelimiter     autohotkeyString
273hi def link autohotkeyVariable            Identifier
274hi def link autohotkeyVariableDelimiter   autohotkeyVariable
275hi def link autohotkeyBuiltinVariable     Macro
276hi def link autohotkeyCommand             Keyword
277hi def link autohotkeyFunction            Function
278hi def link autohotkeyStatement           autohotkeyCommand
279hi def link autohotkeyRepeat              Repeat
280hi def link autohotkeyConditional         Conditional
281hi def link autohotkeyPreProcStart        PreProc
282hi def link autohotkeyInclude             Include
283hi def link autohotkeyPreProc             PreProc
284hi def link autohotkeyMatchClass          Typedef
285hi def link autohotkeyNumber              Number
286hi def link autohotkeyInteger             autohotkeyNumber
287hi def link autohotkeyFloat               autohotkeyNumber
288hi def link autohotkeyType                Type
289hi def link autohotkeyBoolean             Boolean
290
291let b:current_syntax = "autohotkey"
292
293let &cpo = s:cpo_save
294unlet s:cpo_save
295