0

Ich habe CRDTs studiert und verstanden, dass sie verwendet wurden, um kollaborative Editoren zu erstellen, einschließlich Ritzy, TreeDoc, WOOT und Logoot.Welche CRDTs können zur Implementierung eines Rich Text Editors mit vollem Funktionsumfang verwendet werden?

Ich bin daran interessiert, einen solchen Editor zu erstellen, und muss wissen, ob CRDTs in der Lage sind, dieses Problem in seiner Allgemeinheit zu behandeln.

Um zu erarbeiten: Ein Rich-Text-Dokument (think html) hat eine Baumstruktur, aber die Knoten sind heterogen. Es gibt Blockelemente, Inline-Elemente, Tabellen, Listen und so weiter. Außerdem können Stile und Stylesheets (z. B. CSS) in ein Dokument eingebettet sein. Schließlich ist das Rückgängigmachen von wesentlicher Bedeutung.

Die oben aufgeführten Editoren können die erweiterten Funktionen wie Tabellen, eingebettete Stylesheets und Rückgängig/Wiederholen nicht verarbeiten.

Die Ritzy-Dokumentation verweist auf ein Papier, das CRDT-basierte kausale Bäume beschreibt (pdf), aber ich verstehe dieses Papier nicht wirklich.

Was ist das Grundprinzip hinter einem Kausalbaum CRDT? Ist es stark genug, um mit den oben beschriebenen heterogenen Bäumen umzugehen? Oder gibt es andere CRDTs, die dieses Szenario bewältigen könnten?

+0

Diese Frage ist wahrscheinlich besser geeignet, um https://cs.stackexchange.com/ – eggyal

Antwort

0

Die Implementierung einer CRDT für Rich-Text ist nicht sehr geradlinig. Einige CRDTs können zum Erstellen von Bäumen verwendet werden. Der naive Ansatz für Rich-Text wäre also, ihn als Baum zu bauen. Ein Knoten würde dann einen Textblock mit Formaten wie 'kursiv' darstellen. Um Text zu formatieren, müssen Sie ihn normalerweise löschen und einen neuen Knoten mit diesem Format einfügen. Dies funktioniert jedoch nicht immer wie erwartet: Wenn beispielsweise zwei Benutzer gleichzeitig denselben Text formatieren, wird der formatierte Text zwei Mal nach der Konvergenz eingefügt (User1 löscht den Text und fügt einen neuen Knoten ein. User2 löscht denselben Text und fügt a ein neuer Knoten). Nach meinem Wissen gibt es keine CRDTs, die dieses Problem lösen.

Eigentlich genügt eine CRDT für lineare Struktur völlig. Sie können Formate als Markierungen realisieren (z. B. Formatanfang und Formatende). Dies hat auch den Vorteil, dass Sie das erwartete Ergebnis erhalten, wenn zwei Benutzer Text gleichzeitig formatieren/einfügen.

Für eine funktionierende Implementierung dieses Ansatzes können Sie Yjs auschecken. Der Abschnitt "Beispiele" enthält ein Arbeitsbeispiel für einen Rich-Text-Editor.

(Full Disclosure: Ich bin der Autor des yjs)

Verwandte Themen