103 lines
2.2 KiB
PHP

{$ifdef nn}begin end;{$endif}
procedure TATStrings.SaveToStream(Stream: TStream; AEncoding: TATFileEncoding; AWithSignature: boolean);
var
i: integer;
Item: TATStringItem;
SA: AnsiString;
SW: UnicodeString;
Sign: AnsiString;
bEncoded: boolean;
begin
if AWithSignature then
begin
Sign:= '';
case FEncoding of
cEncUTF8: Sign:= cSignUTF8;
cEncWideLE: Sign:= cSignWideLE;
cEncWideBE: Sign:= cSignWideBE;
end;
if Sign<>'' then
Stream.WriteBuffer(Sign[1], Length(Sign));
end;
for i:= 0 to Count-1 do
begin
Item:= TATStringItem(FList[i]);
SW:= Item.ItemString + cLineEndStrings[Item.ItemEnd];
if SW<>'' then
case AEncoding of
cEncAnsi:
begin
//if codepage set, convert UnicodeString->utf8->Ansistring
//else just UnicodeString->Ansistring
if FEncodingCodepage='' then
SA:= SW
else
begin
SA:= UTF8Encode(SW);
{$ifdef laz15}
SA:= ConvertEncodingFromUTF8(SA, FEncodingCodepage, bEncoded);
{$else}
SA:= ConvertEncoding(SA, '', FEncodingCodepage);
{$endif}
end;
Stream.WriteBuffer(SA[1], Length(SA));
end;
cEncUTF8:
begin
SA:= UTF8Encode(SW);
Stream.WriteBuffer(SA[1], Length(SA));
end;
cEncWideLE,
cEncWideBE:
begin
if AEncoding=cEncWideBE then
SW:= SSwapEndian(SW);
Stream.WriteBuffer(SW[1], Length(SW)*2);
end;
else
DoEncError;
end;
end;
end;
procedure TATStrings.SaveToFile(const AFilename: string);
var
fs: TFileStream;
WithSign: boolean;
begin
WithSign:=
((FEncoding in [cEncUTF8]) and FSaveSignUtf8) or
((FEncoding in [cEncWideLE, cEncWideBE]) and FSaveSignWide);
fs:= TFileStream.Create(AFilename, fmCreate or fmOpenWrite);
try
SaveToStream(fs, FEncoding, WithSign);
finally
FreeAndNil(fs);
end;
DoFinalizeSaving;
end;
procedure TATStrings.DoFinalizeSaving;
begin
DoClearLineStates(true);
if not FUndoAfterSave then
DoClearUndo
else
begin
FUndoList.DeleteUnmodifiedMarks;
FRedoList.DeleteUnmodifiedMarks;
end;
Modified:= false;
end;