summaryrefslogtreecommitdiff
path: root/utils/pas2js/pas2jswebcompiler.pp
blob: a4235bf370972fc1a179c5b7eb8748669c72eea0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit pas2jswebcompiler;

{$mode objfpc}

interface

uses
  Classes, SysUtils, pas2jsfs, pasuseanalyzer, pas2jscompiler, FPPJsSrcMap, webfilecache;

Type

  { TPas2JSWebcompiler }

  TPas2JSWebcompiler = Class(TPas2JSCompiler)
  private
    function GetWebFS: TPas2JSWebFS;
  Protected
    function DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean; override;
    function CreateSetOfCompilerFiles(keyType: TKeyCompareType): TPasAnalyzerKeySet; override;
    function CreateFS : TPas2JSFS; override;
  Public
    Property WebFS : TPas2JSWebFS read GetWebFS;
  end;

implementation

uses js;

function Pas2jsCompilerFile_FilenameToKeyName(Item: Pointer): String;
var
  aFile: TPas2jsCompilerFile absolute Item;
begin
  Result:=LowerCase(aFile.PasFilename);
end;

function PtrUnitnameToKeyName(Item: Pointer): String;
var
  aUnitName: string absolute Item;
begin
  Result:=LowerCase(aUnitName);
end;

function Pas2jsCompilerFile_UnitnameToKeyName(Item: Pointer): String;
var
  aFile: TPas2jsCompilerFile absolute Item;
begin
  Result:=LowerCase(aFile.PasUnitName);
end;

function PtrFilenameToKeyName(FilenameAsPtr: Pointer): string;
var
  Filename: String absolute FilenameAsPtr;
begin
  Result:=LowerCase(Filename);
end;


{ TPas2JSWebcompiler }

function TPas2JSWebcompiler.GetWebFS: TPas2JSWebFS;
begin
  Result:=TPas2JSWebFS(FS)
end;

function TPas2JSWebcompiler.DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean;

Var
  S : String;

begin
//  Writeln('aWriter',AWriter.BufferLength,', array size ',Length(AWriter.Buffer));
  S:=TJSArray(AWriter.Buffer).Join('');
//  Writeln('TPas2JSWebcompiler.DoWriteJSFile(',DestFileName,') (',Length(S),' chars): ',S);
  WebFS.SetFileContent(DestFileName,S);
  Result:=True;
end;

function TPas2JSWebcompiler.CreateSetOfCompilerFiles(keyType: TKeyCompareType): TPasAnalyzerKeySet;
begin
  Case keyType of
    kcFileName:
      Result:=TPasAnalyzerKeySet.Create(@Pas2jsCompilerFile_FilenameToKeyName,@PtrFilenameToKeyName);
    kcUnitName:
      Result:=TPasAnalyzerKeySet.Create(@Pas2jsCompilerFile_UnitnameToKeyName,@PtrUnitnameToKeyName);
  else
    Raise EPas2jsFS.CreateFmt('Internal Unknown key type: %d',[Ord(KeyType)]);
  end;
end;

function TPas2JSWebcompiler.CreateFS: TPas2JSFS;
begin
  Result:=TPas2JSWebFS.Create;
end;

end.