1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-18 16:10:26 +02:00

Improved right-cursor movement over utf8 codepoints

This commit is contained in:
Brian Fiete 2024-01-22 08:39:53 -05:00
parent 04f1802303
commit f96de4722e
3 changed files with 41 additions and 4 deletions

View file

@ -2226,15 +2226,18 @@ namespace Beefy.widgets
else if (lineIdx < GetLineCount() - 1)
MoveCursorTo(lineIdx + 1, 0, false, 0, .SelectRight);
if (!mWidgetWindow.IsKeyDown(KeyCode.Control))
break;
GetLineCharAtIdx(CursorTextPos, out lineIdx, out lineChar);
anIndex = GetTextIdx(lineIdx, lineChar);
if (anIndex == mData.mTextLength)
break;
char8 c = (char8)mData.mText[anIndex].mChar;
if ((uint8)c & 0xC0 == 0x80)
continue;
if (!mWidgetWindow.IsKeyDown(KeyCode.Control))
break;
CharType char8Type = GetCharType(c);
if (char8Type == .Opening)
break;

View file

@ -359,6 +359,23 @@ namespace System
}
}
public int NumCodePoints
{
get
{
char8* ptr = Ptr;
int count = 0;
for (int i < mLength)
{
char8 c = ptr[i];
if (((uint8)c & 0xC0) != 0x80)
count++;
}
return count;
}
}
public int AllocSize
{
[Inline]
@ -3594,6 +3611,23 @@ namespace System
}
}
public int NumCodePoints
{
get
{
char8* ptr = Ptr;
int count = 0;
for (int i < mLength)
{
char8 c = ptr[i];
if (((uint8)c & 0xC0) != 0x80)
count++;
}
return count;
}
}
private int GetRangeStart(IndexRange range)
{
switch (range.Start)

View file

@ -5366,7 +5366,7 @@ namespace IDE.ui
String curLineStr = scope String();
GetLineText(line, curLineStr);
int32 lineEnd = (int32)curLineStr.Length;
int32 lineEnd = (int32)curLineStr.NumCodePoints;
mVirtualCursorPos.ValueRef.mColumn = (.)Math.Min(mVirtualCursorPos.Value.mColumn, Math.Max(virtualEnd, lineEnd));
}