mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-27 00:40:18 +02:00
lcl: fix handling WideString properties (bug #0012981)
git-svn-id: trunk@18304 -
This commit is contained in:
parent
047bd064e5
commit
943062564b
@ -289,7 +289,7 @@ type
|
|||||||
procedure HandleNumber;
|
procedure HandleNumber;
|
||||||
procedure HandleHexNumber;
|
procedure HandleHexNumber;
|
||||||
function HandleQuotedString : string;
|
function HandleQuotedString : string;
|
||||||
function HandleDecimalString: string;
|
function HandleDecimalString(var ascii: Boolean): string;
|
||||||
procedure HandleString;
|
procedure HandleString;
|
||||||
procedure HandleMinus;
|
procedure HandleMinus;
|
||||||
procedure HandleUnknown;
|
procedure HandleUnknown;
|
||||||
@ -2526,14 +2526,12 @@ var
|
|||||||
Output.Write(s[1], Length(s));
|
Output.Write(s[1], Length(s));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$IFDEF DisableWindowsUnicodeSupport}
|
|
||||||
procedure WriteWideString(const s: WideString);
|
procedure WriteWideString(const s: WideString);
|
||||||
begin
|
begin
|
||||||
WriteLRSInteger(Output,Length(s));
|
WriteLRSInteger(Output,Length(s));
|
||||||
if Length(s) > 0 then
|
if Length(s) > 0 then
|
||||||
Output.Write(s[1], Length(s)*2);
|
Output.Write(s[1], Length(s)*2);
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
procedure WriteInteger(value: LongInt);
|
procedure WriteInteger(value: LongInt);
|
||||||
begin
|
begin
|
||||||
@ -2621,9 +2619,6 @@ var
|
|||||||
flt: Extended;
|
flt: Extended;
|
||||||
stream: TMemoryStream;
|
stream: TMemoryStream;
|
||||||
BinDataSize: LongInt;
|
BinDataSize: LongInt;
|
||||||
{$IFDEF DisableWindowsUnicodeSupport}
|
|
||||||
toWideStringBuf: WideString;
|
|
||||||
{$ENDIF}
|
|
||||||
toStringBuf: String;
|
toStringBuf: String;
|
||||||
begin
|
begin
|
||||||
if parser.TokenSymbolIs('END') then exit;
|
if parser.TokenSymbolIs('END') then exit;
|
||||||
@ -2663,35 +2658,20 @@ var
|
|||||||
WriteLongString(toStringBuf);
|
WriteLongString(toStringBuf);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$IFDEF DisableWindowsUnicodeSupport}
|
|
||||||
toWString:
|
toWString:
|
||||||
begin
|
begin
|
||||||
toWideStringBuf := parser.TokenWideString;
|
toStringBuf := parser.TokenString;
|
||||||
//DebugLn(['ProcessValue toWideStringBuf="',toWideStringBuf,'" ',dbgstr(toWideStringBuf)]);
|
//DebugLn(['ProcessValue toStringBuf="',toStringBuf,'" ',dbgstr(toStringBuf)]);
|
||||||
while ParserNextToken = '+' do
|
while ParserNextToken = '+' do
|
||||||
begin
|
begin
|
||||||
ParserNextToken; // Get next string fragment
|
ParserNextToken; // Get next string fragment
|
||||||
if not (parser.Token in [toString,toWString]) then
|
if not (parser.Token in [toString,toWString]) then
|
||||||
parser.CheckToken(toString);
|
parser.CheckToken(toString);
|
||||||
toWideStringBuf := toWideStringBuf + parser.TokenWideString;
|
toStringBuf := toStringBuf + parser.TokenString;
|
||||||
end;
|
|
||||||
if WideStringNeeded(toWideStringBuf) then begin
|
|
||||||
//debugln('LRSObjectTextToBinary.ProcessValue WriteWideString');
|
|
||||||
Output.WriteByte(Ord(vaWString));
|
|
||||||
WriteWideString(toWideStringBuf);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if length(toStringBuf)<256 then begin
|
|
||||||
//debugln('LRSObjectTextToBinary.ProcessValue WriteShortString');
|
|
||||||
Output.WriteByte(Ord(vaString));
|
|
||||||
WriteShortString(WideStrToShortStrWithoutConversion(toWideStringBuf));
|
|
||||||
end else begin
|
|
||||||
//debugln('LRSObjectTextToBinary.ProcessValue WriteLongString');
|
|
||||||
Output.WriteByte(Ord(vaLString));
|
|
||||||
WriteLongString(WideStrToAnsiStrWithoutConversion(toWideStringBuf));
|
|
||||||
end;
|
end;
|
||||||
|
Output.WriteByte(Ord(vaWString));
|
||||||
|
WriteWideString(UTF8Decode(toStringBuf));
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
|
||||||
toSymbol:
|
toSymbol:
|
||||||
begin
|
begin
|
||||||
if CompareText(parser.TokenString, 'True') = 0 then
|
if CompareText(parser.TokenString, 'True') = 0 then
|
||||||
@ -5106,7 +5086,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TUTF8Parser.HandleDecimalString: string;
|
function TUTF8Parser.HandleDecimalString(var ascii: Boolean): string;
|
||||||
var i : integer;
|
var i : integer;
|
||||||
begin
|
begin
|
||||||
Result:='';
|
Result:='';
|
||||||
@ -5120,19 +5100,27 @@ begin
|
|||||||
end;
|
end;
|
||||||
if not TryStrToInt(Result,i) then
|
if not TryStrToInt(Result,i) then
|
||||||
i:=0;
|
i:=0;
|
||||||
|
if i > 127 then
|
||||||
|
ascii := False;
|
||||||
Result:=UnicodeToUTF8(i);
|
Result:=UnicodeToUTF8(i);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TUTF8Parser.HandleString;
|
procedure TUTF8Parser.HandleString;
|
||||||
|
var
|
||||||
|
ascii: Boolean;
|
||||||
begin
|
begin
|
||||||
fLastTokenStr:='';
|
fLastTokenStr:='';
|
||||||
|
ascii := True;
|
||||||
while true do
|
while true do
|
||||||
case fBuf[fPos] of
|
case fBuf[fPos] of
|
||||||
'''' : fLastTokenStr:=fLastTokenStr+HandleQuotedString;
|
'''' : fLastTokenStr:=fLastTokenStr+HandleQuotedString;
|
||||||
'#' : fLastTokenStr:=fLastTokenStr+HandleDecimalString
|
'#' : fLastTokenStr:=fLastTokenStr+HandleDecimalString(ascii);
|
||||||
else break;
|
else break;
|
||||||
end;
|
end;
|
||||||
fToken:=toString;
|
if ascii then
|
||||||
|
fToken:=toString
|
||||||
|
else
|
||||||
|
fToken:=toWString;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TUTF8Parser.HandleMinus;
|
procedure TUTF8Parser.HandleMinus;
|
||||||
|
Loading…
Reference in New Issue
Block a user