Cette question va probablement me donner l'impression que je ne sais pas grand-chose. C'est parce que c'est le cas.
Je me disais simplement que si j'étais hypothétiquement intéressé par la conception de mon propre contrôle d'interface graphique d'éditeur de texte, widget ou autre (ce qui n'est pas le cas), comment ferais-je ?
La tentation pour un novice comme moi serait de stocker le contenu de l'éditeur de texte sous la forme d'une chaîne de caractères, ce qui semble assez coûteux (je ne suis pas très au fait des différences d'implémentation des chaînes de caractères d'un langage ou d'une plate-forme à l'autre, mais je sais qu'en .NET, par exemple, elles sont immuables, de sorte qu'une manipulation fréquente telle que celle que vous devriez prendre en charge dans un éditeur de texte entraînerait un gaspillage énorme, en construisant une instance de chaîne de caractères après l'autre dans une succession très rapide).
On peut supposer qu'une structure de données mutables contenant du texte est utilisée à la place, mais il me semble difficile de déterminer à quoi cette structure pourrait ressembler. L'accès aléatoire serait une bonne chose (je penser ), mais je m'interroge ensuite sur le coût de la navigation, par exemple, au milieu d'un énorme document et de la saisie immédiate du texte. Encore une fois, l'approche novice (disons que vous stockez le texte sous la forme d'un tableau de caractères redimensionnable) conduirait à de très mauvaises performances, je pense, car chaque caractère tapé par l'utilisateur entraînerait un énorme volume de données à "déplacer".
Si je devais émettre une hypothèse, je supposerais que les éditeurs de texte utilisent une sorte de structure qui divise le texte en morceaux plus petits (des lignes, peut-être ?), qui comprennent individuellement des tableaux de caractères avec accès aléatoire, et qui sont eux-mêmes accessibles de manière aléatoire en tant que morceaux discrets. Même que Il semble toutefois qu'il s'agisse d'une simplification excessive et monstrueuse, si tant est qu'elle soit proche de la réalité.
Bien entendu, je me rends compte qu'il n'y a peut-être pas être Il est possible que les éditeurs de texte soient implémentés d'une manière "standard" ; cela peut varier considérablement d'un éditeur à l'autre. Mais je me suis dit qu'étant donné qu'il s'agit clairement d'un problème qui a été abordé de très nombreuses fois, peut-être qu'une approche relativement commune est apparue au fil des ans.
Quoi qu'il en soit, j'aimerais savoir si quelqu'un a des connaissances sur le sujet. Comme je l'ai dit, je ne cherche absolument pas à écrire mon propre éditeur de texte ; je suis juste curieux.