mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 04:26:13 +02:00
* Fix Convertion between TUF8String and TString (length)
This commit is contained in:
parent
e49816e03a
commit
90ef672c12
@ -65,7 +65,7 @@ function VisualToLogical(const UTF8String:TUTF8String; pDir:TDirection):TVisualT
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
function UTF8Str(const s:TUTF8String):String;
|
function DumpStr(const s:TUTF8String):String;
|
||||||
var
|
var
|
||||||
i:Integer;
|
i:Integer;
|
||||||
begin
|
begin
|
||||||
@ -173,7 +173,7 @@ var
|
|||||||
begin
|
begin
|
||||||
vp := 1;
|
vp := 1;
|
||||||
Result := '';
|
Result := '';
|
||||||
for vp :=1 to Length(Src) do
|
for vp := 1 to Length(Src) do
|
||||||
Result += UnicodeToUTF8(Src[vp]);
|
Result += UnicodeToUTF8(Src[vp]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ end;
|
|||||||
|
|
||||||
function UTF8ToUCS16(const UTF8Char:TUTF8Char):TUCS16Char;
|
function UTF8ToUCS16(const UTF8Char:TUTF8Char):TUCS16Char;
|
||||||
begin
|
begin
|
||||||
case ComputeCharLength(@UTF8Char[1]) of
|
case Length(UTF8Char) of
|
||||||
1:{regular single byte character (#0 is a normal char, this is UTF8Charascal ;)}
|
1:{regular single byte character (#0 is a normal char, this is UTF8Charascal ;)}
|
||||||
Result := ord(UTF8Char[1]);
|
Result := ord(UTF8Char[1]);
|
||||||
2:
|
2:
|
||||||
@ -209,7 +209,7 @@ begin
|
|||||||
or (ord(UTF8Char[2]) and %00111111);
|
or (ord(UTF8Char[2]) and %00111111);
|
||||||
else
|
else
|
||||||
Result := $FFFF;
|
Result := $FFFF;
|
||||||
end
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -219,14 +219,14 @@ var
|
|||||||
c:TUTF8Char;
|
c:TUTF8Char;
|
||||||
begin
|
begin
|
||||||
lp := 1;
|
lp := 1;
|
||||||
vp := 1;
|
vp := 0;
|
||||||
SetLength(Result, Length(Src));
|
SetLength(Result, Length(Src));
|
||||||
while lp <= Length(Src) do
|
while lp <= Length(Src) do
|
||||||
begin
|
begin
|
||||||
|
vp += 1;
|
||||||
c := LCharOf(Src, lp);
|
c := LCharOf(Src, lp);
|
||||||
Result[vp] := WideChar(UTF8ToUCS16(c));
|
Result[vp] := WideChar(UTF8ToUCS16(c));
|
||||||
lp += Length(c);
|
lp += Length(c);
|
||||||
vp += 1;
|
|
||||||
end;
|
end;
|
||||||
SetLength(Result, vp);
|
SetLength(Result, vp);
|
||||||
end;
|
end;
|
||||||
@ -436,6 +436,7 @@ var
|
|||||||
begin
|
begin
|
||||||
temp := UTF8ToUnicode(Dest);
|
temp := UTF8ToUnicode(Dest);
|
||||||
c := WideChar(UTF8ToUCS16(Src));
|
c := WideChar(UTF8ToUCS16(Src));
|
||||||
|
WriteLn(3,HexStr(Word(c),4));
|
||||||
Result := FreeBIDI.InsertChar(c, temp, vp, pDir);
|
Result := FreeBIDI.InsertChar(c, temp, vp, pDir);
|
||||||
Dest := UnicodeToUTF8(temp);
|
Dest := UnicodeToUTF8(temp);
|
||||||
end;
|
end;
|
||||||
@ -470,6 +471,7 @@ begin
|
|||||||
if(v2l[i] < vp) and (v2l[i] > vp + len)
|
if(v2l[i] < vp) and (v2l[i] > vp + len)
|
||||||
then
|
then
|
||||||
Delete(str, v2l[i], 1);
|
Delete(str, v2l[i], 1);
|
||||||
|
WriteLn('kjjkjkjkj');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user