Auf Anfrage von darius83 hier mal ein kleines Skript, das einem die in einem Skript verwendeten Includes, definierten Funktionen und Variablen (ordentlich) formatiert in die Konsole ausgibt:
Spoiler anzeigen
#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]Local $File, $Script, $i, $j
If $CmdLine[0] = 1 Then
$Script = FileRead($CmdLine[1])
Else
$File = FileOpenDialog('', @WorkingDir, 'AutoIt v3 Script (*.au3)')
If @error Then
Exit
EndIf
$Script = FileRead($File)
EndIf
ConsoleWrite('---------------------------------------' & @CRLF)
ConsoleWrite('- AutoIt Script Info 1.2 by James1337 -' & @CRLF)
ConsoleWrite('---------------------------------------' & @CRLF & @CRLF)
Local $Includes = _AutoIt3ScriptGetIncludes($Script)
If Not @error Then
_Sort($Includes)
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF)
ConsoleWrite('- Includes (' & UBound($Includes, 1) & '):' & @CRLF)
For $i = 0 To UBound($Includes)-1 Step 1
ConsoleWrite('+ ' & $Includes[$i] & @CRLF)
Next
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF & @CRLF)
EndIf
Local $Functions = _AutoIt3ScriptGetFunctions($Script), $VariablesInFunction
If Not @error Then
_Sort($Functions)
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF)
ConsoleWrite('- Functions (' & UBound($Functions, 1) & '):' & @CRLF)
For $i = 0 To UBound($Functions)-1 Step 1
ConsoleWrite('+ ' & $Functions[$i] & @CRLF)
$VariablesInFunction = _AutoIt3ScriptGetVariablesInFunction($Script, $Functions[$i])
If Not @error Then
_Sort($VariablesInFunction, True)
ConsoleWrite('Variables (' & UBound($VariablesInFunction, 1) & '):' & @CRLF)
For $j = 0 To UBound($VariablesInFunction)-1 Step 1
ConsoleWrite(@TAB & $VariablesInFunction[$j] & @CRLF)
Next
If ($i < UBound($Functions)-1) Then
ConsoleWrite(@CRLF)
EndIf
EndIf
Next
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF & @CRLF)
EndIf
Local $Variables = _AutoIt3ScriptGetVariablesOutsideFunction($Script)
If Not @error Then
_Sort($Variables, True)
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF)
ConsoleWrite('- Variables (' & UBound($Variables, 1) & '):' & @CRLF)
For $i = 0 To UBound($Variables)-1 Step 1
ConsoleWrite('+ ' & $Variables[$i] & @CRLF)
Next
ConsoleWrite('++++++++++++++++++++++++++++++++++++++++' & @CRLF & @CRLF)
EndIf
Func _Sort(ByRef $Array, $Cleanup=False)
Local $i, $j, $1, $2
For $i = 1 To UBound($Array, 1)-1 Step 1
If $Array[$i] < $Array[$i-1] Then
For $j = $i To 1 Step -1
$1 = $Array[$j]
$2 = $Array[$j-1]
If $1 < $2 Then
$Array[$j] = $2
$Array[$j-1] = $1
Else
ExitLoop
EndIf
Next
EndIf
Next
If $Cleanup Then
Local $a2[1] = [$Array[0]], $u
For $i = 1 To UBound($Array, 1)-1 Step 1
If ($Array[$i] <> $Array[$i-1]) And ($Array[$i] <> '') Then
$u = UBound($a2, 1)
ReDim $a2[$u+1]
$a2[$u] = $Array[$i]
EndIf
Next
$Array = $a2
EndIf
EndFunc
; by James1337
Func _AutoIt3ScriptGetIncludes($Code)
Local $Includes = StringRegExp($Code, '(?i)(?:\#include [\<"\''])([\w\. ]{1,})(?:[\>"\''])', 3)
If @error Then
SetError(@error)
Return 0
EndIf
Return $Includes
EndFunc
Func _AutoIt3ScriptGetFunctions($Code)
Local $Functions = StringRegExp($Code, '(?i)(?:Func[\s]+)([\w]{1,})(?:[\s]*\()', 3)
If @error Then
SetError(@error)
Return 0
EndIf
Return $Functions
EndFunc
Func _AutoIt3ScriptGetVariables($Code)
Local $Variables = StringRegExp($Code, '(?:\$)([\w]{1,})(?:[\s\[\.\=\+\-\*\/\^\,\)])', 3)
If @error Then
SetError(@error)
Return 0
EndIf
Return $Variables
EndFunc
Func _AutoIt3ScriptGetVariablesInFunction($Code, $Function)
$Code = StringRegExpReplace($Code, '(?i)\n[\s]*Func[\s]+' & $Function & '[\s]*\(', BinaryToString('0x0101010101'), 0)
$Code = StringRegExpReplace($Code, '(?i)\n[\s]*EndFunc', BinaryToString('0x1010101010'), 0)
Local $a = StringInStr($Code, BinaryToString('0x0101010101'), 2, 1)
Local $b = StringInStr($Code, BinaryToString('0x1010101010'), 2, 1, $a)
If Not(($a > 0) And ($b > $a)) Then
SetError(1337)
Return 0
EndIf
$Function = StringMid($Code, $a, $b-$a+5)
Local $Variables = _AutoIt3ScriptGetVariables($Function)
SetError(@error)
Return $Variables
EndFunc
Func _AutoIt3ScriptGetVariablesOutsideFunction($Code)
Local $Functions = _AutoIt3ScriptGetFunctions($Code), $i, $a, $b
If Not @error Then
For $i = 0 To UBound($Functions)-1 Step 1
$Code = StringRegExpReplace($Code, '(?i)\n[\s]*Func[\s]+' & $Functions[$i] & '[\s]*\(', BinaryToString('0x0101010101'), 0)
$Code = StringRegExpReplace($Code, '(?i)\n[\s]*EndFunc', BinaryToString('0x1010101010'), 0)
$a = StringInStr($Code, BinaryToString('0x0101010101'), 2, 1)
$b = StringInStr($Code, BinaryToString('0x1010101010'), 2, 1, $a)
If (($a > 0) And ($b > $a)) Then
$Code = StringReplace($Code, StringMid($Code, $a, $b-$a+5), '', 0, 1)
EndIf
Next
EndIf
Local $Variables = _AutoIt3ScriptGetVariables($Code)
SetError(@error)
Return $Variables
EndFunc
MfG James