anchor.diff:    cIndent2 = 10;
   var
     buf, part_L, part_R: string;
  -  strname, strkey, strname2, strfind: UnicodeString;
  +  s_name, s_name2, s_right, s_filter: UnicodeString;
     cl: TColor;
     ar: TATIntArray;
     pnt: TPoint;
  -  r1: TRect;
  +  RectClip: TRect;
     bCurrentFuzzy: boolean;
     n, i: integer;
   begin
  
positive.code:   {//no support for n words
    else
    begin
      n:= Pos(Lowercase(strfind), Lowercase(strname));
      if n>0 then
      begin
        buf:= Copy(strname, n, Length(strfind));
        n:= c.TextWidth(Copy(strname, 1, n-1));
        r1:= Rect(pnt.x+n, pnt.y, pnt.x+n+c.TextWidth(buf), ARect.Bottom);
        ExtTextOut(c.Handle,
          r1.Left, r1.Top,
          ETO_CLIPPED+ETO_OPAQUE,
          @r1,
          PChar(buf),
          Length(buf),
          nil);
  
negative.code: 
    //right part
    n:= ARect.Width div 2;
    s_right:= CanvasCollapseStringByDots(C, part_R, acsmLeft, n);
    n:= C.TextWidth(s_right);
  
    //left part
    //less space for name if part_R long
    n:= ARect.Width - n - 2*cIndent;
    s_name:= part_L;
    s_name2:= CanvasCollapseStringByDots(C, part_L, CollapseMode, n);
  
    //text of filter
    s_filter:= Trim(edit.Text);
  
    bCurrentFuzzy:= UiOps.ListboxFuzzySearch and not DisableFuzzy;
    if bCurrentFuzzy and (s_name<>s_name2) then
      bCurrentFuzzy:= false;
  
    pnt:= Point(ARect.Left+cIndent, ARect.Top+1);
    c.TextOut(pnt.x, pnt.y, Utf8Encode(s_name2));
  
    c.Font.Color:= FColorFontHilite;
  
    if bCurrentFuzzy then
    begin
      ar:= SFindFuzzyPositions(s_name, s_filter);
      for i:= Low(ar) to High(ar) do
      begin
        buf:= Utf8Encode(UnicodeString(s_name[ar[i]]));
        n:= c.TextWidth(Utf8Encode(Copy(s_name, 1, ar[i]-1)));
        RectClip:= Rect(pnt.x+n, pnt.y, pnt.x+n+c.TextWidth(buf), ARect.Bottom);
        ExtTextOut(c.Handle,
          RectClip.Left, RectClip.Top,
          ETO_CLIPPED+ETO_OPAQUE,
          @RectClip,
          PChar(buf),
          Length(buf),
          nil);
  