| """ |
| pygments.lexers.automation |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Lexers for automation scripting languages. |
| |
| :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| |
| from pygments.lexer import RegexLexer, include, bygroups, combined |
| from pygments.token import Text, Comment, Operator, Name, String, \ |
| Number, Punctuation, Generic |
| |
| __all__ = ['AutohotkeyLexer', 'AutoItLexer'] |
| |
| |
| class AutohotkeyLexer(RegexLexer): |
| """ |
| For autohotkey source code. |
| |
| .. versionadded:: 1.4 |
| """ |
| name = 'autohotkey' |
| url = 'http://www.autohotkey.com/' |
| aliases = ['autohotkey', 'ahk'] |
| filenames = ['*.ahk', '*.ahkl'] |
| mimetypes = ['text/x-autohotkey'] |
| |
| tokens = { |
| 'root': [ |
| (r'^(\s*)(/\*)', bygroups(Text, Comment.Multiline), 'incomment'), |
| (r'^(\s*)(\()', bygroups(Text, Generic), 'incontinuation'), |
| (r'\s+;.*?$', Comment.Single), |
| (r'^;.*?$', Comment.Single), |
| (r'[]{}(),;[]', Punctuation), |
| (r'(in|is|and|or|not)\b', Operator.Word), |
| (r'\%[a-zA-Z_#@$][\w#@$]*\%', Name.Variable), |
| (r'!=|==|:=|\.=|<<|>>|[-~+/*%=<>&^|?:!.]', Operator), |
| include('commands'), |
| include('labels'), |
| include('builtInFunctions'), |
| include('builtInVariables'), |
| (r'"', String, combined('stringescape', 'dqs')), |
| include('numbers'), |
| (r'[a-zA-Z_#@$][\w#@$]*', Name), |
| (r'\\|\'', Text), |
| (r'\`([,%`abfnrtv\-+;])', String.Escape), |
| include('garbage'), |
| ], |
| 'incomment': [ |
| (r'^\s*\*/', Comment.Multiline, '#pop'), |
| (r'[^*]+', Comment.Multiline), |
| (r'\*', Comment.Multiline) |
| ], |
| 'incontinuation': [ |
| (r'^\s*\)', Generic, '#pop'), |
| (r'[^)]', Generic), |
| (r'[)]', Generic), |
| ], |
| 'commands': [ |
| (r'(?i)^(\s*)(global|local|static|' |
| r'#AllowSameLineComments|#ClipboardTimeout|#CommentFlag|' |
| r'#ErrorStdOut|#EscapeChar|#HotkeyInterval|#HotkeyModifierTimeout|' |
| r'#Hotstring|#IfWinActive|#IfWinExist|#IfWinNotActive|' |
| r'#IfWinNotExist|#IncludeAgain|#Include|#InstallKeybdHook|' |
| r'#InstallMouseHook|#KeyHistory|#LTrim|#MaxHotkeysPerInterval|' |
| r'#MaxMem|#MaxThreads|#MaxThreadsBuffer|#MaxThreadsPerHotkey|' |
| r'#NoEnv|#NoTrayIcon|#Persistent|#SingleInstance|#UseHook|' |
| r'#WinActivateForce|AutoTrim|BlockInput|Break|Click|ClipWait|' |
| r'Continue|Control|ControlClick|ControlFocus|ControlGetFocus|' |
| r'ControlGetPos|ControlGetText|ControlGet|ControlMove|ControlSend|' |
| r'ControlSendRaw|ControlSetText|CoordMode|Critical|' |
| r'DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|' |
| r'DriveSpaceFree|Edit|Else|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|' |
| r'EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|' |
| r'FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|' |
| r'FileDelete|FileGetAttrib|FileGetShortcut|FileGetSize|' |
| r'FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|' |
| r'FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|' |
| r'FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|' |
| r'FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|' |
| r'GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|' |
| r'GuiControlGet|Hotkey|IfEqual|IfExist|IfGreaterOrEqual|IfGreater|' |
| r'IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|' |
| r'IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|' |
| r'IfWinNotExist|If |ImageSearch|IniDelete|IniRead|IniWrite|' |
| r'InputBox|Input|KeyHistory|KeyWait|ListHotkeys|ListLines|' |
| r'ListVars|Loop|Menu|MouseClickDrag|MouseClick|MouseGetPos|' |
| r'MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|' |
| r'PixelSearch|PostMessage|Process|Progress|Random|RegDelete|' |
| r'RegRead|RegWrite|Reload|Repeat|Return|RunAs|RunWait|Run|' |
| r'SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|Send|' |
| r'SetBatchLines|SetCapslockState|SetControlDelay|' |
| r'SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|' |
| r'SetMouseDelay|SetNumlockState|SetScrollLockState|' |
| r'SetStoreCapslockMode|SetTimer|SetTitleMatchMode|' |
| r'SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|' |
| r'SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|' |
| r'SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|' |
| r'SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|' |
| r'StringGetPos|StringLeft|StringLen|StringLower|StringMid|' |
| r'StringReplace|StringRight|StringSplit|StringTrimLeft|' |
| r'StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|' |
| r'Transform|TrayTip|URLDownloadToFile|While|WinActivate|' |
| r'WinActivateBottom|WinClose|WinGetActiveStats|WinGetActiveTitle|' |
| r'WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinGet|WinHide|' |
| r'WinKill|WinMaximize|WinMenuSelectItem|WinMinimizeAllUndo|' |
| r'WinMinimizeAll|WinMinimize|WinMove|WinRestore|WinSetTitle|' |
| r'WinSet|WinShow|WinWaitActive|WinWaitClose|WinWaitNotActive|' |
| r'WinWait)\b', bygroups(Text, Name.Builtin)), |
| ], |
| 'builtInFunctions': [ |
| (r'(?i)(Abs|ACos|Asc|ASin|ATan|Ceil|Chr|Cos|DllCall|Exp|FileExist|' |
| r'Floor|GetKeyState|IL_Add|IL_Create|IL_Destroy|InStr|IsFunc|' |
| r'IsLabel|Ln|Log|LV_Add|LV_Delete|LV_DeleteCol|LV_GetCount|' |
| r'LV_GetNext|LV_GetText|LV_Insert|LV_InsertCol|LV_Modify|' |
| r'LV_ModifyCol|LV_SetImageList|Mod|NumGet|NumPut|OnMessage|' |
| r'RegExMatch|RegExReplace|RegisterCallback|Round|SB_SetIcon|' |
| r'SB_SetParts|SB_SetText|Sin|Sqrt|StrLen|SubStr|Tan|TV_Add|' |
| r'TV_Delete|TV_GetChild|TV_GetCount|TV_GetNext|TV_Get|' |
| r'TV_GetParent|TV_GetPrev|TV_GetSelection|TV_GetText|TV_Modify|' |
| r'VarSetCapacity|WinActive|WinExist|Object|ComObjActive|' |
| r'ComObjArray|ComObjEnwrap|ComObjUnwrap|ComObjParameter|' |
| r'ComObjType|ComObjConnect|ComObjCreate|ComObjGet|ComObjError|' |
| r'ComObjValue|Insert|MinIndex|MaxIndex|Remove|SetCapacity|' |
| r'GetCapacity|GetAddress|_NewEnum|FileOpen|Read|Write|ReadLine|' |
| r'WriteLine|ReadNumType|WriteNumType|RawRead|RawWrite|Seek|Tell|' |
| r'Close|Next|IsObject|StrPut|StrGet|Trim|LTrim|RTrim)\b', |
| Name.Function), |
| ], |
| 'builtInVariables': [ |
| (r'(?i)(A_AhkPath|A_AhkVersion|A_AppData|A_AppDataCommon|' |
| r'A_AutoTrim|A_BatchLines|A_CaretX|A_CaretY|A_ComputerName|' |
| r'A_ControlDelay|A_Cursor|A_DDDD|A_DDD|A_DD|A_DefaultMouseSpeed|' |
| r'A_Desktop|A_DesktopCommon|A_DetectHiddenText|' |
| r'A_DetectHiddenWindows|A_EndChar|A_EventInfo|A_ExitReason|' |
| r'A_FormatFloat|A_FormatInteger|A_Gui|A_GuiEvent|A_GuiControl|' |
| r'A_GuiControlEvent|A_GuiHeight|A_GuiWidth|A_GuiX|A_GuiY|A_Hour|' |
| r'A_IconFile|A_IconHidden|A_IconNumber|A_IconTip|A_Index|' |
| r'A_IPAddress1|A_IPAddress2|A_IPAddress3|A_IPAddress4|A_ISAdmin|' |
| r'A_IsCompiled|A_IsCritical|A_IsPaused|A_IsSuspended|A_KeyDelay|' |
| r'A_Language|A_LastError|A_LineFile|A_LineNumber|A_LoopField|' |
| r'A_LoopFileAttrib|A_LoopFileDir|A_LoopFileExt|A_LoopFileFullPath|' |
| r'A_LoopFileLongPath|A_LoopFileName|A_LoopFileShortName|' |
| r'A_LoopFileShortPath|A_LoopFileSize|A_LoopFileSizeKB|' |
| r'A_LoopFileSizeMB|A_LoopFileTimeAccessed|A_LoopFileTimeCreated|' |
| r'A_LoopFileTimeModified|A_LoopReadLine|A_LoopRegKey|' |
| r'A_LoopRegName|A_LoopRegSubkey|A_LoopRegTimeModified|' |
| r'A_LoopRegType|A_MDAY|A_Min|A_MM|A_MMM|A_MMMM|A_Mon|A_MouseDelay|' |
| r'A_MSec|A_MyDocuments|A_Now|A_NowUTC|A_NumBatchLines|A_OSType|' |
| r'A_OSVersion|A_PriorHotkey|A_ProgramFiles|A_Programs|' |
| r'A_ProgramsCommon|A_ScreenHeight|A_ScreenWidth|A_ScriptDir|' |
| r'A_ScriptFullPath|A_ScriptName|A_Sec|A_Space|A_StartMenu|' |
| r'A_StartMenuCommon|A_Startup|A_StartupCommon|A_StringCaseSense|' |
| r'A_Tab|A_Temp|A_ThisFunc|A_ThisHotkey|A_ThisLabel|A_ThisMenu|' |
| r'A_ThisMenuItem|A_ThisMenuItemPos|A_TickCount|A_TimeIdle|' |
| r'A_TimeIdlePhysical|A_TimeSincePriorHotkey|A_TimeSinceThisHotkey|' |
| r'A_TitleMatchMode|A_TitleMatchModeSpeed|A_UserName|A_WDay|' |
| r'A_WinDelay|A_WinDir|A_WorkingDir|A_YDay|A_YEAR|A_YWeek|A_YYYY|' |
| r'Clipboard|ClipboardAll|ComSpec|ErrorLevel|ProgramFiles|True|' |
| r'False|A_IsUnicode|A_FileEncoding|A_OSVersion|A_PtrSize)\b', |
| Name.Variable), |
| ], |
| 'labels': [ |
| # hotkeys and labels |
| # technically, hotkey names are limited to named keys and buttons |
| (r'(^\s*)([^:\s("]+?:{1,2})', bygroups(Text, Name.Label)), |
| (r'(^\s*)(::[^:\s]+?::)', bygroups(Text, Name.Label)), |
| ], |
| 'numbers': [ |
| (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float), |
| (r'\d+[eE][+-]?[0-9]+', Number.Float), |
| (r'0\d+', Number.Oct), |
| (r'0[xX][a-fA-F0-9]+', Number.Hex), |
| (r'\d+L', Number.Integer.Long), |
| (r'\d+', Number.Integer) |
| ], |
| 'stringescape': [ |
| (r'\"\"|\`([,%`abfnrtv])', String.Escape), |
| ], |
| 'strings': [ |
| (r'[^"\n]+', String), |
| ], |
| 'dqs': [ |
| (r'"', String, '#pop'), |
| include('strings') |
| ], |
| 'garbage': [ |
| (r'[^\S\n]', Text), |
| # (r'.', Text), # no cheating |
| ], |
| } |
| |
| |
| class AutoItLexer(RegexLexer): |
| """ |
| For AutoIt files. |
| |
| AutoIt is a freeware BASIC-like scripting language |
| designed for automating the Windows GUI and general scripting |
| |
| .. versionadded:: 1.6 |
| """ |
| name = 'AutoIt' |
| url = 'http://www.autoitscript.com/site/autoit/' |
| aliases = ['autoit'] |
| filenames = ['*.au3'] |
| mimetypes = ['text/x-autoit'] |
| |
| # Keywords, functions, macros from au3.keywords.properties |
| # which can be found in AutoIt installed directory, e.g. |
| # c:\Program Files (x86)\AutoIt3\SciTE\au3.keywords.properties |
| |
| keywords = """\ |
| #include-once #include #endregion #forcedef #forceref #region |
| and byref case continueloop dim do else elseif endfunc endif |
| endselect exit exitloop for func global |
| if local next not or return select step |
| then to until wend while exit""".split() |
| |
| functions = """\ |
| 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 filerecycle filerecycleempty |
| filesavedialog fileselectfolder filesetattrib filesetpos filesettime |
| filewrite filewriteline floor ftpsetproxy 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 ishwnd isint iskeyword |
| isnumber isobj isptr isstring log memgetstats mod mouseclick mouseclickdrag |
| mousedown mousegetcursor mousegetpos mousemove mouseup mousewheel msgbox |
| number objcreate objcreateinterface objevent objevent objget objname |
| onautoitexitregister onautoitexitunregister opt ping pixelchecksum |
| pixelgetcolor pixelsearch pluginclose pluginopen 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 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""".split() |
| |
| macros = """\ |
| @appdatacommondir @appdatadir @autoitexe @autoitpid @autoitversion |
| @autoitx64 @com_eventobj @commonfilesdir @compiled @computername @comspec |
| @cpuarch @cr @crlf @desktopcommondir @desktopdepth @desktopdir |
| @desktopheight @desktoprefresh @desktopwidth @documentscommondir @error |
| @exitcode @exitmethod @extended @favoritescommondir @favoritesdir |
| @gui_ctrlhandle @gui_ctrlid @gui_dragfile @gui_dragid @gui_dropid |
| @gui_winhandle @homedrive @homepath @homeshare @hotkeypressed @hour |
| @ipaddress1 @ipaddress2 @ipaddress3 @ipaddress4 @kblayout @lf |
| @logondnsdomain @logondomain @logonserver @mday @min @mon @msec @muilang |
| @mydocumentsdir @numparams @osarch @osbuild @oslang @osservicepack @ostype |
| @osversion @programfilesdir @programscommondir @programsdir @scriptdir |
| @scriptfullpath @scriptlinenumber @scriptname @sec @startmenucommondir |
| @startmenudir @startupcommondir @startupdir @sw_disable @sw_enable @sw_hide |
| @sw_lock @sw_maximize @sw_minimize @sw_restore @sw_show @sw_showdefault |
| @sw_showmaximized @sw_showminimized @sw_showminnoactive @sw_showna |
| @sw_shownoactivate @sw_shownormal @sw_unlock @systemdir @tab @tempdir |
| @tray_id @trayiconflashing @trayiconvisible @username @userprofiledir @wday |
| @windowsdir @workingdir @yday @year""".split() |
| |
| tokens = { |
| 'root': [ |
| (r';.*\n', Comment.Single), |
| (r'(#comments-start|#cs)(.|\n)*?(#comments-end|#ce)', |
| Comment.Multiline), |
| (r'[\[\]{}(),;]', Punctuation), |
| (r'(and|or|not)\b', Operator.Word), |
| (r'[$|@][a-zA-Z_]\w*', Name.Variable), |
| (r'!=|==|:=|\.=|<<|>>|[-~+/*%=<>&^|?:!.]', Operator), |
| include('commands'), |
| include('labels'), |
| include('builtInFunctions'), |
| include('builtInMarcros'), |
| (r'"', String, combined('stringescape', 'dqs')), |
| (r"'", String, 'sqs'), |
| include('numbers'), |
| (r'[a-zA-Z_#@$][\w#@$]*', Name), |
| (r'\\|\'', Text), |
| (r'\`([,%`abfnrtv\-+;])', String.Escape), |
| (r'_\n', Text), # Line continuation |
| include('garbage'), |
| ], |
| 'commands': [ |
| (r'(?i)(\s*)(%s)\b' % '|'.join(keywords), |
| bygroups(Text, Name.Builtin)), |
| ], |
| 'builtInFunctions': [ |
| (r'(?i)(%s)\b' % '|'.join(functions), |
| Name.Function), |
| ], |
| 'builtInMarcros': [ |
| (r'(?i)(%s)\b' % '|'.join(macros), |
| Name.Variable.Global), |
| ], |
| 'labels': [ |
| # sendkeys |
| (r'(^\s*)(\{\S+?\})', bygroups(Text, Name.Label)), |
| ], |
| 'numbers': [ |
| (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float), |
| (r'\d+[eE][+-]?[0-9]+', Number.Float), |
| (r'0\d+', Number.Oct), |
| (r'0[xX][a-fA-F0-9]+', Number.Hex), |
| (r'\d+L', Number.Integer.Long), |
| (r'\d+', Number.Integer) |
| ], |
| 'stringescape': [ |
| (r'\"\"|\`([,%`abfnrtv])', String.Escape), |
| ], |
| 'strings': [ |
| (r'[^"\n]+', String), |
| ], |
| 'dqs': [ |
| (r'"', String, '#pop'), |
| include('strings') |
| ], |
| 'sqs': [ |
| (r'\'\'|\`([,%`abfnrtv])', String.Escape), |
| (r"'", String, '#pop'), |
| (r"[^'\n]+", String) |
| ], |
| 'garbage': [ |
| (r'[^\S\n]', Text), |
| ], |
| } |