IDE: source encodings are now converted from/to UTF-8 on load/save

git-svn-id: trunk@14904 -
This commit is contained in:
mattias 2008-04-20 08:47:14 +00:00
parent d9e516f5fd
commit 2533fc0f70
2 changed files with 38 additions and 22 deletions

View File

@ -11471,14 +11471,23 @@ procedure TMainIDE.OnCodeBufferDecodeLoaded(Code: TCodeBuffer;
const Filename: string; var Source, DiskEncoding, MemEncoding: string);
begin
//DebugLn(['TMainIDE.OnCodeBufferDecodeLoaded Filename=',Filename,' Encoding=',GuessEncoding(Source)]);
//DiskEncoding:=GuessEncoding(Source);
//MemEncoding:=EncodingUTF8;
DiskEncoding:=GuessEncoding(Source);
MemEncoding:=EncodingUTF8;
if (DiskEncoding<>MemEncoding) then begin
//DebugLn(['TMainIDE.OnCodeBufferDecodeLoaded Filename=',Filename,' Disk=',DiskEncoding,' to Mem=',MemEncoding]);
Source:=ConvertEncoding(Source,DiskEncoding,MemEncoding);
//DebugLn(['TMainIDE.OnCodeBufferDecodeLoaded ',Source]);
end;
end;
procedure TMainIDE.OnCodeBufferEncodeSaving(Code: TCodeBuffer;
const Filename: string; var Source: string);
begin
if (Code.DiskEncoding<>'') and (Code.MemEncoding<>'')
and (Code.DiskEncoding<>Code.MemEncoding) then begin
//DebugLn(['TMainIDE.OnCodeBufferEncodeSaving Filename=',Code.Filename,' Mem=',Code.MemEncoding,' to Disk=',Code.DiskEncoding]);
Source:=ConvertEncoding(Source,Code.MemEncoding,Code.DiskEncoding);
end;
end;
procedure TMainIDE.CodeToolBossPrepareTree(Sender: TObject);

View File

@ -4013,21 +4013,28 @@ begin
// use system encoding
Result:=GetSystemEncoding;
if NormalizeEncoding(Result)=EncodingUTF8 then begin
// the system encoding is UTF-8, but it is not UTF-8
// use ISO-8859-1 instead. This encoding has a full 1:1 mapping to unicode,
// so no character is lost during conversions.
Result:='ISO-8859-1';
end;
end;
function ConvertEncoding(const s, FromEncoding, ToEncoding: string): string;
// FromEncoding and ToEncoding must be normalized
var
AFrom, ATo: String;
AFrom, ATo, SysEnc: String;
{$ifdef Unix}
SL: TStringList;
FN1, FN2: String;
{$endif}
begin
AFrom:=FromEncoding;
ATo:=ToEncoding;
if AFrom=GetSystemEncoding then AFrom:=EncodingAnsi;
if ATo=GetSystemEncoding then ATo:=EncodingAnsi;
AFrom:=NormalizeEncoding(FromEncoding);
ATo:=NormalizeEncoding(ToEncoding);
SysEnc:=NormalizeEncoding(GetSystemEncoding);
if AFrom=EncodingAnsi then AFrom:=SysEnc;
if ATo=EncodingAnsi then ATo:=SysEnc;
if AFrom=ATo then begin
Result:=s;
exit;
@ -4035,19 +4042,19 @@ begin
//DebugLn(['ConvertEncoding ',AFrom,' ',ATo]);
if (AFrom=EncodingUTF8) then begin
if AFrom='iso88591' then begin Result:=UTF8ToISO_8859_1(s); exit; end;
if AFrom='cp1250' then begin Result:=UTF8ToCP1250(s); exit; end;
if AFrom='cp1251' then begin Result:=UTF8ToCP1251(s); exit; end;
if AFrom='cp1252' then begin Result:=UTF8ToCP1252(s); exit; end;
if AFrom='cp1253' then begin Result:=UTF8ToCP1253(s); exit; end;
if AFrom='cp1254' then begin Result:=UTF8ToCP1254(s); exit; end;
if AFrom='cp1255' then begin Result:=UTF8ToCP1255(s); exit; end;
if AFrom='cp1256' then begin Result:=UTF8ToCP1256(s); exit; end;
if AFrom='cp1257' then begin Result:=UTF8ToCP1257(s); exit; end;
if AFrom='cp1258' then begin Result:=UTF8ToCP1258(s); exit; end;
if AFrom='cp874' then begin Result:=UTF8ToCP874(s); exit; end;
if ATo='iso88591' then begin Result:=UTF8ToISO_8859_1(s); exit; end;
if ATo='cp1250' then begin Result:=UTF8ToCP1250(s); exit; end;
if ATo='cp1251' then begin Result:=UTF8ToCP1251(s); exit; end;
if ATo='cp1252' then begin Result:=UTF8ToCP1252(s); exit; end;
if ATo='cp1253' then begin Result:=UTF8ToCP1253(s); exit; end;
if ATo='cp1254' then begin Result:=UTF8ToCP1254(s); exit; end;
if ATo='cp1255' then begin Result:=UTF8ToCP1255(s); exit; end;
if ATo='cp1256' then begin Result:=UTF8ToCP1256(s); exit; end;
if ATo='cp1257' then begin Result:=UTF8ToCP1257(s); exit; end;
if ATo='cp1258' then begin Result:=UTF8ToCP1258(s); exit; end;
if ATo='cp874' then begin Result:=UTF8ToCP874(s); exit; end;
if (ATo=EncodingAnsi) and Assigned(ConvertUTF8ToAnsi) then begin
if (ATo=SysEnc) and Assigned(ConvertUTF8ToAnsi) then begin
Result:=ConvertUTF8ToAnsi(s);
exit;
end;
@ -4064,7 +4071,7 @@ begin
if AFrom='cp1258' then begin Result:=CP1258ToUTF8(s); exit; end;
if AFrom='cp874' then begin Result:=CP874ToUTF8(s); exit; end;
if (AFrom=EncodingAnsi) and Assigned(ConvertAnsiToUTF8) then begin
if (AFrom=SysEnc) and Assigned(ConvertAnsiToUTF8) then begin
Result:=ConvertAnsiToUTF8(s);
exit;
end;