diff --git a/lib/models/documents/nodes/block.dart b/lib/models/documents/nodes/block.dart new file mode 100644 index 00000000..e0ba3ab8 --- /dev/null +++ b/lib/models/documents/nodes/block.dart @@ -0,0 +1,6 @@ +import 'line.dart'; +import 'node.dart'; + +class Block extends Container { + +} \ No newline at end of file diff --git a/lib/models/documents/leaf.dart b/lib/models/documents/nodes/leaf.dart similarity index 50% rename from lib/models/documents/leaf.dart rename to lib/models/documents/nodes/leaf.dart index a785e6b2..66ba27fd 100644 --- a/lib/models/documents/leaf.dart +++ b/lib/models/documents/nodes/leaf.dart @@ -1,6 +1,5 @@ import 'node.dart'; /* A leaf node in document tree */ -abstract class Leaf extends Node implements StyledNode { - +abstract class Leaf extends Node { } diff --git a/lib/models/documents/nodes/line.dart b/lib/models/documents/nodes/line.dart new file mode 100644 index 00000000..78770b2d --- /dev/null +++ b/lib/models/documents/nodes/line.dart @@ -0,0 +1,5 @@ +import 'leaf.dart'; +import 'node.dart'; + +class Line extends Container { +} diff --git a/lib/models/documents/node.dart b/lib/models/documents/nodes/node.dart similarity index 55% rename from lib/models/documents/node.dart rename to lib/models/documents/nodes/node.dart index a6cb7e39..73d89dfd 100644 --- a/lib/models/documents/node.dart +++ b/lib/models/documents/nodes/node.dart @@ -2,14 +2,16 @@ import 'dart:collection'; import 'package:flutter_quill/models/documents/style.dart'; -import 'attribute.dart'; +import '../attribute.dart'; /* node in a document tree */ -abstract class Node extends LinkedListEntry {} +class Node extends LinkedListEntry { + Container _parent; + Style _style = Style(); -abstract class StyledNode implements Node { Style get style => _style; - Style _style = Style(); + + Container get parent => _parent; void applyAttribute(Attribute attribute) { _style = _style.merge(attribute); @@ -25,17 +27,34 @@ abstract class StyledNode implements Node { void clearStyle() { _style = Style(); } -} - -abstract class Container extends Node { - Container _parent; - - Container get parent => _parent; bool get isFirst => list.first == this; bool get isLast => list.last == this; + + @override + void insertBefore(Node entry) { + assert(entry._parent == null && _parent != null); + entry._parent = _parent; + super.insertBefore(entry); + } + + @override + void insertAfter(Node entry) { + assert(entry._parent == null && _parent != null); + entry._parent = _parent; + super.insertAfter(entry); + } + + @override + void unlink() { + assert(_parent != null); + _parent = null; + super.unlink(); + } } +abstract class Container extends Node {} + /* Root node of document tree */ class Root extends Container> {}