¿Cómo se implementan generalmente los editores de texto?

Esta pregunta probablemente me hará sonar bastante despistado. Eso es porque lo soy.

Solo estoy pensando, si estuviera hipotéticamente interesado en diseñar mi propio control de interfaz gráfica de usuario de editor de texto, widget, o como quiera llamarlo (que no soy), ¿cómo lo haría?

La tentación de un novato como yo sería almacenar el contenido del editor de texto en forma de una cadena, lo que parece bastante costoso (no es que esté demasiado familiarizado con la forma en que las implementaciones de cadenas difieren entre un idioma / plataforma y el siguiente ; pero sé que en .NET, por ejemplo, son inmutables, por lo que la manipulación frecuente, como lo que necesitaría soportar en un editor de texto, sería un desperdicio magnífico, construyendo una instancia de cadena tras otra en una sucesión muy rápida).

Presumiblemente se utiliza alguna estructura de datos mutables que contiene texto; pero descubrir cómo podría ser esta estructura me parece un desafío. El acceso aleatorio sería bueno (lo haríapensarde todos modos, después de todo, ¿no quieres que el usuario pueda saltar a cualquier parte del texto?), pero luego me pregunto sobre el costo de, digamos, navegar a algún lugar en medio de un documento enorme y comenzar para escribir de inmediato. Una vez más, el enfoque de novato (digamos que almacena el texto como una matriz de caracteres redimensionable) conduciría a un rendimiento muy pobre, creo, ya que con cada carácter escrito por el usuario habría una gran cantidad de datos para "cambiar". terminado.

Entonces, si tuviera que adivinar, supongo que los editores de texto emplean algún tipo de estructura que divide el texto en partes más pequeñas (¿líneas, tal vez?), Que individualmente comprenden matrices de caracteres con acceso aleatorio, y que son al azar accesible como trozos discretos. Inclusoese Sin embargo, parece que debe ser una simplificación excesiva bastante monstruosa, incluso si está remotamente cerca para empezar.

Por supuesto, también me doy cuenta de que puede que noser una forma "estándar" de implementar editores de texto; tal vez varía dramáticamente de un editor a otro. Pero pensé que, dado que es claramente un problema que se ha abordado muchas, muchas veces, tal vez ha surgido un enfoque relativamente común a lo largo de los años.

De todos modos, solo estoy interesado en saber si alguien tiene algún conocimiento sobre este tema. Como dije, definitivamente no estoy buscando escribir mi propio editor de texto; Tengo curiosidad.

Respuestas a la pregunta(4)

Su respuesta a la pregunta