Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   HighlightParser - PasToHtml (https://www.delphipraxis.net/68604-highlightparser-pastohtml.html)

fwsp 2. Mai 2006 15:14


HighlightParser - PasToHtml
 
Hallo.

Ich hab ein Tool geschrieben, welches Pascal-Dateien in formatiertes Html übersetzen.
Die Formatvorlagen entsprechen denen der IDE von Delphi 2005 PE. Allerdings können mit Hilfe einer eingebunden .css die Vorlagen den eigenen Wünschen entsprechend verändert werden.

Man kann damit Dateien einlesen, und selbstverständlich auch speichern oder man kann den Code direkt eingeben.

Viel Spaß beim Testen, falls ihr es testet.


Die Microsoft Internet Controls müssen importiert sein.

HighlightParser

MathiasSimmack 2. Mai 2006 15:18

Re: HighlightParser - PasToHtml
 
Ohne es zu testen:
Zitat:

Zitat von fwsp
oder man kann den Code direkt eingeben und das Tool speichert das Html ins ausführende Verzeichnis.

Schlecht. Nimm lieber den "Eigene Dateien"-Ordner des Benutzers, das gibt weniger Probleme.

Matze 2. Mai 2006 15:19

Re: HighlightParser - PasToHtml
 
Hi

Die Schriftgröße der Memos ist ja wintzig, die kann ich nicht lesen.

Nichts desto trotz bleibe ich bei GExperts, falls ich mal schnell sowas benötige, doch wenn, dann ntuze ich sowieso geshi. Evtl kannst du das ja auch als Plugin umschreiben, nur so als Anregung.

Der HTML-Code ist ganz sauber, gefällt mir (auch wenn ich statt "code" "span" genommen hätte, ist aber wahrscheinlich egal). Nur einen Fehler hast du im Code und zwar bei "</pre", da fehlt ein ">". ;)

Thebe 2. Mai 2006 16:07

Re: HighlightParser - PasToHtml
 
Bei mir wird mein gesamter Source nach mehrzeiligen {...} Kommentaren als Kommentar angesehen..
Is recht... Grün..

Ansonsten sehr schicke Sache

SubData 2. Mai 2006 16:09

Re: HighlightParser - PasToHtml
 
Hübsches Ding, dem schließe ich mich an...
Auch der ausgegebene Code ist sehr sauber :)

fwsp 3. Mai 2006 19:52

Re: HighlightParser - PasToHtml
 
Hab grad ne neue Version hochgeladen.
  • "</pre>" wird jetzt geschlossen
  • die Schriftgröße der Memos ist jetzt größer
  • Codes die über das Memo eingegeben werden, werden jetzt in den Eigenen Dateien gespeichert
  • hab von <code> zu <span> gewechselt, um den html-standard treu zu bleiben
  • Highlightning für mehrzeilige Kommentare wurde überarbeitet und sollte jetzt funktionieren

ichbins 3. Mai 2006 19:57

Re: HighlightParser - PasToHtml
 
Was mir noch fehlt ist
  • Eine Vorschaufunktion
  • Wie immer: xp-Style

ansonsten super!

fwsp 3. Mai 2006 19:59

Re: HighlightParser - PasToHtml
 
Über Vorschau lässt sich reden, "Luna" werd ich nicht unterstützen (konnte ich noch nie leiden. :wink: )

Chewie 3. Mai 2006 20:03

Re: HighlightParser - PasToHtml
 
Etwas OT: Was ist denn an <code> so schlimm?
<span> ist nur ein allgemeines Element, dass nichts über den Inhalt aussagt, während <code> im Hinblick auf semantisches Markup doch geradezu prädestiniert für die Anzeige von Quellcode.

<pre> dagegen gilt soweit ich weiß als veraltet, da es keine Aussage über den Inhalt macht und deshalb leicht durch <span> bzw. <div> mit entsprechender CSS-Formatierung ersetzt werden kann.

Oder hab ich was in der Entwicklung verpasst?

Khabarakh 3. Mai 2006 20:05

Re: HighlightParser - PasToHtml
 
Zitat:

Zitat von fwsp
Über Vorschau lässt sich reden, "Luna" werd ich nicht unterstützen (konnte ich noch nie leiden. :wink: )

Es soll aber Leute geben, die keine grauen Buttons und Balken mehr sehen können (Avalon...). Und solange du Luna nicht selbst benutzt, kann dich ja höchstens der zusätzliche Unit-Eintrag stören.

fwsp 3. Mai 2006 20:10

Re: HighlightParser - PasToHtml
 
to Chewie:
<span> ist allgemeiner und damit nicht falsch, und auch gebräuchlicher. aber danke für den hinweis, dass <pre> nicht mehr aktuell ist, werd ich dann ändern.

to Khabarakh:
okay, ich mach die Welt bunt.

Chewie 3. Mai 2006 20:53

Re: HighlightParser - PasToHtml
 
Zitat:

Zitat von fwsp
<span> ist allgemeiner und damit nicht falsch, und auch gebräuchlicher.

Nicht falsch, aber unlogischer.

Matze 3. Mai 2006 20:59

Re: HighlightParser - PasToHtml
 
<code> ist normalerweise dafür da, um kompletten Code einzukasteln (vgl. [code]-Tags). ;)

@Chewie: Unlogisch ist es, wenn kleine Abschnitte von <code> eigefasst sind und andere nicht, auch wenn diese zum Code gehören.

Chewie 3. Mai 2006 21:36

Re: HighlightParser - PasToHtml
 
Zitat:

Zitat von Matze
<code> ist normalerweise dafür da, um kompletten Code einzukasteln (vgl. [code]-Tags). ;)

@Chewie: Unlogisch ist es, wenn kleine Abschnitte von <code> eigefasst sind und andere nicht, auch wenn diese zum Code gehören.

Hm, ja, man sollte schon konsistent sein. Also <code> mit verschiedenen Klassen oder IDs.
Aber ich muss zugeben, ich hab mir die Ausgabe des Programms nicht angesehen, das war nur allgemein bezogen. Ich finde halt, wenn es schon semantische Tags gibt, dass man diese auch benutzen sollte, und nicht nur <span> und dann alles mit CSS formatieren. Bis auf Bilder und Formular-Elemente bekommt damit nämlich so gut wie alles hin ;)

fwsp 4. Mai 2006 19:49

Re: HighlightParser - PasToHtml
 
Neue Version:
  • Es gibt jetzt ne Vorschau
  • Die Speicheroptionen sind in diesem Zusammenhang sicherheitshalber auch mal überarbeitet
  • Luna ist jetzt da

Ich hab mal in SelfHTML geguckt, was da zu <pre> steht und da stand eigentlich nichts zu 'Bloß nicht mehr verwenden'. Welche Alternative gibt es denn zu <pre>? Ist <pre> schon vom Aussterben bedroht?

Nicodius 4. Mai 2006 20:50

Re: HighlightParser - PasToHtml
 
Zitat:

---------------------------
HighlightParser - fwsp
---------------------------
Zugriffsverletzung bei Adresse 0045F967 in Modul 'HighlightParser.exe'. Lesen von Adresse 00000000.
---------------------------
OK
---------------------------

hab ich bei nem code bekommen :(


aber preview vom startcode ging =)


hübsch schauts so aus ;)

fwsp 4. Mai 2006 20:52

Re: HighlightParser - PasToHtml
 
kannst du mir vielleicht den code geben, damit ich gucken kann wo der fehler ist?

Nicodius 4. Mai 2006 20:53

Re: HighlightParser - PasToHtml
 
mir ist nochwas aufgefallen

ich hab ein projekt wo am anfang viele geschweife kommentare sind halt

und dann ist der restliche queslltext grün also kommentiert .. ? den kann ich dir leidern icht schicken weils n riesen projekt ist :( - aber glaube dass du vl nochmal das mit den klammern überschaun solltest?


und bei diesem code wird sogar garn ichts codiert - (eben oben alles rausgeschmissen zum testen)

Delphi-Quellcode:
unit EHTML;

interface

uses
  Windows, Messages, SysUtils, Graphics, Controls, Forms,
  ComCtrls, Menus, ShellAPI,IdGlobal,
  Registry, Classes, AppEvnts, StdCtrls, ExtCtrls, Dialogs;

const
  IC_CLICK = WM_APP + 201; // Für die Taskleiste

procedure TForm1.Timer3Timer(Sender: TObject);
begin
// Wenn highliten eingestellt ist
// wird dieser timemr kurz aktiv
// um alles ohne veränderung der Cursorposition
// einzufärben
  HTMLSyntax(Text, Color1, Color2, Color3, Style);
  Text.CaretPos := Point(0, 5);
  Timer3.enabled := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var text1: string;
  i, e: Integer;
begin
// Caption errechnen
  text1 := '';
  for i := 1 to Text.Lines.Count do
    if Pos('<title>', lowercase(Text.Lines.Strings[i])) > 0 then
    begin
      for e := 8 to Pos('</title>', lowercase(Text.Lines.Strings[i])) - 1 do
        text1 := text1 + Text.Lines.Strings[i][e];
      break; // Verlassen der Schleife
    end;
  Form5.Caption := text1;
// Vorschaugenerierung
  Inc(VWert);
  if FileExists(ExtractFilePath(ParamStr(0)) + 'Vorschau\')
    then
  begin
    Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Vorschau\' + 'Vorschau' + IntToStr(VWert) + '.html');
    Form5.Look.Navigate(ExtractFilePath(ParamStr(0)) + 'Vorschau\' + 'Vorschau' + IntToStr(VWert) + '.html');
    Form5.Visible := false;
    Form5.Visible := true;
  end
  else
  begin
    ForceDirectories(ExtractFilePath(ParamStr(0)) + 'Vorschau\');
    Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Vorschau\' + 'Vorschau' + IntToStr(VWert) + '.html');
    Form5.Look.Navigate(ExtractFilePath(ParamStr(0)) + 'Vorschau\' + 'Vorschau' + IntToStr(VWert) + '.html');
    Form5.Visible := false;
    Form5.Visible := true;
  end;
end;

procedure TForm1.Help2Click(Sender: TObject);
begin
// Hilfedatei wird geöffnet
  ShellExecute(Handle, nil, pChar(ExtractFilePath(ParamStr(0)) + '\Help\Help.htm'), nil, nil, SW_SHOW);
end;

procedure TForm1.Colorsettings1Click(Sender: TObject);
begin
// EH-Eigenschaften Fenster erhält den Fokus und
// der Timer von Form6 wird aktiviert
// um das vorschaufenster sofort zu aktualisieren
  Form6.visible := false;
  Form6.visible := true;
  Form6.Timer1.Enabled := true;
end;

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.Visible := false;
  Form1.FormStyle := fsstayonTop;
  //Hide;
  with NIM do begin
    cbSize := SizeOf(nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'EASY HTML';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
    Form1.Visible := true;
    Form2.FormStyle := fsstayonTop;
    Form3.FormStyle := fsstayonTop;
    Form4.FormStyle := fsstayonTop;
    Form1.Visible := true;
    Form1.FormStyle := fsstayontop;
  end;
end;

function TForm1.InstallExt(Extension, ExtDescription, FileDescription,
  OpenWith, ParamString: string; IconIndex: Integer): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ',' + IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
    end;
    Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;

function TForm1.UnInstallExt(Extension, ExtDescription: string): Boolean;
var
  Reg: TRegistry;
begin
  // Keys wieder weggeben
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_CLASSES_ROOT;
      DeleteKey(Extension);
      DeleteKey('\' + ExtDescription);
    end;
    Result := True;
  except
    Result := False;
  end;
  // Reg freimachen
  Reg.Free;
end;

procedure TForm1.MAIL1Click(Sender: TObject);
begin
// Supportanfrage kann gesendet werden
  ShellExecute(Application.Handle, 'open',
    PChar('mailto:s.mueller@inode.at?subject=EASY HTML&body=Hier bitte ihre Fragen/Anregungen schreiben                                    Please write here your Questions and ideas'), nil, nil, sw_ShowNormal);
end;

procedure TForm1.Projectsetting1Click(Sender: TObject);
begin
// Projekt optionen werden aufgerufen
  Form2.Visible := false;
  Form2.Visible := true;
end;

procedure TForm1.Deutsch1Click(Sender: TObject);
begin
// Sprachenumstellung (jetzt eigentlich unnötig!)
  if Wert = true then ChangeSpeak('Deutsch')
  else
    ChangeSpeak('Englisch');
end;

procedure TForm1.Save;
begin
// Normale Speicherung
// Wie sie funktioniert wird in Save & Compile beschrieben
  Memo1.Lines := Text.Lines;
  Number := 1;
  if FileExists(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Number.txt') then
  begin
    Memo1.lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Number.txt');
    Number := StrToInt(Memo1.Text);
    memo1.lines.Clear;
  end;
  Memo1.lines := Text.Lines;
  if (Panel1.caption <> 'NO NAME       Please change the name of the Site') and (Panel1.caption <> 'KEIN NAME    Bitte ändern Sie die Projekteinstellungen') then
  begin
    if Unregistred then
    begin
      Memo1.Lines.Add('

 </p>');
      Memo1.Lines.Add('[b] <font Color = "Maroon"> made with EASY HTML by Nico Müller, TSA 2004 </font> [/b]');
    end;
    ForceDirectories(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption);
    Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Site' + IntToStr(Number) + '.html');
    if Pos('.EHt', Savedialog1.FileName) > 0
      then
      Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Data.EHt')
    else
      Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Data.EHt');
    memo1.lines.Clear;
    Inc(Number);
    memo1.text := IntToStr(Number);
    Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Projects\' + Panel1.caption + '\Number.txt');
  end else
    if Form2.Caption = 'Project settings' then
      Showmessage('PLEASE CHANGE THE PROJECT SETTINGS(press F2)')
    else
      Showmessage('BITTE ÄNDERN SIE DIE PROJEKTEINSTELLUNGEN(F2 drücken)');
end;

procedure TForm1.TextMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  VorschauOk := true;
end;

procedure TForm1.TextKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ssCtrl in shift) and ((key = 90) or (key = 122)) then
  begin
    PostMessage(GetFocus,WM_UNDO,0,0);
  end;
end;

end.

//---------TODO-----------------------|
// --> FARBMIXER                     |
// Französische Buttons mit & Zeichen!|
// Messages auf allen Sprachen!       |
// rechtsklick neue EHT datei!        |
// Minimieren                        |
//------------------------------------|

//------------------------
// Gesamt:~>2000 Codezeilen


// ZEILE 342!!!!!!!!!
        // 249!!!!

dahead 4. Mai 2006 21:14

Re: HighlightParser - PasToHtml
 
@threadsteller:

dein projekt hört sich ganz interessant an, allerdings vermisse ich einen screenshot und eine beispiel-html datei. falls du das (oder jemand anderes) online stellen könnte, wäre ich beinahe geneigt einen blick auf das programm zu werfen.

vielen dank!

fwsp 4. Mai 2006 23:37

Re: HighlightParser - PasToHtml
 
so, ne beispieldatei hab ich grad hochgeladen. den fehler den nicodius hatte ist schon ausgemerzt, die kommentare guck ich mir morgen dann an.
ich halte mich beim coden sehr an den style guide von dsdt.info und es scheint, dass das programm schwierigkeiten kriegt, wenn der code nicht so formatiert ist.

Ein anderes problem ist, wenn mehrere male hintereinander code formatiert wird, dann gibt es fehler, muss ich mir noch mal angucken.

To Nicodius: hab den code den du da gepostet hast durch das programm gejagt und er hat es formatiert. guck mal ob es nach einem neustart funktioniert. wird dann in der nächsten version verbessert.

Matze 4. Mai 2006 23:45

Re: HighlightParser - PasToHtml
 
Wie wäre es, wenn man die Highlighterfarben noch selbst einstellen könnte? :stupid:

fwsp 5. Mai 2006 07:22

Re: HighlightParser - PasToHtml
 
ich hab zu anfang überlegt auch noch die d7 farben anzubieten, hab mich aber dann dagegen entschieden, da die neueren IDEs den aktuellen standard bilden und wie ich hörte sich auch mehr an den farben der anderen sprachen orientieren, aus diesem grund würde ich eigentlich sowas nicht in erwägung ziehen.

der einfachste weg das aber nachzurüsten, wäre ne externe .css in das projekt einzubinden, ich arbeite doch nun so hübsch mit klassen.

Matze 5. Mai 2006 07:59

Re: HighlightParser - PasToHtml
 
Moin,

ich nutze auch die Standard-Farben, also mir wäre das egal. Doch manche stellen die IDE-Farben um, daher beim Vorschlag. Aber meinetwegen musst du ihn nicht umsetzen. ;)

fwsp 5. Mai 2006 08:04

Re: HighlightParser - PasToHtml
 
to matze:
ne extra .css ist jetzt mit dabei, kann also frei formatiert werden.

to Nicodius:
ich hab mir deinen geposteten quelltext mal angeguckt und gesehen, dass du da auch html drin hast, dein html wird auch interpretiert und dann kommt es wahrscheinlich zu problemen.
die neue version, die ich grad hochgeladen hab, hat weniger probleme mit dem code den du mir per pn geschickt hast, aber es gibt noch schwierigkeiten...
hab aber deinen geposteten code mal formatiert hochgeladen (siehe erster beitrag, beispiel 2).

glkgereon 5. Mai 2006 09:32

Re: HighlightParser - PasToHtml
 
Tja...Ich habe grad mal des Spaßes halber die UBase64 hier aus der CodeLib formatiert...HangUp :)

es tut sich nichts mehr bei deinem Programmm...

vielleicht könntest du da mal nach gucken...
Zudem fällt insgesamt auf das es recht langsam ist...

fwsp 5. Mai 2006 15:29

Re: HighlightParser - PasToHtml
 
jetzt klappt es wie es soll, auch mit dem code von nicodius.
(siehe erster beitrag, beispiel 3)

Matze 5. Mai 2006 15:36

Re: HighlightParser - PasToHtml
 
HTML-Code im String sollte aber ignoriert werden. Parse den Code zuerst nach HTML-Code ab und ersetze die speziellen Zeichen durch die HTML-Zeichen wie &lt; mach dich dann an's Highlighten.

fwsp 5. Mai 2006 15:37

Re: HighlightParser - PasToHtml
 
hab mich schon gefragt wie ich das machen soll. hab den teil mit der ersetzung vergessen...

MathiasSimmack 5. Mai 2006 15:57

Re: HighlightParser - PasToHtml
 
Zitat:

Zitat von glkgereon
Tja...Ich habe grad mal des Spaßes halber die UBase64 hier aus der CodeLib formatiert...HangUp :)

[...]

Zudem fällt insgesamt auf das es recht langsam ist...

Alt, aber schnell, und kein Problem mit der besagten Unit. :stupid: Quasi eine Gemeinschaftsproduktion.

fwsp 5. Mai 2006 17:03

Re: HighlightParser - PasToHtml
 
lass sich doch mal den armen nachwuchs entwickler versuchen :cry:
außerdem hat meins jetzt auch keine probleme damit. :-D
und ich hab noch ShellListView und ShellTreeView mit eingebaut, um angenehmer zu manövrieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz