Avatar
Lukas C#
Redaktor
Avatar
Lukas C#:

Ahojte, potřeboval bych poradit princip / návrh, pokud chci implementovat zabarvování syntaxe (klíčových slov a dalších), dále nějaké ty drobnosti typu "napíšu složenou závorku, připíše to druhou, a pokud stisknu Enter, pěkně se to odsadí a přesune se kursor", a taky ještě jak byste implementovali intelisense jako ve VS. Je nato nějaký dobrá návrh, nebo se to dá "zbastlit jen tak od boku"? Nevím moc jak začít.

 
Odpovědět 20.5.2016 16:54
Avatar
VitekST
Člen
Avatar
VitekST:

Zkusil bych si upravit RichTextBox, je na to spousta článků.
Třeba jeden zde: http://www.codeproject.com/…-RichTextBox

Jinak, mrkni na "FastColoredTex­tBox", ten pomocí regexů už kód zabarvuje přímo (ukládá si text ve formě tokenů = třída se znakem, pozicí, a barvou, co jsem tak pochytil)

Editováno 20.5.2016 20:56
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 20.5.2016 20:55
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na VitekST
Lukas C#:

Díky ti. Zrovna na tvojem webu jsem našel tvoje vlastní IDE a chtěl jsem taky umět zbastlit něco podobného :-)
Jinak ještě se barví zelenou třídy, struktury atd. To máš jak pořešené? Já bych si udělal List, a do něho vytáhl ze všech referencovaných knihoven reflexí, a potom tam přidával to, co vyrobíš v tom konkrétním projektu samotném, ale je to dobrý nápad?

 
Nahoru Odpovědět 21.5.2016 10:13
Avatar
VitekST
Člen
Avatar
Odpovídá na Lukas C#
VitekST:

No problem, m8. :)

Právě ten můj SandboxSharp je založen na FastColoredTextBox, jen jsem k němu pochytil pár regexů.
To, že to zabarvuje třídy je jenom díky tomu regexu, není za tím žádná reflexe.

Kdybych to ale já měl zabarvovat na základě metadat vytáhlých z knihoven, udělal bych to opačným směrem, zkoumal bych regexem možné názvy, které by mohly být zabarveny, a v případě existence toho názvu bych ho zabarvil.

Protože teď si představ, jak ten tebou zmíněný List bude obrovský, když tam napráskáš názvy všeho, co existuje.

Editováno 21.5.2016 10:20
 
Nahoru Odpovědět 21.5.2016 10:18
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na VitekST
Lukas C#:

No právě List by byl obrovský, ale jak v tom případě funguje Intellisense ? Ve VS siskneš Crl + Space, a vyletí nabídka snad úplně všeho, tak odkud to tahá?

 
Nahoru Odpovědět 21.5.2016 10:43
Avatar
VitekST
Člen
Avatar
Odpovídá na Lukas C#
VitekST:

Tak... Nějaký seznam to určitě bude, ale bude určitě optimalizovanější než seznam klasický.
Ne, jinak.

O reflexi napsaného kódu a knihoven se ve VSku stará knihovna Microsoft CTP ("Roslyn"), která si nějaká ta metadata vybuduje, ale ten seznam není přístupný přímo, je přístupný pomocí metody.

Ta kolekce těch metadat je sice velká, ale určitě je optimalizovaná.

Ale ve chvíli, když ty vytáhneš seznam všech přístupných členů, musíš ho někam uložit, tudíž alokuješ další místo v paměti.

Je tedy lepší se ptát na existenci nějakého člena, než procházet obří seznam.

 
Nahoru Odpovědět 21.5.2016 10:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.