Browse Source

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

git-svn-id: trunk@29761 -
sergei 10 years ago
parent
commit
124592899f
2 changed files with 19 additions and 23 deletions
  1. 12 1
      packages/fcl-xml/src/dom.pp
  2. 7 22
      packages/fcl-xml/src/xmlread.pp

+ 12 - 1
packages/fcl-xml/src/dom.pp

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

+ 7 - 22
packages/fcl-xml/src/xmlread.pp

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