[Eingestellt] Eigener BB-Coder Paser: erster ansast

Zur Vorstellung von Komponenten und Units für Lazarus
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

[Eingestellt] Eigener BB-Coder Paser: erster ansast

Beitrag von pluto »

Hallo,
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
*

Die Ebene fangen bei 0 an
fügt eine neue Ebene hinzu

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 wird in dieser Liste gesucht.
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.
Dateianhänge
s3.png
s2.png
bbcode_Paser.zip
Das Komplete Projekt.
(28.14 KiB) 84-mal heruntergeladen
Screenshot
Screenshot
Zuletzt geändert von pluto am Mi 11. Jun 2008, 14:29, insgesamt 4-mal geändert.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also pluto du erfindest immer das rad neu und das dann auch noch 5x. Es gibt genug freie RichText Formate HTML oder RTF tuns genauso da muss man keine neuen Formate erfinden zumal die hinterher eh keiner nutzt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

das war klar, das so eine Antwort von dir kommen musst. Aber drauf antworte ich jetzt nicht mehr. Ich Programmiere das was für mich Intresannt ist.... ist einer davon für oder mit Lazarus geschrieben ?
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

ja...meiner, aber mit anderem Hintergedanken als deiner
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

inwiefern ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Klar gibts html und rtf parser für lazarus
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

naja gut, aber ich finde solche Projekte halt Intressant..... und mir ging es ja auch darum solche Dateien mit einer Komponente zu erstellen wie z.b. mit RichEdit unter Delphi.....

WEIL SOWAS GIBT ES IMMER NOCH NICHT, ODER ???
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

wenn du meinst...

in wenigen Stunden kannst du dir das Executable anschauen. :lol:

Und wenn du soetwas machen willst...mach verdammt nochmal nen richtiges RichEdit, mit welchem man auch was anfangen kann und was Lazarus letztlich auch hilft und nicht solche halbgewalkten, nie vollendeten Komponenten. (Musste jetzt auch von mir mal gesagt werden)
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

im Prinzip hast du nicht ganz unrecht....

Müsste ich mir noch mal überlegen.... ich weiß ja jetzt wo meine Schwierigkeiten liegen.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ersten Beitrag upgedatet !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ersten Beitrag bearbeitet hinzugefügter Text hat einen ROT Hintergrund.

Wie immer würde ich es toll finden, wenn ihr was zum Projekt sagen würdet.
Die Idee beurteilen(aber Fachgerecht nicht einfach sagen, davon gibt es schon 1000 stück).

Das Ergebnis
Neue Tags evlt. die ich einbauen könnte.
und soweiter.

Aber alles sollte "Fachgerecht" Passieren. Mir macht dieses Projekt nun mal Spaß und darauf kommt es bei mir im Moment an. Das ich Freude an einem Projekt habe.

Ob es davon schon welche gibt es mir im Prinzip voll kommen egal.
Im Moment verfolge ich zwar ein Ziel, aber das ist sehr sehr sehr weiter weg mehr als sehr *G*...

Ich möchte alle bzw. viele Elemente einbauen die HTML auch kann.
Was das da stellen von Dokumenten angeht. Aber im Soruce wird es natürlich anders aussehen.

die Anweisungen sind ja alles sehr einfach gehalten wie z.b.
oder so... vor red3 wird auto. ein pl_ gemacht. evlt. versuche ich noch andere Farblisten zu unterstützen z.b. Eigene Farbwerte und Variablen.

Jeder bevel kann nur einen Parameter haben im Moment. Das möchte ich später auch ändern und zwar so:


das währe dann eine Gruppe die ist/soll so lange gültig sein bis ein /font gefunden worde. Weil innerhalb dieser Gruppe sollen ja auch normale Anweisungen wie und soweiter klappen.

Und ein noch weiter Entferntes ziel ist es eine art CGI Erweiterung einzubauen. Im Prinzip ist das auch nicht weiter schwer nur zeitaufwendig es einzubauen und es macht im Moment auch nicht soviel Spaß...

Ich habe mir aber auch hier schon ein PAAR Gedanken gemacht.
Somit währe es denkbar das andere Leute Erweiterungen für mein Projekt schreiben.... Aber das ist im Moment noch nicht eingebaut.
MFG
Michael Springwald

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von Antrepolit »

@Pluto: Wenn ich das richtig verstehe, soll das sowas wie diese Windows-Standard-Hilfe werden? :roll:

Warum nimmst du dir daran ein Beispiel? Als ich vor einiger Zeit mit einem Projekt begonnen
habe, und ein Hilfe-Funktion implementierte, griff ich auf die Browser-Komponenten von Laz zurück.
Es hatte den Vorteil, dass ich die Hilfe als HTML-File bearbeiten konnte, und direkt sah, wie
es am Ende aussieht. Die Windows-Standard-Hilfe hat(te) ja nur eingeschränkte Funktionen
in Sachen Gestaltungsfreiheit.

Wenn es dir nur um den Spaß geht, ist es OK, aber... warum sollte man auf deine Komponente zurückgreifen?
Ich werde wohl bei HTML basierter Hilfe bleiben, weil man diese auch direkt im Browser
betrachten kann. Man bedenke die Möglichkeiten... :idea:
Grüße, Antrepolit

care only if your os is really burning

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

OK Du hast recht. Aber die Standard Browser Komponente kann keinen hervorgehobenen Code anzeigen. Aufjedenfall nicht ohne weiteres.

Ich wollte auch zum anderen sehen wie viel Aufwand das ist. und das weiß ich jetzt. Wie weit das Projekt kommt weiß ich noch nicht.

Ob das wirklich ein Hilfe Format wird, weiß ich noch nicht. Aber auf jeden Fall wird Dokumenten Format. Evlt. sogar als Editor... Die neue Struktur die ich gestern eingebaut habe, unterstützt das Theoretisch.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Geil, "Teoretische Unterstützung". Darf man das dann als Feature führen ?
Will auch sowas ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ja.... darf man *G*

Die Struktur ist aufgebaut wie eine art TStringlist, wenn euch das was sagt....
MFG
Michael Springwald

Antworten