2
0

pas2jswebcompiler.pp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. unit pas2jswebcompiler;
  2. {$mode objfpc}
  3. interface
  4. uses
  5. Classes, SysUtils, pas2jsfs, pasuseanalyzer, pas2jscompiler, FPPJsSrcMap, webfilecache;
  6. Type
  7. { TPas2JSWebcompiler }
  8. TPas2JSWebcompiler = Class(TPas2JSCompiler)
  9. private
  10. function GetWebFS: TPas2JSWebFS;
  11. Protected
  12. function DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean; override;
  13. function CreateSetOfCompilerFiles(keyType: TKeyCompareType): TPasAnalyzerKeySet; override;
  14. function CreateFS : TPas2JSFS; override;
  15. Public
  16. Property WebFS : TPas2JSWebFS read GetWebFS;
  17. end;
  18. implementation
  19. uses js;
  20. function Pas2jsCompilerFile_FilenameToKeyName(Item: Pointer): String;
  21. var
  22. aFile: TPas2jsCompilerFile absolute Item;
  23. begin
  24. Result:=LowerCase(aFile.PasFilename);
  25. end;
  26. function PtrUnitnameToKeyName(Item: Pointer): String;
  27. var
  28. aUnitName: string absolute Item;
  29. begin
  30. Result:=LowerCase(aUnitName);
  31. end;
  32. function Pas2jsCompilerFile_UnitnameToKeyName(Item: Pointer): String;
  33. var
  34. aFile: TPas2jsCompilerFile absolute Item;
  35. begin
  36. Result:=LowerCase(aFile.PasUnitName);
  37. end;
  38. function PtrFilenameToKeyName(FilenameAsPtr: Pointer): string;
  39. var
  40. Filename: String absolute FilenameAsPtr;
  41. begin
  42. Result:=LowerCase(Filename);
  43. end;
  44. { TPas2JSWebcompiler }
  45. function TPas2JSWebcompiler.GetWebFS: TPas2JSWebFS;
  46. begin
  47. Result:=TPas2JSWebFS(FS)
  48. end;
  49. function TPas2JSWebcompiler.DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean;
  50. Var
  51. S : String;
  52. T : String;
  53. begin
  54. // Writeln('aWriter',AWriter.BufferLength,', array size ',Length(AWriter.Buffer));
  55. S:=TJSArray(AWriter.Buffer).Join('');
  56. // Writeln('TPas2JSWebcompiler.DoWriteJSFile(',DestFileName,') (',Length(S),' chars): ',S);
  57. WebFS.SetFileContent(DestFileName,S);
  58. Result:=True;
  59. end;
  60. function TPas2JSWebcompiler.CreateSetOfCompilerFiles(keyType: TKeyCompareType): TPasAnalyzerKeySet;
  61. begin
  62. Case keyType of
  63. kcFileName:
  64. Result:=TPasAnalyzerKeySet.Create(@Pas2jsCompilerFile_FilenameToKeyName,@PtrFilenameToKeyName);
  65. kcUnitName:
  66. Result:=TPasAnalyzerKeySet.Create(@Pas2jsCompilerFile_UnitnameToKeyName,@PtrUnitnameToKeyName);
  67. else
  68. Raise EPas2jsFS.CreateFmt('Internal Unknown key type: %d',[Ord(KeyType)]);
  69. end;
  70. end;
  71. function TPas2JSWebcompiler.CreateFS: TPas2JSFS;
  72. begin
  73. Result:=TPas2JSWebFS.Create;
  74. end;
  75. end.