* Library project for pas2js

This commit is contained in:
Michaël Van Canneyt 2022-02-05 17:29:54 +01:00
parent 451ba64bde
commit 69c78284d8
11 changed files with 200 additions and 1 deletions

View File

@ -67,6 +67,14 @@ msgstr "Gérer la page HTML"
msgid "missing path to pas2js"
msgstr "chemin manquant vers pas2js"
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr "Paquet Atom"

View File

@ -67,6 +67,14 @@ msgstr "HTML lap karbantartása"
msgid "missing path to pas2js"
msgstr "a pas2js útvonala hiányzik"
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr ""

View File

@ -57,6 +57,14 @@ msgstr ""
msgid "missing path to pas2js"
msgstr ""
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr ""

View File

@ -67,6 +67,14 @@ msgstr "Manter página HTML"
msgid "missing path to pas2js"
msgstr "caminho ausente para pas2js"
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr "Pacote Atom"

View File

@ -67,6 +67,14 @@ msgstr "Поддерживать страницу HTML"
msgid "missing path to pas2js"
msgstr "отсутствует путь к pas2js"
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr "Пакет Atom"

View File

@ -67,6 +67,14 @@ msgstr ""
msgid "missing path to pas2js"
msgstr ""
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr ""

View File

@ -69,6 +69,14 @@ msgstr "Підтримувати HTML-сторінку"
msgid "missing path to pas2js"
msgstr "відсутній шлях до pas2js"
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr "Пакунок Atom"

View File

@ -68,6 +68,14 @@ msgstr ""
msgid "missing path to pas2js"
msgstr ""
#: strpas2jsdesign.pjsdmoduleappdescription
msgid "A pas2js library that is transpiled to a javascript module."
msgstr ""
#: strpas2jsdesign.pjsdmoduleapplication
msgid "Pas2JS Library/Javascript module"
msgstr ""
#: strpas2jsdesign.pjsdnewatompackage
msgid "Atom package"
msgstr ""

View File

@ -18,7 +18,7 @@ uses
const
ProjDescNamePas2JSWebApp = 'Web Application';
ProjDescNamePas2JSNodeJSApp = 'NodeJS Application';
ProjDescNamePas2JSModuleApp = 'Pas2JS Library';
type
@ -79,6 +79,19 @@ type
property Options : TNodeJSApplicationOptions Read FOptions Write FOptions;
end;
TProjectPas2JSModuleApp = class(TProjectDescriptor)
protected
function CreateProjectSource: String; virtual;
public
constructor Create; override;
Function DoInitDescriptor : TModalResult; override;
function GetLocalizedName: string; override;
function GetLocalizedDescription: string; override;
function InitProject(AProject: TLazProject): TModalResult; override;
function CreateStartFiles(AProject: TLazProject): TModalResult; override;
end;
var
PJSOptionsFrameID: integer = 1000;
@ -119,6 +132,8 @@ begin
// register new-project items
RegisterProjectDescriptor(TProjectPas2JSWebApp.Create);
RegisterProjectDescriptor(TProjectPas2JSNodeJSApp.Create);
RegisterProjectDescriptor(TProjectPas2JSModuleApp.Create);
// add IDE options frame
PJSOptionsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment,TPas2jsOptionsFrame,
PJSOptionsFrameID)^.Index;
@ -598,5 +613,114 @@ begin
[ofProjectLoading,ofRegularFile]);
end;
{ ----------------------------------------------------------------------
Module
----------------------------------------------------------------------}
{ TProjectPas2JSModuleApp }
function TProjectPas2JSModuleApp.CreateProjectSource: String;
Var
Src : TStrings;
units : string;
Procedure Add(aLine : String);
begin
Src.Add(aLine);
end;
Procedure AddLn(aLine : String);
begin
if (Aline<>'') then
Aline:=Aline+';';
Add(Aline);
end;
begin
Units:=' JS, Classes, SysUtils';
Src:=TStringList.Create;
try
// create program source
AddLn('library Project1');
AddLn('');
Add('{$mode objfpc}');
Add('');
Add('uses');
AddLn(units) ;
Add('');
Add('// add functions/procedures here');
Add('');
Add('// Add your exports statement here: ');
Add('// exports yourfunction {as functionalias} ;');
Add('');
Add('begin');
Add(' // Your library initialization code here');
Add('end.');
Result:=Src.Text;
finally
Src.Free;
end;
end;
constructor TProjectPas2JSModuleApp.Create;
begin
inherited Create;
Name:= ProjDescNamePas2JSModuleApp;
Flags:=DefaultProjectNoApplicationFlags-[pfRunnable];
end;
function TProjectPas2JSModuleApp.DoInitDescriptor: TModalResult;
begin
Result:=mrOK;
end;
function TProjectPas2JSModuleApp.GetLocalizedName: string;
begin
Result:=pjsdModuleApplication;
end;
function TProjectPas2JSModuleApp.GetLocalizedDescription: string;
begin
Result:=pjsdModuleAppDescription;
end;
function TProjectPas2JSModuleApp.InitProject(AProject: TLazProject ): TModalResult;
var
MainFile : TLazProjectFile;
CompOpts : TLazCompilerOptions;
begin
Result:=inherited InitProject(AProject);
MainFile:=AProject.CreateProjectFile('project1.lpr');
MainFile.IsPartOfProject:=true;
AProject.AddFile(MainFile,false);
AProject.MainFileID:=0;
CompOpts:=AProject.LazBuildModes.BuildModes[0].LazCompilerOptions;
SetDefaultModuleCompileOptions(CompOpts);
CompOpts.TargetFilename:='js/project1';
SetDefaultNodeRunParams(AProject.RunParameters.GetOrCreate('Default'));
// create program source
AProject.MainFile.SetSourceText(CreateProjectSource,true);
//AProject.AddPackageDependency('pas2js_rtl');
//if naoUseNodeJSApp in Options then
// AProject.AddPackageDependency('fcl_base_pas2js');
end;
function TProjectPas2JSModuleApp.CreateStartFiles(AProject: TLazProject
): TModalResult;
begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]);
end;
end.

View File

@ -57,6 +57,8 @@ Procedure SetDefaultWebRunParams(RunParams : TAbstractRunParamsOptionsMode);
Procedure SetDefaultNodeRunParams(RunParams : TAbstractRunParamsOptionsMode);
Procedure SetDefaultWebCompileOptions(CompOpts: TLazCompilerOptions);
Procedure SetDefaultNodeJSCompileOptions(CompOpts: TLazCompilerOptions);
Procedure SetDefaultModuleCompileOptions(CompOpts: TLazCompilerOptions);
implementation
@ -131,6 +133,13 @@ begin
SetPasJSCompileOptions(CompOpts,'nodejs','-Jeutf-8 -Jminclude');
end;
Procedure SetDefaultModuleCompileOptions(CompOpts: TLazCompilerOptions);
begin
SetPasJSCompileOptions(CompOpts,'module','-Jeutf-8 -Jirtl.js -Jc -Jminclude');
end;
{$R *.lfm}
{ TPas2JSProjectOptionsFrame }

View File

@ -12,6 +12,8 @@ Resourcestring
pjsdWebAppDescription = 'A pas2js program running in the browser.';
pjsdNodeJSApplication = 'Node.js Application';
pjsdNodeJSAppDescription = 'A pas2js program running in node.js.';
pjsdModuleApplication = 'Pas2JS Library/Javascript module';
pjsdModuleAppDescription = 'A pas2js library that is transpiled to a javascript module.';
pjsdNewAtomPackage = 'Atom package';
pjsdNewAtomPackageDescr = 'A pas2js program running as Atom package.';
pjsdNewVSCodeExtension = 'Visual Studio Code extension';