wywala 2 błędy które w tłumaczeniu znaczą "krytyczny błąd kompilatora"
Podałbyś dokładnie treść błędów.
Krytyczny błąd kompilatora oznacza błąd kompilatora. Zainstaluj aktualizacje, a zwłaszcza Service Packa do Visual Studio.
Sam String
raczej kolorów nie przechowuje. Robi się to w RichTextBox, najpierw zaznaczasz tekst (SelectionStart
, SelectionEnd
) a potem ustawiasz SelectionColor
.
Dam ci też wskazówkę, jak koloryzuje tekst samo Visual Studio, bo ostatnio napisałem kolorowanie Pascala jako plugin do VS.
Kolorowanie jest w pamięci. Jak to jest potem dokładnie rysowane — nie wiem, edytora nie ruszałem.
Ale „koloryzator” nie przebiega za każdym naciśnięciem klawisza na nowo po całym pliku, tylko pojedynczo liniami, tak że edycja danej linii powoduje tylko kolorowanie (i odrysowanie) bieżącej linii.
To jednak wymaga znajomości kontekstu, bo może jesteśmy w środku wielolinijkowego komentarza – i koloryzować w zasadzie nie ma co. Dlatego Visual zapamiętuje jaki jest stan parsera między wierszami — także kolorowanie może być wznowione od dowolnej linijki (wcześniej nic się nie zmieniło) i po tej jednej linijce zatrzymane, jeśli wiadomo że nie ma wpływu na resztę.
Przykładowo, mamy taki plik:
/* ala ma kota
ala ma psa
ala ma kanarka */
x++;
wstępnie jest koloryzowany w całości, i zapamiętywane stany między wierszami:
początek pliku /* ala ma kota
wewnątrz komentarza ala ma psa</code><i> wewnątrz komentarza</i>
ala ma kanarka */<i> poza komentarzem</i><code> x++;
poza komentarzem
koniec pliku
Teraz gdy coś piszemy:
początek pliku /* ala ma kota
wewnątrz komentarza ala ma psa TUTAJ COŚ PISZEMY_
wewnątrz komentarza ala ma kanarka */</code><i> poza komentarzem</i><code> x++;
poza komentarzem
koniec pliku
odświeżany jest tylko środkowy wiersz, w którym piszemy — bo wiadomo że jesteśmy wewnątrz komentarza, i dalej też jest komentarz: nic poza bieżącą linią nie trzeba analizować.
ale gdy zakończymy komentarz:
początek pliku /* ala ma kota
wewnątrz komentarza ala ma psa TUTAJ COŚ PISZEMY */
poza komentarzem ala ma kanarka */</code><i> poza komentarzem</i><code> x++;
poza komentarzem
koniec pliku
zmienia się stan pod koniec linii 2: dlatego trzeba odświeżyć też linię 3, która przestaje być komentarzem (a zaczyna być błędem, ale koloryzator musi błędy ignorować). Linii 4 już nie trzeba uaktualniać, bo stan parsera między liniami 3 a 4 się nie zmienił.