Widestrings

From Lazarus wiki
Revision as of 22:32, 5 January 2005 by Plugwash (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

the following code from rtl/inc/wstrings.inc is used for assignments between ansistrings and widestrings.

procedure Wide2AnsiMove(source:pwidechar;dest:pchar;len:SizeInt); var

 i : SizeInt;

begin

 for i:=1 to len do
  begin
    if word(source^)<128 then
     dest^:=char(word(source^))
    else
     dest^:=' ';
    inc(dest);
    inc(source);
  end;

end;


procedure Ansi2WideMove(source:pchar;dest:pwidechar;len:SizeInt); var

 i : SizeInt;

begin

 for i:=1 to len do
  begin
    if byte(source^)<128 then
     dest^:=widechar(byte(source^))
    else
     dest^:=' ';
    inc(dest);
    inc(source);
  end;

end;

Const

 Wide2AnsiMoveProc:TWide2AnsiMove=@Wide2AnsiMove;
 Ansi2WideMoveProc:TAnsi2WideMove=@Ansi2WideMove;

the procvars are supposed to allow you to replace theese with a converter more suited to the local charset. Unfortunately they do not allow for the "ansi" charset to be multibyte as they assume the number of ansichars in the ansistring will equal the number of widechars in the widestring.