0

私はCRDTを研究しており、Ritzy、TreeDoc、WOOT、Logootなどの共同編集者の作成に使用されていることを理解しています。完全な機能を備えたコラボレーティブなリッチテキストエディタを実装するために使用できるCRDTはどれですか?

私はそのようなエディタを構築することに興味があり、CRDTが一般的にこの問題を処理できることがわかっているかどうかを知る必要があります。

具体的には:リッチテキスト文書(think html)はツリー構造を持ちますが、ノードは異種です。ブロック要素、インライン要素、表、リストなどがあります。さらに、ドキュメントに埋め込まれたスタイルやスタイルシート(CSSなど)がある場合もあります。最後に、取り消しが不可欠です。

上記のエディタでは、テーブル、埋め込みスタイルシート、元に戻す/やり直しなどの高度な機能は扱えません。

Ritzyのドキュメントは、CRDTベースの因果樹(pdf)を記述する論文にリンクしていますが、私はこの論文を実際に理解していません。

因果樹CRDTの基本原理は何ですか?上記の異種ツリーを処理するのに十分強力ですか?あるいは、このシナリオを処理できる他のCRDTがありますか?

+0

この質問はおそらくhttps://cs.stackexchange.com/に適しています – eggyal

答えて

0

リッチテキスト用のCRDTの実装はあまり簡単ではありません。一部のCRDTを使用してツリーを構築できます。リッチテキストの素朴なアプローチは、ツリーとして構築することです。ノードは、「イタリック」などの書式のテキストブロックを表します。テキストを書式設定するには、通常はテキストを削除し、その形式の新しいノードを挿入する必要があります。たとえば、2人のユーザーが同じテキストを同時に書式設定すると、収束後2回、書式付きテキストが挿入されます(User1はテキストを削除し、新しいノードを挿入します)。新しいノード)。私の知る限り、この問題を解決するCRDTはありません。

実際、線形構造のCRDTで十分です。マーカーとしてフォーマットを実現できます(フォーマット開始、フォーマット終了など)。これには、2人のユーザーが同時にテキストを書式設定/挿入するときに期待される結果が得られるという利点もあります。

この手法を実装するには、Yjsをチェックしてください。サンプルセクションには、リッチテキストエディタの実際の例が含まれています。

(完全公開:私はYjsの著者です)

関連する問題