Html-Code Parser und Renderer

    • Beta
    • Open Source

    Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      Html-Code Parser und Renderer

      Name:
      HtmlRenderer-Control

      Beschreibung:
      Das Programm visualisiert Html-Code.
      Im Grunde ist es vergleichbar mit einer Browser-Engine, wenn auch nicht im selben Umfang.

      Screenshot(s):


      Html-Code aus: code.msdn.microsoft.com/How-to-parse-html-in-NET-2660026c

      Verwendete Programmiersprache(n) und IDE(s):
      C#

      Systemanforderungen:
      .NET Framework 4.5

      Download(s):
      Github

      Anwendung:
      In die ToolBox ziehen, hernach in die Form.
      Mittels

      Quellcode

      1. sharpHtmlRenderer1.LoadHtmlFile("")
      Datei laden.

      Noch sind bei Weitem nicht alle Funktionalitäten enthalten.
      Interessant ist aber sowieso die Funktionsweise eines Parsers.

      Lizenz/Weitergabe:
      OpenSource


      Viel Spaß!
      Und Gott alleine weiß alles am allerbesten und besser.

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „φConst“ ()

      Hallo,

      mittlerweile wurden folgende Funktionalitäten implementiert:
      • <br>-Tag
      • <hr>-Tag
      • <img>-Tag
      • Bug-Fixes

      Die <div>-Tags werden zwar richtig erkannt, noch sind aber parametrisierte Tags nicht implementiert.
      Das kommt _ später.

      Ohnehin ist das Rendering-Konzept gegenwärtig experimentell.

      Screenshot:

      Und Gott alleine weiß alles am allerbesten und besser.
      Tut er auch nicht?

      Das "Hello World" resultiert aus <h1>..</h1>

      Das "Hallo Welt" ist einfach im Quelltext ohne Spezifikation eingebettet.
      Titel wird schon richtig extrahiert und in der Konsole angezeigt:



      Zum Vergleich der HTML-Code
      Spoiler anzeigen

      HTML-Quellcode

      1. <br>
      2. <br>
      3. <html>
      4. Hallo Welt
      5. <img src="hello.png" alt="Smiley face" width="500" height="150">
      6. <head>
      7. <title>HELLO WORLD!</title>
      8. </head>
      9. <body>
      10. <h1>Hello world</h1>
      11. <hr>
      12. <p>This is a paragraph.</p>
      13. <p>This is a paragraph.</p>
      14. <p>This is a paragraph.</p>
      15. lol
      16. <br>
      17. <div>
      18. HAHA
      19. <hr>
      20. <a href="https://www.bing.com">bing search</a><br>
      21. <a href="https://www.microsoft.com">microsoft home page</a> <br><hr>
      22. </div>
      23. lolol
      24. </body>
      25. </html>
      26. <html>
      27. <body>
      28. <h1>My First Heading</h1>
      29. <p>My first paragraph.</p>
      30. </body>
      31. </html>
      Und Gott alleine weiß alles am allerbesten und besser.

      Attribute implementiert

      Fortan werden _ Attribute der jeweiligen HTML-Elemente ausgelesen:



      Im Beispiel zu sehen: <img>-Element.
      Es werden erfolgreich der Content und die Attribute gelesen.

      Theoretisch könnte man _ jetzt eine vollwertige Browser-Engine entwickeln.

      Hier mal ein komplexeres Beispiel:


      Ein interessanter Aspekt: Man könnte _ sowohl die Strings, als auch die Controls hardwarebeschleunigt rendern (MonoGame, oder Ähnliches).

      Git wurde aktualisiert.
      Und Gott alleine weiß alles am allerbesten und besser.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „φConst“ ()

      <a>-Tags implementiert!

      -1-

      Fortan ist es möglich, <a>-Tags zu verwenden.
      Auch Bilder sind "klickbar".



      Im kommenden Update _ werden voraussichtlich einige Javascript-Methoden und ein besseres Event-System implementiert.

      Git wird _ nachher aktualisiert.
      Und Gott alleine weiß alles am allerbesten und besser.
      -1-
      Nun wird auch Javascript quasi unterstützt (natürlich noch nicht bei Weitem alle Funktionalitäten) :



      Verwende dafür github.com/paulbartrum/jurassic/
      Und Gott alleine weiß alles am allerbesten und besser.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „φConst“ ()

      -1-

      Jetzt ist es auch möglich von Javascript aus die Website zu bearbeiten.
      Als kleiner Versuch dient folgender JS-Code:

      C#-Quellcode

      1. function onClick(){
      2. document.getElementById('demo').innerHTML = "Hello World!";
      3. }


      Die Konsole gibt erfolgreich den Wert aus:
      Und Gott alleine weiß alles am allerbesten und besser.
      Heyho,
      erstmal schönes dingen hab ich auch schon durch den Quellcode geklickt auf Github sieht gut aus.
      Planst du auch CSS Unterstützung ?

      Werde das hier auf alle Fälle verfolgen mich interessiert das ganze Thema auch sehr stark.
      Grüße , xChRoNiKx

      Nützliche Links:
      Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

      Neue Render-Architektur und CSS-Parsing

      Habe _ einige Teile des Codes komplett umgeschrieben.

      Dieses redundante und statische

      C#-Quellcode

      1. switch (Name)
      2. {
      3. case "meta":
      4. break;
      5. case "!":
      6. break;
      7. case "h1":
      8. Headline1 h1 = new Headline1()
      9. {
      10. Handler = this
      11. };
      12. h1.Process(g);
      13. tag = h1;
      14. break;


      Ist nun dynamischer.
      Wird eine Definition für eine bekannte Html-Tag erstellt, wird dieser automatisch erkannt und ausgeführt.

      Auch wird nicht mehr über GDI gezeichnet, sondern DirectX, id est hardwarebeschleunigt.

      Die Render-Architektur sieht zurzeit ungefähr so aus:
      Für statische Elemente einer HTML-Seite (also Titel einer Seite und Ähnliches) werden diese einmalig in eine Bitmap gezeichnet, welche dann in eine Texture2D überführt
      und über MonoGame gezeichnet wird.

      Dynamische Elemente sind auch möglich, muss nur schauen wie man diese beiden Entitäten kombinieren könnte.

      Style-Tags werden nun _ auch erfolgreich erkannt und analysiert.


      Git aktualisiert.
      Und Gott alleine weiß alles am allerbesten und besser.
      Kann man die Hardware Beschleunigung auch abschalten? Denn manchmal wenn ich 2 Programme offen habe die Hardware beschleunigt laufen stürzt eins ab oder eines der beiden laggt dann. Weiss nicht ob das ein allgemeines problem ist oder nur bei mir auftritt.

      Wäre also ganz nice wenn man per config oder so ausschalten könnte.

      Ansonsten bin ich mal gespannt wie das hier weiter geht.
      Grüße , xChRoNiKx

      Nützliche Links:
      Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
      Die Rendering-Prozedur wurde angepasst: Es wird einmal eine Bitmap erstellt (dieses Mal mit konstanter Dimension), in diese gezeichnet, diese wiederum wird dann als Texture2D über DirectX gerendert.
      So muss nicht iterativ alles neu gezeichnet werden.

      Nebstdem wurden neue Html-Tags und besseres CSS-Handling implementiert.



      _
      Und Gott alleine weiß alles am allerbesten und besser.
      Wer die letzten Tage diesen goto-Statement hier elegant? Thread mitverfolgt hat,
      sollte mitbekommen habe, dass der DOM-Algorithmus _ überarbeitet wurde.

      Im Unterschied zu den vorherigen Versionen wird lediglich eine einzige(!) For-Schleife benutzt, um die einzelnen Tags des HTML-Dokuments hierarchisch zu repräsentieren.
      Dadurch können auch sehr große Websites in wenigen Millisekunden geparst werden (wenn auch nicht immer korrekt, liegt aber imo an Spezialfälle, die noch implementiert werden müssen.)

      Git wurde aktualisiert, es empfiehlt sich den neuen Parser (github.com/NET-D3v3l0p3r/HTMLR…/Parser/DOMObject.cs#L192) mal näher zu untersuchen.
      Kritik sehr erwünscht.
      _
      Und Gott alleine weiß alles am allerbesten und besser.