* fcl-xml: dropped using 'hack classes', which cause runtime errors if compiled with -CR. Resolves #27447.

git-svn-id: trunk@29761 -
This commit is contained in:
sergei 2015-02-19 15:25:26 +00:00
parent 7350dae037
commit 124592899f
2 changed files with 19 additions and 23 deletions

View File

@ -223,7 +223,6 @@ type
procedure SetPrefix(const Value: DOMString); virtual;
function GetOwnerDocument: TDOMDocument; virtual;
function GetBaseURI: DOMString;
procedure SetReadOnly(Value: Boolean);
procedure Changing;
public
constructor Create(AOwner: TDOMDocument);
@ -270,6 +269,7 @@ type
function CloneNode(deep: Boolean; ACloneOwner: TDOMDocument): TDOMNode; overload; virtual;
function FindNode(const ANodeName: DOMString): TDOMNode; virtual;
function CompareName(const name: DOMString): Integer; virtual;
procedure SetReadOnly(Value: Boolean);
property Flags: TNodeFlags read FFlags;
end;
@ -312,6 +312,8 @@ type
public
property InputEncoding: DOMString read FInputEncoding;
property XMLEncoding: DOMString read FXMLEncoding;
// extension
procedure SetHeaderData(aXmlVersion: TXMLVersion; const aXmlEncoding: DOMString);
end;
// -------------------------------------------------------
@ -695,6 +697,8 @@ type
property PublicID: DOMString read GetPublicID;
property SystemID: DOMString read GetSystemID;
property InternalSubset: DOMString read GetInternalSubset;
// extension
property Model: TDTDModel read FModel;
end;
@ -2114,6 +2118,13 @@ begin
Result := xmlVersionStr[FXMLVersion];
end;
procedure TDOMNode_TopLevel.SetHeaderData(aXmlVersion: TXMLVersion; const aXmlEncoding: DOMString);
begin
if aXmlVersion <> xmlVersionUnknown then
FXMLVersion := aXmlVersion;
FXMLEncoding := aXmlEncoding;
end;
// -------------------------------------------------------
// DOMImplementation
// -------------------------------------------------------

View File

@ -91,11 +91,6 @@ uses
UriParser, dtdmodel;
type
TDOMDocumentTypeEx = class(TDOMDocumentType);
TXMLDocumentEx = class(TXMLDocument);
TDOMEntityEx = class(TDOMEntity);
TLoader = object
doc: TDOMDocument;
reader: TXMLTextReader;
@ -237,23 +232,23 @@ end;
procedure TLoader.ProcessFragment(AOwner: TDOMNode; AReader: TXMLTextReader);
var
DoctypeNode: TDOMDocumentTypeEx;
DoctypeNode: TDOMDocumentType;
begin
doc := AOwner.OwnerDocument;
reader := AReader;
reader.OnEntity := @ProcessEntity;
reader.FragmentMode := True;
reader.XML11 := doc.XMLVersion = '1.1';
DoctypeNode := TDOMDocumentTypeEx(doc.DocType);
DoctypeNode := doc.DocType;
if Assigned(DoctypeNode) then
reader.DtdSchemaInfo := DocTypeNode.FModel.Reference;
reader.DtdSchemaInfo := DocTypeNode.Model.Reference;
ParseContent(aOwner as TDOMNode_WithChildren);
end;
procedure TLoader.ProcessEntity(Sender: TXMLTextReader; AEntity: TEntityDecl);
var
DoctypeNode: TDOMDocumentType;
Ent: TDOMEntityEx;
Ent: TDOMEntity;
src: TXMLCharSource;
InnerReader: TXMLTextReader;
InnerLoader: TLoader;
@ -261,7 +256,7 @@ begin
DoctypeNode := TDOMDocument(doc).DocType;
if DoctypeNode = nil then
Exit;
Ent := TDOMEntityEx(DocTypeNode.Entities.GetNamedItem(AEntity.FName));
Ent := TDOMEntity(DocTypeNode.Entities.GetNamedItem(AEntity.FName));
if Ent = nil then
Exit;
Sender.EntityToSource(AEntity, Src);
@ -291,18 +286,8 @@ begin
if not reader.Read then
Exit;
case cursor.NodeType of
DOCUMENT_NODE:
begin
if reader.XMLVersion <> xmlVersionUnknown then
TXMLDocumentEx(cursor).FXMLVersion := reader.XMLVersion;
TXMLDocumentEx(cursor).FXMLEncoding := reader.XMLEncoding;
end;
ENTITY_NODE:
begin
if reader.XMLVersion <> xmlVersionUnknown then
TDOMEntityEx(cursor).FXMLVersion := reader.XMLVersion;
TDOMEntityEx(cursor).FXMLEncoding := reader.XMLEncoding;
end;
DOCUMENT_NODE, ENTITY_NODE:
(cursor as TDOMNode_TopLevel).SetHeaderData(reader.XMLVersion,reader.XMLEncoding);
end;
end;