mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 00:49:09 +02:00
* Write class local consts and types in correct way
git-svn-id: trunk@22151 -
This commit is contained in:
parent
9d528c65e3
commit
74624a0c37
@ -88,6 +88,7 @@ type
|
|||||||
FOnTest: TNotifyEvent;
|
FOnTest: TNotifyEvent;
|
||||||
FPackage: TPasPackage;
|
FPackage: TPasPackage;
|
||||||
FCharSet : String;
|
FCharSet : String;
|
||||||
|
procedure AppendTypeDecl(AType: TPasType; TableEl, CodeEl: TDomElement);
|
||||||
function GetPageCount: Integer;
|
function GetPageCount: Integer;
|
||||||
procedure SetOnTest(const AValue: TNotifyEvent);
|
procedure SetOnTest(const AValue: TNotifyEvent);
|
||||||
protected
|
protected
|
||||||
@ -260,6 +261,7 @@ type
|
|||||||
Procedure WriteDoc; override;
|
Procedure WriteDoc; override;
|
||||||
Class Function FileNameExtension : String; override;
|
Class Function FileNameExtension : String; override;
|
||||||
class procedure Usage(List: TStrings); override;
|
class procedure Usage(List: TStrings); override;
|
||||||
|
Class procedure SplitImport(var AFilename, ALinkPrefix: String); override;
|
||||||
Property SearchPage: String Read FSearchPage Write FSearchPage;
|
Property SearchPage: String Read FSearchPage Write FSearchPage;
|
||||||
property Allocator: TFileAllocator read FAllocator;
|
property Allocator: TFileAllocator read FAllocator;
|
||||||
property Package: TPasPackage read FPackage;
|
property Package: TPasPackage read FPackage;
|
||||||
@ -2713,37 +2715,16 @@ begin
|
|||||||
FinishElementPage(AConst);
|
FinishElementPage(AConst);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure THTMLWriter.CreateTypePageBody(AType: TPasType);
|
procedure THTMLWriter.AppendTypeDecl(AType: TPasType; TableEl,CodeEl : TDomElement);
|
||||||
var
|
|
||||||
TableEl, TREl, TDEl, CodeEl: TDOMElement;
|
Var
|
||||||
DocNode: TDocNode;
|
TREl : TDomElement;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
s: String;
|
s: String;
|
||||||
EnumType: TPasEnumType;
|
EnumType: TPasEnumType;
|
||||||
EnumValue: TPasEnumValue;
|
EnumValue: TPasEnumValue;
|
||||||
Variable: TPasVariable;
|
Variable: TPasVariable;
|
||||||
begin
|
|
||||||
AppendMenuBar(-1);
|
|
||||||
AppendTitle(AType.Name);
|
|
||||||
AppendShortDescr(CreatePara(BodyElement), AType);
|
|
||||||
AppendText(CreateH2(BodyElement), SDocDeclaration);
|
|
||||||
AppendSourceRef(AType);
|
|
||||||
|
|
||||||
TableEl := CreateTable(BodyElement);
|
|
||||||
TREl := CreateTR(TableEl);
|
|
||||||
TDEl := CreateTD(TREl);
|
|
||||||
CodeEl := CreateCode(CreatePara(TDEl));
|
|
||||||
|
|
||||||
DocNode := Engine.FindDocNode(AType);
|
|
||||||
AppendKw(CodeEl, 'type ');
|
|
||||||
AppendText(CodeEl, AType.Name);
|
|
||||||
AppendSym(CodeEl, ' = ');
|
|
||||||
|
|
||||||
If Assigned(DocNode) and
|
|
||||||
Assigned(DocNode.Node) and
|
|
||||||
(Docnode.Node['opaque']='1') then
|
|
||||||
AppendText(CodeEl,SDocOpaque)
|
|
||||||
else
|
|
||||||
begin
|
begin
|
||||||
// Alias
|
// Alias
|
||||||
if AType.ClassType = TPasAliasType then
|
if AType.ClassType = TPasAliasType then
|
||||||
@ -2841,6 +2822,41 @@ begin
|
|||||||
// Probably one of the simple types, which allowed in other places as wel...
|
// Probably one of the simple types, which allowed in other places as wel...
|
||||||
AppendSym(AppendType(CodeEl, TableEl, TPasType(AType), True), ';');
|
AppendSym(AppendType(CodeEl, TableEl, TPasType(AType), True), ';');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure THTMLWriter.CreateTypePageBody(AType: TPasType);
|
||||||
|
var
|
||||||
|
TableEl, TREl, TDEl, CodeEl: TDOMElement;
|
||||||
|
DocNode: TDocNode;
|
||||||
|
i: Integer;
|
||||||
|
s: String;
|
||||||
|
EnumType: TPasEnumType;
|
||||||
|
EnumValue: TPasEnumValue;
|
||||||
|
Variable: TPasVariable;
|
||||||
|
begin
|
||||||
|
AppendMenuBar(-1);
|
||||||
|
AppendTitle(AType.Name);
|
||||||
|
AppendShortDescr(CreatePara(BodyElement), AType);
|
||||||
|
AppendText(CreateH2(BodyElement), SDocDeclaration);
|
||||||
|
AppendSourceRef(AType);
|
||||||
|
|
||||||
|
TableEl := CreateTable(BodyElement);
|
||||||
|
TREl := CreateTR(TableEl);
|
||||||
|
TDEl := CreateTD(TREl);
|
||||||
|
CodeEl := CreateCode(CreatePara(TDEl));
|
||||||
|
|
||||||
|
DocNode := Engine.FindDocNode(AType);
|
||||||
|
AppendKw(CodeEl, 'type ');
|
||||||
|
AppendText(CodeEl, AType.Name);
|
||||||
|
AppendSym(CodeEl, ' = ');
|
||||||
|
|
||||||
|
If Assigned(DocNode) and
|
||||||
|
Assigned(DocNode.Node) and
|
||||||
|
(Docnode.Node['opaque']='1') then
|
||||||
|
AppendText(CodeEl,SDocOpaque)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
AppendTypeDecl(AType,TableEl,CodeEl);
|
||||||
|
end;
|
||||||
FinishElementPage(AType);
|
FinishElementPage(AType);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2917,9 +2933,11 @@ var
|
|||||||
TableEl, TREl, TDEl, CodeEl: TDOMElement;
|
TableEl, TREl, TDEl, CodeEl: TDOMElement;
|
||||||
DocNode: TDocNode;
|
DocNode: TDocNode;
|
||||||
Member: TPasElement;
|
Member: TPasElement;
|
||||||
|
MVisibility,
|
||||||
CurVisibility: TPasMemberVisibility;
|
CurVisibility: TPasMemberVisibility;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
s: String;
|
s: String;
|
||||||
|
ah,ol,wt,ct,wc,cc : boolean;
|
||||||
ThisInterface,
|
ThisInterface,
|
||||||
ThisClass: TPasClassType;
|
ThisClass: TPasClassType;
|
||||||
HaveSeenTObject: Boolean;
|
HaveSeenTObject: Boolean;
|
||||||
@ -2976,57 +2994,81 @@ var
|
|||||||
AppendSym(CodeEl, ')');
|
AppendSym(CodeEl, ')');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if AClass.Members.Count > 0 then
|
if AClass.Members.Count > 0 then
|
||||||
begin
|
begin
|
||||||
|
wt:=False;
|
||||||
|
wc:=False;
|
||||||
CurVisibility := visDefault;
|
CurVisibility := visDefault;
|
||||||
for i := 0 to AClass.Members.Count - 1 do
|
for i := 0 to AClass.Members.Count - 1 do
|
||||||
begin
|
begin
|
||||||
Member := TPasElement(AClass.Members[i]);
|
Member := TPasElement(AClass.Members[i]);
|
||||||
if CurVisibility <> Member.Visibility then
|
MVisibility:=Member.Visibility;
|
||||||
|
ol:=(Member is TPasOverloadedProc);
|
||||||
|
ah:=ol or ((Member is TPasProcedure) and (TPasProcedure(Member).ProcType.Args.Count > 0));
|
||||||
|
if ol then
|
||||||
|
Member:=TPasElement((Member as TPasOverloadedProc).Overloads[0]);
|
||||||
|
if ((MVisibility = visPrivate) and Engine.HidePrivate) or
|
||||||
|
( (MVisibility = visProtected) and Engine.HideProtected) then
|
||||||
|
continue;
|
||||||
|
if (CurVisibility <> MVisibility) then
|
||||||
begin
|
begin
|
||||||
CurVisibility := Member.Visibility;
|
CurVisibility := MVisibility;
|
||||||
if ((CurVisibility = visPrivate) and Engine.HidePrivate) or
|
s:=VisibilityNames[MVisibility];
|
||||||
((CurVisibility = visProtected) and Engine.HideProtected) then
|
|
||||||
continue;
|
|
||||||
case CurVisibility of
|
|
||||||
visPrivate: s := 'private';
|
|
||||||
visProtected: s := 'protected';
|
|
||||||
visPublic: s := 'public';
|
|
||||||
visPublished: s := 'published';
|
|
||||||
visAutomated: s := 'automated';
|
|
||||||
end;
|
|
||||||
AppendKw(CreateCode(CreatePara(CreateTD(CreateTR(TableEl)))), s);
|
AppendKw(CreateCode(CreatePara(CreateTD(CreateTR(TableEl)))), s);
|
||||||
end else
|
end;
|
||||||
if ((CurVisibility = visPrivate) and Engine.HidePrivate) or
|
ct:=(Member is TPasType);
|
||||||
((CurVisibility = visProtected) and Engine.HideProtected) then
|
if ct and (not wt) then
|
||||||
continue;
|
begin
|
||||||
|
AppendKw(CreateCode(CreatePara(CreateTD(CreateTR(TableEl)))), 'Type');
|
||||||
|
end;
|
||||||
|
wt:=ct;
|
||||||
|
cc:=(Member is TPasConst);
|
||||||
|
if cc and (not wc) then
|
||||||
|
begin
|
||||||
|
AppendKw(CreateCode(CreatePara(CreateTD(CreateTR(TableEl)))), 'Const');
|
||||||
|
end;
|
||||||
|
wc:=cc;
|
||||||
TREl := CreateTR(TableEl);
|
TREl := CreateTR(TableEl);
|
||||||
CodeEl := CreateCode(CreatePara(CreateTD_vtop(TREl)));
|
CodeEl := CreateCode(CreatePara(CreateTD_vtop(TREl)));
|
||||||
AppendNbSp(CodeEl, 2);
|
AppendNbSp(CodeEl, 2);
|
||||||
AppendShortDescrCell(TREl, Member);
|
AppendShortDescrCell(TREl, Member);
|
||||||
|
|
||||||
if Member.InheritsFrom(TPasProcedureBase) then
|
if (Member is TPasProcedureBase) then
|
||||||
begin
|
begin
|
||||||
AppendKw(CodeEl, TPasProcedureBase(Member).TypeName + ' ');
|
AppendKw(CodeEl, TPasProcedureBase(Member).TypeName + ' ');
|
||||||
AppendHyperlink(CodeEl, Member);
|
AppendHyperlink(CodeEl, Member);
|
||||||
if (Member.ClassType = TPasOverloadedProc) or
|
if ah then
|
||||||
(TPasProcedure(Member).ProcType.Args.Count > 0) then
|
|
||||||
AppendSym(CodeEl, '();')
|
AppendSym(CodeEl, '();')
|
||||||
else
|
else
|
||||||
AppendSym(CodeEl, ';');
|
AppendSym(CodeEl, ';');
|
||||||
if Member.ClassType <> TPasOverloadedProc then
|
if Not OL then
|
||||||
AppendProcExt(CodeEl, TPasProcedure(Member));
|
AppendProcExt(CodeEl, TPasProcedure(Member));
|
||||||
end else
|
end
|
||||||
if Member.ClassType = TPasVariable then
|
else if (Member is TPasConst) then
|
||||||
|
begin
|
||||||
|
AppendHyperlink(CodeEl, Member);
|
||||||
|
If Assigned(TPasConst(Member).VarType) then
|
||||||
|
begin
|
||||||
|
AppendSym(CodeEl, ' = ');
|
||||||
|
AppendTypeDecl(TPasType(Member),TableEl,CodeEl);
|
||||||
|
end;
|
||||||
|
AppendSym(CodeEl, ' = ');
|
||||||
|
AppendText(CodeEl,TPasConst(Member).Expr.GetDeclaration(True));
|
||||||
|
end
|
||||||
|
else if (Member is TPasVariable) then
|
||||||
begin
|
begin
|
||||||
AppendHyperlink(CodeEl, Member);
|
AppendHyperlink(CodeEl, Member);
|
||||||
AppendSym(CodeEl, ': ');
|
AppendSym(CodeEl, ': ');
|
||||||
AppendHyperlink(CodeEl, TPasVariable(Member).VarType);
|
AppendHyperlink(CodeEl, TPasVariable(Member).VarType);
|
||||||
AppendSym(CodeEl, ';');
|
AppendSym(CodeEl, ';');
|
||||||
end else
|
end
|
||||||
if Member.ClassType = TPasProperty then
|
else if (Member is TPasType) then
|
||||||
|
begin
|
||||||
|
AppendHyperlink(CodeEl, Member);
|
||||||
|
AppendSym(CodeEl, ' = ');
|
||||||
|
AppendTypeDecl(TPasType(Member),TableEl,CodeEl);
|
||||||
|
end
|
||||||
|
else if (Member is TPasProperty) then
|
||||||
begin
|
begin
|
||||||
AppendKw(CodeEl, 'property ');
|
AppendKw(CodeEl, 'property ');
|
||||||
AppendHyperlink(CodeEl, Member);
|
AppendHyperlink(CodeEl, Member);
|
||||||
@ -3056,7 +3098,8 @@ var
|
|||||||
s := s + 's';
|
s := s + 's';
|
||||||
if Length(s) > 0 then
|
if Length(s) > 0 then
|
||||||
AppendText(CodeEl, ' [' + s + ']');
|
AppendText(CodeEl, ' [' + s + ']');
|
||||||
end else
|
end
|
||||||
|
else
|
||||||
AppendText(CreateWarning(CodeEl), '<' + Member.ClassName + '>');
|
AppendText(CreateWarning(CodeEl), '<' + Member.ClassName + '>');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3302,6 +3345,30 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure CreateTypePage(Element: TPasType);
|
||||||
|
begin
|
||||||
|
AppendKw(CodeEl, 'type ');
|
||||||
|
AppendHyperlink(CodeEl, Element.Parent);
|
||||||
|
AppendSym(CodeEl, '.');
|
||||||
|
AppendText(CodeEl, Element.Name);
|
||||||
|
AppendSym(CodeEl, ' = ');
|
||||||
|
AppendTypeDecl(Element,TableEl,CodeEl)
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CreateConstPage(Element: TPasConst);
|
||||||
|
begin
|
||||||
|
AppendKw(CodeEl, 'const ');
|
||||||
|
AppendHyperlink(CodeEl, Element.Parent);
|
||||||
|
AppendSym(CodeEl, '.');
|
||||||
|
AppendText(CodeEl, Element.Name);
|
||||||
|
if Assigned(Element.VarType) then
|
||||||
|
begin
|
||||||
|
AppendSym(CodeEl, ': ');
|
||||||
|
AppendType(CodeEl, TableEl, Element.VarType, False);
|
||||||
|
end;
|
||||||
|
AppendPasSHFragment(CodeEl, ' = ' + Element.Expr.GetDeclaration(True) + ';', 0);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure CreatePropertyPage(Element: TPasProperty);
|
procedure CreatePropertyPage(Element: TPasProperty);
|
||||||
var
|
var
|
||||||
NeedBreak: Boolean;
|
NeedBreak: Boolean;
|
||||||
@ -3390,24 +3457,23 @@ begin
|
|||||||
CodeEl := CreateCode(CreatePara(CreateTD(TREl)));
|
CodeEl := CreateCode(CreatePara(CreateTD(TREl)));
|
||||||
AppendText(CodeEl, ' '); // !!!: Workaround for current HTML writer
|
AppendText(CodeEl, ' '); // !!!: Workaround for current HTML writer
|
||||||
|
|
||||||
case AElement.Visibility of
|
if (AElement.Visibility<>visDefault) then
|
||||||
visPrivate: s := 'private';
|
begin
|
||||||
visProtected: s := 'protected';
|
s:=VisibilityNames[AElement.Visibility];
|
||||||
visPublic: s := 'public';
|
|
||||||
visPublished: s := 'published';
|
|
||||||
visAutomated: s := 'automated';
|
|
||||||
else s := '';
|
|
||||||
end;
|
|
||||||
if Length(s) > 0 then
|
|
||||||
AppendKw(CodeEl, s);
|
AppendKw(CodeEl, s);
|
||||||
|
end;
|
||||||
AppendText(CodeEl, ' ');
|
AppendText(CodeEl, ' ');
|
||||||
|
|
||||||
if AElement.ClassType = TPasVariable then
|
if AElement is TPasProperty then
|
||||||
CreateVarPage(TPasVariable(AElement))
|
|
||||||
else if AElement.InheritsFrom(TPasProcedureBase) then
|
|
||||||
AppendProcDecl(CodeEl, TableEl, TPasProcedureBase(AElement))
|
|
||||||
else if AElement.ClassType = TPasProperty then
|
|
||||||
CreatePropertyPage(TPasProperty(AElement))
|
CreatePropertyPage(TPasProperty(AElement))
|
||||||
|
else if AElement is TPasConst then
|
||||||
|
CreateConstPage(TPasConst(AElement))
|
||||||
|
else if (AElement is TPasVariable) then
|
||||||
|
CreateVarPage(TPasVariable(AElement))
|
||||||
|
else if AElement is TPasProcedureBase then
|
||||||
|
AppendProcDecl(CodeEl, TableEl, TPasProcedureBase(AElement))
|
||||||
|
else if AElement is TPasType then
|
||||||
|
CreateTypePage(TPasType(AElement))
|
||||||
else
|
else
|
||||||
AppendText(CreateWarning(BodyElement), '<' + AElement.ClassName + '>');
|
AppendText(CreateWarning(BodyElement), '<' + AElement.ClassName + '>');
|
||||||
|
|
||||||
@ -3518,6 +3584,23 @@ begin
|
|||||||
List.Add(SHTMLDisableMenuBrackets);
|
List.Add(SHTMLDisableMenuBrackets);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure THTMLWriter.SplitImport(var AFilename, ALinkPrefix: String);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
i := Pos(',', AFilename);
|
||||||
|
if i > 0 then
|
||||||
|
begin //split into filename and prefix
|
||||||
|
ALinkPrefix := Copy(AFilename,i+1,Length(AFilename));
|
||||||
|
SetLength(AFilename, i-1);
|
||||||
|
end
|
||||||
|
else if ALinkPrefix = '' then
|
||||||
|
begin //synthesize outdir\pgk.xct, ..\pkg
|
||||||
|
ALinkPrefix := '../' + ChangeFileExt(ExtractFileName(AFilename), '');
|
||||||
|
AFilename := ChangeFileExt(AFilename, '.xct');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
Class Function THTMLWriter.FileNameExtension : String;
|
Class Function THTMLWriter.FileNameExtension : String;
|
||||||
begin
|
begin
|
||||||
result:='';
|
result:='';
|
||||||
|
@ -32,7 +32,7 @@ type
|
|||||||
|
|
||||||
class procedure Usage(List: TStrings); override;
|
class procedure Usage(List: TStrings); override;
|
||||||
Class Function FileNameExtension : String; override;
|
Class Function FileNameExtension : String; override;
|
||||||
|
Class procedure SplitImport(var AFilename, ALinkPrefix: String); override;
|
||||||
end;
|
end;
|
||||||
{$ELSE} // implementation
|
{$ELSE} // implementation
|
||||||
|
|
||||||
@ -565,4 +565,21 @@ begin
|
|||||||
result:='.chm';
|
result:='.chm';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TCHMHTMLWriter.SplitImport(var AFilename, ALinkPrefix: String);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
i := Pos(',', AFilename);
|
||||||
|
if i > 0 then
|
||||||
|
begin //split into filename and prefix
|
||||||
|
ALinkPrefix := Copy(AFilename,i+1,Length(AFilename));
|
||||||
|
SetLength(AFilename, i-1);
|
||||||
|
end
|
||||||
|
else if ALinkPrefix = '' then
|
||||||
|
begin //synthesize outdir\pgk.xct, ms-its:pkg.chm::/
|
||||||
|
ALinkPrefix := 'ms-its:' + ChangeFileExt(ExtractFileName(AFilename), '.chm') + '::/';
|
||||||
|
AFilename := ChangeFileExt(AFilename, '.xct');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
Loading…
Reference in New Issue
Block a user