summaryrefslogtreecommitdiff
path: root/packages/fcl-xml
diff options
context:
space:
mode:
authorsergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-02-19 18:14:08 +0000
committersergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-02-19 18:14:08 +0000
commit87206bf9fb8469855479676657ac2bce6186f99d (patch)
treedf6754b4a6ee66e0d1c92c76f73ef8588abe0061 /packages/fcl-xml
parente8c759d1b3c7e46adaf12ba3dfc072251a5dea75 (diff)
downloadfpc-87206bf9fb8469855479676657ac2bce6186f99d.tar.gz
* xmlread.pp, the end of root element is now detected without involving DOM nodes.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@16942 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-xml')
-rw-r--r--packages/fcl-xml/src/xmlread.pp8
1 files changed, 5 insertions, 3 deletions
diff --git a/packages/fcl-xml/src/xmlread.pp b/packages/fcl-xml/src/xmlread.pp
index 1f0b5892c8..501aa55b89 100644
--- a/packages/fcl-xml/src/xmlread.pp
+++ b/packages/fcl-xml/src/xmlread.pp
@@ -291,6 +291,7 @@ type
FIntSubset: TWideCharBuf;
FAttrTag: Cardinal;
FDTDProcessed: Boolean;
+ FFragmentMode: Boolean;
FToken: TXMLToken;
FNext: TXMLToken;
FCurrEntity: TEntityDecl;
@@ -1318,6 +1319,7 @@ begin
FNesting := 0;
FCurrNode := @FNodeStack[0];
FCursorStack[0] := doc;
+ FFragmentMode := False;
NSPrepare;
Initialize(ASource);
if FSource.FXMLVersion <> xmlVersionUnknown then
@@ -1345,6 +1347,7 @@ begin
FNesting := 0;
FCurrNode := @FNodeStack[0];
FCursorStack[0] := AOwner as TDOMNode_WithChildren;
+ FFragmentMode := True;
FXML11 := doc.InheritsFrom(TXMLDocument) and (TXMLDocument(doc).XMLVersion = '1.1');
NSPrepare;
Initialize(ASource);
@@ -3131,9 +3134,6 @@ end;
procedure TXMLReader.DoEndElement;
begin
- if (FNesting = 1) and (FCursorStack[0] = doc) then
- FState := rsEpilog;
-
if FValidate and FValidators[FNesting].Incomplete then
ValidationError('Element ''%s'' is missing required sub-elements', [FNodeStack[FNesting].FQName^.Key], -1);
end;
@@ -3695,6 +3695,8 @@ end;
procedure TXMLReader.PopVC;
begin
+ if (FNesting = 1) and (not FFragmentMode) then
+ FState := rsEpilog;
if FNesting > 0 then Dec(FNesting);
FCurrNode := @FNodeStack[FNesting];
UpdateConstraints;