+ Initial implementation

This commit is contained in:
michael 1999-07-10 21:49:03 +00:00
parent b278789372
commit 5b91fa5d57

370
fcl/xml/htmldoc.pp Normal file
View File

@ -0,0 +1,370 @@
{
$Id$
This file is part of the Free Pascal run time library.
Copyright (c) 1998 by Michael Van Canneyt, member of
the Free Pascal development team
Implementation of a HTMLdocument class,
following the W3 recommendation.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
unit htmldoc;
interface
Uses Sysutils, // Uppercase
Classes, // TList and the like
DOM; // Naturally...
{ ---------------------------------------------------------------------
Forward Class definitions
---------------------------------------------------------------------}
Type
THTMLCollection = Class;
THTMLDocument = Class;
THTMLElement = Class;
THTMLHtmlElement = Class;
THTMLHeadElement = Class;
THTMLLinkElement = Class;
THTMLTitleElement = Class;
THTMLMetaElement = Class;
THTMLBaseElement = Class;
THTMLIsIndexElement = Class;
THTMLStyleElement = Class;
THTMLBodyElement = Class;
THTMLFormElement = Class;
{ ---------------------------------------------------------------------
Miscellaneous objects
---------------------------------------------------------------------}
// HTMLCollection
THTMLCollection = Class
Private
Flist : TList;
Function GetLength : longword;
Public
Constructor Create;
Destructor Destroy; Override;
Function Item(Index : longword) : TDOMNode;
Function NamedItem(Name : DomString) : TDOMNode;
Property Length : LongWord Read GetLength;
end;
{ ---------------------------------------------------------------------
THTMLDocument class
---------------------------------------------------------------------}
THTMLDocument = Class(TDOMDocument)
Private
FTitle,
FReferrer,
FDomain,
FCookie,
FURL : DOMString;
FBody : THTMLElement;
FImages,
FApplets,
FLinks,
FForms,
Fanchors : THTMLCollection;
Public
Constructor Create; Override;
Destructor Destroy; Override;
Procedure Open;
Procedure Close;
Procedure Write (TheText : DOMString);
Procedure Writeln (TheText : DOMString);
Function GetElementById (Id :longword) : TDOMElement;
Function GetElementByName (Name : DOMString) : TDOMNodeList;
Property Title : DOMString Read FTitle Write FTitle;
Property Referrer : DOMString Read FReferrer;
Property Domain : DOMString Read FDomain;
Property URL : DOMString Read FURL;
Property Body : THTMLElement Read FBody;
Property Images : THTMLCollection Read Fimages;
Property Applets : THTMLCollection Read FApplets;
Property Links : THTMLCollection Read FLinks;
Property Forms : THTMLCollection Read FForms;
Property Anchors : THTMLCollection Read Fanchors;
Property Cookie : DOMString Read FCookie;
end;
{ ---------------------------------------------------------------------
THTMLElement class
---------------------------------------------------------------------}
THTMLElement = Class(TDOMElement)
Private
FID,
FTitle,
FLang,
FDir,
FHTMLClassname : DOMString;
Public
Property ID : DOMString Read FID Write FID;
Property Title : DOMString Read FTitle Write FTitle;
Property Lang : DOMString Read FLang Write FLang;
Property Dir : DOMString Read FDir Write FDir;
Property HTMLClassName : DOMString Read FHTMLClassName Write FHTMLClassName;
end;
{ ---------------------------------------------------------------------
THTMLElement descendent classes
---------------------------------------------------------------------}
THTMLHtmlElement = Class(THTMLElement)
Private
FVersion : DOMString;
Public
Property Version : DOMString Read FVersion Write FVersion;
end;
THTMLHeadElement = Class(THTMLElement)
Private
FProfile : DOMString;
Public
Property Profile : DOMString Read FProfile Write FProfile;
end;
THTMLLinkElement = Class(THTMLElement)
Private
FDisabled : Boolean;
FCharset,
FHREF,
FHREFLang,
FMedia,
FRel,
FREV,
FTarget,
FHTMLType : DOMString;
Public
Property Disabled : Boolean Read FDisabled Write FDisabled;
Property Charset : DOMString Read FCharset Write FCharset;
Property HREF : DOMString Read FHREF Write FHREF;
Property HREFLang : DOMString Read FHREFLang Write FHREFLang;
Property Media : DOMString Read FMEdia Write FMedia;
Property Rel : DOMString READ FRel Write FRel;
Property Target : DOMString Read FTarget Write FTarget;
Property HTMLType : DOMString Read FHTMLType Write FHTMLtype;
end;
THTMLTitleElement = Class(THTMLElement)
Private
FHTMLtext : DOMString;
Public
Property HTMLText : DOMString Read FHTMLText Write FHTMLtext;
end;
THTMLMetaElement = Class(THTMLElement)
Private
FContent,
FhttpEquiv,
FName,
FScheme : DOMString;
Public
Property Content : DOMString Read FContent Write FContent;
Property HttpEquiv : DOMString Read FHTTPEquiv Write FHTTPEquiv;
Property Name : DOMString Read FName Write FName;
Property Scheme : DOMString Read FScheme Write FScheme;
end;
THTMLBaseElement = Class(TDOMElement)
Private
FHref,
FTarget : DOMString;
Public
Property HRef : DOMString Read FHref Write FHRef;
Property Target : DOMstring Read FTarget Write FTarget;
end;
THTMLIsIndexElement = Class(THTMLElement)
Private
FForm : THTMLFormElement;
FPrompt : DomString;
Public
Property Form : THTMLFormElement Read FForm;
Property Prompt : DOMString Read FPrompt Write FPrompt;
end;
THTMLStyleElement = Class(THTMLElement)
Private
FDisabled : Boolean;
FMEdia,
FHTMLtype : DOMString;
Public
Property Disabled : Boolean Read FDisabled Write FDisabled;
Property HTMLtype : DOMString Read FHTMLType Write FHTMLtype;
end;
THTMLBodyElement = Class(THTMLElement)
Private
Falink,
Fbackground,
Fbgcolor,
flink,
fhtmltext,
fvlink : DOMString;
Public
Property alink : DOMString Read falink write falink;
Property background : DOMString Read Fbackground write FBackground;
Property bgcolor : DOMString Read fbgcolor write fbgcolor;
Property link : DOMString Read Flink Write flink;
Property htmltext : DOMString read fhtmltext Write fhtmltext;
Property vlink : DOMString Read fvLink Write fvLink ;
end;
THTMLFormElement = Class(THTMLElement)
Private
FElements : THTMLCollection;
Public
Constructor Create(AOwner : TDOMDocument);override;
Destructor Destroy;
Procedure Submit;
Procedure Reset;
end;
implementation
{ ---------------------------------------------------------------------
THTMLCollection
---------------------------------------------------------------------}
Constructor THTMLCollection.Create;
begin
FList := TList.Create;
end;
Destructor THTMLCollection.Destroy;
begin
FList.Free;
Inherited Destroy;
end;
Function THTMLCollection.GetLength : LongWord;
begin
Result:=FList.Count;
end;
Function THTMLCollection.Item(Index : longword) : TDOMNode;
begin
If (Index<0) or (Index>Flist.Count-1) then
Result:=Nil
else
Result:=TDOMNode(Flist[Index]);
end;
Function THTMLCollection.NamedItem(Name : DomString) : TDOMNode;
Var I : longword;
begin
Name:=UpperCase(Name);
// linear search, since the list is not ordered.
// W3 says nothing about ordering; maybe we can implement it ?
For i:=0 to FList.Count-1 do
If UpperCase(TDomNode(FList[i]).NodeName)=Name then
begin
Result:=TDomNode(Flist[I]);
Exit;
end;
Result:=Nil;
end;
{ ---------------------------------------------------------------------
THTMLDocument class
---------------------------------------------------------------------}
Constructor THTMLDocument.Create;
begin
Inherited Create;
end;
Destructor THTMLDocument.Destroy;
begin
Inherited Destroy;
end;
Procedure THTMLDocument.Open;
begin
end;
Procedure THTMLDocument.Close;
begin
end;
Procedure THTMLDocument.Write (TheText : DOMString);
begin
end;
Procedure THTMLDocument.Writeln (TheText : DOMString);
begin
end;
Function THTMLDocument.GetElementById (Id :longword) : TDOMElement;
begin
end;
Function THTMLDocument.GetElementByName (Name : DOMString) : TDOMNodeList;
begin
end;
Constructor THTMLFormElement.Create(AOwner : TDOMDocument);
begin
Inherited Create(AOWner);
FElements:=THTMLCollection.Create;
end;
Destructor THTMLFormElement.Destroy;
begin
FElements.Free;
Inherited Destroy;
end;
Procedure THTMLFormElement.Submit;
begin
end;
Procedure THTMLFormElement.Reset;
begin
end;
end.