Syntaxhighlighting für EditorGadget (simpel!) ...

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Didelphodon »

Hi Leutz,

da es immer wieder mal ein Thema ist, habe ich ein paar Codeschnipsel aus dem Forum zusammengekarrt noch ein bissel was dazugehackt und ein Include zur einfachen Verwendung daraus gemacht.
Jetzt sollte es für jeden hier ein leichtes sein, Syntaxhighlighting mit dem EditorGadget zu realisieren.

Download des Includes: http://www.wojner.at/static/downloads/S ... Gadget.pbi

Beispiel der Verwendung für SQL-Queries:

Code: Alles auswählen

IncludeFile "SyntaxhighlightingEditorGadget.pbi"
If OpenWindow(0, 0, 0, 500, 500, "EditorGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
    EditorGadget(#Editor, 10, 10, 480, 480)
    Repeat 
        SyntaxHighlightEditor(#Editor)
        SyntaxHighlightEditor(#Editor, "select,from,where,group by,having,order by", "abcdefghijklmnopqrstuvwxyz", RGB(255,0,0))
        SyntaxHighlightEditor(#Editor, "and,or,not", "abcdefghijklmnopqrstuvwxyz", RGB(0,0,255))
        SyntaxHighlightEditor(#Editor, "<,>,=,(,)", "", RGB(0,0,255))
        ; weitere Keywords und Farben ...
    Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf 
Anmerkung: Zu Beginn einer Keyword-Definitionskette muss immer ein "verkürzter" Aufruf der Highlighting-Prozedur stehen, da wird Init- und Performance-Zeugs gemacht.

Viel Spaß damit!

LG Didel.
Zuletzt geändert von Didelphodon am 25.02.2015 12:17, insgesamt 3-mal geändert.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von STARGÅTE »

Nette Idee, aber du unterschlägst was wichtiges:

das Code Färbt zwar alle Schlüsselwörter richtig, aber auch, wenn sie in anderen Wörtern stecken.
Auch sollte die groß-klein-schreibung keine rolle spiele.
select * from Handel order by Name
Wie du siehst, färbt er leider das or in order by nicht rot (wie es gefordert ist) sonden grün, weils darunter als grün definiert wurde. Außerdem wird der tabellenname Handel gefärbt weil das and drin steckt.

Außerdem spring der Cursor immer ans Ende des Editors, somit kann man nichts mehr zwischendurch ändern.

Ist also zur Zeit nicht verwendbar, bitte änder das noch.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Andesdaf »

hier mal ein Code von edel, der ungefähr das selbe kann:
http://www.purebasic.fr/german/viewtopi ... 55#p132755
(leider auch mit den von STARGATE angesprochenen Mängeln)
Win11 x64 | PB 6.20
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Didelphodon »

Das Springen ans Ende des Editors sollte jetzt behoben sein.
Die anderen Dinge check ich noch.

LG C.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Didelphodon »

Habe jetzt die gewünschte Word-Sensibilität auch noch eingebaut, dafür ist jetzt ein Parameter mehr notwendig: die erlaubten Zeichen inm gegenständlichen Keyword-Typ. (siehe Beispielcode oben - angepasst).
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Didelphodon »

Ich werd demnächst noch ein bisschen dran runschrauben - dann sind Blocks (also Kommentare, Strings, etc.) auch definierbar. Die "schlucken" dann natürlich Keywords bzw. andere Blocks.
Die Syntax der Verwendung wird sich noch ein klein wenig ändern, aber der generelle "simple" Ansatz bleibt erhalten.

LG Didel.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Codusa »

Hi,
Also ich finds schonmal Super, dass du das gemacht hast und ich habs auch gleich mal benutzt^^

Könntest du auch optional einbauen, dass der Leerzeichen ignoriert?
Ich baue grad einen kleinen html-Editor und da möchte ich ungern einmal <html> und einmal <html foo=""> und <html foo="" bar=""> usw. eingeben...
Was man bräuchte wäre also ein Platzhalter oder so etwas?

Danke!
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Josh »

ich will dir ja nicht lust und laune nehmen. aber die performance ist eine katastrophe. ein code von 30-50k ist nichts besonderes, aber arbeiten kannst du dann mit deinem system nicht mehr. wenn ich dann noch berücksichtige, dass du ja erst einen bruchteil der codewörter drinnen hast, dann wird jeder tipper auf die tastatur zu einer zigarettenpause.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von edel »

GetGadgetItemText ist dort wirklich der absolute Overkill. Es wuerde viel mehr Sinn machen den ganzen Text aufeinmal einzulesen und dann zu parsen. Ausserdem sollte man auch auf Events aufbauen und nicht bei jedem Pups den Text durchsuchen.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Syntaxhighlighting für EditorGadget (simpel!) ...

Beitrag von Josh »

ich hab mich mal mit dem scintilla gadget gespielt um einen code von ca. 50k mit 100 codewörtern durchzustylen. hier mal die schritte, die am meisten performancegewinn gebracht haben.
  • erster versuch quick and dirty, mit zeilenweise auslesen und schreiben in scintilla: 5200 ms
  • auslesen und schreiben nach scintilla in nur einem durchgang: 3800ms
  • vergleiche auf CompareMemoryString umgestellt: 200ms (zweihundert)
und da gäbe es immer noch möglichkeiten, ein bischen rumzuschrauben. komplett durchgestylt wird der text eigentlich nur, wenn man mit copy und paste den text einfügt. sonst wird ja immer nur der angezeigte bereich gestylt und das kannst auch bei jedem pubs machen, ohne dass du davon was merkst.
Antworten