summaryrefslogtreecommitdiff
path: root/packages/fcl-xml
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-11-09 19:43:58 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-11-09 19:43:58 +0000
commitc88b0f7745b18fa2620720d4ea5eef88eff82055 (patch)
tree9e23045e611222cc2c9478d93376931887d1286b /packages/fcl-xml
parentc372b26e724fbe763c7aedd8c9c194db13353381 (diff)
downloadfpc-c88b0f7745b18fa2620720d4ea5eef88eff82055.tar.gz
* Applied correct patch from bugs 37295
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47366 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-xml')
-rw-r--r--packages/fcl-xml/src/sax_xml.pp53
1 files changed, 16 insertions, 37 deletions
diff --git a/packages/fcl-xml/src/sax_xml.pp b/packages/fcl-xml/src/sax_xml.pp
index 29ddff1be2..de7bf0b5df 100644
--- a/packages/fcl-xml/src/sax_xml.pp
+++ b/packages/fcl-xml/src/sax_xml.pp
@@ -175,17 +175,6 @@ begin
'<':
begin
Inc(BufferPos);
- if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='[') then
- begin
- Inc(BufferPos, 8);
- EnterNewScannerContext(scCData);
- end
- else if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='-') then
- begin
- Inc(BufferPos, 3);
- EnterNewScannerContext(scComment);
- end
- else
EnterNewScannerContext(scTag);
end;
else
@@ -206,17 +195,6 @@ begin
'<':
begin
Inc(BufferPos);
- if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='[') then
- begin
- Inc(BufferPos, 8);
- EnterNewScannerContext(scCData);
- end
- else if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='-') then
- begin
- Inc(BufferPos, 3);
- EnterNewScannerContext(scComment);
- end
- else
EnterNewScannerContext(scTag);
end;
else
@@ -232,17 +210,6 @@ begin
'<':
begin
Inc(BufferPos);
- if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='[') then
- begin
- Inc(BufferPos, 8);
- EnterNewScannerContext(scCData);
- end
- else if (Buffer[BufferPos]='!') and (Buffer[BufferPos + 1]='-') then
- begin
- Inc(BufferPos, 3);
- EnterNewScannerContext(scComment);
- end
- else
EnterNewScannerContext(scTag);
end;
else
@@ -252,9 +219,15 @@ begin
end;
end;
scCData:
- if (Buffer[BufferPos] = ']') and (Buffer[BufferPos + 1]=']') and (Buffer[BufferPos + 2]='>') then
+ if (Length(FRawTokenText) = 0) and (Buffer[BufferPos] = '-') then
+ begin
+ Inc(BufferPos);
+ EnterNewScannerContext(scComment);
+ end
+ else if (Buffer[BufferPos] = '>') and (RightStr(FRawTokenText, 2) = ']]') then
begin
- Inc(BufferPos, 3);
+ FRawTokenText := Copy(FRawTokenText, 8, Length(FRawTokenText)-9); //delete '[CDATA[' and ']]' from text
+ Inc(BufferPos);
EnterNewScannerContext(scUnknown);
end
else
@@ -263,9 +236,10 @@ begin
Inc(BufferPos);
end;
scComment:
- if (Buffer[BufferPos] = '-') and (Buffer[BufferPos + 1]='-') and (Buffer[BufferPos + 2]='>') then
+ if (Buffer[BufferPos] = '>') and (RightStr(FRawTokenText, 2) = '--') then
begin
- Inc(BufferPos, 3);
+ FRawTokenText := Copy(FRawTokenText, 2, Length(FRawTokenText)-3); //delete '-' and '--' from text
+ Inc(BufferPos);
EnterNewScannerContext(scUnknown);
end
else
@@ -309,6 +283,11 @@ begin
FRawTokenText := FRawTokenText + Buffer[BufferPos];
Inc(BufferPos);
end;
+ '!':
+ begin
+ Inc(BufferPos);
+ EnterNewScannerContext(scCData);
+ end;
'>':
begin
Inc(BufferPos);