|
@@ -74,7 +74,12 @@ type
|
|
stISPPReservedWord, stISPPString, stISPPNumber);
|
|
stISPPReservedWord, stISPPString, stISPPNumber);
|
|
|
|
|
|
TWordsBySection = TObjectDictionary<TInnoSetupStylerSection, TStringList>;
|
|
TWordsBySection = TObjectDictionary<TInnoSetupStylerSection, TStringList>;
|
|
- TFunctionDefinitions = array of AnsiString;
|
|
|
|
|
|
+ TFunctionDefinition = record
|
|
|
|
+ ScriptFuncWithoutHeader: AnsiString;
|
|
|
|
+ WasFunction, HasParams: Boolean;
|
|
|
|
+ constructor Create(const ScriptFunc: AnsiString);
|
|
|
|
+ end;
|
|
|
|
+ TFunctionDefinitions = array of TFunctionDefinition;
|
|
TFunctionDefinitionsByName = TDictionary<String, TFunctionDefinitions>;
|
|
TFunctionDefinitionsByName = TDictionary<String, TFunctionDefinitions>;
|
|
|
|
|
|
TInnoSetupStyler = class(TScintCustomStyler)
|
|
TInnoSetupStyler = class(TScintCustomStyler)
|
|
@@ -141,9 +146,9 @@ type
|
|
class function IsParamSection(const Section: TInnoSetupStylerSection): Boolean;
|
|
class function IsParamSection(const Section: TInnoSetupStylerSection): Boolean;
|
|
class function IsSymbolStyle(const Style: TScintStyleNumber): Boolean;
|
|
class function IsSymbolStyle(const Style: TScintStyleNumber): Boolean;
|
|
function GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
function GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
- const Name: String; const Index: Integer; out Count: Integer): AnsiString; overload;
|
|
|
|
|
|
+ const Name: String; const Index: Integer; out Count: Integer): TFunctionDefinition; overload;
|
|
function GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
function GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
- const Name: String; const Index: Integer): AnsiString; overload;
|
|
|
|
|
|
+ const Name: String; const Index: Integer): TFunctionDefinition; overload;
|
|
function SectionHasFlag(const Section: TInnoSetupStylerSection; const Flag: String): Boolean;
|
|
function SectionHasFlag(const Section: TInnoSetupStylerSection; const Flag: String): Boolean;
|
|
property ConstantsWordList: AnsiString read FConstantsWordList;
|
|
property ConstantsWordList: AnsiString read FConstantsWordList;
|
|
property EventFunctionsWordList[Procedures: Boolean]: AnsiString read GetEventFunctionsWordList;
|
|
property EventFunctionsWordList[Procedures: Boolean]: AnsiString read GetEventFunctionsWordList;
|
|
@@ -567,6 +572,14 @@ begin
|
|
Result := True;
|
|
Result := True;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+{ TFunctionDefinition }
|
|
|
|
+
|
|
|
|
+constructor TFunctionDefinition.Create(const ScriptFunc: AnsiString);
|
|
|
|
+begin
|
|
|
|
+ ScriptFuncWithoutHeader := RemoveScriptFuncHeader(ScriptFunc, WasFunction);
|
|
|
|
+ HasParams := ScriptFuncHasParameters(ScriptFunc);
|
|
|
|
+end;
|
|
|
|
+
|
|
{ TInnoSetupStyler }
|
|
{ TInnoSetupStyler }
|
|
|
|
|
|
constructor TInnoSetupStyler.Create(AOwner: TComponent);
|
|
constructor TInnoSetupStyler.Create(AOwner: TComponent);
|
|
@@ -796,20 +809,18 @@ procedure TInnoSetupStyler.BuildScriptFunctionsLists(
|
|
const SL: TStringList);
|
|
const SL: TStringList);
|
|
begin
|
|
begin
|
|
for var ScriptFunc in ScriptFuncTable do begin
|
|
for var ScriptFunc in ScriptFuncTable do begin
|
|
- var ScriptFuncWithoutHeader := RemoveScriptFuncHeader(ScriptFunc);
|
|
|
|
- var ScriptFuncName := ExtractScriptFuncWithoutHeaderName(ScriptFuncWithoutHeader);
|
|
|
|
|
|
+ var FunctionDefinition := TFunctionDefinition.Create(ScriptFunc);
|
|
|
|
+ var ScriptFuncName := ExtractScriptFuncWithoutHeaderName(FunctionDefinition.ScriptFuncWithoutHeader);
|
|
var DoAddWordToList := True;
|
|
var DoAddWordToList := True;
|
|
- if ScriptFuncHasParameters(ScriptFunc) then begin
|
|
|
|
- var Key := String(ScriptFuncName);
|
|
|
|
- if not FScriptFunctionsByName[ClassMembers].TryAdd(Key, [ScriptFuncWithoutHeader]) then begin
|
|
|
|
- { Function has multiple prototypes }
|
|
|
|
- var ScriptFunctions := FScriptFunctionsByName[ClassMembers][Key];
|
|
|
|
- var N := Length(ScriptFunctions);
|
|
|
|
- SetLength(ScriptFunctions, N+1);
|
|
|
|
- ScriptFunctions[N] := ScriptFuncWithoutHeader;
|
|
|
|
- FScriptFunctionsByName[ClassMembers][Key] := ScriptFunctions;
|
|
|
|
- DoAddWordToList := False; { Already added it when the first prototype was found }
|
|
|
|
- end;
|
|
|
|
|
|
+ var Key := String(ScriptFuncName);
|
|
|
|
+ if not FScriptFunctionsByName[ClassMembers].TryAdd(Key, [FunctionDefinition]) then begin
|
|
|
|
+ { Function has multiple prototypes }
|
|
|
|
+ var ScriptFunctions := FScriptFunctionsByName[ClassMembers][Key];
|
|
|
|
+ var N := Length(ScriptFunctions);
|
|
|
|
+ SetLength(ScriptFunctions, N+1);
|
|
|
|
+ ScriptFunctions[N] := FunctionDefinition;
|
|
|
|
+ FScriptFunctionsByName[ClassMembers][Key] := ScriptFunctions;
|
|
|
|
+ DoAddWordToList := False; { Already added it when the first prototype was found }
|
|
end;
|
|
end;
|
|
if DoAddWordToList then
|
|
if DoAddWordToList then
|
|
AddWordToList(SL, ScriptFuncName, awtScriptFunction);
|
|
AddWordToList(SL, ScriptFuncName, awtScriptFunction);
|
|
@@ -925,7 +936,7 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TInnoSetupStyler.GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
function TInnoSetupStyler.GetScriptFunctionDefinition(const ClassMember: Boolean;
|
|
- const Name: String; const Index: Integer; out Count: Integer): AnsiString;
|
|
|
|
|
|
+ const Name: String; const Index: Integer; out Count: Integer): TFunctionDefinition;
|
|
begin
|
|
begin
|
|
var ScriptFunctions: TFunctionDefinitions;
|
|
var ScriptFunctions: TFunctionDefinitions;
|
|
if FScriptFunctionsByName[ClassMember].TryGetValue(Name, ScriptFunctions) then begin
|
|
if FScriptFunctionsByName[ClassMember].TryGetValue(Name, ScriptFunctions) then begin
|
|
@@ -934,15 +945,13 @@ begin
|
|
if ResultIndex >= Count then
|
|
if ResultIndex >= Count then
|
|
ResultIndex := Count-1;
|
|
ResultIndex := Count-1;
|
|
Result := ScriptFunctions[ResultIndex]
|
|
Result := ScriptFunctions[ResultIndex]
|
|
- end else begin
|
|
|
|
|
|
+ end else
|
|
Count := 0;
|
|
Count := 0;
|
|
- Result := '';
|
|
|
|
- end;
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
function TInnoSetupStyler.GetScriptFunctionDefinition(
|
|
function TInnoSetupStyler.GetScriptFunctionDefinition(
|
|
const ClassMember: Boolean; const Name: String;
|
|
const ClassMember: Boolean; const Name: String;
|
|
- const Index: Integer): AnsiString;
|
|
|
|
|
|
+ const Index: Integer): TFunctionDefinition;
|
|
begin
|
|
begin
|
|
var Count: Integer;
|
|
var Count: Integer;
|
|
Result := GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
|
|
Result := GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
|