133 lines
7.1 KiB
Lua
133 lines
7.1 KiB
Lua
|
-- Copyright 2006-2019 Mitchell mitchell.att.foicica.com. See License.txt.
|
||
|
-- AutoIt LPeg lexer.
|
||
|
-- Contributed by Jeff Stone.
|
||
|
|
||
|
local lexer = require('lexer')
|
||
|
local token, word_match = lexer.token, lexer.word_match
|
||
|
local P, R, S = lpeg.P, lpeg.R, lpeg.S
|
||
|
|
||
|
local lex = lexer.new('autoit')
|
||
|
|
||
|
-- Whitespace.
|
||
|
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
|
||
|
|
||
|
-- Keywords.
|
||
|
lex:add_rule('keyword', token(lexer.KEYWORD, word_match([[
|
||
|
False True And Or Not ContinueCase ContinueLoop Default Dim Global Local Const
|
||
|
Do Until Enum Exit ExitLoop For To Step Next In Func Return EndFunc If Then
|
||
|
ElseIf Else EndIf Null ReDim Select Case EndSelect Static Switch EndSwitch
|
||
|
Volatile While WEnd With EndWith
|
||
|
]], true)))
|
||
|
|
||
|
-- Functions.
|
||
|
lex:add_rule('function', token(lexer.FUNCTION, word_match([[
|
||
|
Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan
|
||
|
AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen
|
||
|
BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR
|
||
|
BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead
|
||
|
ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable
|
||
|
ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos
|
||
|
ControlGetText ControlHide ControlListView ControlMove ControlSend
|
||
|
ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate
|
||
|
DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree
|
||
|
DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate
|
||
|
DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData
|
||
|
DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType
|
||
|
DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree
|
||
|
DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp
|
||
|
FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut
|
||
|
FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush
|
||
|
FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut
|
||
|
FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove
|
||
|
FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle
|
||
|
FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd
|
||
|
FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName
|
||
|
GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox
|
||
|
GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate
|
||
|
GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup
|
||
|
GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList
|
||
|
GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu
|
||
|
GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic
|
||
|
GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab
|
||
|
GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem
|
||
|
GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead
|
||
|
GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy
|
||
|
GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData
|
||
|
GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic
|
||
|
GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos
|
||
|
GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete
|
||
|
GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators
|
||
|
GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon
|
||
|
GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet
|
||
|
HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize
|
||
|
InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection
|
||
|
IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool
|
||
|
IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj
|
||
|
IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown
|
||
|
MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number
|
||
|
ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister
|
||
|
OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch
|
||
|
ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority
|
||
|
ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random
|
||
|
RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait
|
||
|
RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait
|
||
|
Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff
|
||
|
SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose
|
||
|
StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray
|
||
|
StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit
|
||
|
StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper
|
||
|
StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp
|
||
|
StringRegExpReplace StringReplace StringReverse StringRight StringSplit
|
||
|
StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft
|
||
|
StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect
|
||
|
TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown TCPStartup TimerDiff
|
||
|
TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete
|
||
|
TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent
|
||
|
TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent
|
||
|
TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind
|
||
|
UDPCloseSocket UDPOpen UDPRecv UDPSend UDPShutdown UDPStartup VarGetType
|
||
|
WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos
|
||
|
WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess
|
||
|
WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem
|
||
|
WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle
|
||
|
WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive
|
||
|
]], true)))
|
||
|
|
||
|
-- Identifiers.
|
||
|
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
|
||
|
|
||
|
-- Comments.
|
||
|
local line_comment = ';' * lexer.nonnewline_esc^0
|
||
|
local block_comment1 = '#comments-start' * (lexer.any - '#comments-end')^0 *
|
||
|
P('#comments-end')^-1
|
||
|
local block_comment2 = '#cs' * (lexer.any - '#ce')^0 * P('#ce')^-1
|
||
|
lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment1 +
|
||
|
block_comment2))
|
||
|
|
||
|
-- Preprocessor.
|
||
|
lex:add_rule('preprocessor', token(lexer.PREPROCESSOR, '#' * word_match([[
|
||
|
include-once include pragma forceref RequireAdmin NoTrayIcon
|
||
|
OnAutoItStartRegister
|
||
|
]], true)))
|
||
|
|
||
|
-- Strings.
|
||
|
local dq_str = lexer.delimited_range('"', true, true)
|
||
|
local sq_str = lexer.delimited_range("'", true, true)
|
||
|
local inc = lexer.delimited_range('<>', true, true, true)
|
||
|
lex:add_rule('string', token(lexer.STRING, dq_str + sq_str + inc))
|
||
|
|
||
|
-- Macros.
|
||
|
lex:add_rule('macro', token('macro', '@' * (lexer.alnum + '_')^1))
|
||
|
lex:add_style('macro', lexer.STYLE_PREPROCESSOR)
|
||
|
|
||
|
-- Variables.
|
||
|
lex:add_rule('variable', token(lexer.VARIABLE, '$' * (lexer.alnum + '_')^1))
|
||
|
|
||
|
-- Numbers.
|
||
|
lex:add_rule('number', token(lexer.NUMBER, lexer.float + lexer.integer))
|
||
|
|
||
|
-- Operators.
|
||
|
lex:add_rule('operator', token(lexer.OPERATOR, S('+-^*/&<>=?:()[]')))
|
||
|
|
||
|
return lex
|