diff options
author | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-12 19:05:08 +0000 |
---|---|---|
committer | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-12 19:05:08 +0000 |
commit | 614581b7856d0acc9e58a88a97b0b28ad4cb5528 (patch) | |
tree | 963ab42d86e9fcd34814c8993cdef256ef7004b6 /packages/fcl-res | |
parent | 9fe2e3b14093c00ef076df5bbbeabd36f25157af (diff) | |
download | fpc-614581b7856d0acc9e58a88a97b0b28ad4cb5528.tar.gz |
fcl-res: TStringTableResource: use UnicodeString
Reintegrate fpcres-rc branch by Martok
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46377 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-res')
-rw-r--r-- | packages/fcl-res/src/stringtableresource.pp | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/packages/fcl-res/src/stringtableresource.pp b/packages/fcl-res/src/stringtableresource.pp index 76f3009388..6e0c212802 100644 --- a/packages/fcl-res/src/stringtableresource.pp +++ b/packages/fcl-res/src/stringtableresource.pp @@ -21,13 +21,13 @@ interface uses Classes, SysUtils, resource; - + type EStringTableResourceException = class(EResourceException); EStringTableNameNotAllowedException = class(EStringTableResourceException); EStringTableIndexOutOfBoundsException = class(EStringTableResourceException); - + resourcestring SNameNotAllowed = 'Resource ID must be an ordinal in the range 1-4096'; SIndexOutOfBounds = 'String ID out of bounds: %d'; @@ -42,7 +42,7 @@ type fName : TResourceDesc; fFirstID : word; fCount : integer; - fList : TStringList; + fList : array of UnicodeString; fCanChangeDesc : boolean; function IDtoIndex(const aId : word) : integer; procedure CheckListLoaded; @@ -85,54 +85,47 @@ end; procedure TStringTableResource.CheckListLoaded; var i : integer; begin - if fList<>nil then exit; - fList:=TStringList.Create; - fList.Capacity:=16; + if Length(fList) <> 0 then exit; + SetLength(fList, fCount); + for i:=0 to high(fList) do + fList[i]:= ''; if RawData.Size=0 then exit; RawData.Position:=0; - for i:=0 to 15 do - fList.Add(ReadWideString); + for i:=0 to high(fList) do + fList[i]:= ReadWideString; end; function TStringTableResource.ReadWideString: string; -var ws : widestring; +var ws : unicodestring; w : word; i : integer; begin RawData.ReadBuffer(w,2); - {$IFDEF ENDIAN_BIG} - w:=SwapEndian(w); - {$ENDIF} + w:= LEtoN(w); setlength(ws,w); for i:=1 to length(ws) do begin RawData.ReadBuffer(w,2); - {$IFDEF ENDIAN_BIG} - w:=SwapEndian(w); - {$ENDIF} + w:= LEtoN(w); ws[i]:=widechar(w); end; Result:=ws; end; procedure TStringTableResource.WriteWideString(const aString: string); -var ws : widestring; +var ws : unicodestring; w : word; i : integer; begin w:=length(aString); - {$IFDEF ENDIAN_BIG} - w:=SwapEndian(w); - {$ENDIF} + w:= NtoLE(w); RawData.WriteBuffer(w,2); ws:=aString; for i:=1 to length(ws) do begin w:=word(ws[i]); - {$IFDEF ENDIAN_BIG} - w:=SwapEndian(w); - {$ENDIF} + w:= NtoLE(w); RawData.WriteBuffer(w,2); end; end; @@ -157,8 +150,8 @@ begin CheckIndex(id); CheckListLoaded; idx:=IDtoIndex(id); - if idx>=fList.Count then Result:='' - else Result:=fList[idx]; + if idx>high(fList) then Result:= '' + else Result:= fList[idx]; end; procedure TStringTableResource.SetString(id: word; aString: string); @@ -167,13 +160,7 @@ begin CheckIndex(id); CheckListLoaded; idx:=IDtoIndex(id); - if idx<fList.Count then fList[idx]:=aString - else if idx>=fList.Count then - begin - for i:=fList.Count to idx-1 do - fList.Add(''); - fList.Add(aString); - end; + fList[idx]:= aString; end; procedure TStringTableResource.UpdateRawData; @@ -184,7 +171,7 @@ begin RawData.Position:=0; for i:=FirstID to LastID do WriteWideString(Strings[i]); - FreeAndNil(fList); + fList:= nil; end; function TStringTableResource.GetType: TResourceDesc; @@ -223,7 +210,7 @@ constructor TStringTableResource.Create; begin inherited Create; fCanChangeDesc:=false; - fList:=nil; + fList:= nil; fType:=TResourceDesc.Create(RT_STRING); fName:=TResourceDesc.Create(1); fCount:=16; @@ -248,8 +235,7 @@ destructor TStringTableResource.Destroy; begin fType.Free; fName.Free; - if fList<>nil then - fList.Free; + SetLength(fList, 0); inherited Destroy; end; |