vor einiger Zeit habe ich mal angefangen einen eigenen BB-Code Paser zu schreiben.
Naja BB-Code ist eigentlich falsch, weil es werden noch nicht genau die gleichen Befehle unterstützt... und es geht auch Verschachtelungen z.b.... und sowas.
und statt [] habe ich <> gewählt wegen den FontNamen unter Linux die ja [] enhalten können.... damit währe/ist mein Paser nicht klar gekommen.
Mein Ziel war es eigentlich ein Platformübergreifendes Hilfe Format zu Entwickeln.
Wo Sorucen auch gehigleitet werden können.
Im Moment werden folgende "Anweisungen" unterstützt:
Code: Alles auswählen
<b> Fett
<i> Kusif
<u> Unterstriechen
<fn=new century schoolbook [adobe]>new century schoolbook</fn>
<size=16> Schrift Größe
<link=www.lazarusforum.de>www.lazarusforum.de</link> Ein normaler Link wo drauf geklickt werden kann
<code> zeigt einen Code so an wie er da steht, soll später gehigleitet werden
<fg=Red> Schrift Farbe*
<bg=Blue> Schrift Hintergrund Farbe
Achtung: auf groß klein Schreibung wird noch geachtet.
*hier wird beim Pasen Auto. pl_ davor geschrieben.... und dann umgewandelt mit meiner Funktion aus uColors *G*.
im Anahngt befindet sich ein kompletes Projekt mit zwei beispiel Texte.
Außerdem 2 Screenshots.
Im Moment arbeite ich an diesem Projekt nicht weiter, evlt. später. Ich würde noch gerne einiges Hinzufügen bzw. erweitern....
bevor ihr das Projekt Kompeliert müssen die Verzeichnis Angaben inerhalb der From1.pas angepasst werden.... das sind ein paar.
Evlt. Hilft das ja den einen oder anderen.......
Als Nähste Anweisungen währen z.b. folgende:
- Grafiken(OpBitMap),
- Tabellen mit Überschriften und Unterschriften
- Gehigleiter Soruce von: Pas, ini, html, später sollen dann noch mehr kommen.
- Die Zahlen vor den Soruce-Code sollen in eine andere Farbe dagestellt werden.
- Alle Boxen auch die Code Box, sollen inerhalb eines Viereckig liegen
Das Problem was nicht so einfach geht, ist das Markieren, da habe ich wie immer noch meine Probleme.... aber mal sehen.
Was haltet ihr von diesen Ansatzt ? gut, der Soruce-Code ist noch nicht Optimiert.
Evlt. soll man später befehle auch zusammensetzten können z.b. sowas hier:
und dise Anweisung endet dann mit
edit01: ScrennShot ausgetauscht, weil man wenig erkennen konnte.... jetzt sind es zwei auf den man alles erkennen kann. und Anweisungs liste oben sachen hinzugefügt
Updatet01: Sontag, 28.Oktober.2007
- Es gibt jetzt eine Tabellen Funktion(Sehe Bilder im Anhang.
Die Tabellen-Zellen können noch nicht verbunden werden.
Der Text innerhalb eine Zelle Kann noch nicht ausgerichtet werden.
Die Zellen-Hintergrund Farbe kann noch nicht eingestellt werden
Der Zellen-Rand kann noch nicht konfiguriert werden.
Der Zellen Abstand zu einander kann noch nicht eingestellt werden.
Mir ging es erstmal darum eine HTML-Tabelle nachzubilden. Und das habe ich jetzt endlich hinbekommen.
Eine Frage ist noch Offen, und zwar:
ich habe jetzt 3 Zeilen. Die erste Zeile hat 4 Spalten
die Zweite Zeile hat 8 Spalten
die Dritte Zeile hat 4 Spalten
Wie könnte sowas am besten da gestellt werden ?
Evlt. so wie ein 2D Array ?
also das es da nach gerichtet wird, was die höchste Anzahl von Spalten hat, das währe hier die Zweite Zeile.
- Hinzugekommen ist auch das CSS-Prinzip:
Die CSS-Daten müssen in Moment noch in einer Eigenen Datei untergebracht werden.
Die Datei wird dann mit LoadCss geladen.
Und es können nur neue Befehle defniert werden. Keine die es schon gibt.
hier mal ein Soruce Code der eine Tabelle erstellt:
Zeile 1
Roter Test>
Spalte 1
Baluer Test>
Spalte 2 test test19191
Oranger Test>
Spalte 3
Fetter Text>
Zeile 2
Roter Test>
Spalte 1
Gelber Test>
Eine Neue Version habe ich noch nicht hochgeladen, weil ich noch einige Tests machen wollte und einige Kleinigkeiten noch hinzufügen möchte.
Hier noch einmal mein Ziel in diesem Projekt:
Ich möchte eine art neues Dokumenations Format erstellen.
Und zwar für ein eigens Hilfesystem.
Das Eigentliche Ziel war es Soruce-Code gehigleitet da zu stellen.
Aber davon bin ich noch weit entfernt !
Die nächsten schritte werden sein:
Die Tabellen Funktion auszubauen. Alle angeben Punkte sollen unterstützt werden
Die CSS-Unterstützung auszubauen.
Boxen hinzufügen(normale Boxen mit nur einer Farbe, boxen mit Farbverlauf)
Eine Eigene BMP-Font Engine einzubauen.
Den Code-Tage auszubauen z.b. das die Zahlen in einer anderen Farbe da gestellt werden
können oder aber auch aus einer Grafik Datei kopiert werden können.
Es mag zwar schon viele Projekte in dieser Richtung geben. Mir geht es auch nicht darum jetzt ein Bessers Format als HTML oder PDF hinzubekommen, sondern mir geht es darum das ich ein Projekt habe was mir Spaß macht und womit ich mich beschäftigen kann.
Und was nicht allzu schwer ist für mich. Und genau alle diese Punkte werden erfühlt von diesem Projekt.
Ob am Ende was brauchbares rauß kommt spielt in erster Line für mich keine Große Rolle.
Es währe aber natürlich schön. Wenn ich mein Haupt Ziel erreichen würden.
Z.b. möchte ich auch noch eine art CGI Unterstützung Einbaun. Aber wieder wie bei CSS auf meiner art und weise, Eigentlich ist auch nur das Prinzip gleich.
Weil ich decke ersteinmal nicht alle Anweisungen von CSS ab.
Verwende eine andere Syntax evlt.
hier mal ein kleines Beispiel aus einer CSS Datei:
|classC=a3; fontFColor:Red;fontBColor:Blue;FontStyle: bold;
FontName: new century schoolbook [adobe]
// Dies ist ein kleiner Test
|classA=a2;FontFColor: White;FontBColor: Black;
|classA=a4
FontFColor: MidnightBlue
FontBColor: White
FontStyle: italic
FontName: new century schoolbook [adobe]
Kometare sind alles was nicht vom CSS-Paser beachtet werden.
Die // könnten auch weggelassen werden.
Das Prinzip ist ganz einfach:
Ein Block wird mit | erstellt
dieser Block gilt so lange bis einer Nächste block anfängt oder das Datei Ende erreicht wurde.
Die Datei wird dabei in einer Tobject Liste eingelesen, sobald ich beim BBCode-Pasen
auf einen Unbekannten Befehl stoße z.b. auf
und das gemacht was vom User gewünscht wurde.
Hier möchte ich später evlt. noch Parameter einbauen. Z.b.
das die Classen Parameter bekommen könnten so das z.b.
die Hintergrund Farbe nicht immer nur auf Blau gesetzt wird, was im Normalfall passieren sondern auf eine andere.
das stelle ich mir im Moment so vor:
|classA Para1 Para2 Para3
FontFColor: Para1
FontBColor: Para2
FontStyle: Para3
FontName: new century schoolbook [adobe]
Wie ihr sieht währe dann nur noch eine Anweisung nötig, aber dafür in viele Verschiedene Varianten. Evlt. bekomme ich auch einen einfachen if befehl. Aber ich glaube das würde zu weit gehen. oder ?
Updatet02: Montag, 05.November.2007
Habe heute einige Fehler rauß beheben können:
- Nach der Größen Änderung wird die nächste Zeile jetzt richtig gesetzt
- Die Zellen Größe ist nun (fast) richtig
- Test Programm kann nun mit Start Parameter gestartet werden d.h. einen Dateinamen
- Die Höhe bei der Hintergrund Farbe der einzelnen Wörter fängt nun etwas höher an(um 2 Pixel) das sah davor etwas seltsam aus
- H1 bis H6 Tags sind hinzu gekommen:
Code: Alles auswählen
const
H1=5;
H2=10;
H3=15;
H4=20;
H5=25;
H6=30;
Auf diese Werte wird die Font.Size Eigenschaft gesetzt. Evlt. ändere ich sie noch.
Einen neuen Fehler gefunden
Links die in Tabellen sind, können nicht angeklickt werden.
Der Grund ist eigentlich auch klar, nur weiß ich noch keine Brauchbare Lösung.
Der Grund ist einfach:
Sobald klar ist, was in einer Zelle Rein soll, wird sie Gepasst, d.h. die Pase Procedure wird nocheinmal aufgerufen. Allerdings mit einem anderen Tbitmap, und es wird py wieder auf 0 gesetzt.
Weil erst bei /tabelle ist bekannt, wie viele Spalten und Zeilen diese Tabelle hat.
Und erst jetzt wird die Tabelle in einer Extra Procedure gezeichnet. Und dort ist auch erst die richtig Position von den einzelnen Zellen Klar.
Ich denke das währen ersteinmal die Änderung. Im Moment finde ich dieses Projekt recht Interessant. Mal sehen wie lange das so bleibt.
Als nächste Schritte sind gepant:
- Text Ausrichtung: Left, Right, Center
Auf den Ersten Blick sieht es einfach aus, aber auf den zweiten Nicht. Aber ich habe schon eine sehr einfache Lösung. *G*
Dies soll auch innerhalb von Tabellen Zellen Klappen.
- Das Text hoch und Tief gestellt werden kann, da ist mir jetzt endlich eine Idee gekommen
wie das gehen könnte:
Ich muss einfach die Aktuelle Zeilen Größe teilen und dann wenn z.b. der Text Tief gestellt werden soll, den text Größe Halbieren, wenn er hoch gestellt sein soll, sollte die Text Größe auch Halbiert werden, aber der Text muss in der Mitte der Aktuellen Zeile gezeichnet werden
Mit Mitte meine ich nicht die Gesamte Breite sondern vielmehr die Höhe der Aktuellen Zeile.
Sollte jemand Interesse an den Aktuellen Soruce-Code haben, kann er das ja sagen.
Dann Aktualisiere ich ihn. Im Moment möchte ich noch einige kleinere und Größe Änderungen machen, Darum lade ich ihn noch nicht hoch.
Auch wenn das Interesse von euch nicht so groß ist, werde ich das Projekt weiter Entwickeln.
Mal sehen was draus wird.
Es währe aber Trozdem schön wenn der eine oder andere mal was sagen könnte/würde.
Z.b. Vorschläge für neue Tags oder Textgestaltung.
[highlight=red]
Edit01: Sonntag, 18.November.2007
Ab jetzt wird alles in einer Strucktur gepackt und dann erst gezeichnet.
Das hat für mich später einige Vorteile:
01: Im Prinzip könnte ich jetzt daraus einen Editor schreiben
02: Das Markieren dürfte nicht mehr sooo schwer sein
03: Schnelles Zeichnen und Weniger Speicher Verbauch
was aber im Moment noch nicht wirklich klappt.
04: Links sind absofort eigene Objekte(Die ersten)
Es werden aber noch mehr Änderungen geben, bevor ich die Units neu hochlade es sei denn jemand möchte sie die neuen Änderungen ansehen....
[/highlight]
Edit02: Mittwoch, 11.Juni.2008
An diesem Projekt arbeite ich nicht mehr weiter. Interesse habe ich schon. Aber der ansatzt wahr anscheint nicht der Richtige. Wir könnten höhsten gemeinsam versuchen einen besseren Ansatz zu finden.