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는 나무를 만드는 데 사용할 수 있습니다. 따라서 리치 텍스트에 대한 순진한 접근 방식은이를 나무로 구축하는 것입니다. 그러면 노드는 '기울임 꼴'과 같은 형식으로 텍스트 블록을 나타냅니다. 텍스트 서식을 지정하려면 일반적으로 텍스트를 삭제하고 해당 형식의 새 노드를 삽입해야합니다. 예를 들어, 두 명의 사용자가 동일한 텍스트를 동시에 포맷하면 컨버전스 후 서식이 지정된 텍스트가 두 번 삽입됩니다 (User1은 텍스트를 삭제하고 새 노드를 삽입 함). User2는 동일한 텍스트를 삭제하고 새로운 노드). 내 지식에는이 문제를 해결하는 CRDT가 없습니다.

사실 선형 구조의 CRDT로 충분합니다. 형식을 마커로 인식 할 수 있습니다 (예 : 형식 시작 및 형식 끝). 이것은 또한 두 사용자가 동시에 텍스트를 포맷/삽입 할 때 예상되는 결과를 얻는 이점이 있습니다.

이 접근 방식을 실제로 구현하려면 Yjs을 확인하십시오. 예제 섹션에는 서식있는 텍스트 편집기의 작동 예제가 들어 있습니다.

(전체 공개 : 나는 Yjs의 저자)

관련 문제