[SOLVED] Syntax-Highlighting (Kommentare)

Für Fragen rund um die Ide und zum Debugger
mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

[SOLVED] Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

Hey Leute,

mich würde mal interessieren, ob es möglich ist das Systax-Highlighting dazu zu bringen, dass verschiedene "Kommentartypen" (ich nenn' das jetzt einfach mal so) unterschiedlich aussehen.

Gedacht habe ich mir das !zum Beispiel! so:

Code: Alles auswählen

 
//Einfacher Kommentar (e.g. standart)
(* Anderer Kommentar *) (e.g. Schriftfarbe grün, Hintergrund~ Weiß)
{noch ein anderer Kommentar} (e.g. Schriftfarbe cyan, Hintergrund~ Schwarz)
 
Das würde mir zumindest dabei helfen, meine Units einfacher zu Kommentieren, weil ich die Kommentare dann für z.B. Erklärungen, Beschreibungen, eigene Meinungen *whatever* separierter nutzen könnte und zwei Kommentare unterschiedlicher Natur dann nicht einfach ineinander untergehen.

Nur so ne Idee, ich weiß nicht, ob das möglich ist :mrgreen:

MfG

mark332
Zuletzt geändert von mark332 am Mo 27. Apr 2015, 22:51, insgesamt 1-mal geändert.
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Syntax-Highlighting (Kommentare)

Beitrag von theo »

Der Highlighter unterscheidet das so nicht afaik.
Da müsstest du schon relativ tief unten einsteigen.
Aber nichts ist unmöglich! :wink:

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

theo hat geschrieben:Der Highlighter unterscheidet das so nicht afaik.
Da müsstest du schon relativ tief unten einsteigen.
Aber nichts ist unmöglich! :wink:
Hast du da einen konkreten Anhaltspunkt für mich ? :)

Ich scheue da erst einmal vor nichts zurück :wink:

Ich habe nur über Google nichts wirklich brauchbares gefunden, vmtl. weil ich nicht genau weiß, wie die IDE was speichert und wie das Syntax-Highlighting genau funktioniert.

MfG

mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Syntax-Highlighting (Kommentare)

Beitrag von theo »

Naja, das passiert halt erstmal in TSynPasSyn auf dem SynEdit Tab.
Viel Spaß! :mrgreen:

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

theo hat geschrieben:Naja, das passiert halt erstmal in TSynPasSyn auf dem SynEdit Tab.
Viel Spaß! :mrgreen:
Okay, schau ich mir mal an ;)

Danke,

MfG

mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

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: Syntax-Highlighting (Kommentare)

Beitrag von martin_frb »

Highlighter sind sogar teilweise dokumentiert

http://wiki.lazarus.freepascal.org/SynEdit_Highlighter

Du musst
1) In Create: fCommentAttri
Füge weiter hinzu.

2) function TSynPasSyn.GetTokenAttribute: TSynHighlighterAttributes;
tkComment: Result := fCommentAttri;
wird zu
if rsAnsi in fRange then result := fCommentAttriANSI;
...
...

------------------
Du must die farben per code setzen. Oder eben auch noch editor opts aenderns.

Im Moment denke ich das dies nich teil der offiziellen IDE wird.

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: Syntax-Highlighting (Kommentare)

Beitrag von martin_frb »

Vielleicht hilft das: http://wiki.lazarus.freepascal.org/New_ ... t.2Fmarkup

Wen deine Kommentare mit

(* TODO
(* DOC
(* CHECK
(* Descript
...
beginnen.

Dann kannst Du diese mit highlights versehen. Allerdings nur das keyword (und die "(*") nicht den ganzen Kommentar.

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

Danke, ich schaue mir beides mal an, melde mich dann zurück ;)
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

martin_frb hat geschrieben:Highlighter sind sogar teilweise dokumentiert

http://wiki.lazarus.freepascal.org/SynEdit_Highlighter

Du musst
1) In Create: fCommentAttri
Füge weiter hinzu.

2) function TSynPasSyn.GetTokenAttribute: TSynHighlighterAttributes;
tkComment: Result := fCommentAttri;
wird zu
if rsAnsi in fRange then result := fCommentAttriANSI;
...
...

------------------
Du must die farben per code setzen. Oder eben auch noch editor opts aenderns.

Im Moment denke ich das dies nich teil der offiziellen IDE wird.
Deinen Teil-1 verstehe ich nicht ganz, kannst du mir ein wenig genauer sagen, was du genau meinst (bzw, welches Create) :oops:

Edit, ich habe jetzt eine Ahnung, was du meinen könntest, allerdings muss ich ihn noch irgendwie dazu bringen zwischen rsAnsi/Bor/Slash zu unterscheiden, als nur TKComment zu nehmen..

Leider muss ich feststellen, das teilweise ich meine Units besser kommentiere, als der, der SynHighlighterPas geschrieben hat ;)


Folgende dinge habe ich jetzt geändert:

Code: Alles auswählen

 
  TtkTokenKind = (tkAsm, tkComment, tkBor, tkAnsi, tkSlash, tkIdentifier, tkKey, tkNull, tkNumber,
    tkSpace, tkString, tkSymbol, tkDirective, tkIDEDirective,
    tkUnknown);
 
 
// Slash(Continue)Proc: tkComment-->tkSlash; BorProc: tkComment-->tkBor; AnsiProc: tkComment-->tkAnsi
// Alle abfragen, wo checks waren, ob tkComment existiert so bearbeitet, dass tkAnsi, tkBor und tkSlash auch mit in der Liste der Möglichkeiten stehen
 
Kompilieren tut das Paket jedenfalls schonmal...
Dateianhänge
synhighlighterpas.pp
Die Datei, an der ich gearbeitet habe.
(139.43 KiB) 125-mal heruntergeladen
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

Ich habe mir übrigens auch schon die "Custom Highlights" angeschaut, allerdings nervt es schon, jeden einzeln und nach jedem Start wieder markieren zu müssen :mrgreen:
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

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: Syntax-Highlighting (Kommentare)

Beitrag von martin_frb »

Ok, ich sehe du hast

Code: Alles auswählen

 fCommentAttri_Slash := TSynHighlighterAttributes.Create(@SYNS_AttrComment, SYNS_XML_AttrComment); //NEW
  fCommentAttri_Slash.Style:= [fsItalic];
  AddAttribute(fCommentAttri_Slash);
Anstelle von

Code: Alles auswählen

 
  case GetTokenID of
    tkAsm: Result := fAsmAttri;
    tkComment: Result := fCommentAttri; //OLD
    tkAnsi: Result:=fCommentAttri_ANSI; //NEW
    tkBor: Result:=fCommentAttri_BOR; //NEW
    tkSlash: Result:=fCommentAttri_Slash; //NEW
 
hätte es auch mit folgendem gehen sollen

Code: Alles auswählen

 
  case GetTokenID of
    tkAsm: Result := fAsmAttri;
    tkComment: begin
      if rsAnsi in fRange then result := fCommentAttri_ANSI
      else
      if rsBor in fRange then result := fCommentAttri_BOR
      else
      if rsSlash in fRange then result := fCommentAttri_Slash
      else
        Result := fCommentAttri; //OLD
   end;
 
range enthält bereits die Info über den Kommentar type

---------------------
Ich habe mir übrigens auch schon die "Custom Highlights" angeschaut, allerdings nervt es schon, jeden einzeln und nach jedem Start wieder markieren zu müssen
Man kann die Wörter vor-definieren. Siehe Bild.
Dateianhänge
2015-04-24 16_25_25-IDE Options.png

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

Okay, ich habe versucht, dass auf diese Art und Weise zu lösen,

allerdings crasht die IDE nach der Installation des Paketes jetzt mit der Meldung "String list does not allow duplicates"

Ich habe das auch nochmal mit einer frischen Installation von lazarus versucht und nur die zusätzlichen objekte im Create hinzugefügt und den case-fall nach deinem Vorbild bearbeitet.

Hast du konkret eine Idee, was ich falsch gemacht habe ?



Hier übrigens schon einmal ein Dankeschön für deine Hilfe :)

Edit1: Ich habe die @s im Create mal aus den neuen Attributen entfernt und jedem einen eigenen String gegeben, was jetzt auch den Fehler behebt. Nun frage ich mich, wie ich die Farben festlege, da Attribut.Back-/Foreground nichts zu ändern scheint

Das ganze sieht im moment so aus:

Code: Alles auswählen

 
  (* OLD *)
  fCommentAttri := TSynHighlighterAttributes.Create(@SYNS_AttrComment, SYNS_XML_AttrComment);
  fCommentAttri.Style:= [fsItalic];
  (* /OLD *)
  (* NEW *)
  fCommentAttri_Ansi := TSynHighlighterAttributes.Create(SYNS_AttrComment+'_Ansi', SYNS_XML_AttrComment+'_Ansi');
  fCommentAttri_Ansi.Background:=$FFCC00; //Orange
  AddAttribute(fCommentAttri_Ansi);
  //--
  fCommentAttri_Bor := TSynHighlighterAttributes.Create(SYNS_AttrComment+'_Bor', SYNS_XML_AttrComment+'_Bor');
  fCommentAttri_Bor.Background:=$000000; //Black
  fCommentAttri_Bor.Foreground:=$FFFFFF; //White
  AddAttribute(fCommentAttri_Bor);
  //--
  fCommentAttri_Slash := TSynHighlighterAttributes.Create(SYNS_AttrComment+'_Slash', SYNS_XML_AttrComment+'_Slash');
  fCommentAttri_Slash.Background:=$AAAAAA; //grey
  fCommentAttri_Slash.Foreground:=$FFCC00; //orange
  AddAttribute(fCommentAttri_Slash);
  (* /NEW *) 
 
 
 
Dabei gilt:
 
 // Dieser Kommentar ist schwarz mit weißem Hintergrund (bei näherer Untersuchung, wird er als StandartText behandelt)
{  Dieser Kommentar ist default }
(* DIeser auch *)
 
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

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: Syntax-Highlighting (Kommentare)

Beitrag von martin_frb »

Moeglich, das du ein Attribute doppelt hinzufuegst?
Oder mit dem gleichen Namen?

Code: Alles auswählen

fCommentAttri_Slash := TSynHighlighterAttributes.Create(
   SYNS_AttrComment+'_Slash', 
   SYNS_XML_AttrComment+'_Slash'
);
Das 2 Argument, muss ein uniquer Name sein.

Ich kann in dem Codesnippet nix finden. (ausser das AddAttributefuer das alte fCommentAttri fehlt).
Vielleicht hast du ein paar Zeilen hoeher oder tiefer, noch eine Kopie von deinem Code?

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: Syntax-Highlighting (Kommentare)

Beitrag von martin_frb »

Gerade mal ein wenig getestet. frange ist nicht in allen Faellen gesetzt. D.h. dann doch die Loesung mit mehreren Token.

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Syntax-Highlighting (Kommentare)

Beitrag von mark332 »

martin_frb hat geschrieben:Gerade mal ein wenig getestet. frange ist nicht in allen Faellen gesetzt. D.h. dann doch die Loesung mit mehreren Token.
Okay, dann werde ich mich mal melden, wenn ich das versucht habe (heute nichtmehr :mrgreen: )

MfG
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Antworten