1 Index: fpcsrc/utils/fpdoc/dglobals.pp
2 ===================================================================
3 --- fpcsrc/utils/fpdoc/dglobals.pp (revision 34748)
4 +++ fpcsrc/utils/fpdoc/dglobals.pp (revision 34749)
6 SUsageOption120 = ' At least one input option is required.';
7 SUsageOption130 = '--input-dir=Dir Add All *.pp and *.pas files in Dir to list of input files';
8 SUsageOption140 = '--lang=lng Select output language.';
9 + SUsageOption145 = '--macro=name=value Define a macro to preprocess the project file with.';
10 SUsageOption150 = '--ostarget=value Set the target OS for the scanner.';
11 SUsageOption160 = '--output=name use name as the output name.';
12 SUsageOption170 = ' Each backend interprets this as needed.';
14 SUsageFormats = 'The following output formats are supported by this fpdoc:';
15 SUsageBackendHelp = 'Specify an output format, combined with --help to get more help for this backend.';
16 SUsageFormatSpecific = 'Output format "%s" supports the following options:';
17 + SCmdLineErrInvalidMacro = 'Macro needs to be in the form name=value';
19 SCmdLineInvalidOption = 'Ignoring unknown option "%s"';
20 SCmdLineInvalidFormat = 'Invalid format "%s" specified';
21 Index: fpcsrc/utils/fpdoc/mkfpdoc.pp
22 ===================================================================
23 --- fpcsrc/utils/fpdoc/mkfpdoc.pp (revision 34748)
24 +++ fpcsrc/utils/fpdoc/mkfpdoc.pp (revision 34749)
26 FOnLog: TPasParserLogHandler;
27 FPParserLogEvents: TPParserLogEvents;
28 FProject : TFPDocProject;
29 + FProjectMacros: TStrings;
30 FScannerLogEvents: TPScannerLogEvents;
32 function GetOptions: TEngineOptions;
34 function GetPackages: TFPDocPackages;
35 procedure SetBaseDescrDir(AValue: String);
36 procedure SetBaseInputDir(AValue: String);
37 + procedure SetProjectMacros(AValue: TStrings);
39 Function FixInputFile(Const AFileName : String) : String;
40 Function FixDescrFile(Const AFileName : String) : String;
42 // When set, they will be prepended to non-absolute filenames.
43 Property BaseInputDir : String Read FBaseInputDir Write SetBaseInputDir;
44 Property BaseDescrDir : String Read FBaseDescrDir Write SetBaseDescrDir;
45 + // Macros used when loading the project file
46 + Property ProjectMacros : TStrings Read FProjectMacros Write SetProjectMacros;
54 -Procedure TFPDocCreator.DoLog(Const Msg: String);
55 +procedure TFPDocCreator.DoLog(const Msg: String);
57 If Assigned(OnLog) then
61 -procedure TFPDocCreator.DoLog(Const Fmt: String; Args: Array of Const);
62 +procedure TFPDocCreator.DoLog(const Fmt: String; Args: array of const);
64 DoLog(Format(Fmt,Args));
67 Result:=FProject.Packages;
70 -Function TFPDocCreator.FixInputFile(Const AFileName: String): String;
71 +function TFPDocCreator.FixInputFile(const AFileName: String): String;
74 If Result='' then exit;
76 Result:=BaseInputDir+Result;
79 -Function TFPDocCreator.FixDescrFile(Const AFileName: String): String;
80 +function TFPDocCreator.FixDescrFile(const AFileName: String): String;
83 If Result='' then exit;
85 FBaseInputDir:=IncludeTrailingPathDelimiter(FBaseInputDir);
88 -Procedure TFPDocCreator.DoBeforeEmitNote(Sender: TObject; Note: TDomElement;
89 - Var EmitNote: Boolean);
90 +procedure TFPDocCreator.SetProjectMacros(AValue: TStrings);
92 + if FProjectMacros=AValue then Exit;
93 + FProjectMacros.Assign(AValue);
96 +procedure TFPDocCreator.DoBeforeEmitNote(Sender: TObject; Note: TDomElement;
97 + var EmitNote: Boolean);
102 -Constructor TFPDocCreator.Create(AOwner: TComponent);
103 +constructor TFPDocCreator.Create(AOwner: TComponent);
105 inherited Create(AOwner);
106 FProject:=TFPDocProject.Create(Self);
107 @@ -178,12 +188,14 @@
108 FProject.Options.CPUTarget:=DefCPUTarget;
109 FProject.Options.OSTarget:=DefOSTarget;
110 FProcessedUnits:=TStringList.Create;
111 + FProjectMacros:=TStringList.Create;
114 -Destructor TFPDocCreator.Destroy;
115 +destructor TFPDocCreator.Destroy;
117 FreeAndNil(FProcessedUnits);
118 FreeAndNil(FProject);
119 + FreeAndNil(FProjectMacros);
124 Engine.WriteContentFile(APackage.ContentFile);
127 -Procedure TFPDocCreator.CreateDocumentation(APackage: TFPDocPackage;
128 +procedure TFPDocCreator.CreateDocumentation(APackage: TFPDocPackage;
136 -Procedure TFPDocCreator.CreateProjectFile(Const AFileName: string);
137 +procedure TFPDocCreator.CreateProjectFile(const AFileName: string);
139 With TXMLFPDocOptions.Create(Self) do
141 @@ -292,11 +304,14 @@
145 -Procedure TFPDocCreator.LoadProjectFile(Const AFileName: string);
146 +procedure TFPDocCreator.LoadProjectFile(const AFileName: string);
148 With TXMLFPDocOptions.Create(self) do
150 - LoadOptionsFromFile(FProject,AFileName);
151 + if (ProjectMacros.Count>0) then
152 + LoadOptionsFromFile(FProject,AFileName,ProjectMacros)
154 + LoadOptionsFromFile(FProject,AFileName,Nil);
158 Index: fpcsrc/utils/fpdoc/fpdoc.pp
159 ===================================================================
160 --- fpcsrc/utils/fpdoc/fpdoc.pp (revision 34748)
161 +++ fpcsrc/utils/fpdoc/fpdoc.pp (revision 34749)
163 Writeln(SUsageOption120);
164 Writeln(SUsageOption130);
165 Writeln(SUsageOption140);
166 + Writeln(SUsageOption145);
167 Writeln(SUsageOption150);
168 Writeln(SUsageOption160);
169 Writeln(SUsageOption170);
170 @@ -181,11 +182,12 @@
172 SOptProject = '--project=';
173 SOptPackage = '--package=';
175 + SOptMacro = '--macro=';
177 Function ProjectOpt(Const s : string) : boolean;
180 - Result:=(Copy(s,1,3)='-p=') or (Copy(s,1,Length(SOptProject))=SOptProject);
181 + Result:=(Copy(s,1,3)='-p=') or (Copy(s,1,Length(SOptProject))=SOptProject) or (Copy(s,1,Length(SOptMacro))=SOptMacro);
184 Function PackageOpt(Const s : string) : boolean;
190 + ProjectFileName,Cmd, Arg: String;
193 if (s = '-h') or (s = '--help') then
195 AddDirToFileList(SelectedPackage.Descriptions, Arg, '*.xml')
196 else if (Cmd = '--base-descr-dir') then
197 FCreator.BaseDescrDir:=Arg
198 + else if (Cmd = '--macro') then
200 + If Pos('=',Arg)=0 then
201 + WriteLn(StdErr, Format(SCmdLineErrInvalidMacro, [Arg]));
202 + FCreator.ProjectMacros.Add(Arg);
204 else if (Cmd = '-f') or (Cmd = '--format') then
207 @@ -384,23 +392,28 @@
208 Procedure TFPDocApplication.DoRun;
212 - gettext.TranslateResourceStrings('/usr/local/share/locale/%s/LC_MESSAGES/fpdoc.mo');
214 - gettext.TranslateResourceStrings('intl/fpdoc.%s.mo');
217 - WriteLn(Format(SVersion, [DefFPCVersion, DefFPCDate]));
218 - WriteLn(SCopyright1);
219 - WriteLn(SCopyright2);
222 - if (FWriteProjectFile<>'') then
223 - FCreator.CreateProjectFile(FWriteProjectFile)
225 - FCreator.CreateDocumentation(FPackage,FDryRun);
230 + gettext.TranslateResourceStrings('/usr/local/share/locale/%s/LC_MESSAGES/fpdoc.mo');
232 + gettext.TranslateResourceStrings('intl/fpdoc.%s.mo');
235 + WriteLn(Format(SVersion, [DefFPCVersion, DefFPCDate]));
236 + WriteLn(SCopyright1);
237 + WriteLn(SCopyright2);
240 + if (FWriteProjectFile<>'') then
241 + FCreator.CreateProjectFile(FWriteProjectFile)
243 + FCreator.CreateDocumentation(FPackage,FDryRun);
252 constructor TFPDocApplication.Create(AOwner: TComponent);
253 Index: fpcsrc/utils/fpdoc/fpdocxmlopts.pas
254 ===================================================================
255 --- fpcsrc/utils/fpdoc/fpdocxmlopts.pas (revision 34748)
256 +++ fpcsrc/utils/fpdoc/fpdocxmlopts.pas (revision 34749)
258 TXMLFPDocOptions = Class(TComponent)
261 + Function PreProcessFile(const AFileName: String; Macros: TStrings): TStream; virtual;
262 Procedure Error(Const Msg : String);
263 Procedure Error(Const Fmt : String; Args : Array of Const);
264 Procedure LoadPackage(APackage : TFPDocPackage; E : TDOMElement); virtual;
266 procedure SaveInputFile(const AInputFile: String; XML: TXMLDocument; AParent: TDOMElement);virtual;
267 Procedure SavePackage(APackage : TFPDocPackage; XML : TXMLDocument; AParent : TDOMElement); virtual;
269 - Procedure LoadOptionsFromFile(AProject : TFPDocProject; Const AFileName : String);
270 + Procedure LoadOptionsFromFile(AProject : TFPDocProject; Const AFileName : String; Macros : TStrings = Nil);
271 Procedure LoadFromXML(AProject : TFPDocProject; XML : TXMLDocument); virtual;
272 Procedure SaveOptionsToFile(AProject : TFPDocProject; Const AFileName : String);
273 procedure SaveToXML(AProject : TFPDocProject; ADoc: TXMLDocument); virtual;
278 -procedure TXMLFPDocOptions.Error(Const Msg: String);
279 +procedure TXMLFPDocOptions.Error(const Msg: String);
281 Raise EXMLFPDoc.Create(Msg);
287 -Procedure TXMLFPDocOptions.SaveEngineOptions(Options : TEngineOptions; XML : TXMLDocument; AParent : TDOMElement);
288 +procedure TXMLFPDocOptions.SaveEngineOptions(Options: TEngineOptions;
289 + XML: TXMLDocument; AParent: TDOMElement);
291 procedure AddStr(const n, v: string);
297 -Procedure TXMLFPDocOptions.SaveInputFile(Const AInputFile : String; XML : TXMLDocument; AParent: TDOMElement);
298 +procedure TXMLFPDocOptions.SaveInputFile(const AInputFile: String;
299 + XML: TXMLDocument; AParent: TDOMElement);
304 AParent['options']:=O;
307 -Procedure TXMLFPDocOptions.SaveDescription(Const ADescription : String; XML : TXMLDocument; AParent: TDOMElement);
308 +procedure TXMLFPDocOptions.SaveDescription(const ADescription: String;
309 + XML: TXMLDocument; AParent: TDOMElement);
312 AParent['file']:=ADescription;
314 AParent['prefix']:=Copy(AImportFile,i+1,Length(AImportFile));
317 -Procedure TXMLFPDocOptions.SavePackage(APackage: TFPDocPackage; XML : TXMLDocument; AParent: TDOMElement);
318 +procedure TXMLFPDocOptions.SavePackage(APackage: TFPDocPackage;
319 + XML: TXMLDocument; AParent: TDOMElement);
323 @@ -358,17 +363,55 @@
327 +Function TXMLFPDocOptions.PreprocessFile(const AFileName: String; Macros : TStrings) : TStream;
329 -procedure TXMLFPDocOptions.LoadOptionsFromFile(AProject: TFPDocProject; const AFileName: String);
332 + P : TTemplateParser;
339 + F:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyWrite);
341 + P:=TTemplateParser.Create;
342 + P.AllowTagParams:=False;
343 + P.StartDelimiter:='{{';
344 + P.EndDelimiter:='}}';
345 + For I:=0 to Macros.Count-1 do
347 + Macros.GetNameValue(I,N,V);
350 + Result:=TMemoryStream.Create;
351 + P.ParseStream(F,Result);
352 + Result.Position:=0;
359 +procedure TXMLFPDocOptions.LoadOptionsFromFile(AProject: TFPDocProject;
360 + const AFileName: String; Macros: TStrings = Nil);
367 - ReadXMLFile(XML,AFileName);
370 + S:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyWrite)
372 + S:=PreProcessFile(AFileName,Macros);
374 + ReadXMLFile(XML,S);
375 LoadFromXML(AProject,XML);
382 LoadEngineOptions(AProject.Options,N as TDOMElement);
385 -Procedure TXMLFPDocOptions.SaveOptionsToFile(AProject: TFPDocProject; const AFileName: String);
386 +procedure TXMLFPDocOptions.SaveOptionsToFile(AProject: TFPDocProject;
387 + const AFileName: String);