summaryrefslogtreecommitdiff
path: root/packages/fcl-res
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-08-12 19:05:08 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-08-12 19:05:08 +0000
commit614581b7856d0acc9e58a88a97b0b28ad4cb5528 (patch)
tree963ab42d86e9fcd34814c8993cdef256ef7004b6 /packages/fcl-res
parent9fe2e3b14093c00ef076df5bbbeabd36f25157af (diff)
downloadfpc-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.pp56
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;