fpdocproj.pas 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. unit fpdocproj;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils;
  6. Type
  7. { TFPDocPackage }
  8. TFPDocPackage = Class(TCollectionItem)
  9. private
  10. FContent: String;
  11. FDescriptions: TStrings;
  12. FIMports: TStrings;
  13. FinPuts: TStrings;
  14. FName: String;
  15. FOutput: String;
  16. Public
  17. constructor Create(ACollection: TCollection); override;
  18. destructor destroy; override;
  19. procedure Assign(Source : TPersistent); override;
  20. Property Name : String Read FName Write FName;
  21. Property Inputs : TStrings Read FinPuts;
  22. Property Descriptions : TStrings Read FDescriptions;
  23. Property Imports : TStrings read FIMports;
  24. Property ContentFile : String Read FContent Write FContent;
  25. Property Output : String Read FOutput Write FOutput;
  26. end;
  27. { TFPDocPackages }
  28. TFPDocPackages = Class(TCollection)
  29. private
  30. function GetP(AIndex : Integer): TFPDocPackage;
  31. procedure SetP(AIndex : Integer; const AValue: TFPDocPackage);
  32. Public
  33. Function IndexOfPackage(Const AName : String) : Integer;
  34. Function FindPackage(Const AName : String) : TFPDOcPackage;
  35. Property Packages[AIndex : Integer] : TFPDocPackage Read GetP Write SetP; Default;
  36. end;
  37. { TEngineOptions }
  38. TEngineOptions = Class(TPersistent)
  39. private
  40. FBackEndoptions: TStrings;
  41. FCPUTarget: String;
  42. FDefaultPackageName: String;
  43. FFormat: String;
  44. FHidePrivate: Boolean;
  45. FHideProtected: Boolean;
  46. FIO: Boolean;
  47. FLanguage: String;
  48. FMoDir: String;
  49. FOSTarget: String;
  50. FSOPE: Boolean;
  51. FWarnNoNode: Boolean;
  52. procedure SetBackendOptions(const AValue: TStrings);
  53. Public
  54. Constructor Create;
  55. Destructor Destroy; override;
  56. procedure Assign(Source : TPersistent); override;
  57. Published
  58. Property OSTarget : String Read FOSTarget Write FOStarget;
  59. Property CPUTarget : String Read FCPUTarget Write FCPUTarget;
  60. Property Language : String Read FLanguage Write fLanguage;
  61. Property Backend : String Read FFormat Write FFormat;
  62. Property BackendOptions : TStrings Read FBackEndoptions Write SetBackendOptions;
  63. Property StopOnParseError : Boolean Read FSOPE Write FSOPE;
  64. Property HideProtected : Boolean Read FHideProtected Write FHideProtected;
  65. Property WarnNoNode : Boolean Read FWarnNoNode Write FWarnNoNode;
  66. Property ShowPrivate : Boolean Read FHidePrivate Write FHidePrivate;
  67. Property InterfaceOnly : Boolean Read FIO Write FIO;
  68. Property MoDir : String Read FMoDir Write FMODir;
  69. Property DefaultPackageName : String Read FDefaultPackageName Write FDefaultPackageName;
  70. end;
  71. { TFPDocProject }
  72. TFPDocProject = Class(TComponent)
  73. private
  74. FOptions: TEngineOptions;
  75. FPackages: TFPDocPackages;
  76. procedure setOptions(const AValue: TEngineOptions);
  77. Public
  78. Constructor Create(AOwner : TComponent); override;
  79. Destructor Destroy; override;
  80. Published
  81. Property Packages : TFPDocPackages Read FPackages Write FPackages;
  82. Property Options : TEngineOptions Read FOptions Write setOptions;
  83. end;
  84. implementation
  85. { TEngineOptions }
  86. procedure TEngineOptions.SetBackendOptions(const AValue: TStrings);
  87. begin
  88. if FBackEndoptions=AValue then exit;
  89. FBackEndoptions.Assign(AValue);
  90. end;
  91. constructor TEngineOptions.Create;
  92. begin
  93. FBackendOptions:=TStringList.Create;
  94. end;
  95. destructor TEngineOptions.Destroy;
  96. begin
  97. FreeAndNil(FBackendOptions);
  98. inherited Destroy;
  99. end;
  100. procedure TEngineOptions.Assign(Source: TPersistent);
  101. var
  102. O : TEngineOptions;
  103. begin
  104. if (Source is TEngineOptions) then
  105. begin
  106. O:=Source as TEngineOptions;
  107. FBackEndoptions.Assign(O.BackendOptions);
  108. FCPUTarget:=O.CPUTarget;
  109. FFormat:=O.Backend;
  110. FLanguage:=O.Language;
  111. FOSTarget:=O.OSTarget;
  112. FSOPE:=O.StopOnParseError;
  113. HideProtected:=O.HideProtected;
  114. WarnNoNode:=O.WarnNoNode;
  115. ShowPrivate:=O.ShowPrivate;
  116. InterfaceOnly:=O.InterfaceOnly;
  117. MoDir:=O.MoDir;
  118. end
  119. else
  120. inherited Assign(Source);
  121. end;
  122. { TFPDocProject }
  123. procedure TFPDocProject.setOptions(const AValue: TEngineOptions);
  124. begin
  125. if FOptions=AValue then exit;
  126. FOptions.Assign(AValue);
  127. end;
  128. constructor TFPDocProject.Create(AOwner: TComponent);
  129. begin
  130. inherited Create(AOwner);
  131. FPackages:=TFPDocPackages.Create(TFPDocPackage);
  132. FOptions:=TEngineOptions.Create;
  133. end;
  134. destructor TFPDocProject.Destroy;
  135. begin
  136. FreeAndNil(Foptions);
  137. FreeAndNil(FPackages);
  138. inherited Destroy;
  139. end;
  140. { TFPDocPackages }
  141. function TFPDocPackages.GetP(AIndex : Integer): TFPDocPackage;
  142. begin
  143. Result:=TFPDocPackage(Items[AIndex]);
  144. end;
  145. procedure TFPDocPackages.SetP(AIndex : Integer; const AValue: TFPDocPackage);
  146. begin
  147. Items[AIndex]:=AValue;
  148. end;
  149. function TFPDocPackages.IndexOfPackage(const AName: String): Integer;
  150. begin
  151. Result:=Count-1;
  152. While (Result>=0) and (CompareText(GetP(Result).Name,AName)<>0) do
  153. Dec(Result)
  154. end;
  155. function TFPDocPackages.FindPackage(const AName: String): TFPDOcPackage;
  156. Var
  157. I : Integer;
  158. begin
  159. I:=IndexOfPackage(AName);
  160. If (I=-1) then
  161. Result:=Nil
  162. else
  163. Result:=GetP(I);
  164. end;
  165. { TFPDocPackage }
  166. constructor TFPDocPackage.Create(ACollection: TCollection);
  167. begin
  168. inherited Create(ACollection);
  169. FImports:=TStringList.Create;
  170. FDescriptions:=TStringList.Create;
  171. FInputs:=TStringList.Create;
  172. end;
  173. destructor TFPDocPackage.destroy;
  174. begin
  175. FreeAndNil(FDescriptions);
  176. FreeAndNil(FIMports);
  177. FreeAndNil(FinPuts);
  178. inherited destroy;
  179. end;
  180. procedure TFPDocPackage.Assign(Source: TPersistent);
  181. Var
  182. P : TFPDocPackage;
  183. begin
  184. If Source is TFPDocPackage then
  185. begin
  186. P:=Source as TFPDocPackage;
  187. Fname:=P.Name;
  188. FContent:=P.ContentFile;
  189. FImports.Assign(P.Imports);
  190. FInputs.Assign(P.Inputs);
  191. FDescriptions.Assign(P.Descriptions);
  192. end
  193. else
  194. inherited Assign(Source);
  195. end;
  196. end.