So aus gegebenem Anlass habe ich mir auch eine Funktion geschrieben, welche die Includes einbindet (Auch die Includes in den Includes usw.).
Ich hab mir Shadows nicht so genaus angeschaut, aber sie scheint mir doch ziemlich langsam ;) Evl. weil seine mit _ReplaceStringinFile() arbeitet und meine Nur mit Strings & FileWrite.
Wer sie haben will, kann sie sich einbauen ;)
Code:
Func _IncludesEinbinden($file)
if not $File then Return SetError(1, 0, 0)
Local $written = "", $Include = ""
While StringRegExp($file, '(?i)#include <.*', 0) Or StringRegExp($file, '(?i)#include ".*', 0)
$Include = _GetIncludes($file, 1)
$split = StringSplit($Include, "|")
If Not StringInStr($written, $split[2]) Then
$file = StringReplace($file, StringTrimRight($split[1], 1), FileRead(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Include\" & StringStripWS($split[2], 8)), 1)
$written &= $split[2]
Else
$file = StringReplace($file, StringTrimRight($split[1], 1), "")
EndIf
WEnd
Return $file
EndFunc
Func _GetIncludes($file)
$includes = StringRegExp($file, '(?i)#include <.*', 3)
$aIncludeName = StringRegExp($file, '(?i)#include <(.*)', 3)
If IsArray($includes) And IsArray($aIncludeName) Then
$includes[0] &= " | " & StringTrimRight($aIncludeName[0], 2)
Return $includes[0]
EndIf
$includes = StringRegExp($file, '(?i)#include ".*', 3)
$aIncludeName = StringRegExp($file, '(?i)#include "(.*)', 3)
If IsArray($includes) And IsArray($aIncludeName) Then
$includes[0] &= " | " & StringTrimRight($aIncludeName[0], 2)
Return $includes[0]
EndIf
Return
endfunc
Sie braucht für 12 Includes und 28 "unterincludes" (Includes in Include) um die 5 Sekunden.