PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Rund um die LCL und andere Komponenten
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

Hallo,
da das Projekt doch sehr viele Probleme mit sich bringt und ich noch einige Fragen dazu stellen werden, wollte ich fragen wie groß das Interesse an so einem Projekt hier im Forum ist.
Gibt es Mitglieder die sich in diesen Bereich auskennen ?
Ich habe gemerkt das auf meine Fragen in Bezug der "Text Engine" im Allgemeinen nicht geantwortet(oder nur sehr selten) wird. Soll ich daraus schließen das, das die Interesse an so einem Projekt hier sehr gering ist, oder das ihr einfach keine "Antwort" auf meine Fragen habt ? Oder hättet ihr andere Fragen zu der "Text Engine" ?

Das Projekt ist recht Kompliziert und es gibt viele Hürden zu lösen. Daher werde ich wohl noch weitere fragen haben. Soll ich sie in einem anderen Forum stellen ?
Ich hatte gehofft das, dass Projekt hier mehr auf Positive Beiträge stößt. Da es noch nicht so viele Projekte in diesem Bereich gibt für Lazaurs aber anscheint habe ich mich getäuscht.
Ich glaube eine Umfrage kann ein "Normaler" user nicht erstellen oder ? Daher frage ich einfach so:
Habt ihr überhaupt Interesse an so einem Projekt ? Wenn ja: Habt ihr Vorschläge wie so ein Projekt umgesetzt werden kann ? Wenn ja, welche ?

Für alle die, die Text Engine noch nicht kennen:
Mein Ziel ist es eine Art universalen "Web Browser" zu erstellen. Das neben HTML, noch weitere Formate anzeigen kann. Z.B. PDF, RTF und DOC.
Das Projekt besteht aus Objekten, Containern und Grund Funktionen:
Objekte: TextObjekt, LinkObjekt, GrafikObjekt, LineObjekte(HR)
Container: DefaultContainer, AbsatzContainer
Grund Funktionen: Rendern, Scrollen
Der "DefaultContainer" unterstützt im Moment neben den normalen "Text Absatz" auch Grafiken oder Horizontale Linen. Der "Default Container" kann auch schon verschachtelt werden.
Mein erstes Ziel ist es, dass Rendern Fertig zu stellen. Mein zweites Ziel ist es verschiedene Dateiformate zu unterstützen. Mein Drittes Ziel ist es verschiedene Script Sprachen einzubauen.
Die erste Version könnte ich "bald", veröffentlichen. Allerdings werden hier nur einige Kern Funktionen Funktionieren. Also erwartet nicht so viel.

Eine Ausführlichere Beschreibung ist in Arbeit. Zu etwa 80% Fertig.
MFG
Michael Springwald

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von Scotty »

Von meiner (unbedeutenden) Seite aus nicht. An anderer Stelle hatte ich dir schon mal geschrieben, dass ich die Programmierung komplett anders angehen würde. Außerdem würde ich mir nicht zutrauen, eine bessere Gekko-Engine zu bauen. Und prinzipiell würde ich Dinge schon anders angehen. Zum Beispiel die Frage nach dem Nutzen stellen: Braucht jemand einen alternativen Browser? Ohne die Frage per se verneinen zu wollen - ich denke an eine HTML-Hilfe.

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

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

eine bessere Gekko-Engine zu bauen
Mein ziel ist es auch nicht eine bessere Engine zu bauen, sondern eine andere.
Zum Beispiel die Frage nach dem Nutzen stellen: Braucht jemand einen alternativen Browser?
Das ist noch eine andere Frage. Z.B. gibt es ja häufig die Frage wie ich in Lazaurs einen Text "Bunt" ausgeben kann. Das ist mein erstes Ziel natürlich. Die Möglichkeit HTML Dateien anzuzeigen würde ich auch erst sehr viel später einfügen. Darum frage ich auch hier. in erster Line soll es sowas werden wie das "HTML Panel" nur es soll mehr können und leichter Erweiterbar sein.
ich denke an eine HTML-Hilfe.
Wie genau meinst du das ? Sowas wie CHM ?
dass ich die Programmierung komplett anders angehen würde
Hier hatte Theo schon mal in einem Thread ein Vorschlag gemacht: http://www.lazarusforum.de/viewtopic.ph ... &hilit=rtf(weiter" onclick="window.open(this.href);return false; unten: 24/1/2007, 13:02 )
Der Vorschlag ist natürlich nicht schlecht, nur würde ich gerne meine Idee zu erst ausprobieren.
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von bembulak »

:!:

:?:

:shock:

:lol:

Pluto, ich dachte du machst eine Texteingine, die einer RTF-Komponente gleicht, die man auf mehreren Systemen nutzen kann und keine HTML-Renderengine!?
Universeller Container für DOC, RTF, PDF und HTML? Ist dieses Ziel nicht ein wenig zu hoch gesteckt?
Wäre es nicht sinnvoller EINE Funktion des Programms/der Komponente vollständig zu implementieren, als viele, viele nicht mal im Ansatz? Wäre es nicht schon ein Erfolg, wenn du RTF schaffen würdest, dafür aber ordentlich? Wäre es nicht weniger Aufwand, z.B. einen vorhanden RTF-Komponente (externe Lib) zu wrappen?

Klar wünschen sich viele User eine RTF-Komponente für Lazarus, es wird ja auch oft genug danach gefragt. Also scheitert es nicht an der Nachfrage. Was mir viel eher "spanisch" vorkommt ist der Umstand, dass deine Formulierungen und Fragestellungen (und darauf haben schon einige an verschiedenen Stellen hingewiesen) manchmal ein wenig "undurchsichtig" sind.
Dann stellst du wieder Fragen, die eigentlich VOR dem Projektstart schon geklärt sein sollten. Ein Planung ist wichtig und viel Sourcecode macht noch lange kein qualitativ gutes Projekt, verstehst du? Man sieht viele Posts mit Neuigkeiten von dir, auf den Webseiten tut sich auch oft was, aber diese "Fortschritte" sehen für mich oft wie viel Rauch um Nichts aus. Und oft ist es schon schwer dem Faden des Beitrages zu folgen.
Zudem (das kann ich nicht beurteilen) scheinen einige etwas voreingenommen gegenüber deinen Werken zu sein, zumal zwar offenbar vieles begonnen, aber wenig vollendet wurde. Deine Reputation steht und fällt also mit deinen bisherigen Werken.

Ja, ich weiß, da kann ich mich auch an der eigenen Nase nehmen, da von mir defacto kein fertiges Programm existiert, welches Ihr hier zu gesicht bekommen habt. Du musst also meinen Worten Glauben schenken, wenn ich sage, dass Lazarus (und auch andere Sprachen wie Python, VB.Net, Java,..) hier bei mir auf der Arbeit produktiv eingesetzt werden.

Mir kommt es oft vor, als würdest du gegen Windmühlen kämpfen. Ich würde mir gerne mehr brauchbare Ergebnisse von dir Wünschen. Das stärkt das Vertrauen in dich als Person und Programmierer. So sehen die Leute, dass es auch Sinn macht, dir deine Fragen zu beantworten und deine Software zu benutzen. Wenn das Projekt aber nur wieder in der Versenkung verschwindet, ist es vergebene Liebesmüh'.

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

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

Pluto, ich dachte du machst eine Texteingine, die einer RTF-Komponente gleicht, die man auf mehreren Systemen nutzen kann und keine HTML-Renderengine!?
Das ist im Prinzip auch richtig. Nur weiß ich noch nicht ob ich das RTF Format nehme oder ein anders(Eventuell ein eigenes)
Universeller Container für DOC, RTF, PDF und HTML? Ist dieses Ziel nicht ein wenig zu hoch gesteckt
?
Das währe eine Möglichkeit für Später meine ich. Klar am Anfang wird es diese Möglichkeit nicht geben. Aber ich denke später wenn das Projekt reif dafür ist, dürfte der Einbau verschiedener Parser kein Problem mehr da stellen. Vorausgesetzt ist natürlich das das Projekt so viele Objekte und Eigenschaften z.b. von RTF oder HTML unterstützt ohne diese Formate laden zu wollen. Ich Trenne diese beiden Aufgaben in zwei Teile:
01: Render Engine
02: Datei Unterstützung
so wird es einfach das das Projekt später viele Datei Formate unterstützt. So die Grund Idee. Klar, ich kann mit der Inneneinrichtung eines neuen Hauses nicht anfangen, bevor es Fertig ist.
Wäre es nicht weniger Aufwand, z.B. einen vorhanden RTF-Komponente (externe Lib) zu wrappen?
Das macht schon ein Projekt:TRichMemo
Zudem (das kann ich nicht beurteilen) scheinen einige etwas voreingenommen gegenüber deinen Werken zu sein, zumal zwar offenbar vieles begonnen,
ja, das ist richtig. Ich habe viele Projekt angefangen und dann wieder aufgehört. Das gleiche Schicksal könnte natürlich auch der "Text Engine", passieren. Das glaube ich jedoch nicht, weil ich hier einen anderen Grundsatz verfolge: Ich werde zuerst alle Kern Aufgaben einbauen. Das heißt Grund Funktionen. Erst später werde ich die einzelnen Objekte ausbauen. Die Anzahl der Objekte die ich jetzt habe, reicht zum Testen und für die Entwicklung des Kerns denke ich aus. Zum Kern gehören Aufgaben wie z.b.: Scrollen. Verschiedene Objekte zum Testen und sowas halt.
Mir kommt es oft vor, als würdest du gegen Windmühlen kämpfen. Ich würde mir gerne mehr brauchbare Ergebnisse von dir Wünschen. Das stärkt das Vertrauen in dich als Person und Programmierer. So sehen die Leute, dass es auch Sinn macht, dir deine Fragen zu beantworten und deine Software zu benutzen. Wenn das Projekt aber nur wieder in der Versenkung verschwindet, ist es vergebene Liebesmüh'.
Das ist ein Guter Rat. Wie schon gesagt: Ich verfolge jetzt eine ganze andere Enwicklungs Strategie. Als vorher. Oft scheitern die Projekte meiner Meinung nach daran das ich Aufgaben angefangen habe einzubauen die noch gar nicht an der Reihe waren. So wurden es mit der Zeit immer mehr Aufgaben und mehr und die Übersicht ging verloren. Jetzt versuche ich es Schrittweise zu machen. Was nicht immer einfach ist.
Was mir viel eher "spanisch" vorkommt ist der Umstand, dass deine Formulierungen und Fragestellungen (und darauf haben schon einige an verschiedenen Stellen hingewiesen) manchmal ein wenig "undurchsichtig" sind.
Kannst du Eventuell Beispiele nennen ? Ich versuche, bei jeder Frage die ich stelle so genau wie möglich diese zu Stellen. Ab und an wird es zu viel Text. Aber wenn es weniger ist, fehlen Eventuell wichtige Informationen.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von Socke »

pluto hat geschrieben:
Pluto, ich dachte du machst eine Texteingine, die einer RTF-Komponente gleicht, die man auf mehreren Systemen nutzen kann und keine HTML-Renderengine!?
Das ist im Prinzip auch richtig. Nur weiß ich noch nicht ob ich das RTF Format nehme oder ein anders(Eventuell ein eigenes)
Ich möchte ja nur ungern dazwischen reden, aber: pluto, tue dir den Gefallen und verwende RTF. Für den Fall, dass deine Komponente auch von anderen benutzt werden soll, ist's für die einfacher RTF-Dateien zu erzeugen (bspw. mit OOo oder WinWord). Ein neues Format bringt nicht wirklich viel, außer, dass es niemand verwenden will - und wenn man mehr als RTF will, kann man ja schließlich direkt (X)HTML nehmen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

aber: pluto, tue dir den Gefallen und verwende RTF. Für den Fall, dass deine Komponente auch von anderen benutzt werden soll, ist's für die einfacher RTF-Dateien zu erzeugen (bspw. mit OOo oder WinWord).
Im Prinzip gebe ich dir vollkommen recht. Für den Anfang währe ein RTF Format nicht schlecht. Allerdings habe ich gehört das Parsen von RTF-Dateien soll nicht so einfach sein. Jedes Programm erzeugt sie auf eine andere Art und weise. Am Anfang wollte ich auch gleich auf RTF setzten. Da es ein altes Format ist und vollkommen ausreichen ist.
Das Problem ist jedoch: Ich möchte kein Editor schreiben sondern ein Betrachter. RTF Dateien können zwar z.b. von anderen Programmen erzeugt werden und so angezeigt werden. Eventuell ist deine Idee doch nicht so schlecht. Ich weiß beim RTF Format noch nicht genau ob ich dort neue Eigenschaften unterbringen könnte. Z.B. eine Tabelle oder eine Verschachtelte Liste.

Das Problem ist jedoch, es kostet glaube ich mehr Zeit ein betendes Format zu Studieren als ein eigens zu Entwickeln. Es währe auch denkbar das ich eine Form von HTML oder XML nehme oder was Wahrscheinlicher ist für den Anfang eine Art BB-Code-Parser.

Bei RTF habe ich noch keine Deutsche Dokumentation gefunden. Leider ! Ich weiß aber das es sich um ein ASCII basiertes Format handelt. Daher dürfte es leicht sein mit Hilfe von verschiedenen Editoren RTF Dateien zu erstellen die ich untersuchen kann um ein Parser zu Entwickeln.

Was für ein Format ich nehme, weiß ich noch nicht genau. Da ich im Moment noch nicht so weit bin, aber es natürlich ein wichtiger Bestandteil des Projektes.
Ich bin aber für jeden Vorschlag offen. Einige QT Komponenten verwenden z.b. eine einfache Form von HTML bzw. BB-Code um einen Text zu gestalten. Ich glaube heute möchte keiner mehr ein Dokument mit Notepade schreiben müssen mit HTML Anweisungen oder so. Von Folgenden Formaten würde ich Eventuell eins aussuchen:
01) RTF
02) HTML
03) XML
04) Ein Eigenes(Aber nur Eventuell)
Das Format sollte folgende Dinge unterstützen:
Verschachtelung von Containern. Das könnte HTML/XML ganz gut. Verschatelte Listen, dafür währe auch wieder HTML, Grafiken, Links ganz gut geeignet. Im Prinzip glaube ich, dass HTML doch das Format der Wahl ist. Später möchte auch auch sowas wie CSS verwenden können, also Format Vorlagen.

RTF scheint mir in einige Punkte nicht zu können, aber das weiß ich noch nicht genau. Mein Ziel ist es später: Verschiedene Kompatible Datei Formate zu unterstützen.
Ich könnte mir auch vorstellen eine einfache Version von ODF Dateien zu verwenden. Egal für welches Format ich mich auch entscheide, es muss einfach sein, für den Anfang. Daher die Idee mit einem Eigenen Format. Wenn ihr Lust habt können wir gerne über verschiedene Datei Formate Diskutieren. Währe ja Möglich das ihr ein einfaches kennt oder schon mal für das eine oder andere Format ein Parser geschrieben habt.

Mein Ziel ist es auch den Parser so zu schreiben, dass er Projekt unabhängig wird. D.H. die Parser könnten in jedem X-Beliebigen Projekt verwendet werden.
Jeder Parser soll mind. aus drei Methoden Bestehen: LoadFromFile(*), SaveToFile, CoypToClippbord(*) und eventuell später CopyFromClippbord.
* Diese Methoden haben natürlich vorang.
MFG
Michael Springwald

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von Bora4d »

Hallo Pluto immer noch fleißig dabei?
Du fängst ziemlich falsch an. Im Grunde genommen ist bei der Ausgabe alles(rtf/html/xml/...) dasgleiche. Nur bei der Input ist es Unterschiedlich. Du kannst rtf/html/xml Dateien einlesen und intern zu deinem Darstellungsformat umwandeln. Las mich mal mit LCL Beispiel erklären:
-Du hast ein Dokument welches oben links Text und rechts Bild unten Tabelle enhält so z.B.

texxttttt ;_________;
texxxttt |_________|
und stell dir hier Tabelle
mit vielen Zeilen und
Spalten vor.

Egal ob das Html-, RTF- oder XML-Document ist bei der Anzeige mußt du grob gesagt für das Text ein TMemo rechts davon für das Bild ein TPicture und unten für die Tabelle TStringGrid erstellen. Die Frage ist nicht welches Format es sein soll. Du must für die Anzeige ein Grundgerüst erstellen damit du verschiedene Dokumente darstellen kannst. Ob du alle RFT/HTML-Dokumentelemente darstellen willst oder kannst hängt von dein Grundgerüst ab. Dieses Grundgerüst sollte aus Gründen der Effizienz am besten nicht aus Komponenten bestehen.
Ich habe einige male mit Teilaspekten von diesem Thema herumgespielt. Heute habe ich mal einfache HTML-Tabelle-Darstellung mit "Colspan" und "Rowspan" programmiert. Da es lange Winter vor der Tür steht und ich nach monatelange Pause wieder Lust zu Programmieren habe bringe ich vielleicht alle Teile zusammen zu einem kleinen Browser.

Orientiere dich am einfachen HTML Format. Wenn du einfache HTML-Dokumente darstellen kannst ist es nicht schwierig später RTF-Dokumente darzustellen.
Einfache HTML-Kennst du bestimmt schon aber die Dokumentation von RFT-Format-1.9 ist 283 DIN-A4 Seiten groß :( Ich meine damit nicht, dass du HTML-Parser programmieren sollst sondern du dir vorstellen kannst wie dein Grundgerüst sein soll.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von Bora4d »

Um dir mal das zu Verdeutlichen:
Im HTML-Format kann z.B. Text und Tabelle nicht in einer Zeile dargestellt werden.
Das ist in HTML nicht möglich aber bei RTF schon:

eine Textzeile |ein Tabelle| wieder Text

Das wird bei HTML so dargestellt:

eine Textzeile
|ein Tabelle|
wieder Text

Dein Grundgerüst ich nenne es mal Rendering-Engine muß obere Beispiel können. Rendering-Engine muß nicht zwischen HTML und RTF-Format oder sonst irgendein Format unterscheiden sonst würde es sehr komplex. Du kannst z.B. wenn du ein HTML-Datei lädst vor und nach der Tabelle "Enter"-Einfügen damit Rendering-Engine die Datei entsprechend der HTML-Spezifikationen darstellen kannst.
Ich hatte bisher alles fertig nur wußte ich noch nicht genau wie ich HTML-Tabelle effizient darstellen konnte. Das habe ich heute erledigt.

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

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

Hallo Pluto immer noch fleißig dabei?
Ja....
Dieses Grundgerüst sollte aus Gründen der Effizienz am besten nicht aus Komponenten bestehen.
Genauso habe ich das auch geplant.
Du fängst ziemlich falsch an. Im Grunde genommen ist bei der Ausgabe alles(rtf/html/xml/...) dasgleiche. Nur bei der Input ist es Unterschiedlich.
Sei mir bitte nicht böse, aber genau so habe ich mir das auch vorgestellt. Was ich da stelle ist im Prinzip vollkommen Egal. Es kann alles sein.

Zuerst entwickele ich die "Render Engine" Das ist das Grundgerüst.
Jetzt Entwickele ich, einzelne Klasse Pro Format eine. Die Klasse ist nicht an das Projekt gebunden. Also ist unabhängig. Z.B. über Events währe sowas denkbar. Eine Weitere Klasse kümmert sich darum die Richtige Parser Klasse zu finden. Wenn ich eine HTML Datei laden möchte, sollte diese Klasse also die HTML-Parser-Klasse laden. Weißt du wie ich meine ? Das Datei Format ist vollkommen egal. Das kann alles sein.
Ich habe einige male mit Teilaspekten von diesem Thema herumgespielt. Heute habe ich mal einfache HTML-Tabelle-Darstellung mit "Colspan" und "Rowspan" programmiert. Da es lange Winter vor der Tür steht und ich nach monatelange Pause wieder Lust zu Programmieren habe bringe ich vielleicht alle Teile zusammen zu einem kleinen Browser.

Nicht schlecht. Eine Tabelle oder eine Verschachtelte Liste kommen bei mir erst später dran. Du darfst das aber nicht unterschätzen. Ich hatte früher auch mal einfach so angefangen mit einem BB-Code-Parser... Der Name passt eigentlich nicht, weil es die HTML-Syntax ist. Allerdings zeigte mir dieses Projekt wie Komplex das ganze ist. Ich versuche schon zeit einigen Jahren so ein Prototypen zu Entwickeln. Es gibt viele Probleme. Ich greife mal eins aus der "Luft": Das Markieren. Hier gibt es viele Fragen.....
Ich hatte bisher alles fertig nur wußte ich noch nicht genau wie ich HTML-Tabelle effizient darstellen konnte. Das habe ich heute erledigt.
Bei mir würde das Theoretisch gesehen kein Problem da stellen.

Im Moment macht mir aber die Align Eigenschaft von einem Container zu schaffen. Jeder Container kann angeordnet werden z.b. Links oder Rechts und so. Es steht Fünft Möglichkeiten zu Verfügung.
Wenn in einem Container mehrere Container gibt die Links sein sollen, werden sie nebeneinander da gestellt. Das Passiert auch schon mit allen anderen 4 Möglichkeiten.
Jedoch habe ich im Moment ein Probleme: Wie verhält sich das ganze zusammen mit den ScrollBalken ? Im Moment versuche ich es so zu machen, dass die Dokumenten Größe Automatisch vergrößert wird.
Die Verschachtelung von Containern geht auch schon recht gut.

Anschließend wollte ich ein Beispiel Projekt erstellen. Was die Fähigkeiten zeigt. Die Aligen Eigenschaft währe im Moment die Letzte Aufgabe in dieser frühen Version.
eine Textzeile |ein Tabelle| wieder Text

Das wird bei HTML so dargestellt:

eine Textzeile
|ein Tabelle|
wieder Text
Das Währe Aufgabe von den "Parser-Klassen" es richtig zu machen.
MFG
Michael Springwald

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von Bora4d »

Ich würde in deine Stelle nicht mit Parser oder parsen anfangen. Das ist extrem kompliziert. Wenn man nicht ein Text mit verschiedenen Schriftgrößen, Farben und Schriftarten und Bilder anzeigen kann wozu braucht man Parser? Ich habe mal ein extrem einfaches html-Parser gemacht aber nur um Erfahrung zu sammeln. Also umzu schauen was ich bei der Entwicklung der Darstellungsklassen beachten muß. Bei meinem einfachen Beispielen füge ich "HTML"-Code manuell als Pascalbefehle ein als z.B.:

Code: Alles auswählen

..
begin
 ZeileHinzufügen('Eigenschaften');  //'<tr "Eigenschaften" >'  
  SpalteHinzufügen(Breite,Höhe,'Eigenschaften','Beispieltext',colspan,rowspan);
  SpalteHinzufügen(Breite,Höhe,'Eigenschaften','Beispieltext',colspan,rowspan);
 ZeileHinzufügen('Eigenschaften');  //'<tr "Eigenschaften" >'
 ...
end;
Ich mache sogar so, wen in eine Zeile "Colspan" oder "Rowspan" gemacht habe in der nächsten Zeile eine Spalte selbst weglasse. Eigentlich ist das die Aufgabe von Parser, aber erstmal muß ich Tabellendarstellung oder gar "Rendering-Engine" komplett fertig machen bevor ich Parser verwenden kann.

Dar Markieren und Scrollen löst du am besten wenn du die Höhen der Zeilen in eine Liste abspeicherst. Kennst du die Rowheights-Liste von TStringGrid so etwas. Natürlich meine ich nicht einfache Texthöhe sondern die Höhe des höchsten Objekts. Das kann eine Tabelle, Bild oder z.B. eine LCL-Kontrol sein. Die X-Koordinate in eine Zeile zu finden ist dann nicht schwierig. Die Devise heißt dann Teile und Hersche.

Das "Align"-Problem kannst du auch lösen wenn untergeordnete Elemente die Größe des "Eltern"-Elements kennen.

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

Re: PL TExt Engine: Besteht ein Interesse an so einem Projekt ?

Beitrag von pluto »

Ich würde in deine Stelle nicht mit Parser oder parsen anfangen. Das ist extrem kompliziert
Das mache ich auch nicht. Den Fehler habe ich einmal gemacht. Bei diesem Projekt fange ich bei der Render Engine an....
Wenn man nicht ein Text mit verschiedenen Schriftgrößen, Farben und Schriftarten und Bilder anzeigen
Mein Projekt ist im Moment genauso weit, dass das alles klappt. natürlich mit Einschränkungen.
kann wozu braucht man Parser?
Nun ja, weil es Einfacher währe ein Dokument zu erstellen. Im Moment mache ich das so(ohne einen Parser)

Code: Alles auswählen

procedure TPLTextEngine.CreatePage8;
var
  paragraph:TPLTE_Container_paragraph;
  TextObj:TPLTE_ObjectSTD_Text;
  Links:TPLTE_ObjectSTD_TextLink;
  Picture:TPLTE_ObjectStd_Picture;
  Line:TPLTE_ObjectStd_HRLine;
  DF,DF2,DF3,DF4:TPLTE_Container_Default;
  i:Integer;
  str:String;
begin
  DefaultContainer.Clear;
  DefaultContainer.Style.Brush.Color:=pl_orange1;
  DefaultContainer.Style.Border.B.Color:=clRed;
  DefaultContainer.Style.Border.B.Width:=1;
  DefaultContainer.Left:=2;
  DefaultContainer.Top:=2;
  DefaultContainer.Width:=Width;
  DefaultContainer.Height:=Height;
  DefaultContainer.Name:='DefaultContainer';
  DefaultContainer.Parent:=nil;
 
  DF:=NIL; // 1
  DF:=DefaultContainer.AddDefaultContainer;
  DF.Name:='DF';
  DF.Style.Brush.Color:=pl_orange4;
  DF.Style.Border.B.Color:=pl_orange2;
  DF.Width:=200;
  DF.Align:=CA_Left;
    paragraph:=DF.AddParagraph; // 0
    paragraph.Name:='paragraph01';
    paragraph.AutoBreakLine:=True;
    paragraph.Style.Border.B.Color:=pl_red;
    paragraph.Style.Border.B.Width:=1;
    paragraph.Style.Brush.Color:=pl_blue4;
    paragraph.Height:=400;
      TextObj:=paragraph.AddText('In der Nacht ist es meistens Dunkel, auser der Mond scheint.');
      TextObj.Style.Font.Color:=clWhite;
      TextObj.Style.Font.Size:=20;
      TextObj.Style.Brush.Color:=clBlue;
 
    paragraph:=DF.AddParagraph; // 1
    paragraph.Name:='paragraph02';
    paragraph.AutoBreakLine:=True;
    paragraph.Style.Border.B.Color:=pl_blue1;
    paragraph.Style.Brush.Color:=pl_blue4;
    paragraph.Height:=400;
      TextObj:=paragraph.AddText('In der Wueste ist es meistens sehr sehr warm.');
      TextObj.Style.Font.Color:=pl_brown4;
      TextObj.Style.Font.Size:=20;
      TextObj.Style.Brush.Color:=pl_brown1;
Das ist nur ein kleiner Auszug.
Aber erstmal muß ich Tabellendarstellung oder gar "Rendering-Engine"
Ja. Sehe ich genauso. Meine "Rendering-Engine" ist schon recht weit wie ich finde. Es gibt verschiedene Objekte sowie Container und es werden auch schon zwei Grund Funktionen mehr oder weniger Gut unterstützt.
Dar Markieren und Scrollen löst du am besten wenn du die Höhen der Zeilen in eine Liste abspeicherst. Kennst du die Rowheights-Liste von TStringGrid so etwas. Natürlich meine ich nicht einfache Texthöhe sondern die Höhe des höchsten Objekts. Das kann eine Tabelle, Bild oder z.B. eine LCL-Kontrol sein. Die X-Koordinate in eine Zeile zu finden ist dann nicht schwierig. Die Devise heißt dann Teile und Hersche.
Beim Scrollen wird alles in den Negativen Bereich verschoben:

Code: Alles auswählen

if Assigned(ScrollRect) then begin
      if ScrollRect.Top > 0 then
        sy:=Top-ScrollRect.Top
      else
        sy:=Top;
      if ScrollRect.Left > 0 then
        sx:=Left-ScrollRect.Left
      else
        sx:=Left;
    end
    else begin
      sy:=top;
      sx:=Left;
    end;
wieder ein Auszug.
gezeichnet wird in einem Buffer, immer. Allerdings nur vom Root Container.
Das "Align"-Problem kannst du auch lösen wenn untergeordnete Elemente die Größe des "Eltern"-Elements kennen.
Das ist der fall:

Code: Alles auswählen

for i:=0 to fContainerList.Count-1 do begin
    if (items[i] is TPLTE_Container_BaseExt) then begin
    case Items[i].Align of
      CA_None: continue;
      CA_Left: begin
        if AlignUsed[AU_left] = 0 then AlignUsed[AU_left]:=Left+Space_Left;
        items[i].Left:=AlignUsed[AU_left];
        items[i].Top:=top+py1+Space_Top;
        if ph1 = 0 then begin
          Items[i].Height:=(DocH-py1)-Space_Bottom;
        end
        else
          Items[i].Height:=(DocH-ph1-py1)-Space_Bottom;
        AlignUsed[AU_left]:=AlignUsed[AU_left]+Items[i].Width+Space_Left;
      end; // CA_Left
      CA_Right: begin
        if AlignUsed[AU_Right] = 0 then begin
          if not Assigned(Parent) then begin
            AlignUsed[AU_Right]:=DocW - items[i].Width-10;
          end
          else begin
            AlignUsed[AU_Right]:=DocW - items[i].Width+Space_Right-10;
          end;
        end;
        items[i].Left:=AlignUsed[AU_Right];
        AlignUsed[AU_Right]:=AlignUsed[AU_Right]-Items[i].Width-Space_Right;
        items[i].Top:=top+py1+Space_Top;
        if ph1 = 0 then begin
          if py1 = 0 then
            Items[i].Height:=(DocH)-(Space_Bottom)
          else
            Items[i].Height:=(DocH)-ph1-py1-(Space_Bottom+Space_Top);
        end
        else
          Items[i].Height:=(DocH)-ph1-py1-Space_Bottom;
      end; // CA_Right;
      CA_Top: begin
        items[i].Left:=Left+Space_Left;
        items[i].Top:=top+AlignUsed[AU_Top]+Space_Top;
        Items[i].Width:=ClientWidth-Space_Bottom;
        AlignUsed[AU_Top]:=AlignUsed[AU_Top]+Items[i].Height+Space_Bottom2;
      end; //CA_Top
Ein kleiner Auszug *G*
MFG
Michael Springwald

Antworten