[Lazarus] cwstring in arm-linux

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Thu Oct 20 16:34:30 CEST 2011


On Thu, Oct 20, 2011 at 4:19 PM, Michael Schnell <mschnell at lumino.de> wrote:
> I was not at all happy trying to convert them to the "always UTF-8" version
> of Lazarus.

Well, here is the surprise now: utf-8 was chosen exactly to facilitate
porting old applications while still supporting all of the Unicode
standard.

Length does not give the number of chars? No problem:

uses lazutf8;
function UTF8Length(const s: string): PtrInt;

How to iterate through chars? Using this:

function UTF8CharacterLength(p: PChar): integer;

How to find the n-th char?

// find the n-th UTF8 character, ignoring BIDI
function UTF8CharStart(UTF8Str: PChar; Len, CharIndex: PtrInt): PChar;
// find the byte index of the n-th UTF8 character, ignoring BIDI (byte
len of substr)
function UTF8CharToByteIndex(UTF8Str: PChar; Len, CharIndex: PtrInt): PtrInt;

Having problems in Pos, Copy, Delete or Insert? Just replace with these:

function UTF8Pos(const SearchForText, SearchInText: string): PtrInt;
function UTF8Copy(const s: string; StartCharIndex, CharCount: PtrInt): string;
procedure UTF8Delete(var s: String; StartCharIndex, CharCount: PtrInt);
procedure UTF8Insert(const source: String; var s: string;
StartCharIndex: PtrInt);

The switch is really easy. There are routines which are equivalent to
all operations done previously.

-- 
Felipe Monteiro de Carvalho




More information about the Lazarus mailing list