Browse Source

--- Merging r20391 into '.':
U packages/fcl-xml/src/sax_html.pp
--- Merging r21452 into '.':
U packages/fcl-xml/src/sax_xml.pp
G packages/fcl-xml/src/sax_html.pp

# revisions: 20391,21452
r20391 | sergei | 2012-02-21 17:51:02 +0100 (Tue, 21 Feb 2012) | 1 line
Changed paths:
M /trunk/packages/fcl-xml/src/sax_html.pp

* sax_html.pp: accumulate token chars in ansistring in order to handle multi-byte encodings without errors (counterpart of sax_xml.pp r15738). Mantis #21070.
r21452 | sergei | 2012-06-01 21:57:28 +0200 (Fri, 01 Jun 2012) | 1 line
Changed paths:
M /trunk/packages/fcl-xml/src/sax_html.pp
M /trunk/packages/fcl-xml/src/sax_xml.pp

* Changed 'var' parameters to 'out' in order to avoid warnings (Mantis #22136)

git-svn-id: branches/fixes_2_6@21458 -

marco 13 years ago
parent
commit
bdb6a4da60
2 changed files with 22 additions and 19 deletions
  1. 18 15
      packages/fcl-xml/src/sax_html.pp
  2. 4 4
      packages/fcl-xml/src/sax_xml.pp

+ 18 - 15
packages/fcl-xml/src/sax_html.pp

@@ -50,6 +50,7 @@ type
     FEndOfStream: Boolean;
     FScannerContext: THTMLScannerContext;
     FTokenText: SAXString;
+    FRawTokenText: string;
     FCurStringValueDelimiter: Char;
     FAttrNameRead: Boolean;
     FStack: array of THTMLElementTag;
@@ -107,8 +108,8 @@ type
 
 // Helper functions; these ones are HTML equivalents of ReadXML[File|Fragment]
 
-procedure ReadHTMLFile(var ADoc: THTMLDocument; const AFilename: String);
-procedure ReadHTMLFile(var ADoc: THTMLDocument; f: TStream);
+procedure ReadHTMLFile(out ADoc: THTMLDocument; const AFilename: String);
+procedure ReadHTMLFile(out ADoc: THTMLDocument; f: TStream);
 
 procedure ReadHTMLFragment(AParentNode: TDOMNode; const AFilename: String);
 procedure ReadHTMLFragment(AParentNode: TDOMNode; f: TStream);
@@ -202,7 +203,7 @@ begin
           case Buffer[BufferPos] of
             #9, #10, #13, ' ':
               begin
-                FTokenText := FTokenText + Buffer[BufferPos];
+                FRawTokenText := FRawTokenText + Buffer[BufferPos];
                 Inc(BufferPos);
               end;
             '&':
@@ -232,7 +233,7 @@ begin
               end;
             else
             begin
-              FTokenText := FTokenText + Buffer[BufferPos];
+              FRawTokenText := FRawTokenText + Buffer[BufferPos];
               Inc(BufferPos);
             end;
           end;
@@ -246,7 +247,7 @@ begin
             EnterNewScannerContext(scUnknown)
           else
           begin
-            FTokenText := FTokenText + Buffer[BufferPos];
+            FRawTokenText := FRawTokenText + Buffer[BufferPos];
             Inc(BufferPos);
           end;
         scTag:
@@ -263,13 +264,13 @@ begin
                     FAttrNameRead := False;
                   end;
                 end;
-                FTokenText := FTokenText + Buffer[BufferPos];
+                FRawTokenText := FRawTokenText + Buffer[BufferPos];
                 Inc(BufferPos);
               end;
             '=':
               begin
                 FAttrNameRead := True;
-                FTokenText := FTokenText + Buffer[BufferPos];
+                FRawTokenText := FRawTokenText + Buffer[BufferPos];
                 Inc(BufferPos);
               end;
             '>':
@@ -282,22 +283,22 @@ begin
               begin
                 // TODO: this check is hardly complete, probably must also check if
                 // tag name is followed by legal attributes.
-                if CheckForName(FTokenText) then
+                if CheckForName(FRawTokenText) then   { <-- ansi to wide conversion here }
                   EnterNewScannerContext(scUnknown)   // assume unclosed tag
-                else if (FTokenText <> '') and (FTokenText[1] <> '!') then
+                else if (FRawTokenText <> '') and (FRawTokenText[1] <> '!') then
                 begin
-                  Insert('<', FTokenText, 1);         // assume plaintext
+                  Insert('<', FRawTokenText, 1);         // assume plaintext
                   FScannerContext := scText;
                   EnterNewScannerContext(scUnknown);
                 end
                 else
                 begin  // in comment, ignore
-                  FTokenText := FTokenText + Buffer[BufferPos];
+                  FRawTokenText := FRawTokenText + Buffer[BufferPos];
                   Inc(BufferPos);
                 end;
               end;
           else
-            FTokenText := FTokenText + Buffer[BufferPos];
+            FRawTokenText := FRawTokenText + Buffer[BufferPos];
             Inc(BufferPos);
           end;
         end;    // case ScannerContext of
@@ -449,6 +450,7 @@ var
   i: Integer;
   elTag: THTMLElementTag;
 begin
+  FTokenText := FRawTokenText;
   case ScannerContext of
     scWhitespace:
       if (FNesting > 0) and (efPCDataContent in HTMLElementProps[FStack[FNesting-1]].Flags) then
@@ -524,7 +526,8 @@ begin
       end;
   end;
   FScannerContext := NewContext;
-  SetLength(FTokenText, 0);
+  FTokenText := '';
+  FRawTokenText := '';
   FCurStringValueDelimiter := #0;
   FAttrNameRead := False;
 end;
@@ -693,7 +696,7 @@ begin
 end;
 
 
-procedure ReadHTMLFile(var ADoc: THTMLDocument; const AFilename: String);
+procedure ReadHTMLFile(out ADoc: THTMLDocument; const AFilename: String);
 var
   f: TStream;
 begin
@@ -706,7 +709,7 @@ begin
   end;
 end;
 
-procedure ReadHTMLFile(var ADoc: THTMLDocument; f: TStream);
+procedure ReadHTMLFile(out ADoc: THTMLDocument; f: TStream);
 var
   Reader: THTMLReader;
   Converter: THTMLToDOMConverter;

+ 4 - 4
packages/fcl-xml/src/sax_xml.pp

@@ -94,8 +94,8 @@ type
 
 // Helper functions; these ones are XML equivalents of ReadXML[File|Fragment]
 
-procedure ReadXMLFile(var ADoc: TXMLDocument; const AFilename: String);
-procedure ReadXMLFile(var ADoc: TXMLDocument; f: TStream);
+procedure ReadXMLFile(out ADoc: TXMLDocument; const AFilename: String);
+procedure ReadXMLFile(out ADoc: TXMLDocument; f: TStream);
 
 procedure ReadXMLFragment(AParentNode: TDOMNode; const AFilename: String);
 procedure ReadXMLFragment(AParentNode: TDOMNode; f: TStream);
@@ -550,7 +550,7 @@ begin
 end;
 
 
-procedure ReadXMLFile(var ADoc: TXMLDocument; const AFilename: String);
+procedure ReadXMLFile(out ADoc: TXMLDocument; const AFilename: String);
 var
   f: TStream;
 begin
@@ -563,7 +563,7 @@ begin
   end;
 end;
 
-procedure ReadXMLFile(var ADoc: TXMLDocument; f: TStream);
+procedure ReadXMLFile(out ADoc: TXMLDocument; f: TStream);
 var
   Reader: TSAXXMLReader;
   Converter: TXMLToDOMConverter;