* grapviz output for fpclasschart, mantis 18201

git-svn-id: trunk@16690 -
This commit is contained in:
marco 2011-01-02 21:09:30 +00:00
parent 5fc94a5076
commit efabb72e71

View File

@ -349,8 +349,82 @@ begin
Close(FFile);
end;
type
{ TGraphVizClassChartFormatter }
TGraphVizClassChartFormatter = class(TClassChartFormatter)
FFile : Text;
FMode : TClassMode;
FIndent : integer;
Procedure EmitLine(S : string);
Protected
procedure DoEmitClass(E : TDomElement); override;
procedure DoNextColumn(E: TDomElement); override;
procedure DoHeadClass(E: TDomElement); override;
procedure StartSubClass(E: TDomElement); override;
procedure EndSubClass(E: TDomElement; HasSiblings : Boolean); override;
Procedure StartChart; override;
Procedure EndChart; override;
end;
{ TGraphVizClassChartFormatter }
procedure TGraphVizClassChartFormatter.EmitLine(S: String);
begin
Writeln(FFile,StringofChar(' ',Findent*2),S);
end;
procedure TGraphVizClassChartFormatter.DoEmitClass(E: TDomElement);
begin
Case ClassMode of
cmFirstClass : EmitLine(Format('%s -> %s', [E.ParentNode.NodeName, E.NodeName]));
cmNormal : EmitLine(Format('%s -> %s', [E.ParentNode.NodeName, E.NodeName]));
cmSubClass : EmitLine(Format('%s -> %s', [E.ParentNode.NodeName, E.NodeName]));
cmHeadClass : EmitLine(Format('%s -> %s', [E.ParentNode.NodeName, E.NodeName]));
end;
end;
procedure TGraphVizClassChartFormatter.DoNextColumn(E: TDomElement);
begin
Inherited;
FIndent:=0;
end;
procedure TGraphVizClassChartFormatter.DoHeadClass(E: TDomElement);
begin
// DoNextColumn(E);
inherited DoHeadClass(E);
end;
procedure TGraphVizClassChartFormatter.EndSubClass(E: TDomElement; HasSiblings : Boolean);
begin
If FIndent>0 then
Dec(Findent);
end;
procedure TGraphVizClassChartFormatter.StartSubClass(E: TDomElement);
begin
inherited StartSubClass(E);
Inc(Findent);
end;
procedure TGraphVizClassChartFormatter.StartChart;
begin
Assign(FFile,FileName);
Rewrite(FFile);
EmitLine('digraph G {');
end;
procedure TGraphVizClassChartFormatter.EndChart;
begin
EmitLine('}');
Close(FFile);
end;
Type
TOutputFormat = (ofxml,ofPostscript);
TOutputFormat = (ofXML,ofPostscript, ofGraphViz);
Var
OutputFormat : TOutputFormat = ofXML;
@ -361,7 +435,6 @@ const
FPCVersion: String = {$I %FPCVERSION%};
FPCDate: String = {$I %FPCDATE%};
function TClassTreeEngine.CreateElement(AClass: TPTreeElement; const AName: String;
AParent: TPasElement; AVisibility : TPasMemberVisibility;
@ -583,6 +656,14 @@ begin
finally
Free;
end;
ofGraphViz :
With TGraphVizClassChartFormatter.Create(XML) do
try
FileName:=AOutputName;
CreateChart;
finally
Free;
end;
end;
Writeln(StdErr,Format(SClassesAdded,[ACount,InputFiles.Count]));
Finally
@ -632,6 +713,7 @@ begin
Writeln(' --kind=objectkind Specify object kind. One of object, class, interface.');
Writeln(' --lang=language Use selected language.');
Writeln(' --output=filename Send output to file.');
Writeln(' --format=name Kind of output to create: XML, PostScript, GraphViz.');
end;
procedure ParseOption(const s: String);