anchor.diff:      end;
     end;
   
  -begin
  -  writeln('>> KeyboardCaretNav');
  +  procedure CtrlKeyRightKey;
  +  var
  +    S: TfpgString;
  +    I: Integer;
  +    NotFindIt: Boolean;
  +  begin
  +    if CaretPos.Y <= pred(FLines.Count) then
  +    begin
  +      NotFindIt := True;
  +      while NotFindIt do
  +      begin
  +        S := FLines[CaretPos.Y];
  +        I := CaretPos.X;
  +        if GetNextWord(S, I) then
  +        begin
  +          CaretPos.X := I - 1;
  +          NotFindIt := False;
  +        end
  +        else
  +        begin
  +          CaretPos.Y := CaretPos.Y + 1;
  +          CaretPos.X := 1;
  +        end;
  +        if CaretPos.Y > pred(FLines.Count) then
  +        begin
  +          NotFindIt := False;
  +          CaretPos.X := 0;
  +        end;
  +      end;
  +    end
  +    else
  +      CaretPos.X := 0;
  +  end;
  +
  +begin
  +  writeln('DEBUG:  TfpgBaseTextEdit.KeyboardCaretNav >>');
     case AKeyCode of
       keyLeft:
           begin
  
positive.code:                 CtrlKeyLeftKey
                else
                  FSelEndOffs := CaretPos.X;
              end else
              begin
                FSelEndNo := CaretPos.Y;
                if ssCtrl in ShiftState then
  
negative.code: uses
    fpg_dialogs{, fpg_constants}, fpg_stringutils, fpg_utils;
  
  
  function GetNextWord(SLine: TfpgString; var PosX: Integer): Boolean;
  const
    ValidChars = ['a'..'z', 'A'..'Z', '0'..'9', '#'];
  var
    I, RetX: Integer;
    FindNext: Boolean;
    c: TfpgChar;
  begin
    Result := False;
    if PosX > UTF8Length(SLine) then Exit;
    FindNext := False;
    RetX := 0;
    for I := PosX to UTF8Length(SLine) do
    begin
      c := fpgCharAt(SLine, I);
      { TODO -cUnicode Error : We need to fix c[i] usage. Also improve ValidChars definition. }
      if not FindNext and not (c[1] in ValidChars) then
      begin
        FindNext := True;
        Continue;
      end;
      if FindNext and (c[1] in ValidChars) then
      begin
        RetX := I;
        Result := True;
        Break;
      end;
    end;
    if RetX < 1 then
      Result := False;
    PosX := RetX;
  end;
  
  
  { TfpgGutter }
  
  procedure TfpgGutter.SetDigits(const AValue: Integer);
  