BugFix Posted December 31, 2011 Share Posted December 31, 2011 (edited) At the moment you can debug with DebugToMsgBox/DebugToConsole only simple variables like $variable but not some like $a[ubound($a) -1][$j] or other complex array variables.I've made a LUA script that detects simple variables and complex array variables up to 4D-arrays. AutoIt allows dirty syntax with any desired spaces between closing and following opening squared brackets. This cases will respected.To use this script:- open your file ..AutoIt3SciTELUAAutoItTools.lua in editor- copy the function GetVarFromCursor() above the function DebugMsgBoxAdd()- make following changes in DebugMsgBoxAdd() and DebugConsoleWriteAdd()function AutoItTools:DebugMsgBoxAdd() --~ local word = self:GetWord2() local word = GetVarFromCursor()function AutoItTools:DebugConsoleWriteAdd() --~ local word = self:GetWord2() local word = GetVarFromCursor()Here the function GetVarFromCursor():expandcollapse popup-------------------------------------------------------------------------------- -- GetVarFromCursor() -- -- Get variable from cursor position (somewhere inside variable, left or right touching). -- Detection of variables also if they build as an array construct (up to 4 dimensions). -- i.e. (pipe as cursor position): "$a [ Ubound($a) -1 ] [ |$i ] [ $j ]" gets the whole exception: "$a [ Ubound($a) -1 ] [ $i ] [ $j ]" -- The bad syntax in AutoIt ( any desired spaces between closing and following opening squared bracket ) will also detect. -- Variables with following point and method/property are ignored because its not to guess if method/property returns a value. -- by BugFix -------------------------------------------------------------------------------- function GetVarFromCursor() local iCaret = editor.CurrentPos local iTmp = iCaret local sSel = string.char(editor.CharAt[iCaret]) if (string.byte(sSel) == 13) or (sSel == ' ') or (sSel == ',') then iCaret = iCaret -1 end local sLeft = string.char(editor.CharAt[iTmp-1]) local iLine = editor:LineFromPosition(iCaret) local iLine1stPos = editor:PositionFromLine(iLine) local iDiffPos = iCaret - iLine1stPos +1 local sLine = editor:GetLine(iLine) local tPatternArray = {'%$[%w_]+%s*%b[]%s*%b[]%s*%b[]%s*%b[]','%$[%w_]+%s*%b[]%s*%b[]%s*%b[]','%$[%w_]+%s*%b[]%s*%b[]','%$[%w_]+%s*%b[]'} local sPatternNormal = '%$[%w_]+%s*[^[]' function SearchVar(_sLine, _sPattern, _iCursor) local tVars = {} local iMatchStart iMatchEnd = 0 while true do iMatchStart, iMatchEnd = string.find(_sLine, _sPattern, iMatchEnd +1) if iMatchStart == nil then break end table.insert(tVars, {iMatchStart, iMatchEnd}) end if table.getn(tVars) > 0 then for i = 1, table.getn(tVars) do if ( _iCursor >= tVars[i][1] ) and ( _iCursor <= tVars[i][2] ) then return string.sub(_sLine, tVars[i][1], tVars[i][2]) end end end return nil end local sVarUnderCursor for i = 1, 4 do sVarUnderCursor = SearchVar(sLine, tPatternArray[i], iDiffPos) if sVarUnderCursor ~= nil then return sVarUnderCursor end end if sVarUnderCursor == nil then local fLeftVar = false fRightVar = false if string.find(sLeft, '[%w_$]') ~= nil then fLeftVar = true else if sSel == '$' then fRightVar = true end end if not fLeftVar and not fRightVar then return '' end sVarUnderCursor = SearchVar(sLine, sPatternNormal, iDiffPos) if sVarUnderCursor == nil then return '' end end if string.find(sVarUnderCursor, '%.$') then return '' end sVarUnderCursor = string.sub(sVarUnderCursor, string.find(sVarUnderCursor, '%$[%w_]+')) return sVarUnderCursor end -- GetVarFromCursor()Edit: Oops - has detect a mistake and fixed it. If someone find also an mistake - please let me know to fix.Edit2: Sometimes, i think to complicated... So now i've made it easier. And i hope, all bugs are fixed. Edited December 31, 2011 by BugFix Best Regards BugFix Link to comment Share on other sites More sharing options...
guinness Posted December 31, 2011 Share Posted December 31, 2011 Brilliant! I will give it a try. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
BugFix Posted December 31, 2011 Author Share Posted December 31, 2011 Thanks for your reply. I'm still a beginner with LUA. It's sure possible to make this script more professional. I still try my best. Best Regards BugFix Link to comment Share on other sites More sharing options...
Marcelos Posted December 25, 2013 Share Posted December 25, 2013 Awsome i fixed it to my teaste :-) as. elseif option == 1 then ConsoleWrite('@@(' & @ScriptName & '-' & @ScriptLineNumber & ') : $VARIABLE = ' & $VARIABLE & @crlf) Thanks for sharing Graphical Control - Week Planner Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now