48 votes

Théorie de l'éditeur de texte

Comme je suis toujours pas satisfait avec les éditeurs, un projet que j'ai toujours voulu commencer mon propre éditeur de texte. Mais l'édition de texte est une affaire sérieuse.

Outre l'analyse du code source existant, d'éditeurs de texte, est-il un livre ou d'autres ressources (comme le travail scolaire) à propos de ce sujet? Je suis intéressé en particulier dans quelque chose qui enseigne la manière de gérer la mémoire et la façon de gérer l'insertion de texte (si vous avez un 100 MO de fichiers et que vous souhaitez ajouter un char à x de la position, vous ne pouvez pas simplement memove de l'énorme bloc de texte...).

16voto

Corbin March Points 18522

Jetez un oeil à Rob Pike, la description de son Sam éditeur de texte. Assurez-vous de parcourir le passé de la présentation de haut niveau et de langage de commande. Il décrit l'analyse, la gestion de la mémoire et des structures de données plus loin dans le document.

En outre, prendre un coup d'oeil à Russ Cox expression régulière simple de mise en œuvre. Il est facile à suivre, et peut ouvrir des portes à l'extérieur de l'expression régulière bibliothèques.

15voto

Greg Hewgill Points 356191

Au fil des années, j'ai écrit un certain nombre de différents éditeurs de texte. Certainement le moyen le plus simple est de gérer une longue séquence de caractères, où vous copiez tout autour d'insérer n'importe quel caractère. D'autres techniques que j'ai utilisées sont les suivantes:

  • Représentent le fichier texte comme une liste doublement chaînée de lignes de texte.
  • Construire un arbre comme structure de données (parfois appelé une "corde"), qui commence comme une solide chaîne de caractères, mais a la capacité de split, insérer et supprimer des blocs de texte sans avoir à vous déplacer dans tout le reste du texte autour.

La plupart des anciennes Borland exemple des livres a utilisé un éditeur de texte comme un exemple de tutoriel. Vous pouvez encore parfois trouver des copies de ces dans les librairies de livres usagés pour presque gratuit.

10voto

StephenD Points 875

Il y a un excellent tutoriel disponible ici qui couvre beaucoup de sujets pertinents dans une version plus moderne de contexte:

Les autres réponses à cette question couvrir l'écart de la mémoire tampon.

Une autre moderne de la couverture est la description de AvalonEdit

et plus en détail à partir de:

et il y a une énorme quantité de détails/contenu (environ SharpDevelop) dans le livre:

9voto

msw Points 25319

Promu à répondre sur demande:

L'ancien " Software Tools in Pascal " de Kernighan et Plaugher implémente l'éditeur ed dans un langage dépourvu de chaînes et de pointeurs réels. Il contient un excellent aperçu des considérations de conception qui sont à la base de tout éditeur de texte.

8voto

Jerry Coffin Points 237758

Une vieille méthode qui fonctionne encore est appelé un fractionnement de la mémoire tampon. L'idée de base est que vous mettez le texte dans un buffer, mais au lieu de les mettre tous dans un seul bloc, vous "split" il au niveau du curseur, en mettant tout le texte avant le curseur au début de la mémoire tampon, et tout le texte après le curseur à la fin de la mémoire tampon. La plupart des insertions lieu à l'emplacement du curseur, que vous pouvez faire sans bouger quoi que ce soit (jusqu'à ce que ou à moins que vous débordement de la mémoire tampon). Lorsque l'utilisateur déplace le curseur, vous déplacez le texte approprié à partir d'un côté de la scission de l'autre.

Types de contrôles (curseur vers la gauche, droite, haut, bas, haut de page, bas de page), le plus grand de vous déplacer traitent généralement, c'est une page à la fois, ce qui est généralement facile à manipuler, un peu plus rapide qu'un clavier répète. Il peut, bien sûr, de ralentir un peu si vous avez vraiment un énorme fichier et un "aller à la ligne de commande", ou quelque chose de cet ordre. Si vous allez faire beaucoup de cela, il y a sans doute de meilleures structures d'utiliser...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X