#include <Array.au3>
#include <File.au3>
#include <StringConstants.au3>

Global $sSourceFilename = @ScriptDir & '\ParsefileSource.au3'
Global $aSourcecode   ; Array zum Einlesen des Quellcodes aus $sSourceFilename
Global $sFunctionName ; herausgefilterter Funktionsname
Global $sSourceLine   ; Inhalt der jeweiligen Quellcodezeile
Global $iLineOffset   ; Offset für Zeilennummer die eingefügt werden soll

_FileReadToArray($sSourceFilename, $aSourcecode)

; Nur zur Anzeige während der Testphase :
_ArrayDisplay($aSourcecode, $sSourceFilename & ' vor dem Einfügen')

; Funktionsname herausfiltern und Zeile in das Array einfügen :
; Anmerkung : noch Sonderfälle berücksichtigen wie z.B :
; - mehrzeilige Funktionsparameter mit _
;   Beispiel :
;   Func _Function($sParam1, _
;                  $sParam2)
;   (Hier wäre der Offset für die einzufügende Zeile + 2 )
;
For $i = 1 To UBound($aSourcecode) - 1
	; Func-Zeile ermitteln (führende Leerzeichen entfernen) :
	$sSourceLine = StringStripWS($aSourcecode[$i], $STR_STRIPLEADING)
	If StringRegExp($sSourceLine,"^(?i)\bFunc \b",$STR_REGEXPMATCH) Then
		; Funktionsnamen herausfiltern (zwischen Func und ( ):
		$sFunctionName = StringMid($sSourceLine, 6, StringInStr($sSourceLine, '(') - 6)
		; Zeile einfügen :
		$iLineOffset = 1
		_ArrayInsert($aSourcecode, $i + $iLineOffset , '$sFunctionName = "' & $sFunctionName & '"  ; GENERATED BY CODE-JACK')
	EndIf
Next

$aSourcecode[0] = UBound($aSourcecode) - 1
; Nur zur Anzeige während der Testphase :
_ArrayDisplay($aSourcecode, $sSourceFilename & ' nach dem Einfügen')
; Quellcode in neue Datei schreiben :
_FileWriteFromArray(@ScriptDir & '\ParsefileSource-New.au3', $aSourcecode, 1)