[fpc-devel] MakeSkel and FPDoc projects
Hans-Peter Diettrich
DrDiettrich1 at aol.com
Fri Dec 16 17:48:09 CET 2011
When MakeSkel shall use FPDoc projects, this can be achieved by adding
something like:
procedure LoadProject(const Arg: string);
begin
ProjectName := Arg;
Project := TFPDocProject.Create(Nil); //owner component?
With TXMLFPDocOptions.Create(Project) do
try
LoadOptionsFromFile(Project,Arg);
if (PackageName = '') and (Project.Packages.Count > 0) then
PackageName := Project.Packages[0].Name;
finally
Free;
end;
end;
Handling of the InputFiles and DescrFiles can be added similar to above
handling of the (default) PackageName, e.g.
if assigned(Project) then
//the package *must* be part of the project
Pkg := Project.Packages.FindPackage(PackageName)
else
Pkg := nil; //project not usable
if assigned(Pkg) then begin
InputFiles.Assign(Pkg.Inputs);
DescrFiles.Assign(Pkg.Descriptions);
//extract further options?
end;
DocumentPackage(...)
Since new description files should be added to the project, I'd suggest
that MakeSkel uses a Project and the lists as stored in it, instead of
the InputFiles and DescrFiles variables. This change only affects the
program code, which passes these lists to DocumentPackage.
Then the created skeletons can be added to the DescrFiles list, and the
updated project can be saved on exit.
Furthermore it should be possible to process a single module from a
project package, for which e.g. a skeleton shall be created, or which
should be checked for errors by fpdoc. This requires that the --input
value selects one of the input files in the project. This can be
simplified by splitting the InputFile strings, into File and Options
parts, as is already done in the project files. The stringlist
representation could e.g. look like <file>=<options>, so that
IndexOfName can be used to select an entry, and the "=" is replaced by
an space before the entry is passed to the worker code. Then also
another option --unit=<unit-name> can be used to select the specific
input file to process. Then the stringlist representation also can be
changed to <unit-name>=<existing --input descriptor>, and
Values[<unit-name>] can be passed to the worker code.
Currently FPDoc scans the commandline for a project first, before
parsing the other options. This extra handling could be removed, with
the effect that options before the --project option are defaults, which
are overridden by the project settings, while options after --project
override the project settings. This consideration applies to all
programs, which accept an fpdoc project.
I'm willing to provide "clean" patches, once I know which of above
suggestions to implement. This would be much easier when the worker code
would be moved out of the program files, into dedicated units. Then the
modifications to the program files can be separated from modifications
to the worker unit(s).
DoDi
More information about the fpc-devel
mailing list