pass selection/modify.tentative.html

This commit is contained in:
Muki Kiboigo
2026-02-17 11:58:13 -08:00
parent e77e4acea9
commit f8f99f3878

View File

@@ -387,20 +387,47 @@ fn modifyByCharacter(self: *Selection, alter: ModifyAlter, forward: bool, range:
var new_node = focus_node; var new_node = focus_node;
var new_offset = focus_offset; var new_offset = focus_offset;
if (forward) { if (!isTextNode(focus_node)) {
const len = focus_node.getLength(); if (forward) {
if (focus_offset < len) { if (focus_node.getChildAt(focus_offset)) |child| {
new_offset += 1; if (isTextNode(child)) {
} else if (nextTextNode(focus_node)) |next| { new_node = child;
new_node = next; new_offset = 0;
new_offset = 0; } else if (nextTextNode(child)) |t| {
new_node = t;
new_offset = 0;
}
}
} else {
var idx = focus_offset;
while (idx > 0) {
idx -= 1;
const child = focus_node.getChildAt(idx) orelse break;
var bottom = child;
while (bottom.lastChild()) |c| bottom = c;
if (isTextNode(bottom)) {
new_node = bottom;
new_offset = bottom.getLength();
break;
}
}
} }
} else { } else {
if (focus_offset > 0) { if (forward) {
new_offset -= 1; const len = focus_node.getLength();
} else if (prevTextNode(focus_node)) |prev| { if (focus_offset < len) {
new_node = prev; new_offset += 1;
new_offset = prev.getLength() - 1; } else if (nextTextNode(focus_node)) |next| {
new_node = next;
new_offset = 0;
}
} else {
if (focus_offset > 0) {
new_offset -= 1;
} else if (prevTextNode(focus_node)) |prev| {
new_node = prev;
new_offset = prev.getLength();
}
} }
} }