Page 1 of 2 1 2 LastLast
Results 1 to 15 of 19

Thread: Gekleurde code...

  1. #1
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269

    Gekleurde code...

    "Artikelen en tips", tja, dit is toch wel een tip...



    Ik kreeg van Richard dit privebericht:

    Hoi Psycho,

    Nu ga ik het alweer aan je vragen ????????

    Hoe kom jij aan die knap gekeurde code in een threat ?
    Het ziet er op deze manier zeer overzichtelijk uit
    Doe je dat ook met BBTool ?

    Alvast bedankt.

    Richard

    Misschien hebben nog meer mensen er wat aan, dus hier mijn antwoord:

    Met GExperts! Daarin zit een 'Export Code' utility waarmee je je code naar HTML of RTF kan converteren, incl. de kleurcoderingen zoals ook in je editor staan. Ik kopieer zo de HTML code, plak het in EditPlus, vervang <b> door [b] e.d. en ik kopieer het naar het forum

    Iets meer werk dan gewoon kopieren en plakken, maar zeker overzichtelijk
    Qui custodiet ipsos custodes

  2. #2
    Hmmm, GExperts hebben we de source van toch?? Dan moeten we toch ook een vBulletin export kunnen maken? Ik ga eens zoeken....
    Marcel

  3. #3
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Thumbs up

    RLD

  4. #4
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Dat idee had ik gisteren inderdaad ook al, heb alleen geen tijd en zin om zoiets te maken, maar het is zeker een goed (en handig) idee!
    Qui custodiet ipsos custodes

  5. #5
    Ik heb inmiddels het component gevonden dat GExperts gebruikt. Ik zal een CGI maken met behulp van dat component, dan kunnen we de code hier gewoon op de site omzetten. Hoeft er niemand iets te installeren.
    Marcel

  6. #6
    En daar is ie dan, vertaald op NLDelphi (http://www.nldelphi.com/pasconvert/), dit is trouwens ook daadwerkelijk de code van de conversie.

    Code:
    unit SrcCnvU;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, nldWebModuleU, HTTPApp, HTTPProd, nldPageProducer,
      nldModuleDispatcher, SynEditExport, SynExportHTML, SynEditHighlighter,
      SynHighlighterPas;
    
    type
      { Source convert module }
      TSrcCnv = class(TnldWebModule)
      private
        function HTMLToVBCode(Code: string): string;
      protected
        function Content: String; override;
      end;
    
    implementation
    
    {$R *.dfm}
    
    uses
      JclStrings;
    
    { TSrcCnv }
    
    function TSrcCnv.Content: String;
    var
      ALines: TStringList;
      Syn: TSynPasSyn;
      Exp: TSynExporterHTML;
      S: TMemoryStream;
    begin
      S := TMemoryStream.Create;
      ALines := TStringList.Create;
      try
        { Component moet runtime worden aangemaakt, anders spontane AV }
        Syn := TSynPasSyn.Create(nil);
        try
          with Syn do
          begin
            CommentAttri.Foreground := clNavy;
            CommentAttri.Style := [];
            KeyAttri.Foreground := clRed;
            KeyAttri.Style := [];
            NumberAttri.Foreground := clBlue;
            StringAttri.Foreground := clBlue;
          end;
    
          ALines.Text := Request.ContentFields.Values['Code'];
    
          { Export in eerste instantie naar HTML, vBCode komt later }
          Exp := TSynExporterHTML.Create(nil);
          try
            Exp.Highlighter := Syn;
            Exp.ExportAsText := TRUE;
            Exp.HTMLFontSize := fsDefault;
            Exp.Title := 'NLDelphi, pascal naar HTML converter';
            Exp.ExportAll(ALines);
            Exp.SaveToStream(S);
            S.Position := 0;
            ALines.LoadFromStream(S);
            Result := ALines.Text;
    
            if Request.ContentFields.Values['type'] = 'vbcode' then
              Result := HTMLToVBCode(Result);
          finally
            Exp.Free;
          end;
        finally
          Syn.Free;
        end;
      finally
        ALines.Free;
        S.Free;
      end;
    end;
    
    { Vervang de HTML codes door VB codes }
    function TSrcCnv.HTMLToVBCode(Code: string): string;
    const
      Max = 5;
      Replace:  array[0..Max] of array[0..1] of string =
      (
        ('<code>', '[ CODE]'),
        ('</code>', '[ /CODE]'),
        ('<font  face="Courier New">', ''),
        ('<font color="#FF0000">', '[ COLOR=red]'),
        ('<font color="#000080">', '[ COLOR=blue]'),
        ('</font>', '[ /COLOR]')
      );
    
    var
      i: Integer;
    begin
      Result := Code;
    
      for i := 0 to Max do
        Result := StringReplace(Result, Replace[i, 0], Replace[i, 1],
          [rfIgnoreCase, rfReplaceAll]);
    
      { Verwijder laatste [ /COLOR], dit is de afsluiting voor Courier }
      Delete(Result, StrILastPos('[ /COLOR]', Result), 8);
    end;
    
    initialization
      RegisterModule(TSrcCnv);
    
    end.
    Marcel

  7. #7
    Kewl.

    Ziet er cool uit zo. Ga ik vast vaak gebruiken !

  8. #8
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Code:
    var
      Msg: String;
    
    begin
      Msg := 'Ernstig gaaf!';
      MessageBox(0, PChar(Msg), 'Handig!', MB_OK or MB_ICONINFORMATION or 
          MB_SETFOREGROUND or MB_TOPMOST);
    end;

    Toch een keer die GExperts uitbreiden met zo'n vB code optie, dan pakt ie tenminste de instellingen van mijn IDE

    Maar voorderest, erg handig, leuk gedaan!



    [edit]
    en een break-line-na-x-aantal-characters optie is ook wel leuk
    [/edit]
    Qui custodiet ipsos custodes

  9. #9
    Ik kon er natuurlijk op wachten, er is altijd wel iemand die andere kleurtjes wil.

    Een willekeurige break toevoegen zou inderdaad best mogelijk zijn, maar dan zit je vaak net op het verkeerde moment te breaken. Volgens de coding guidelines break je zelf je code al rond de 80 posities, dan ziet het er op het forum volgens mij ook goed uit.
    Marcel

  10. #10
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Ik volg alleen m'n eigen guidelines, en die zeggen dat ik behalve in extreem erge gevallen een regel nooit afbreek


    Ach, dat met die kleurtjes is maar wat simpel gezeik, alhoewel ik dat bold enzo wel prettig vind lezen, maar goed, de online converter is in ieder geval een leuke toevoeging aan de site, en een mooi voorbeeld van delphi en internet gecombineerd
    Qui custodiet ipsos custodes

  11. #11
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Dat wil ik ook kunnen, dacht ik

    Eenzelfde soort DLL, alleen dit keer ISAPI zonder speciale webmodules van Delphi ofzo (heb Delphi 5), gewoon een DLL met de nodige exports. Deze werkt hier lokaal onder Apache (voor Windows dan) ook . Heb ook ipv StringReplace() te gebruiken simpelweg SynExportHTML geedit en opgeslagen als SynExportVB. Ik denk niet dat ie uitgewerkt genoeg is om al als volledige export te dienen, ik heb weggelaten wat ik niet nodig heb namelijk, maar voor deze DLL werkt het uitstekend.

    Oh, en ik heb de kleurtjes gewijzigd . Wil LoadFromFile gaan implementen, maar goed, da's zo gedaan...



    Gelijk even testen dan maar:


    Code:
    library Pas2vB;
    
    {
      Pas2vB
    
      An ISAPI DLL to export Pascal code to vBulletin-compatible
      code with syntax highlighting.
    
      Thanks to SynEdit (http://synedit.sf.net/) and the original
      source from Marcel (http://www.nldelphi.com/). I just modified
      SynExportHTML to directly export vB code...
    }
    
    uses
      Windows,
      ISAPI,
      XISAPI,
      Classes,
      Graphics,
      SynEditHighlighter,
      SynHighlighterPas,
      SynExportVB;
    
    function GetExtensionVersion(var Ver: THSE_VERSION_INFO): BOOL; stdcall;
    begin
      Ver.dwExtensionVersion  := 100;
      Ver.lpszExtensionDesc   := 'Pas2vB - Copyright (c) 2002 X2Software';
      Result                  := True;
    end;
    
    
    function HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD; stdcall;
    var
      shPascal:   TSynPasSyn;
      slCode:     TStringList;
      exvBCode:   TSynExporterVB;
      ssTemp:     TStringStream;
    
    begin
      // Create Pascal Syntax highlighter
    shPascal := TSynPasSyn.Create(nil);
      try
        // Set colors (sorry Marcel ;))
        //
        // Note to self: maybe add LoadFromFile. That
        // would stress the server more, but hey, it's
        // not like the whole world will be converting
        // his code :)
    with shPascal do begin
          AsmAttri.Foreground         := clMaroon;
          AsmAttri.Style              := [];
          CommentAttri.Foreground     := clNavy;
          CommentAttri.Style          := [fsItalic];
          NumberAttri.Foreground      := clGreen;
          NumberAttri.Style           := [];
          StringAttri.Foreground      := clGreen;
          StringAttri.Style           := [];
        end;
    
        // Get code
    with TISAPI.Create(ECB) do begin
          slCode      := TStringList.Create();
          slCode.Text := Param('code');
    
          if slCode.Text = '' then
            Write('Typ eens wat in zou ik zeggen!')
          else begin
            ssTemp      := TStringStream.Create('');
    
            exvBCode    := TSynExporterVB.Create(nil);
            try
              with exvBCode do begin
                Highlighter   := shPascal;
                ExportAsText  := True;
                VBFontSize    := fsDefault;
                Title         := 'Pas2vB - Copyright (c) 2002 X2Software';
                ExportAll(slCode);
                SaveToStream(ssTemp);
    
                ssTemp.Seek(0, soFromBeginning);
                slCode.LoadFromStream(ssTemp);
    
                Write(''#13#10);
                Write(slCode.Text);
                Write(''#13#10);
              end;
            finally
              exvBCode.Free();
              ssTemp.Free();
              slCode.Free();
            end;
          end;
    
          Free();
        end;
      finally
        shPascal.Free();
      end;
    
      Result := HSE_STATUS_SUCCESS;
    end;
    
    exports
      GetExtensionVersion,
      HttpExtensionProc;
    
    end.
    


    En voor de geinteresseerden:

    (oh, let wel even op, volgens mij staat het compile path nog op mijn server ingesteld )
    Attached Files Attached Files
    Qui custodiet ipsos custodes

  12. #12
    Ik verwacht niet dat LoadFromFile een probleem zal zijn. Ik lees in alle CGI's op NLDelphi e.e.a. uit een INI-file zodat ik niet alles hoef aan te passen bij de wijziging van de structuur. Als je bijvoorbeeld ziet hoe snel NLDelphi links loopt is dat geen probleem.
    Marcel

  13. #13
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Inderdaad, vandaar dat ik 't ook wel van plan was, maar goed, dan moet je weer weten hoe de waarden worden weggeschreven en eventueel een programma ervoor schrijven waarin je de stijlen op kunt geven zodat ie ze wegschrijft naar een INI bestand. Had ik even geen zin in, ben al blij dat ie het doet, Apache is ondertussen 'maar' 6x gecrasht (blijkbaar bugje in die highlighter als er geen tekst wordt ingevuld, vandaar die aparte check ).

    Ben wel van plan een keer die code door te bladeren en te converteren naar PHP, maar goed, da's voorlopig nog iets teveel werk...
    Qui custodiet ipsos custodes

  14. #14
    Hmm, goede tip! Een lege tekst geef bij mij ook een "Internal Application Error
    Operation aborted", maar Apache blijft nog wel in de lucht.

    Ik ben wel benieuwd hoe snel dit soort dingen in PHP zijn, ik ben bang dat je dan wel gaat merken dat je met een scripttaal bezig bent. Overigens heb je me wel weer gemotiveerd om zelf een kleur in te kunnen stellen, dus ik moet weer aan het werk.
    Marcel

  15. #15
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Hoe zet jij eigenlijk de DLL in Apache? Ook als ISAPI? Vreemd in ieder geval, alhoewel ik geen Delphi webmodule's o.i.d. gebruik. Ik kreeg zelf eerst een 500-error, toen try weggehaald en toen kreeg ik zo'n leuk Windows 2000-stijl 'Dit programma heeft een ongeldige bewerking uitgevoerd'-dialoogje. Apache deed het volgens mij daarna nog wel, maar de DLL niet en ik moest rebooten om 'm te kunnen overschrijven (which reminds me: is daar een oplossing voor? DLL's unloaden?)...


    Ik denk dat je met PHP misschien inderdaad iets trager zal zijn, maar de codes zijn nooit vreselijk groot, en loopen door een 65 kb string deed ie in minder dan een seconde, dus dat zal het probleem niet zijn aangezien de gemiddelde forum-software een TEXT field gebruikt (die 65535 tekens aankan)... ik wil het in ieder geval proberen, al is het alleen maar om weer iets ervan te leren
    Qui custodiet ipsos custodes

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. String bewerking: Code uit een pad halen
    By RealKillaz in forum Algemeen
    Replies: 6
    Last Post: 31-Mar-04, 12:38
  2. Code Indexeren .... ?
    By Eave in forum Algemeen
    Replies: 13
    Last Post: 20-Sep-03, 10:40
  3. Kan deze code makkelijker?
    By SnoK in forum Algemeen
    Replies: 26
    Last Post: 01-Jul-02, 00:25

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •