Pascal Quelltext - HTML Syntax Highlighting

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
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: Pascal Quelltext - HTML Syntax Highlighting

Beitrag von Socke »

gocher hat geschrieben:Im eigentlichen wird der Quellcode in einen Editor geladen und über dessen Syntax Highlighting wird der HTML-Code erzeugt und exportiert! Also Optimaler (schneller und kleiner) wäre ein Pascal-Parser der den Code direkt mit HTML-Tags anreichert, aber das ist wieder sehr speziell für diese eine Anwendung gedacht.
Die CodeTools enthalten einen Quelltext-Parser, mit dem du prinzipiell so etwas realisieren könntest. Er ist leider nicht dafür ausgelegt ganze Dateien zu parsen sondern immer nur kleine Teile, die man beim Editieren gerade braucht.
mschnell hat geschrieben:"Ziehen" der Units schadet doch nichts. Es wird immer nur der Code eingebaut, der auch tatsächlich irgendwo aufgerufen wird.
-Michael
In den Standard-Compilereinstellungen werden immer komplette Units verlinkt. Smartlinking muss extra aktiviert werden. Bei der Alternative Dead Code Eliminiation weiß ich nicht, ob der FPC das unterstützt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Pascal Quelltext - HTML Syntax Highlighting

Beitrag von martin_frb »

gocher hat geschrieben:
mschnell hat geschrieben:"Ziehen" der Units schadet doch nichts. Es wird immer nur der Code eingebaut, der auch tatsächlich irgendwo aufgerufen wird.
-Michael
Leider Falsch: Units koennen initialization/finalization haben. Und Code der dort aufgerufen wird, ist immer im fertigen Produkt.

z.B. Unit Graphics: Die included units zum lesen/schreiben von mehreren Bildformaten (jpg,png,...), und die Klassen werden in der initialization registriert. Das sind mehrere 100 MB wenn ich mich recht erinnere. (Zur errinnerung: Sobald eine Klasse referenziert ist, wird ALLER Code , der ueber "published" properties/procedures erreichbar ist einkompiliert. Smartlinking kann den nicht entfernen, weil er via RTTI erreichbar ist...)
Mit hinzu ziehen meine ich, das Ursprungsobjekt des TSynPasSyn ist visuell, also zum Darstellen des Textes angelegt mit Texteigenschaften die über TSynExporterHTML in HTML gewandelt werden. Also so gesagt wird der Code schon gebraucht aber nicht für meinen Zweck zu HTML-Darstellung.
SynEdit nutzt die visuellen Methoden. Weder SynPasSyn, noch der exporter brauchen diese.

Aber, der Exporter benutzt eine instance von TFont. Der Font wird nie wirklich verwendet, er dient nur als Platzhalter um Fore- und Backgrund- color zu speichern (und bold/italics).

Auch TColor ist in der unit Graphics. TColor selbst braucht nur wenige Bytes. Aber wenn man es verwendet bekommt man automatisch den ganzen Graphics Kram...

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Pascal Quelltext - HTML Syntax Highlighting

Beitrag von gocher »

Egal hier ist mein Weg, danach ersetze ich nur noch die font-Tags durch span-Tags mit class:
IntegerStyle setze ich absichtlich auf 0 damit nicht zusätzliche für mich überflüssige Tags entstehen.
Falls es einen besseren Weg gibt lasst es mich wissen :oops: !

Code: Alles auswählen

unit pas2html;
{$ifdef fpc}
  {$mode objfpc}{$H+}
{$endif}
interface
 
uses
  Windows, Classes, SysUtils, SynHighlighterPas, SynExportHTML, Interfaces;
 
function ConvertPasToHtm(const InputFileName: string): string;
 
implementation
 
function ConvertPasToHtm(const InputFileName: string): string;
var
  CodeLines: TStringList;
  Syn: TSynPasSyn;
  Exp: TSynExporterHTML;
  stream: TMemoryStream;
  s: Ansistring;
begin
  result := '';
  stream := TMemoryStream.Create;
  try
    stream.LoadFromFile(InputFileName);
    CodeLines := TStringList.Create;
    try
      SetString(s, stream.Memory, stream.Size);
      CodeLines.Text := s;
      stream.Clear;
      Syn := TSynPasSyn.Create(nil);
      try
        //syntax highlighter settings
        Syn.AsmAttri.Foreground := RGB($FF,$00,$FF);
        Syn.CommentAttri.Foreground := RGB($00,$80,$00);
        Syn.CommentAttri.IntegerStyle := $0;
        Syn.CaseLabelAttri.Foreground := RGB($FF,$00,$00);
        Syn.DirectiveAttri.Foreground := RGB($00,$64,$00);
        Syn.DirectiveAttri.IntegerStyle := 0;
        Syn.IDEDirectiveAttri.Foreground := RGB($55,$6B,$2F);
        Syn.IDEDirectiveAttri.IntegerStyle := 0;
        Syn.IdentifierAttri.Foreground := RGB($19,$19,$70);
        Syn.KeyAttri.Foreground := RGB($00,$00,$FF);
        Syn.KeyAttri.IntegerStyle := 0;
        Syn.NumberAttri.Foreground := RGB($D2,$69,$1E);
        Syn.SpaceAttri.Foreground := RGB($CA,$CA,$CA);
        Syn.StringAttri.Foreground := RGB($A2,$25,$25);
        Syn.SymbolAttri.Foreground := RGB($2F,$4F,$4F);
        // export ALines to HTML, as HTML fragment in text format
        Exp := TSynExporterHTML.Create(nil);
        try
          Exp.Highlighter := Syn;
          Exp.ExportAsText := TRUE;
          Exp.CreateHTMLFragment := TRUE;
          Exp.ExportAll(CodeLines);
          Exp.SaveToStream(stream);
          SetString(result, stream.Memory, stream.Size);
        finally
          Exp.Free;
        end;
      finally
        Syn.Free;
      end;
    finally
      CodeLines.Free;
    end;
  finally
    stream.Free;
  end;
end;
 
end.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Pascal Quelltext - HTML Syntax Highlighting

Beitrag von gocher »

Hallo zusammen,
nach langer Zeit ohne Probleme mit der zuvor veröffentlichten Funktion (habe sie dann auch noch um ein paar weitere vorhandene Sprachen erweitert und ersetzen der Font-Tags durch Span-Tags mit Class-Attribute), stoße ich nun auf ein weiteres Problem. Gibt es irgendeine Möglichkeit z.B. Javascript innerhalb einer HTML-Datei richtig zu highlighten?
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antworten