mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 07:43:13 +01:00 
			
		
		
		
	codetools: implement some new abstract methods of TAbstractObjectWriter
git-svn-id: trunk@19106 -
This commit is contained in:
		
							parent
							
								
									781913e482
								
							
						
					
					
						commit
						05f7d868a7
					
				@ -27,6 +27,10 @@ unit Laz_XMLStreaming;
 | 
			
		||||
{$UNDEF HasReadWriteBuf}
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
{$IF (FPC_VERSION = 2) AND (FPC_RELEASE >= 3)}
 | 
			
		||||
  {$DEFINE USE_NEW_READER_WRITER}
 | 
			
		||||
{$IFEND}
 | 
			
		||||
 | 
			
		||||
interface
 | 
			
		||||
 | 
			
		||||
uses SysUtils, Classes, TypInfo, FileProcs, Laz_DOM, Laz_XMLWrite;
 | 
			
		||||
@ -82,8 +86,10 @@ type
 | 
			
		||||
    procedure WriteSet(Value: LongInt; SetType: Pointer); override;
 | 
			
		||||
    procedure WriteString(const Value: String); override;
 | 
			
		||||
    procedure WriteWideString(const Value: WideString); override;
 | 
			
		||||
    {$IFDEF FPC_HAS_UNICODESTRING}
 | 
			
		||||
    {$IFDEF USE_NEW_READER_WRITER}
 | 
			
		||||
    procedure WriteUInt64(Value: QWord); override;
 | 
			
		||||
    procedure WriteUnicodeString(const Value: UnicodeString); override;
 | 
			
		||||
    procedure WriteVariant(const VarValue: Variant); override;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    {$IFDEF HasReadWriteBuf}
 | 
			
		||||
    procedure Write(const Buffer; Count: Longint); override;
 | 
			
		||||
@ -131,7 +137,7 @@ type
 | 
			
		||||
    function ReadStr: String; override;
 | 
			
		||||
    function ReadString(StringType: TValueType): String; override;
 | 
			
		||||
    function ReadWideString: WideString; override;
 | 
			
		||||
    {$IFDEF FPC_HAS_UNICODESTRING}
 | 
			
		||||
    {$IFDEF USE_NEW_READER_WRITER}
 | 
			
		||||
    function ReadUnicodeString: UnicodeString; override;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    procedure SkipComponent(SkipComponentInfos: Boolean); override;
 | 
			
		||||
@ -458,12 +464,67 @@ begin
 | 
			
		||||
  GetPropertyElement('widestring')['value'] := System.UTF8Encode(Value);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFDEF FPC_HAS_UNICODESTRING}
 | 
			
		||||
{$IFDEF USE_NEW_READER_WRITER}
 | 
			
		||||
procedure TXMLObjectWriter.WriteUInt64(Value: QWord);
 | 
			
		||||
begin
 | 
			
		||||
  GetPropertyElement('uint64')['value'] := IntToStr(Value);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TXMLObjectWriter.WriteUnicodeString(const Value: UnicodeString);
 | 
			
		||||
// save unicodestrings as utf8
 | 
			
		||||
begin
 | 
			
		||||
  GetPropertyElement('unicodestring')['value'] := System.UTF8Encode(Value);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TXMLObjectWriter.WriteVariant(const VarValue: Variant);
 | 
			
		||||
begin
 | 
			
		||||
  case tvardata(VarValue).vtype of
 | 
			
		||||
    varEmpty:
 | 
			
		||||
      begin
 | 
			
		||||
        GetPropertyElement('uint64')['value'] := 'nil';
 | 
			
		||||
      end;
 | 
			
		||||
    varNull:
 | 
			
		||||
      begin
 | 
			
		||||
        GetPropertyElement('uint64')['value'] := 'null';
 | 
			
		||||
      end;
 | 
			
		||||
    { all integer sizes must be split for big endian systems }
 | 
			
		||||
    varShortInt,varSmallInt,varInteger,varInt64:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteInteger(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varQWord:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteUInt64(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varBoolean:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteBoolean(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varCurrency:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteCurrency(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varSingle:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteSingle(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varDouble:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteFloat(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varDate:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteDate(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    varOleStr,varString:
 | 
			
		||||
      begin
 | 
			
		||||
        WriteWideString(VarValue);
 | 
			
		||||
      end;
 | 
			
		||||
    else
 | 
			
		||||
      raise EWriteError.CreateFmt('Unsupported property variant type %d', [Ord(tvardata(VarValue).vtype)]);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
{$IFDEF HasReadWriteBuf}
 | 
			
		||||
@ -673,9 +734,18 @@ begin
 | 
			
		||||
          Result:=vaExtended
 | 
			
		||||
        else if FElement.NodeName='widestring' then
 | 
			
		||||
          Result:=vaWString
 | 
			
		||||
        {$IFDEF FPC_HAS_UNICODESTRING}
 | 
			
		||||
        {$IFDEF USE_NEW_READER_WRITER}
 | 
			
		||||
        else if FElement.NodeName = 'uint64' then
 | 
			
		||||
          Result:=vaQWord
 | 
			
		||||
        else if FElement.NodeName='unicodestring' then
 | 
			
		||||
          Result:=vaUString
 | 
			
		||||
        else if FElement.NodeName='variant' then
 | 
			
		||||
        begin
 | 
			
		||||
          if FElement['value'] = 'nil' then
 | 
			
		||||
            Result := vaNil
 | 
			
		||||
          else
 | 
			
		||||
            Result := vaNull;
 | 
			
		||||
        end
 | 
			
		||||
        {$ENDIF}
 | 
			
		||||
        else if FElement.NodeName='collectionproperty' then
 | 
			
		||||
          Result:=vaCollection
 | 
			
		||||
@ -1059,7 +1129,7 @@ begin
 | 
			
		||||
  //writeln('TXMLObjectReader.ReadWideString "',ValueAsUTF8,'"');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFDEF FPC_HAS_UNICODESTRING}
 | 
			
		||||
{$IFDEF USE_NEW_READER_WRITER}
 | 
			
		||||
function TXMLObjectReader.ReadUnicodeString: UnicodeString;
 | 
			
		||||
var
 | 
			
		||||
  ValueAsUTF8: String;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user