¿Cuál es una buena estructura de datos para un editor de texto como Word / Google Docs?

Una estructura de datos que conozco para implementar un editor de texto es una cuerda, que es un árbol binario con cadenas almacenadas en las hojas. Los nodos internos contienen información que le permite acceder a los personajes por posición. Esto le permite editar texto de manera más eficiente que simplemente cambiar una cadena larga. Esto es suficiente para un editor de texto básico como el bloc de notas, pero los procesadores de texto como Word requieren que se almacenen más datos.

El resaltado y los comentarios pueden almacenarse utilizando caracteres especiales, cadenas para denotar qué texto resaltar, comentar. Un formateador leería estos caracteres especiales y los eliminaría para formatear el resto del texto para mostrarlo e imprimirlo.

No estoy seguro de cómo se manejan las ediciones concurrentes en los documentos de Google, pero supongo que ponen en cola la edición de cada usuario por tiempo y las hacen una por una, recordando cómo una edición cambia la posición de las ediciones futuras.

Sobre el tema de la edición concurrente y la resolución de conflictos, eche un vistazo a Transformación operativa: http://en.m.wikipedia.org/wiki/O