Lazarus, Delphi oraz cała masa innych środowisk posiadają taką fajną możliwość, że po naciśnięciu na jakiś identyfikator wskazywana jest jego deklaracja/definicja/wtf.
Aktualnie implementuję coś takiego w moim edytorze: działa to na podobnej zasadzie, jak w Lazarusie: kompilator wywoływany jest w trybie skanowania kodu, czyli nie generuje żadnego skompilowanego pliku wyjściowego, a plik "code scan"; ten plik to lista takich rekordów:
Type TReference = Record
IdentName : String;
Line, Char : LongWord;
RefLine, RefChar: LongWord;
RefFile : String;
End;
I ten plik jest wczytywany oraz analizowany przez edytor.
Tyle mam zrobione.
Teraz następuje problem, którego rozwiązania nie mogę odnaleźć:
W jaki sposób wykonać podświetlanie identyfikatorów na takiej zasadzie, jak to jest np.w Delphi czy Lazarusie?
Czyli, że naciskam lewy ctrl, a jeżeli dany identyfikator jest "poprawny" (tj.gdy ten identyfikator na tej-a-tej pozycji karetki został ujęty w pliku "code scan"), to jest on podświetlany, a gdy dodatkowo nacisnę LPM, to przechodzi się do jego definicji (zmieniana jest pozycja karetki + ew.także i wczytywany jest inny plik). Chodzi oczywiście o TSynEdit.
Nie znam fachowej nazwy tego, ale mam nadzieję, że domyślacie się o co może chodzić :P