Add Block and Line classes

pull/13/head
singerdmx 4 years ago
parent 4876c0b980
commit 8306e02c00
  1. 6
      lib/models/documents/nodes/block.dart
  2. 3
      lib/models/documents/nodes/leaf.dart
  3. 5
      lib/models/documents/nodes/line.dart
  4. 39
      lib/models/documents/nodes/node.dart

@ -0,0 +1,6 @@
import 'line.dart';
import 'node.dart';
class Block extends Container<Line> {
}

@ -1,6 +1,5 @@
import 'node.dart'; import 'node.dart';
/* A leaf node in document tree */ /* A leaf node in document tree */
abstract class Leaf extends Node implements StyledNode { abstract class Leaf extends Node {
} }

@ -0,0 +1,5 @@
import 'leaf.dart';
import 'node.dart';
class Line extends Container<Leaf> {
}

@ -2,14 +2,16 @@ import 'dart:collection';
import 'package:flutter_quill/models/documents/style.dart'; import 'package:flutter_quill/models/documents/style.dart';
import 'attribute.dart'; import '../attribute.dart';
/* node in a document tree */ /* node in a document tree */
abstract class Node extends LinkedListEntry<Node> {} class Node extends LinkedListEntry<Node> {
Container _parent;
Style _style = Style();
abstract class StyledNode implements Node {
Style get style => _style; Style get style => _style;
Style _style = Style();
Container get parent => _parent;
void applyAttribute(Attribute attribute) { void applyAttribute(Attribute attribute) {
_style = _style.merge(attribute); _style = _style.merge(attribute);
@ -25,17 +27,34 @@ abstract class StyledNode implements Node {
void clearStyle() { void clearStyle() {
_style = Style(); _style = Style();
} }
}
abstract class Container<T extends Node> extends Node {
Container _parent;
Container get parent => _parent;
bool get isFirst => list.first == this; bool get isFirst => list.first == this;
bool get isLast => list.last == 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<T extends Node> extends Node {}
/* Root node of document tree */ /* Root node of document tree */
class Root extends Container<Container<Node>> {} class Root extends Container<Container<Node>> {}
Loading…
Cancel
Save