diff --git a/lib/src/models/documents/nodes/leaf.dart b/lib/src/models/documents/nodes/leaf.dart index feab276c..9971210c 100644 --- a/lib/src/models/documents/nodes/leaf.dart +++ b/lib/src/models/documents/nodes/leaf.dart @@ -40,8 +40,8 @@ abstract class Leaf extends Node { if (_value is String) { return (_value as String).length; } - // return 1 for embedded object - return 1; + // return 0 for embedded object + return 0; } @override @@ -257,5 +257,8 @@ class Embed extends Leaf { // Embed nodes are represented as unicode object replacement character in // plain text. @override - String toPlainText() => kObjectReplacementCharacter; + String toPlainText() => ''; + + @override + String toString() => kObjectReplacementCharacter; } diff --git a/lib/src/models/documents/nodes/line.dart b/lib/src/models/documents/nodes/line.dart index 9e7094db..5142b6c8 100644 --- a/lib/src/models/documents/nodes/line.dart +++ b/lib/src/models/documents/nodes/line.dart @@ -393,17 +393,12 @@ class Line extends Container { final data = queryChild(offset, true); var node = data.node as Leaf?; if (node != null) { - var pos = 0; - if (node is Text) { - pos = node.length - data.offset; - result.add(Tuple2(beg, node.style)); - } + var pos = node.length - data.offset; + result.add(Tuple2(beg, node.style)); while (!node!.isLast && pos < local) { node = node.next as Leaf; - if (node is Text) { - result.add(Tuple2(pos + beg, node.style)); - pos += node.length; - } + result.add(Tuple2(pos + beg, node.style)); + pos += node.length; } } @@ -458,31 +453,23 @@ class Line extends Container { if (res.length == 1) { final data = queryChild(offset, true); final text = res.single.item2; - return text == Embed.kObjectReplacementCharacter - ? '' - : text.substring(data.offset, data.offset + len); + return text.substring(data.offset, data.offset + len); } final total = []; // Adjust first node final firstNodeLen = res[1].item1; var text = res[0].item2; - if (text != Embed.kObjectReplacementCharacter) { - total.add(text.substring(text.length - firstNodeLen)); - } + total.add(text.substring(text.length - firstNodeLen)); for (var i = 1; i < res.length - 1; i++) { - if (res[i].item2 != Embed.kObjectReplacementCharacter) { - total.add(res[i].item2); - } + total.add(res[i].item2); } // Adjust last node final lastNodeLen = len - res[res.length - 1].item1; text = res[res.length - 1].item2; - if (text != Embed.kObjectReplacementCharacter) { - total.add(text.substring(0, lastNodeLen)); - } + total.add(text.substring(0, lastNodeLen)); return total.join(); } diff --git a/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart b/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart index c5fe8317..a6b55313 100644 --- a/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart +++ b/lib/src/widgets/raw_editor/raw_editor_state_selection_delegate_mixin.dart @@ -3,7 +3,6 @@ import 'dart:math' as math; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; -import '../../models/documents/nodes/leaf.dart'; import '../../utils/delta.dart'; import '../editor.dart'; @@ -20,7 +19,7 @@ mixin RawEditorStateSelectionDelegateMixin on EditorState final oldText = widget.controller.document.toPlainText(); final newText = value.text; final diff = getDiff(oldText, newText, cursorPosition); - final insertedText = _adjustInsertedText(diff.inserted); + final insertedText = diff.inserted; widget.controller.replaceText( diff.start, diff.deleted.length, insertedText, value.selection); @@ -40,24 +39,6 @@ mixin RawEditorStateSelectionDelegateMixin on EditorState } } - String _adjustInsertedText(String text) { - // For clip from editor, it may contain image, a.k.a 65532 or '\uFFFC'. - // For clip from browser, image is directly ignore. - // Here we skip image when pasting. - if (!text.codeUnits.contains(Embed.kObjectReplacementInt)) { - return text; - } - - final sb = StringBuffer(); - for (var i = 0; i < text.length; i++) { - if (text.codeUnitAt(i) == Embed.kObjectReplacementInt) { - continue; - } - sb.write(text[i]); - } - return sb.toString(); - } - @override void bringIntoView(TextPosition position) { final localRect = renderEditor.getLocalRectForCaret(position);