2
0
Эх сурвалжийг харах

* Add -s --settings option

(cherry picked from commit 3a81f5c732ed75c555a9f6b96488cdb19bb9f4e4)
Michaël Van Canneyt 3 жил өмнө
parent
commit
1af5e35e3d

+ 45 - 3
utils/pas2js/dts2pas.pp

@@ -19,7 +19,10 @@ program dts2pas;
 {AllowWriteln}
 {AllowWriteln}
 
 
 uses
 uses
-  Classes, SysUtils, StrUtils, CustApp, pascodegen, tstopas;
+  TypInfo,Classes, SysUtils, StrUtils, CustApp, pascodegen, tstopas;
+
+Const
+  DefaultOptions = [coInterfaceAsClass];
 
 
 type
 type
   { TParseTSApplication }
   { TParseTSApplication }
@@ -31,11 +34,13 @@ type
     FLinks,
     FLinks,
     FUnits,
     FUnits,
     FAliases : TStringArray;
     FAliases : TStringArray;
+    FOptions : TConversionOptions;
 
 
     procedure AddAliases(Converter: TTypescriptToPas; aAlias: String);
     procedure AddAliases(Converter: TTypescriptToPas; aAlias: String);
     procedure AddWebAliases(S: Tstrings);
     procedure AddWebAliases(S: Tstrings);
     procedure AddJSAliases(S: Tstrings);
     procedure AddJSAliases(S: Tstrings);
     procedure DoLog(Sender: TObject; LogType: TCodegenLogType; const Msg: String);
     procedure DoLog(Sender: TObject; LogType: TCodegenLogType; const Msg: String);
+    function GetOptions(aOptions: String): TConversionOptions;
     function ParseFile(const aInputFileName, aOutputFileName, aUnitName: string): Boolean;
     function ParseFile(const aInputFileName, aOutputFileName, aUnitName: string): Boolean;
   protected
   protected
     procedure DoRun; override;
     procedure DoRun; override;
@@ -47,6 +52,27 @@ type
 
 
 { TParseTSApplication }
 { TParseTSApplication }
 
 
+
+function TParseTSApplication.GetOptions(aOptions : String) : TConversionOptions;
+
+Var
+  T : TConversionOption;
+  S : TStringArray;
+  N : String;
+
+begin
+  Result:=[];
+  S:=SplitString(aOptions,', ');
+  For T in TConversionOption do
+    begin
+    N:=GetEnumName(TypeInfo(TConversionOption),Ord(T));
+    if IndexText(N,S)<>-1 then
+      Include(Result,T);
+    end;
+end;
+
+
+
 procedure TParseTSApplication.DoRun;
 procedure TParseTSApplication.DoRun;
 
 
 var
 var
@@ -55,7 +81,7 @@ var
 
 
 begin
 begin
   Terminate;
   Terminate;
-  ErrorMsg:=CheckOptions('hi:o:a:wx:u:vl:', ['help','input:','output:','alias:','web','extra-units:','unitname:','verbose','link:']);
+  ErrorMsg:=CheckOptions('hi:o:a:wx:u:vl:s:', ['help','input:','output:','alias:','web','extra-units:','unitname:','verbose','link:','setting']);
   if (ErrorMsg<>'') or HasOption('h','help') then
   if (ErrorMsg<>'') or HasOption('h','help') then
     begin
     begin
     Usage(ErrorMsg);
     Usage(ErrorMsg);
@@ -73,6 +99,8 @@ begin
       OutputFile:=ChangeFileExt(ChangeFileExt(InputFile,''),'.pp')
       OutputFile:=ChangeFileExt(ChangeFileExt(InputFile,''),'.pp')
     else
     else
       OutputFile:=ChangeFileExt(InputFile,'.pp');
       OutputFile:=ChangeFileExt(InputFile,'.pp');
+  if HasOption('s','setting') then
+    FOptions:=GetOptions(GetOptionValue('s','setting'));
   aUnitName:=GetOptionValue('u','unitname');
   aUnitName:=GetOptionValue('u','unitname');
   if aUnitName='' then
   if aUnitName='' then
     aUnitName:=ChangeFileExt(ExtractFileName(outputFile),'');
     aUnitName:=ChangeFileExt(ExtractFileName(outputFile),'');
@@ -142,7 +170,7 @@ begin
       For S in Flinks do
       For S in Flinks do
         Converter.LinkStatements.Add(S);
         Converter.LinkStatements.Add(S);
       Converter.Verbose:=FVerbose;
       Converter.Verbose:=FVerbose;
-      Converter.Options:=Converter.Options+[coInterfaceAsClass];
+      Converter.Options:=FOptions;
       Converter.ExtraUnits:=U;
       Converter.ExtraUnits:=U;
       Converter.InputFileName:=aInputFileName;
       Converter.InputFileName:=aInputFileName;
       Converter.OutputFileName:=aOutputFileName;
       Converter.OutputFileName:=aOutputFileName;
@@ -163,6 +191,7 @@ constructor TParseTSApplication.Create(TheOwner: TComponent);
 begin
 begin
   inherited Create(TheOwner);
   inherited Create(TheOwner);
   StopOnException:=True;
   StopOnException:=True;
+  FOptions:=DefaultOptions;
 end;
 end;
 
 
 destructor TParseTSApplication.Destroy;
 destructor TParseTSApplication.Destroy;
@@ -222,6 +251,11 @@ end;
 
 
 
 
 procedure TParseTSApplication.Usage(Msg: string);
 procedure TParseTSApplication.Usage(Msg: string);
+
+Var
+  S : String;
+  CO : TConversionOption;
+
 begin
 begin
   if Msg<>'' then
   if Msg<>'' then
     Writeln('Error : ',Msg);
     Writeln('Error : ',Msg);
@@ -235,6 +269,14 @@ begin
   Writeln('-i --input=FILENAME   Parse .d.ts file FILENAME');
   Writeln('-i --input=FILENAME   Parse .d.ts file FILENAME');
   Writeln('-l --link=FILENAME    add {$linklib FILENAME} statement. (option can be specified multiple times)');
   Writeln('-l --link=FILENAME    add {$linklib FILENAME} statement. (option can be specified multiple times)');
   Writeln('-o --output=FILENAME  Output unit in file FILENAME');
   Writeln('-o --output=FILENAME  Output unit in file FILENAME');
+  Writeln('-s --setting=SETTINGS Set options. SETTINGS is a comma-separated list of the following names:');
+  for CO in TConversionOption do
+    begin
+    S:=GetEnumName(TypeInfo(TConversionOption),Ord(CO));
+    if CO in DefaultOptions then S:=S+' (*)';
+    Writeln('                      ',S);
+    end;
+  Writeln('                      Names marked with (*) are set in the default.');
   Writeln('-u --unit=NAME        Set output unitname');
   Writeln('-u --unit=NAME        Set output unitname');
   Writeln('-w --web              Add web unit to uses, define type aliases for web unit');
   Writeln('-w --web              Add web unit to uses, define type aliases for web unit');
   Writeln('-x --extra-units=UNITLIST   Add units (comma-separated list of unit names) to uses clause.');
   Writeln('-x --extra-units=UNITLIST   Add units (comma-separated list of unit names) to uses clause.');