Thema: Delphi Konzept - BBCode Parser

Einzelnen Beitrag anzeigen

Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#1

Konzept - BBCode Parser

  Alt 14. Mai 2007, 12:58
Moin!

Ich plane momentan eine Komponente zu erstellen, die mit BBCode zurechtkommt und diesen auch erwartungsgemäß darstellen kann.

Was ich mich diesen Thread erreichen will ist, ob das, was ich bis jetzt geplant habe, überhaupt Sinn ergibt, verbesserungswürdig ist, oder tatsächlich gut ist.

Meine Überlegungen:

Zitat:
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.
Kann man das so umsetzen? Gibt es bereits etwas brauchbares? Gibt es Performancebedenken? Haltet ihr mich für verwirrt und versteht nicht was ich meine?

Gruß,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat