Results 1 to 5 of 5

Thread: NLDDelphiHighlighter

  1. #1

    NLDDelphiHighlighter

    De marketingafdeling van GolezTrol BV heeft z'n werk niet goed gedaan. Dit stukje code was begin februari eigenlijk al af, maar is bij deze pas openbaar. Inmiddels heeft PsychoMark natuurlijk zijn PHP Highlighter al publiek gesteld, maar toch wil ik jullie dit niet onthouden.

    Het stukje code in bijbehorende post is een parser, of eigenlijk nauwelijks meer dan een lexical analyser die een stuk code gaat ontleden en omzetten naar Delphi syntax. Natuurlijk hebben we al de diverse objecten zoals SynEdit die dat doen, maar deze class draait verder los van de VCL en van 3rd party componenten (net als die van PsychoMark dus ). Ik heb 'm zelf geschreven, dus niet ergens van gekopiëerd of vertaald, hetgeen misschien verklaart waarom het ook niet bepaald de snelste highlighter is die er bestaat.

    De zipfile bevat in de eerste release 5 bestandjes:
    - Test.dpr, fTest.pas en fTest.dfm:
    Een testprojectje om meteen wat uit te proberen.
    - NLDDelphiHighlighter.pas:
    Bevat de daadwerkelijke class die het parsen/highlighten regelt, met virtual methods voor de uitvoer van de code.
    - NLDDelphiVBulletinHighlighter.pas:
    Een afgeleide die een aantal methods implementeert om de code om te zetten naar vBulletin.

    Voor de output worden er een aantal kleurschema's ondersteund. Het kleurschema dat ik in mijn posts gebruik zit er in, maar ook een minimale opmaak (alleen vette keywords en cursief commentaar) zit er in, zodat je langere stukken code kunt posten zonder al te snel tegen de toegestane limiet van het forum aan te lopen. Verder zijn de vier 'standaard' kleurschema's van Delphi ook ingeklopt.

    Een voorbeeldje met minimale opmaak ('light')
    Code:
        psBlockComment2:
        // BlockComment (* will end on *)
          if (Data[Ptr] = '*') and (Data[Ptr+1] = ')') then
          begin
            State := psUnknown;
            Inc(Ptr, 2); // Include these characters in color
          end;
    Dezelfde code met mijn favoriete kleuren:
    Code:
        psBlockComment2:
        // BlockComment (* will end on *)
          if (Data[Ptr] = '*') and (Data[Ptr+1] = ')') then
          begin
            State := psUnknown;
            Inc(Ptr, 2); // Include these characters in color
          end;
    De keuze voor verschillende kleurschema's is nu redelijk primitief en niet flexibel. Hier moet misschien wat aan worden gedaan. De basis, het parsen, werkt volgens mij verder prima en dat is waar het om gaat.

    De parser/tokenizer kan misschien nog iets worden versneld. Hij is nu niet bijster snel, maar goed genoeg voor kleine stukken code. Een project van 100.000 regels zal je hier niet mee willen doen, maar 1000 is geen probleem.

    Op dit moment zit er alleen een vBulletin highlighter in, maar er kunnen heel makkelijk losse units met afgeleiden worden gemaakt die ook andere indelingen ondersteunen.

    Download versie 1.0

    Known bugs:
    - Kleurprofiel is hardcoded, dus niet in te stellen
    - Eerste / van commentaar ( // ) wordt niet meegenomen in de opmaak.

    To do:
    - Flexibele mogelijkheid tot opslaan/instellen van kleurschema's
    - Escape tags plaatsen zodat bijvoorbeeld [i] veilig in de code kan staan zonder dat de posts vernacheld worden
    Last edited by GolezTrol; 17-Feb-07 at 10:15.
    1+1=b

  2. #2
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Zipje afwezig? Ik wou er eens mee gaan prutsen
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  3. #3
    Blijkbaar.
    Even gezocht op de harde schijf. Gevonden bestandjes toegevoegd als zipje. Geen idee of het compileert, laat staan of het de beschreven versie is.
    Attached Files Attached Files
    1+1=b

  4. #4
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Ghehe, er ontbreekt echt heel veel, ik was benieuwd hoe je het highlighten zelf deed en dat is precies wat er niet in staat. Ik ga er zelf wel mee prutsen (was een poging waard, waarom het wiel opnieuw uitvinden en zo).

    Althans, het highlighten in een memo/richedit dan ;-)
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  5. #5
    Tja, wat is highlighten. In dit geval genereer ik html of vBulletin code om code in kleur te kunnen posten (voordat we de Highlight tag hadden )

    Je kunt wellicht een afgeleide maken die tekst in een bepaalde kleur invoegt in een TRichEdit control. De basisclass verdeelt de tekst in blokken en roept methods aan om out -te-putten. Dat kan je natuurlijk ook direct doorsluizen naar een TRichEdit.
    1+1=b

Thread Information

Users Browsing this Thread

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

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
  •