mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 08:29:29 +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^.FColonPos := aColonPos;
|
||||
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);
|
||||
end;
|
||||
|
||||
|
@ -78,6 +78,7 @@ type
|
||||
|
||||
THTMLNodeInfo = class
|
||||
NodeType: THTMLNodeType;
|
||||
Closed: Boolean;
|
||||
DOMNode: TDOMNode;
|
||||
end;
|
||||
|
||||
@ -85,7 +86,6 @@ type
|
||||
private
|
||||
FReader: THTMLReader;
|
||||
FDocument: TDOMDocument;
|
||||
FElementStack: TList;
|
||||
FNodeBuffer: TList;
|
||||
IsFragmentMode, FragmentRootSet: Boolean;
|
||||
FragmentRoot: TDOMNode;
|
||||
@ -545,7 +545,6 @@ begin
|
||||
FReader.OnStartElement := @ReaderStartElement;
|
||||
FReader.OnEndElement := @ReaderEndElement;
|
||||
FDocument := ADocument;
|
||||
FElementStack := TList.Create;
|
||||
FNodeBuffer := TList.Create;
|
||||
end;
|
||||
|
||||
@ -566,7 +565,6 @@ begin
|
||||
THTMLNodeInfo(FNodeBuffer[i]).Free;
|
||||
FNodeBuffer.Free;
|
||||
|
||||
FElementStack.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -653,7 +651,7 @@ begin
|
||||
while i >= 0 do
|
||||
begin
|
||||
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
|
||||
begin
|
||||
// We found the matching start tag
|
||||
@ -689,6 +687,7 @@ begin
|
||||
NodeInfo2.Free;
|
||||
FNodeBuffer.Delete(i);
|
||||
end;
|
||||
NodeInfo.Closed := True;
|
||||
break;
|
||||
end;
|
||||
Dec(i);
|
||||
|
@ -1911,12 +1911,15 @@ begin
|
||||
CheckName;
|
||||
SetString(FDocType.FName, FName.Buffer, FName.Length);
|
||||
DTDName := FNameTable.FindOrAdd(FName.Buffer, FName.Length);
|
||||
SkipS(True);
|
||||
StoreLocation(Locs[0]);
|
||||
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
|
||||
if HasAtts then
|
||||
Locs[2] := FTokenStart;
|
||||
SkipS;
|
||||
|
||||
if SkipS then
|
||||
begin
|
||||
StoreLocation(Locs[0]);
|
||||
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
|
||||
if HasAtts then
|
||||
Locs[2] := FTokenStart;
|
||||
SkipS;
|
||||
end;
|
||||
|
||||
if CheckForChar('[') then
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user