mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
fix selection modify on nextTextNodeAfter
This commit is contained in:
@@ -354,6 +354,30 @@ fn nextTextNode(node: *Node) ?*Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn nextTextNodeAfter(node: *Node) ?*Node {
|
||||||
|
var current = node;
|
||||||
|
while (true) {
|
||||||
|
if (current.nextSibling()) |sib| {
|
||||||
|
current = sib;
|
||||||
|
} else {
|
||||||
|
while (true) {
|
||||||
|
const parent = current.parentNode() orelse return null;
|
||||||
|
if (parent.nextSibling()) |uncle| {
|
||||||
|
current = uncle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
current = parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var descend = current;
|
||||||
|
while (true) {
|
||||||
|
if (isTextNode(descend)) return descend;
|
||||||
|
descend = descend.firstChild() orelse break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn prevTextNode(node: *Node) ?*Node {
|
fn prevTextNode(node: *Node) ?*Node {
|
||||||
var current = node;
|
var current = node;
|
||||||
|
|
||||||
@@ -413,10 +437,13 @@ fn modifyByCharacter(self: *Selection, alter: ModifyAlter, forward: bool, range:
|
|||||||
new_node = t;
|
new_node = t;
|
||||||
new_offset = 0;
|
new_offset = 0;
|
||||||
}
|
}
|
||||||
|
} else if (nextTextNodeAfter(focus_node)) |next| {
|
||||||
|
new_node = next;
|
||||||
|
new_offset = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// backward element-node case
|
||||||
var idx = focus_offset;
|
var idx = focus_offset;
|
||||||
|
|
||||||
while (idx > 0) {
|
while (idx > 0) {
|
||||||
idx -= 1;
|
idx -= 1;
|
||||||
const child = focus_node.getChildAt(idx) orelse break;
|
const child = focus_node.getChildAt(idx) orelse break;
|
||||||
@@ -496,7 +523,7 @@ fn modifyByWord(self: *Selection, alter: ModifyAlter, forward: bool, range: *Ran
|
|||||||
|
|
||||||
if (forward) {
|
if (forward) {
|
||||||
const child = focus_node.getChildAt(focus_offset) orelse {
|
const child = focus_node.getChildAt(focus_offset) orelse {
|
||||||
if (nextTextNode(focus_node)) |next| {
|
if (nextTextNodeAfter(focus_node)) |next| {
|
||||||
new_node = next;
|
new_node = next;
|
||||||
new_offset = nextWordEnd(next.getData(), 0);
|
new_offset = nextWordEnd(next.getData(), 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user