diff --git a/utils/fpdoc/dglobals.pp b/utils/fpdoc/dglobals.pp index 07a3918bbe..f6169b2ae6 100644 --- a/utils/fpdoc/dglobals.pp +++ b/utils/fpdoc/dglobals.pp @@ -201,6 +201,8 @@ type destructor Destroy; override; end; + TPasExternalClassType = Class(TPasClassType); + TPasExternalModule = Class(TPasModule); { Link entry tree TFPDocEngine stores the root of the entry tree in its property @@ -738,7 +740,7 @@ var begin if not CreateNew then exit; - Module := TPasModule.Create(s, HPackage); + Module := TPasExternalModule.Create(s, HPackage); Module.InterfaceSection := TInterfaceSection.Create('', Module); HPackage.Modules.Add(Module); end; @@ -799,7 +801,7 @@ var begin s:= ResolvePackageModule(AName,HPackage,Module,True); // Create node for class - Result := TPasClassType.Create(s, Module.InterfaceSection); + Result := TPasExternalClassType.Create(s, Module.InterfaceSection); Result.ObjKind := okClass; Module.InterfaceSection.Declarations.Add(Result); Module.InterfaceSection.Classes.Add(Result); diff --git a/utils/fpdoc/dw_html.pp b/utils/fpdoc/dw_html.pp index 1c90fa7d30..2be4a7b279 100644 --- a/utils/fpdoc/dw_html.pp +++ b/utils/fpdoc/dw_html.pp @@ -2395,7 +2395,7 @@ procedure THTMLWriter.CreateClassHierarchyPage(AList : TStringList; AddUnit : Bo end end else - AppendText(CurOutputNode,P.Name); + AppendText(CurOutputNode,EN); LL:=TStringList.Create; try N:=E.FirstChild; @@ -2480,7 +2480,8 @@ begin For I:=0 to Package.Modules.Count-1 do begin M:=TPasModule(Package.Modules[i]); - Self.AddElementsFromList(L,M.InterfaceSection.Classes,True) + if Not (M is TPasExternalModule) then + Self.AddElementsFromList(L,M.InterfaceSection.Classes,True) end; AppendMenuBar(ClassHierarchySubIndex); S:=Package.Name; diff --git a/utils/fpdoc/fpdocclasstree.pp b/utils/fpdoc/fpdocclasstree.pp index 4cd478c656..35ee95a1fe 100644 --- a/utils/fpdoc/fpdocclasstree.pp +++ b/utils/fpdoc/fpdocclasstree.pp @@ -18,7 +18,7 @@ Type Protected function LookForElement(PE: TDomElement; AElement: TPasElement): TDomNode; function NodeMatch(N: TDomNode; AElement: TPasElement): Boolean; - Function AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement; + Function AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement; Public Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass); Destructor Destroy; override; @@ -74,14 +74,18 @@ end; Function TClassTreeBuilder.NodeMatch(N : TDomNode; AElement : TPasElement) : Boolean; Var - S : String; + PN,S : String; begin Result:=(N.NodeType=ELEMENT_NODE); if Result then begin S:=N.NodeName; - S:=FPackage.Name+'.'+TDomElement(N)['unit']+'.'+S; + IF Assigned(Aelement.GetModule) then + PN:=Aelement.GetModule.PackageName + else + PN:=FPackage.Name; + S:='#'+PN+'.'+TDomElement(N)['unit']+S; Result:= (CompareText(S,AElement.PathName)=0) end; end; @@ -96,20 +100,21 @@ begin While (Result<>Nil) and Not NodeMatch(Result,AElement) do Result:=Result.NextSibling; If (Result=Nil) then - begin - N:=PE.FirstChild; - While (Result=Nil) and (N<>Nil) do + if Assigned(PE) then begin - if (N.NodeType=ELEMENT_NODE) then + N:=PE.FirstChild; + While (Result=Nil) and (N<>Nil) do begin - Result:=LookForElement(N as TDomElement,AElement); + if (N.NodeType=ELEMENT_NODE) then + begin + Result:=LookForElement(N as TDomElement,AElement); + end; + N:=N.NextSibling; end; - N:=N.NextSibling; end; - end end; -Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement; +Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement; Var PC : TPasClassType; @@ -123,14 +128,21 @@ begin Result:=FTreeStart else If (AElement is TPasClassType) then begin - Writeln('Doing ',AElement.Name); if (AElement=FParentObject) then Result:=FTreeStart else begin PC:=AElement as TPasClassType; - PE:=AddToClassTree(PC.AncestorType,ACount); - N:=LookForElement(PE,AElement); + PE:=AddToClassTree(PC.AncestorType,ACount+1); + if PE=Nil then + begin + Write('Name ',PC.Name,' parent '); + if Assigned(PC.AncestorType) then + Write('(Name: ',PC.AncestorType.Name,' Type:',PC.ANcestorType.ClassName,')'); + PE:=FClassTree.CreateElement(PC.AncestorType.Name); + FTreeStart.AppendChild(PE); + end; + N:=LookForElement(PE,PC); If (N<>Nil) then Result:=N as TDomElement else @@ -143,13 +155,6 @@ begin if Assigned(M) then Result['unit']:=M.Name; end; - if (PE=FTreeStart) then - begin - Writeln('Adding to tree start :',AELement.Name); - Writeln('Have ancestor : ',PC.AncestorType<>Nil); - if (PC.AncestorType<>Nil) then - Writeln(PC.AncestorType.ClassName, ' : '+PC.AncestorType.Name); - end; PE.AppendChild(Result); end; end;