pas2jsjsresources.pp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. unit pas2jsjsresources;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, pas2jsResources, pas2jsFS;
  6. Type
  7. { TJSResourceLinkHandler }
  8. { TJSResourceHandler }
  9. TJSResourceHandler = Class(TPas2jsResourceHandler)
  10. Private
  11. FResources : TStrings;
  12. function GetResourceJSStatement(aFileName: String; Options: TStrings): String;
  13. Protected
  14. function GetResourceCount: Integer; override;
  15. function GetAsString: String; override;
  16. Public
  17. Constructor Create(aFS : TPas2JSFS); override;
  18. Class Function OutputMode : TResourceOutputMode; override;
  19. Class Function OutputFileExtension : String; override;
  20. Procedure HandleResource (aFileName : string; Options : TStrings); override;
  21. destructor Destroy; override;
  22. Property Resources : TStrings Read FResources;
  23. end;
  24. implementation
  25. { TJSResourceHandler }
  26. function TJSResourceHandler.GetResourceCount: Integer;
  27. begin
  28. Result:=FResources.Count;
  29. end;
  30. function TJSResourceHandler.GetAsString: String;
  31. Var
  32. I : Integer;
  33. N,V : String;
  34. begin
  35. Result:='';
  36. For I:=0 to FResources.Count-1 do
  37. begin
  38. FResources.GetNameValue(I,N,V);
  39. Result:=Result+V+#10;
  40. end;
  41. end;
  42. constructor TJSResourceHandler.Create(aFS: TPas2JSFS);
  43. begin
  44. inherited Create(aFS);
  45. FResources:=TStringList.Create;
  46. end;
  47. class function TJSResourceHandler.OutputMode: TResourceOutputMode;
  48. begin
  49. Result:=romExtraJS;
  50. end;
  51. class function TJSResourceHandler.OutputFileExtension: String;
  52. begin
  53. Result:='.js';
  54. end;
  55. Function TJSResourceHandler.GetResourceJSStatement(aFileName : String; Options: TStrings) : String;
  56. Const
  57. SAddResource = 'rtl.addResource({name: "%s", unit: "%s", format: "%s", encoding: "base64", data: "%s"});';
  58. Var
  59. aFormat,aName,aData : String;
  60. begin
  61. aData:=GetFileAsBase64(aFileName);
  62. aFormat:=GetFormat(aFileName,Options);
  63. aName:=Options.Values['name'];
  64. if aName='' then
  65. aName:=ChangeFileExt(ExtractFileName(aFileName),'');
  66. Result:=Format(SAddResource,[LowerCase(aName),LowerCase(CurrentUnitName),aFormat,aData]);
  67. end;
  68. procedure TJSResourceHandler.HandleResource(aFileName: string; Options: TStrings);
  69. begin
  70. // PRepending unit name allows to extract easier all resources for a single unit
  71. FResources.Add(CurrentUnitName+'='+GetResourceJSStatement(aFileName,Options));
  72. end;
  73. destructor TJSResourceHandler.Destroy;
  74. begin
  75. FreeAndNil(FResources);
  76. inherited Destroy;
  77. end;
  78. end.