pas2js.pp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. {
  2. This file is part of the Free Component Library (FCL)
  3. Copyright (c) 2014 by Michael Van Canneyt
  4. Pascal to Javascript converter program.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {$mode objfpc}
  12. {$h+}
  13. program pas2js;
  14. uses
  15. sysutils, classes, pparser, fppas2js, pastree, jstree, jswriter;
  16. Type
  17. { TContainer }
  18. TContainer = Class(TPasTreeContainer)
  19. public
  20. function CreateElement(AClass: TPTreeElement; const AName: String;
  21. AParent: TPasElement; AVisibility: TPasMemberVisibility;
  22. const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement;
  23. overload; override;
  24. function FindElement(const AName: String): TPasElement; override;
  25. end;
  26. { TConvertPascal }
  27. TConvertPascal = Class(TComponent)
  28. Procedure ConvertSource(ASource, ADest : String);
  29. end;
  30. { TContainer }
  31. function TContainer.CreateElement(AClass: TPTreeElement; const AName: String;
  32. AParent: TPasElement; AVisibility: TPasMemberVisibility;
  33. const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement;
  34. begin
  35. Result:=AClass.Create(AName,AParent);
  36. end;
  37. function TContainer.FindElement(const AName: String): TPasElement;
  38. begin
  39. Result:=Nil;
  40. end;
  41. { TConvertPascal }
  42. Procedure TConvertPascal.ConvertSource(ASource, ADest: String);
  43. Var
  44. p : TPasParser;
  45. C : TPAsTreeContainer;
  46. M : TPasModule;
  47. CV : TPasToJSConverter;
  48. JS : TJSElement;
  49. W : TJSWriter;
  50. begin
  51. C:=TContainer.Create;
  52. try
  53. M:=ParseSource(C,ASource,'','',True);
  54. try
  55. CV:=TPasToJSConverter.Create;
  56. try
  57. JS:=CV.ConvertElement(M);
  58. If JS=nil then
  59. Writeln('No result');
  60. finally
  61. CV.Free;
  62. end;
  63. W:=TJSWriter.Create(ADest);
  64. try
  65. W.Options:=[woUseUTF8,woCompactArrayLiterals,woCompactObjectLiterals,woCompactArguments];
  66. W.IndentSize:=2;
  67. W.WriteJS(JS);
  68. finally
  69. W.Free;
  70. end;
  71. finally
  72. M.Free;
  73. end;
  74. finally
  75. C.Free;
  76. end;
  77. end;
  78. Var
  79. Src,Dest : String;
  80. begin
  81. Src:=Paramstr(1);
  82. Dest:=ParamStr(2);
  83. if Dest='' then
  84. Dest:=ChangeFileExt(Src,'.js');
  85. With TConvertPascal.Create(Nil) do
  86. try
  87. ConvertSource(Src,Dest);
  88. finally
  89. Free;
  90. end;
  91. With TStringList.Create do
  92. try
  93. LoadFromFile(Dest);
  94. Writeln(Text);
  95. finally
  96. Free;
  97. end;
  98. end.