mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-29 18:43:47 +02:00
197 lines
5.0 KiB
ObjectPascal
197 lines
5.0 KiB
ObjectPascal
unit idedtstopas;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, IDEExternToolIntf, frmdtstopas;
|
|
|
|
Const
|
|
DefaultOptions = [coInterfaceAsClass,coExpandUnionTypeArgs,coaddOptionsToheader,coDynamicTuples,coUseNativeTypeAliases];
|
|
|
|
Type
|
|
TDTSToPascalMode = frmdtstopas.TDTSToPascalMode;
|
|
TConversionOptions = frmdtstopas.TConversionOptions;
|
|
|
|
{ TCreateUnitFromDTS }
|
|
|
|
TCreateUnitFromDTS = Class(TComponent)
|
|
private
|
|
FAliases: TStrings;
|
|
FConversionOptions: TConversionOptions;
|
|
FExtraUnits: String;
|
|
FLocalFileName: String;
|
|
FMode: TDTSToPascalMode;
|
|
FModuleName: String;
|
|
FSource: TStrings;
|
|
FTargetUnitName: String;
|
|
FUseWeb: Boolean;
|
|
procedure ExecuteLocal;
|
|
procedure ExecuteService;
|
|
procedure SetAliases(AValue: TStrings);
|
|
Public
|
|
Constructor Create(AOwner: TComponent); override;
|
|
Destructor Destroy; override;
|
|
Function ShowOptionsDialog : Boolean;
|
|
Procedure Execute;
|
|
Property Source : TStrings Read FSource;
|
|
Property TargetUnitName : String Read FTargetUnitName Write FTargetUnitName;
|
|
Property Aliases : TStrings Read FAliases Write SetAliases;
|
|
Property UseWeb : Boolean Read FUseWeb Write FUseWeb;
|
|
Property Mode : TDTSToPascalMode Read FMode Write FMode;
|
|
Property ExtraUnits : String Read FExtraUnits Write FExtraUnits;
|
|
Property ModuleName : String Read FModuleName Write FModuleName;
|
|
Property LocalFileName : String Read FLocalFileName Write FLocalFileName;
|
|
Property ConversionOptions : TConversionOptions Read FConversionOptions Write FConversionOptions;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses Typinfo, PJSDsgnOptions, controls, strpas2jsdesign, idemsgintf, httpprotocol, fphttpclient;
|
|
|
|
Const
|
|
SMessageDTS2Pas = 'DST2Pas';
|
|
|
|
{ TCreateUnitFromDTS }
|
|
|
|
procedure TCreateUnitFromDTS.SetAliases(AValue: TStrings);
|
|
begin
|
|
if FAliases=AValue then Exit;
|
|
FAliases.Assign(AValue);
|
|
end;
|
|
|
|
constructor TCreateUnitFromDTS.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FConversionOptions:=DefaultOptions;
|
|
FUseWeb:=True;
|
|
FAliases:=TStringList.Create;
|
|
FSource:=TStringList.Create;
|
|
end;
|
|
|
|
destructor TCreateUnitFromDTS.Destroy;
|
|
begin
|
|
FreeAndNil(FAliases);
|
|
FreeAndNil(FSource);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TCreateUnitFromDTS.ShowOptionsDialog: Boolean;
|
|
|
|
Var
|
|
Frm : TDTSToPascalOptionsForm;
|
|
|
|
begin
|
|
Frm:=TDTSToPascalOptionsForm.Create(Self);
|
|
try
|
|
Frm.Aliases := Aliases;
|
|
frm.Mode := Mode;
|
|
frm.ExtraUnits := ExtraUnits;
|
|
frm.UseWeb := UseWeb;
|
|
frm.Module := ModuleName;
|
|
Frm.LocalFile := LocalFileName;
|
|
Frm.Options:=ConversionOptions;
|
|
Result:=Frm.ShowModal=mrOK;
|
|
if Result then
|
|
begin
|
|
Aliases:=Frm.Aliases;
|
|
Mode:=frm.Mode;
|
|
ExtraUnits:=frm.ExtraUnits;
|
|
UseWeb:=frm.UseWeb;
|
|
ModuleName:=frm.Module;
|
|
LocalFileName:=Frm.LocalFile;
|
|
ConversionOptions:=Frm.Options;
|
|
end;
|
|
finally
|
|
Frm.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TCreateUnitFromDTS.ExecuteLocal;
|
|
|
|
Function MaybeQuote(s : string) : string;
|
|
|
|
begin
|
|
if Pos(' ',S)=0 then
|
|
Result:=S
|
|
else
|
|
Result:=AnsiQuotedStr(S,'"');
|
|
end;
|
|
|
|
|
|
Var
|
|
ToolOpts : TIDEExternalToolOptions;
|
|
AliasFN,OutFN,Opts : string;
|
|
|
|
begin
|
|
AliasFN:='';
|
|
OutFN:='';
|
|
ToolOpts:=TIDEExternalToolOptions.Create;
|
|
try
|
|
ToolOpts.Parsers.Add(SubToolDefault);
|
|
OutFN:=GetTempFileName;
|
|
ToolOpts.Executable:=PJSOptions.DTS2Pas;
|
|
ToolOpts.ResolveMacros:=True;
|
|
Opts:='-i '+MaybeQuote(LocalFileName)+' -o '+MaybeQuote(outFN)+' -u '+TargetUnitName;
|
|
if UseWeb then
|
|
opts:=Opts+' -w';
|
|
if Aliases.Count>0 then
|
|
begin
|
|
AliasFN:=GetTempFileName;
|
|
Aliases.SaveToFile(AliasFN);
|
|
Opts:=Opts+' -a @'+aliasFN;
|
|
end;
|
|
If ExtraUnits<>'' then
|
|
Opts:=Opts+'-x '+StringReplace(ExtraUnits,' ','',[rfReplaceAll]);
|
|
ToolOpts.CmdLineParams:=Opts;
|
|
if not (RunExternalTool(ToolOpts) and FileExists(OutFN)) then
|
|
IDEMessagesWindow.AddCustomMessage(TMessageLineUrgency.mluError,rsDTSDidNotProduceOutput,'',0,0,SMessageDTS2Pas)
|
|
else
|
|
FSource.LoadFromFile(OutFN)
|
|
finally
|
|
if AliasFN<>'' then
|
|
DeleteFile(aliasFN);
|
|
if OutFN<>'' then
|
|
DeleteFile(OutFN);
|
|
ToolOpts.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TCreateUnitFromDTS.ExecuteService;
|
|
|
|
Var
|
|
URL : String;
|
|
CO : TConversionOption;
|
|
|
|
begin
|
|
URL:=IncludeHTTPPathDelimiter(PJSOptions.DTS2PasServiceURL)+'/convert';
|
|
URL:=URL+'?file='+HTTPEncode(ModuleName);
|
|
URL:=URL+'&unit='+HTTPEncode(TargetUnitName);
|
|
URL:=URL+'&prependLog=1';
|
|
for CO in TConversionOption do
|
|
if CO in ConversionOptions then
|
|
URL:=URL+'&'+GetEnumName(TypeInfo(TConversionOption),Ord(CO))+'=1';
|
|
if aliases.Count>0 then
|
|
URL:=URL+'&Aliases='+HTTPEncode(Aliases.CommaText);
|
|
if Not UseWeb then
|
|
URL:=URL+'&SkipWeb=1';
|
|
If ExtraUnits<>'' then
|
|
URL:=URL+'&ExtraUnits='+HTTPEncode(ExtraUnits);
|
|
TFPHTTPClient.SimpleGet(URL,FSource);
|
|
end;
|
|
|
|
procedure TCreateUnitFromDTS.Execute;
|
|
begin
|
|
if TargetUnitName='' then
|
|
TargetUnitName:='libtsmodule';
|
|
If Mode=dpmLocal then
|
|
ExecuteLocal
|
|
else
|
|
ExecuteService;
|
|
end;
|
|
|
|
end.
|
|
|