anchor.diff:    end;
   end;
   
  -function UTF8CharStart(UTF8Str: PChar; Len, Index: integer): PChar;
  -var
  -  CharLen: LongInt;
  -begin
  -  Result := UTF8Str;
  -  if Result <> nil then
  -  begin
  -    while (Index > 0) and (Len > 0) do
  -    begin
  -      CharLen := UTF8CharacterLength(Result);
  -      dec(Len, CharLen);
  -      dec(Index);
  -      inc(Result, CharLen);
  -    end;
  -    if (Index > 0) or (Len < 0) then
  -      Result := nil;
  -  end;
  -end;
  -
  -function UTF8CharacterLength(p: PChar): integer;
  -begin
  -  if p <> nil then
  -  begin
  -    if ord(p^) < %11000000 then
  -    begin
  -      // regular single byte character (#0 is a character, this is pascal ;)
  -      Result:=1;
  -    end
  -    else if ((ord(p^) and %11100000) = %11000000) then
  -    begin
  -      // could be 2 byte character
  -      if (ord(p[1]) and %11000000) = %10000000 then
  -        Result := 2
  -      else
  -        Result := 1;
  -    end
  -    else if ((ord(p^) and %11110000) = %11100000) then
  -    begin
  -      // could be 3 byte character
  -      if ((ord(p[1]) and %11000000) = %10000000)
  -          and ((ord(p[2]) and %11000000) = %10000000) then
  -        Result:=3
  -      else
  -        Result:=1;
  -    end
  -    else if ((ord(p^) and %11111000) = %11110000) then
  -    begin
  -      // could be 4 byte character
  -      if ((ord(p[1]) and %11000000) = %10000000)
  -          and ((ord(p[2]) and %11000000) = %10000000)
  -          and ((ord(p[3]) and %11000000) = %10000000) then
  -        Result:=4
  -      else
  -        Result:=1;
  -    end
  -    else
  -      Result:=1;
  -  end
  -  else
  -    Result:=0;
  +// returns the character index, where the SearchForText starts in SearchInText
  +function UTF8Pos(const SearchForText, SearchInText: string): integer;
  +var
  + p: LongInt;
  +begin
  +  p := System.Pos(SearchForText, SearchInText);
  +  if p > 0 then
  +    Result := UTF8Length(PChar(SearchInText), p-1) + 1
  +  else
  +    Result := 0;
  +end;
  +
  +procedure UTF8Delete(var S: string; Index, Size: integer);
  +var
  +  ls: integer;
  +  b: string;
  +  e: string;
  +begin
  +  ls := UTF8Length(S);
  +  if (Index > ls) or (Index <= 0) or (Size <= 0) then
  +    Exit; //==>
  +  b := UTF8Copy(S, 1, Index-1); // beginning string
  +  e := UTF8Copy(S, Index+Size, UTF8Length(S)-(Index+Size-1)); // ending string
  +  S := b + e;
   end;
   
   procedure UTF8Insert(const Source: string; var S: string; Index: integer);
  
positive.code:   end;
  end;
  
  procedure UTF8Delete(var S: string; Index, Size: integer);
  var
    ls: integer;
    b: string;
    e: string;
  begin
    ls := UTF8Length(S);
    if (Index > ls) or (Index <= 0) or (Size <= 0) then
      Exit; //==>
    b := UTF8Copy(S, 1, Index-1); // beginning string
    e := UTF8Copy(S, Index+Size, UTF8Length(S)-(Index+Size-1)); // ending string
    S := b + e;
  end;
  
  end.
  
  
negative.code: function UTF8Length(const s: string): integer;
  begin
    if s = '' then
      Result := 0
    else
      Result := UTF8Length(PChar(s),length(s));
  end;
  