Da gibt es eine Funktion (
), sie hat einen Parameter, in dem gespeichert ist, welche Formatierung gerade aktiv ist (Record, mit Werten wie Bold(Boolean) usw.) und einen Widestring-Wert, der den jeweiligen zu parsenden Text enthält.
Eine Funktion liest den gesamten Text, sie übergibt jeden einzelnen Buchstaben in ein Mehrdimensionales Array (Zweidimensional, also array of array of TExtendedchar). Falls ein
BBCode-Tag gefunden wird, wird zuerst überprüft ob es ein passendes End-Tag gibt (wenn nicht wird es einfach ignoriert und nach dem nächsten BB-Tag gesucht), sollte dies der Fall sein, wird das Tag geparsed, entschieden, welches Formatierungszeichen zulässig ist (bei [b] zum Beispiel Record.Bold := True), dann wird der Startparameter der Funktion genommen (Lokale-Kopie), um dieses BB-Tag erweitert (Beispiel: Attribut Bold := True wird hinzugefügt) und ALLES was zwischen dem Start und dem End-Tag liegt wird an die Funktion (Rekursiv) selbst übergeben (zusammen mit dem Lokalen-Start Parameter).
Wenn die Funktion beendet ist, habe ich in der ersten Dimension des Arrays alle Lines des Memos, in der zweiten (jeweiligen) einen Record (TExtendedChar), welcher dann alle Attribute, die in diesem Moment aktiv waren und den Char enthält.
Später kann ich dieses Array durchgehen, und alle Buchstaben einzeln (oder, vielleicht, immer den Pack, wo die Formatierung gleich ist, also z.B. die drei Einheiten des Arrays der 2ten Dimension, welche alle Bold und Italic beinhalten), per TextOut und vorheriger anpassung der Attribute eines Canvas ausgeben.