Brug MultiSyn

Tags:    delphi
Skrevet af Bruger #58 @ 26.10.2001
Start med MultiSyn komponenten i SynEdit pakken

I denne artikel vil jeg fortælle hvordan man bruger SynMultiSyn komponenten i SynEdit pakken. Den komponent bruger man til at have flere slags syntaksfarvning ppå samme tid, f.eks. have et HTML dokument med HTML syntaksfarvning, og så have indlejret PHP kode farvet med PHP syntaksfarvning og evt. en <style> sektion farvet med CSS syntaksfarvning. Denne artikel var oprindelig en mail til Ossi som spurgte mig om det, og den bliver nu til artikel, så der er muligvis nogen underlige formuleringer.

Hvis du ikke ved noget om regular expressions i forvejen kommer du til at lære lidt om dem, for det er nødvendigt for at kunne udnytte komponenten fuldt, og i nogen tilfælde også for bare at kunne bruge den!

Så går vi igang!

Start med at lave de normale syntaks-komponenter for de forskellige syntaks-typer du vil kunne highlighte, og sæt dem op som du nu vil. Lad være med at linke dem til dit SynMemo. Lav så en SynMultiSyn komponent. På den sætter du DefaultHighlighter til den syntaks der er valgt i alt der ikke er markeret på på speciel måde, men det siger vist sig selv :-)

Nu kommer så den lidt tricky del. Åbn editoren for Schemes egenskaben på SynMultiSyn komponenten og tilføj et nyt "scheme". Indstil egenskaberne for den: Highlighter skal være den syntaks du vil tilknytte det scheme, SchemeName bliver vist ikke brugt nogen steder, men du kan sætte det for at du selv nemmere kan huske hvad det scheme er til. I MarkerAttri kan du sætte hvordan start- og slut-teksten for det scheme skal se ud, for PHP er det f.eks. der er start- og slut-teksten.

Og så til den rigtig svære del!

Nu skal vi sætte StartExpr og EndExpr egenskaberne. De er såkaldte regular expressions (regexps) så der er nogen tegn som vil blive opfattet specielt i dem, det gælder bl.a. spørgsmålstegn. Hvis du vil bruge de tegn som tegn og ikke som specielle funktioner skal du sætte en backslash (baglæns skråstreg) foran dem. Dvs. at et PHP start tag skal se sådan ud: <\\?. På samme måde med slut-tagget for PHP.

Men den rigtige styrke i regexps (før har vi jo kun set på den ene svaghed :-) ligger i at man kan dække flere lignende tekst-strenge ind under samme regexp. PHP kode kan jo starte med enten <? eller <?PHP - for at lave en regexp der dækker dem begge kan man skrive sådan her: <\\?([pP][hH][pP])?. De kantede paranteser betyder "netop et af de tegn der står mellem paranteserne", [pP] betyder altså "et lille p eller et stort P". Jeg sætter parantes uden om hele udtrykket for "PHP", det er for at kunne dække det hele med spørgsmålstegnet bagefter. Det spørgsmålstegn betyder "tegnet eller udtrykket før kan være med nul eller én gang", og da der er et helt udtryk i parantes betyder det altså at man selv kan vælge om man vil have "PHP" med i sit starttag.

Lidt mere en regexps

Hvis du har forstået hele afsnittet før ved du faktisk det vigtigste om regexps :-) Prøv selv at lege med det. Hvis der er noget i en regexp der ikke helt fungerer som det skal, så prøv at sætte en \\ (backslash) foran mere eller mindre specielle tegn, for så er det sikkert et af dem der er i vejen. Bl.a. har punktum en speciel betydning, nemlig "en vilkårlig række af bogstaver og tal der kan være så lang man ønsker". Desuden har {} paranteser en speciel betydning, ligesom * har en speciel betydning (det samme som ?, det kan bare gælde for et vilkårligt antal gange udtryket/tegnet før kan gentages). Der er flere muligheder end jeg har beskrevet her, men jeg ved endnu ikke alt om regexps, så hvis du vil vide mere må du søge noget information selv.
God programmeringslyst!



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #8985 @ 24.07.06 22:50
"I MarkerAttri kan" ... Hvor ser du den henne? :)
User
Bruger #8985 @ 24.07.06 22:52
Nåh har set den :D
Du skal være logget ind for at skrive en kommentar.
t