uburoi
Lt. Commander
- Registriert
- Aug. 2008
- Beiträge
- 1.403
Hallo zusammen!
Vorweg: Das Projekt ist eine selbstgewählte Übung für mich. Die Frage nach dem Warum erübrigt sich also – einfach aus Spaß an der Freude.
Ich möchte einen simplen Terminal-artigen Texteditor schreiben. Dabei ist die Textarea einfach eine leere Canvas; alle zur Verarbeitung und Darstellung des Textes notwendigen Berechnungen soll das Programm bzw. die Canvas-Subklasse selbst durchführen. (Darin liegt für mich die Herausforderung.)
Bei einer älteren Version dieses Projekts, mit dem ich mich vor einer Weile schon einmal beschäftigt habe, hat das auch ganz gut geklappt: Den Text habe ich in einem Buffer zeilenweise gespeichert; neuer Text wurde an der entsprechenden Cursor-Position eingefügt (mit entsprechendem Offset bei vielen und/oder langen Zeilen) und bei jedem Canvas-Refresh wurden nur die in der Area sichtbaren Zeichen dargestellt etc. Das Ganze klappte performant und zuverlässig, hatte aber einen für mich entscheidenden Nachteil: kein Zeilenumbruch.
Nun habe ich nochmal ganz von vorne angefangen (auch um ein paar Algorithmen neu zu schreiben, die mir in der Rückschau zu umständlich erscheinen) und das "Gerüst" geschrieben > siehe Screenshot. Bevor ich mich jetzt an die Verarbeitung von Texteingaben mache, muss ich ersteinmal für mich im Kopf klar haben, wie ich den Text speichere und verarbeite.
Mein größtes Problem: Ich möchte einen automatischen Zeilenumbruch an Leerzeichen-Stellen (soft wrap) implementieren. Daran knüpfen sich für mich mehrere Probleme: Wie speichere ich intern den Text? Den ganzen Text als String vorhalten wäre blöd, da ich dann nach jeder Texteingabe den kompletten Text neu umbrechen müsste, was bei längeren Texten sicherlich zu Verzögerungen führen würde, die ich unbedingt vermeiden möchte. Zeilenweise speichern geht aber auch nicht mehr, da sich die Zeilen ja ständig verändern können.
Ihr seht: Mir fehlt hier eine grundlegende Strategie, wie ich den Text intern handlen soll, damit das Ganze mit möglichst wenig Rechenaufwand (also immer flüssig) funktioniert. Meine bisherige Internet-Recherche hat bislang leider auch wenig ergeben, wenngleich ich nicht sicher bin, ob ich überhaupt nach dem Richtigen gesucht habe.
Vielleicht könnt ihr mir ja mit einem Gedankenanstoß auf die Sprünge helfen. Eine konkrete Programmiersprache habe ich hier übrigens bewusst außen vor gehalten, da es mir nicht um die Implementation geht (die wird nicht das Problem sein, wenn ich ersteinmal weiß, wie ich vorgehen will), sondern um die Grundstrategie.
Herzlichen Dank schon einmal fürs Lesen!
Gruß Jens
Vorweg: Das Projekt ist eine selbstgewählte Übung für mich. Die Frage nach dem Warum erübrigt sich also – einfach aus Spaß an der Freude.
Ich möchte einen simplen Terminal-artigen Texteditor schreiben. Dabei ist die Textarea einfach eine leere Canvas; alle zur Verarbeitung und Darstellung des Textes notwendigen Berechnungen soll das Programm bzw. die Canvas-Subklasse selbst durchführen. (Darin liegt für mich die Herausforderung.)
Bei einer älteren Version dieses Projekts, mit dem ich mich vor einer Weile schon einmal beschäftigt habe, hat das auch ganz gut geklappt: Den Text habe ich in einem Buffer zeilenweise gespeichert; neuer Text wurde an der entsprechenden Cursor-Position eingefügt (mit entsprechendem Offset bei vielen und/oder langen Zeilen) und bei jedem Canvas-Refresh wurden nur die in der Area sichtbaren Zeichen dargestellt etc. Das Ganze klappte performant und zuverlässig, hatte aber einen für mich entscheidenden Nachteil: kein Zeilenumbruch.
Nun habe ich nochmal ganz von vorne angefangen (auch um ein paar Algorithmen neu zu schreiben, die mir in der Rückschau zu umständlich erscheinen) und das "Gerüst" geschrieben > siehe Screenshot. Bevor ich mich jetzt an die Verarbeitung von Texteingaben mache, muss ich ersteinmal für mich im Kopf klar haben, wie ich den Text speichere und verarbeite.
Mein größtes Problem: Ich möchte einen automatischen Zeilenumbruch an Leerzeichen-Stellen (soft wrap) implementieren. Daran knüpfen sich für mich mehrere Probleme: Wie speichere ich intern den Text? Den ganzen Text als String vorhalten wäre blöd, da ich dann nach jeder Texteingabe den kompletten Text neu umbrechen müsste, was bei längeren Texten sicherlich zu Verzögerungen führen würde, die ich unbedingt vermeiden möchte. Zeilenweise speichern geht aber auch nicht mehr, da sich die Zeilen ja ständig verändern können.
Ihr seht: Mir fehlt hier eine grundlegende Strategie, wie ich den Text intern handlen soll, damit das Ganze mit möglichst wenig Rechenaufwand (also immer flüssig) funktioniert. Meine bisherige Internet-Recherche hat bislang leider auch wenig ergeben, wenngleich ich nicht sicher bin, ob ich überhaupt nach dem Richtigen gesucht habe.
Vielleicht könnt ihr mir ja mit einem Gedankenanstoß auf die Sprünge helfen. Eine konkrete Programmiersprache habe ich hier übrigens bewusst außen vor gehalten, da es mir nicht um die Implementation geht (die wird nicht das Problem sein, wenn ich ersteinmal weiß, wie ich vorgehen will), sondern um die Grundstrategie.
Herzlichen Dank schon einmal fürs Lesen!
Gruß Jens