|
@@ -163,6 +163,18 @@ class Node extends ChangeNotifier with LinkedListEntry<Node> {
|
|
}
|
|
}
|
|
return parent!._path([index, ...previous]);
|
|
return parent!._path([index, ...previous]);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ Node deepClone() {
|
|
|
|
+ final newNode = Node(
|
|
|
|
+ type: type, children: LinkedList<Node>(), attributes: {...attributes});
|
|
|
|
+
|
|
|
|
+ for (final node in children) {
|
|
|
|
+ final newNode = node.deepClone();
|
|
|
|
+ newNode.parent = this;
|
|
|
|
+ newNode.children.add(newNode);
|
|
|
|
+ }
|
|
|
|
+ return newNode;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
class TextNode extends Node {
|
|
class TextNode extends Node {
|
|
@@ -213,5 +225,21 @@ class TextNode extends Node {
|
|
delta: delta ?? this.delta,
|
|
delta: delta ?? this.delta,
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ @override
|
|
|
|
+ TextNode deepClone() {
|
|
|
|
+ final newNode = TextNode(
|
|
|
|
+ type: type,
|
|
|
|
+ children: LinkedList<Node>(),
|
|
|
|
+ delta: delta.slice(0),
|
|
|
|
+ attributes: {...attributes});
|
|
|
|
+
|
|
|
|
+ for (final node in children) {
|
|
|
|
+ final newNode = node.deepClone();
|
|
|
|
+ newNode.parent = this;
|
|
|
|
+ newNode.children.add(newNode);
|
|
|
|
+ }
|
|
|
|
+ return newNode;
|
|
|
|
+ }
|
|
|
|
+
|
|
String toRawString() => _delta.toRawString();
|
|
String toRawString() => _delta.toRawString();
|
|
}
|
|
}
|