Added the option --unit-prefix to gir2pascal so that you can add a prefix to the generated units names.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2878 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
drewski207 2014-01-06 04:58:26 +00:00
parent ae7df38f31
commit e5985bac85
3 changed files with 31 additions and 15 deletions

View File

@ -41,6 +41,7 @@ type
FPaths: TStringList;
FOutPutDirectory : String;
FFileToConvert: String;
FUnitPrefix: String;
FOverWriteFiles: Boolean;
FOptions: TgirOptions;
procedure AddDefaultPaths;
@ -178,7 +179,7 @@ begin
girFile.ParseXMLDocument(Doc);
Doc.Free;
Writer := TgirPascalWriter.Create(girFile.NameSpaces, FOptions);
Writer := TgirPascalWriter.Create(girFile.NameSpaces, FOptions, FUnitPrefix);
Writer.OnUnitWriteEvent:= @WriteFile;
Writer.GenerateUnits;
@ -259,6 +260,9 @@ begin
FFileToConvert:=FCmdOptions.OptionValue('input');
AddPaths(ExtractFilePath(FFileToConvert));
if FCmdOptions.HasOption('unit-prefix') then
FUnitPrefix := FCmdOptions.OptionValue('unit-prefix');
if FCmdOptions.HasOption('paths') then
AddPaths(FCmdOptions.OptionValue('paths'));

View File

@ -33,12 +33,13 @@ type
TgirPascalWriter = class
private
FDefaultUnitExtension: String;
FUnitPrefix: String;
FOnUnitWriteEvent: TgirWriteEvent;
FNameSpaces: TgirNamespaces;
FUnits: TList;
FOptions: TgirOptions;
public
constructor Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions);
constructor Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions; AUnitPrefix: String);
procedure GenerateUnits;
property OnUnitWriteEvent: TgirWriteEvent read FOnUnitWriteEvent write FOnUnitWriteEvent;
property DefaultUnitExtension: String read FDefaultUnitExtension write FDefaultUnitExtension; // is .pas by default
@ -52,9 +53,10 @@ uses girCTypesMapping;
{ TgirPascalWriter }
constructor TgirPascalWriter.Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions);
constructor TgirPascalWriter.Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions; AUnitPrefix: String);
begin
FNameSpaces := ANameSpaces;
FUnitPrefix := AUnitPrefix;
FUnits := TList.Create;
FDefaultUnitExtension:='.pas';
FOptions:=AOptions;
@ -70,7 +72,7 @@ begin
for i := 0 to FNameSpaces.Count-1 do
begin
WriteLn(Format('Converting %s', [FNameSpaces.NameSpace[i].NameSpace]));
UnitGroup := TPascalUnitGroup.Create(Self, FNameSpaces.NameSpace[i], FOptions);
UnitGroup := TPascalUnitGroup.Create(Self, FNameSpaces.NameSpace[i], FOptions, FUnitPrefix);
UnitGroup.GenerateUnits;
end;
end;

View File

@ -152,12 +152,13 @@ type
FSimpleUnit: Boolean;
FOptions: TgirOptions;
FNameSpace: TgirNamespace;
FUnitPrefix: String;
FWriter: TObject;//girPascalWriter;
FUnits: TFPList;
//Units: array[TPascalUnitType] of TPascalUnit;
function GetUnitForType(AType: TPascalUnitType): TPascalUnit;
public
constructor Create(AWriter: TObject{TgirPascalWriter}; ANameSpace: TgirNamespace; AOptions: TgirOptions);
constructor Create(AWriter: TObject{TgirPascalWriter}; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitPrefix: String);
destructor Destroy; override;
procedure GenerateUnits;
property UnitForType[AType: TPascalUnitType]: TPascalUnit read GetUnitForType;
@ -170,6 +171,7 @@ type
private
FDynamicLoadUnloadSection: TPCodeText;
FDynamicEntryNames: TStringList;
FUnitPrefix: String;
FGroup : TPascalUnitGroup;
FOptions: TgirOptions;
FFinalizeSection: TPFinialization;
@ -187,6 +189,7 @@ type
function GetUnitFileName: String;
function GetUnitName: String;
function GetUnitPostfix: String;
function UnitPrefix: String;
// functions to ensure the type is being written in the correct declaration
function WantTypeSection: TPDeclarationType;
@ -241,7 +244,7 @@ type
procedure ResolveFuzzyTypes;
procedure AddTestType(AGType: TgirGType);
public
constructor Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes);
constructor Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes; AUnitPrefix: String);
destructor Destroy; override;
procedure ProcessConsts(AList:TList); // of TgirBaseType descandants
procedure ProcessTypes(AList:TFPHashObjectList); // of TgirBaseType descandants
@ -324,17 +327,18 @@ begin
end;
constructor TPascalUnitGroup.Create(AWriter:TObject{TgirPascalWriter}; ANameSpace: TgirNamespace;
AOptions: TgirOptions);
AOptions: TgirOptions; AUnitPrefix: String);
begin
FWriter := AWriter;
FNameSpace := ANameSpace;
FOptions := AOptions;
FUnits := TFPList.Create;
FUnitPrefix:=AUnitPrefix;
FSimpleUnit := ([goSeperateConsts, goClasses, goObjects] * AOptions ) = [];
if FSimpleUnit then
begin
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeAll));
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeAll, FUnitPrefix));
//Units[utSimple] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utSimple])
end
@ -343,11 +347,11 @@ begin
//Units[utConsts] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utConsts]);
//Units[utTypes] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utTypes]);
//Units[utFunctions] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utFunctions]);
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeCommon));
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeCommon, FUnitPrefix));
if goClasses in FOptions then
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utClasses]))
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utClasses], FUnitPrefix))
else
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utObjects]))
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utObjects], FUnitPrefix))
end;
end;
@ -560,7 +564,7 @@ end;
function TPascalUnit.GetUnitFileName: String;
begin
Result := UnitName+GetUnitPostfix;
Result := UnitPrefix+UnitName+GetUnitPostfix;
end;
function TPascalUnit.GetUnitPostfix: String;
@ -803,6 +807,11 @@ begin
FTestPascalBody.Add(Format('Test_%s;',[AGType.CType])); //call pascal testproc
end;
function TPascalUnit.UnitPrefix: String;
begin
Result := FUnitPrefix;
end;
function TPascalUnit.WantTypeSection: TPDeclarationType;
begin
if (InterfaceSection.Declarations.Count = 0)
@ -2160,7 +2169,7 @@ begin
end;
end;
constructor TPascalUnit.Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes);
constructor TPascalUnit.Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes; AUnitPrefix: String);
const
//CBasic = '#include <%s>'+LineEnding;
PBasic = 'program %s_test;'+LineEnding+
@ -2182,6 +2191,7 @@ begin
FGroup := AGroup;
FOptions := AOptions;
FUnitType:=AUnitType;
FUnitPrefix := AUnitPrefix;
FFinalizeSection := TPFinialization.Create(Self);
FImplementationSection := TPImplementation.Create(Self);
FInitializeSection := TPInitialize.Create(Self);
@ -2310,7 +2320,7 @@ begin
for i := 0 to FNameSpace.RequiredNameSpaces.Count-1 do
begin
NS := TgirNamespace(FNameSpace.RequiredNameSpaces.Items[i]);
NeedUnit:=CalculateUnitName(NS.NameSpace,NS.Version);
NeedUnit:=UnitPrefix+CalculateUnitName(NS.NameSpace,NS.Version);
if FUnitType = PascalUnitTypeAll then
InterfaceSection.UsesSection.Units.Add(' '+NeedUnit)
@ -2377,7 +2387,7 @@ begin
Libs := GetLibs;
Result := TStringStream.Create('');
Str.WriteString(IndentText('{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. }',0,1));
Str.WriteString(IndentText('unit '+ UnitFileName+';',0,2));
Str.WriteString(IndentText('unit '+ UnitPrefix+UnitFileName+';',0,2));
Str.WriteString(IndentText('{$MODE OBJFPC}{$H+}',0,2));
if utTypes in FUnitType then
Str.WriteString(IndentText('{$PACKRECORDS C}',0,1));