Thema: Delphi Konzept - BBCode Parser

Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Konzept - BBCode Parser

  Alt 12. Okt 2007, 14:03
ich hänge mal mein Soruce dran... der ist unter Lazarus geschrieben und getestet.

ich habe aber die [] zu <> ausgetauscht, weil unter Linux können Font Namen diese [] Zeichen Enthalten.

Das ganze war nur ein "einfacher" Test. der Paser kann folgende beispiel Texte Problemlos anzeigen:
Zitat:
Dies ist ein einfacher Beispiel Text ohne
Formatierung. Mal sehen ob er angezeigt wird.

Jetzt kommt die Formatierung:
<fg=red>Rot</fg> <fg=blue>Blau</fg>
<fg=orange>Dieser Test ist Orange und <fg=red2>Rot2 <fg=blue>Haus <fg=chocolate>Tane Tane Tane</fg>Haus Haus Haus</fg>
Garten Garten Garten</fg>u77utt5</fg>f
Text Text Text Text

Dieser Text ist fett und dieser ist nicht Fett.
Dieser Text ist kusif und dieser ist nicht Kusif
Dieser Text ist <u>unterstriechen</u> und dieser nicht
Dieser Text ist in <fn=new century schoolbook [adobe]>new century schoolbook [adobe]</fn> test test testheute

Diesist ein test von heute<u>test2</u> test3
<fg=blue> <bg=Red>Roter Hintergrund</bg> Test2 <bg=SlateBlue2> Test3 Test4<bg=black>Haus1Lilo</bg></bg></fg>
Hallo du bis ein Test von heute wie geht es dir so ?

<size=16>Dieser text wird in 16 angezeigt <size=30>und dieser in 30</size>
und dieser wieder in 16</size> und dieser wirder Normal.
LinkListen:
Wie geht es dir heute so ?<link=www.google.de>www.google.de</link> dies ist ein Test von Heute
Wie ist das Wetter ?<link=www.heise.de>www.heise.de</link> Morgen ?
Der Wald ist <link=www.lazarusforum.de>www.lazarusforum.de</link>gruen oder nicht ?
Das Wasser ist<link=www.suse.de>www.suse.de</link> aber nass.
Klick bitte auf diesen <link=www.suse.de>link</link> danke !

<fg=blue3>
test test test
<bg=black>
Wie geht es dir ?
</bg>
</fg>

<liste>
TestListe1
<addlevel>
Level 1
Level 2
<addlevel>
Level 2,1
<addlevel>
Level 3,1
Level 3,2
<fg=blue>Level 3,3</fg>
Level 3,4
</addlevel>
Level 2,2
Level 2,3
</addlevel>
Level 3
Level 4
Level 5
</addlevel>
</liste>


<liste>
TestListe2
Root1
Root2
Root3
Root4
</liste>

CodeBeispiel01
<bg=black>
<code>
procedure LoadText(const aTextFile:String; aCanvas:TCanvas; aBuffer:TBitMap;var aLinkListe:TLinkItems);
procedure BufferSizeChange;
var
oldTextItem:TTextItem;
oldY,oldH:Integer;
oldBitMap:TBitMap;
begin
oldBitMap:=TBitMap.Create;
oldBitMap.Width:=aBuffer.Width;
oldBitMap.Height:=aBuffer.Height;
oldBitMap.Canvas.Brush.color:=clWhite;
oldBitMap.Canvas.FillRect(0,0,oldBitMap.Width,oldB itMap.Height);
BitBlt(oldBitMap.Canvas.Handle,0,0,oldBitMap.Width ,oldBitMap.Height,aBuffer.Canvas.Handle,0,0,SRCCOP Y);

CanvasToTextItem(oldTextItem,aCanvas);
oldY:=aBuffer.Height;
oldh:=aCanvas.ClipRect.Bottom;
aBuffer.Height:=aBuffer.Height+aCanvas.ClipRect.Bo ttom;

aCanvas.Brush.color:=clWhite;

aCanvas.FillRect(0,oldY,aBuffer.Width,oldy+oldh);
TextItemToCanvas(oldTextItem,aCanvas);
BitBlt(aBuffer.Canvas.Handle,0,0,oldBitMap.Width,o ldBitMap.Height,oldBitMap.Canvas.Handle,0,0,SRCCOP Y);
oldBitMap.Free;
end;
</code>
</bg>

Die ist wieder ein Normaler Text ein Test von heute wie
geht es dir so ? Gut dann komme mich doch mal besuchen.
das würde dann so aussehen wie im anahng zu sehen. besonders schön finde ich die verschatlung von anweisungen wie [b] und soweiter....

es gibt leider noch den einen anderen anderen Anzeige Fehler, aber im Prinzip geht das schon ganz gut.
Der Paser kann folgendes im Moment:
b = Text Fett Dastellen
i = Text Kusif Dastellen
u = Text Unterstriechen Dastellen*
fg = wert foder grund Farbe setzten**
bg = wert Hintergrund Farbe setzten**
size=Text größe
liste = fängt eine Liste an die auch verschatelt werden kann
code = Zeigt einen Soruce an, so wie er geschrieben wurde, später soll er gehiglietet angezeigt werden.
link = kann ein einfacher Link erzeugt werden.

* Durchgestriechen geht leider nicht, weil das unter Linux bei den Font-Stylen noch nicht unterstütz wird
** werte werden immer mit red oder blue angeben.
der Paser hängt auto pl_ vorne dran.
Die dise Konstasen habe ich erstellt und in eine eigene Unit gepackt, weil mir 16 Farben etwas wenig vorkommen, so habe ich jetzt 641 Farben. *G*.

Du/ihr könnt es auch ja mal anschauen und sagen, was ihr davon haltet. mein Ziel war es eigentlich ein eigenen Hilfesystem für Anwendungen zu schreiben das Plottform übergreifend arbeitet.
und auch Soruce Beispiele richtig anzeigen kann also in mehrer Farben und so.

Später sollen halt noch einfache und Komplxere Tabellen hinzukommen. Grafiken, und Text Boxen.
evlt. habt ihr ja noch Vorschläge.... oder findet noch Fehler.....
im Anahngt befindet sich zwei Units und ein Bild.
Die Form1.pas enhält alles notwendiger, mit etwas anpassung müsstest du es unter Delphi Komplieren können

Nocheinmal: Das ganze Projekt habe ich unter Lazarus, Ubuntu angefangen... daher poste ich auch nur einzelne units und nicht das ganze Projekt.... weil das würde euch wenig weiter Helfen... da ihr es erst anpassen müsst, so ist das meine ich einfacher.....
Miniaturansicht angehängter Grafiken
bildschirmfoto-bb-code_paser_168.png  
Angehängte Dateien
Dateityp: zip lazarus_530.zip (24,7 KB, 18x aufgerufen)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat