mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 01:06:02 +02:00
--- Merging r31773 into '.':
U packages/fcl-xml/src/sax_html.pp --- Recording mergeinfo for merge of r31773 into '.': U . --- Merging r33040 into '.': U packages/fcl-xml/src/xmltextreader.pp --- Recording mergeinfo for merge of r33040 into '.': G . --- Merging r33042 into '.': U packages/fcl-xml/src/dtdmodel.pp --- Recording mergeinfo for merge of r33042 into '.': G . # revisions: 31773,33040,33042 ------------------------------------------------------------------------ r31773 | sergei | 2015-09-22 07:37:39 +0200 (di, 22 sep 2015) | 3 lines Changed paths: M /trunk/packages/fcl-xml/src/sax_html.pp - THTMLToDOMConverter.FElementStack is created and destroyed, but unused otherwise. Removed. * THTMLToDOMConverter.ReaderEndElement: Since each item in FNodeBuffer is removed only when processing EndElement event for its *parent* element (not the element it corresponds to, if any), it must be flagged for ignore once its own EndElement is handled. Otherwise, several same-named elements nested within each other were ending up in a wrong DOM tree. This bug was reported in Russian forum. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r33040 | sergei | 2016-02-02 03:27:28 +0100 (di, 02 feb 2016) | 2 lines Changed paths: M /trunk/packages/fcl-xml/src/xmltextreader.pp * fcl-xml: Fixed parsing DTD, whitespace after name is mandatory only if followed by ExternalID. Mantis #29569. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r33042 | sergei | 2016-02-02 18:17:08 +0100 (di, 02 feb 2016) | 1 line Changed paths: M /trunk/packages/fcl-xml/src/dtdmodel.pp * fcl-xml: fixed off-by-one error, preventing 'xmlns:foo' in DTD ATTLIST from being recognized as namespace declaration. ------------------------------------------------------------------------ git-svn-id: branches/fixes_3_0@33409 -
This commit is contained in:
parent
5f8057775b
commit
8cc21d5591
@ -396,7 +396,8 @@ begin
|
|||||||
FData^.FQName := aName;
|
FData^.FQName := aName;
|
||||||
FData^.FColonPos := aColonPos;
|
FData^.FColonPos := aColonPos;
|
||||||
FData^.FTypeInfo := Self;
|
FData^.FTypeInfo := Self;
|
||||||
FIsNamespaceDecl := ((Length(aName^.Key) = 5) or (aColonPos = 6)) and
|
{ aColonPos is zero-based }
|
||||||
|
FIsNamespaceDecl := ((Length(aName^.Key) = 5) or (aColonPos = 5)) and
|
||||||
(Pos(XMLString('xmlns'), aName^.Key) = 1);
|
(Pos(XMLString('xmlns'), aName^.Key) = 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -78,6 +78,7 @@ type
|
|||||||
|
|
||||||
THTMLNodeInfo = class
|
THTMLNodeInfo = class
|
||||||
NodeType: THTMLNodeType;
|
NodeType: THTMLNodeType;
|
||||||
|
Closed: Boolean;
|
||||||
DOMNode: TDOMNode;
|
DOMNode: TDOMNode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -85,7 +86,6 @@ type
|
|||||||
private
|
private
|
||||||
FReader: THTMLReader;
|
FReader: THTMLReader;
|
||||||
FDocument: TDOMDocument;
|
FDocument: TDOMDocument;
|
||||||
FElementStack: TList;
|
|
||||||
FNodeBuffer: TList;
|
FNodeBuffer: TList;
|
||||||
IsFragmentMode, FragmentRootSet: Boolean;
|
IsFragmentMode, FragmentRootSet: Boolean;
|
||||||
FragmentRoot: TDOMNode;
|
FragmentRoot: TDOMNode;
|
||||||
@ -545,7 +545,6 @@ begin
|
|||||||
FReader.OnStartElement := @ReaderStartElement;
|
FReader.OnStartElement := @ReaderStartElement;
|
||||||
FReader.OnEndElement := @ReaderEndElement;
|
FReader.OnEndElement := @ReaderEndElement;
|
||||||
FDocument := ADocument;
|
FDocument := ADocument;
|
||||||
FElementStack := TList.Create;
|
|
||||||
FNodeBuffer := TList.Create;
|
FNodeBuffer := TList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -566,7 +565,6 @@ begin
|
|||||||
THTMLNodeInfo(FNodeBuffer[i]).Free;
|
THTMLNodeInfo(FNodeBuffer[i]).Free;
|
||||||
FNodeBuffer.Free;
|
FNodeBuffer.Free;
|
||||||
|
|
||||||
FElementStack.Free;
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -653,7 +651,7 @@ begin
|
|||||||
while i >= 0 do
|
while i >= 0 do
|
||||||
begin
|
begin
|
||||||
NodeInfo := THTMLNodeInfo(FNodeBuffer.Items[i]);
|
NodeInfo := THTMLNodeInfo(FNodeBuffer.Items[i]);
|
||||||
if (NodeInfo.NodeType = ntTag) and
|
if (NodeInfo.NodeType = ntTag) and (not NodeInfo.Closed) and
|
||||||
(CompareText(NodeInfo.DOMNode.NodeName, LocalName) = 0) then
|
(CompareText(NodeInfo.DOMNode.NodeName, LocalName) = 0) then
|
||||||
begin
|
begin
|
||||||
// We found the matching start tag
|
// We found the matching start tag
|
||||||
@ -689,6 +687,7 @@ begin
|
|||||||
NodeInfo2.Free;
|
NodeInfo2.Free;
|
||||||
FNodeBuffer.Delete(i);
|
FNodeBuffer.Delete(i);
|
||||||
end;
|
end;
|
||||||
|
NodeInfo.Closed := True;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
Dec(i);
|
Dec(i);
|
||||||
|
@ -1911,12 +1911,15 @@ begin
|
|||||||
CheckName;
|
CheckName;
|
||||||
SetString(FDocType.FName, FName.Buffer, FName.Length);
|
SetString(FDocType.FName, FName.Buffer, FName.Length);
|
||||||
DTDName := FNameTable.FindOrAdd(FName.Buffer, FName.Length);
|
DTDName := FNameTable.FindOrAdd(FName.Buffer, FName.Length);
|
||||||
SkipS(True);
|
|
||||||
StoreLocation(Locs[0]);
|
if SkipS then
|
||||||
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
|
begin
|
||||||
if HasAtts then
|
StoreLocation(Locs[0]);
|
||||||
Locs[2] := FTokenStart;
|
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
|
||||||
SkipS;
|
if HasAtts then
|
||||||
|
Locs[2] := FTokenStart;
|
||||||
|
SkipS;
|
||||||
|
end;
|
||||||
|
|
||||||
if CheckForChar('[') then
|
if CheckForChar('[') then
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user