Seite 1 von 2
Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 14:59
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.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 15:23
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.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 16:32
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)
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 16:50
von Didelphodon
Das Springen ans Ende des Editors sollte jetzt behoben sein.
Die anderen Dinge check ich noch.
LG C.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 17:19
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).
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 06.10.2009 21:21
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.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 29.10.2009 19:04
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!
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 29.10.2009 20:33
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.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 29.10.2009 22:15
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.
Re: Syntaxhighlighting für EditorGadget (simpel!) ...
Verfasst: 30.10.2009 12:34
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.