Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: QuoteText parsen?

  Alt 5. Nov 2014, 21:33
Das du das nicht hast weiß ich, aber du willst ja auch etwas selber machen

Eigentlich sind diese State-Machines als Parser super simpel zu erstellen:
  • Ein Parser geht Zeichen für Zeichen durch den String -> Wir brauchen eine Methode die einen Char entgegennimmt. Da aber je nach Status eine andere Methode benötigt wird brauchen wir erst mal so einen Methodentyp TState = procedure(AChar:Char) of object;
  • Die erste Methode ist ganz simpel, es wird einfach jedes Zeichen an den TextBuffer gehängt (das kann ein einfacher String sein, ein TStringBuilder ist dafür nur schneller, mehr nicht). Nennen wir die einfach mal ParseText . Trifft man hier nun auf das Zeichen '[' , dann kommt jetzt ein Kommando. Also müssen wir ab nun das aus einer anderen Sicht betrachten, denn der Status hat sich geändert. Wir parsen jetzt ein Kommando, also eine weitere Methode ParseCommand
  • In parseCommand werden alle eingehenden Zeichen an den CommandBuffer gehängt, bis wir auf das Zeichen ']' treffen.
  • Für weitere Stati verfährt man genauso und baut diese Schritt für Schritt auf.
Eigentlich ist es ein ganz stupides Abarbeiten der Vorgaben. Interessant wird dann der Teil, wo die Commands in den CommandStack ein- und ausgetragen werden und darüber der aktuelle Font "errechnet" wird.

Wichtig: Vor jeder Änderung durch ein Command muss der aktuelle TextBuffer mit dem aktuellen Font gespeichert werden (wenn der TextBuffer leer ist, dann brauchen wir auch nichts speichern).

Nimm dir am Besten einen kurzen Text
Code:
a[b]c[d]e[/b]f[/d]g
und gehe den Code auf dem Papier durch, dann sollte auch die Erkenntnis kommen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat