NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 17 - Tvoříme vlastní Syntax Highlighter pomocí RichTextBox v C#

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
jackm18
Tvůrce
Avatar
jackm18:24.9.2012 23:14

Super :)

 
Odpovědět
24.9.2012 23:14
Avatar
Neaktivní uživatel:21.10.2012 14:44

Hezký ;)
Ale když tam dáš něco delšího tak se to seká :(

Odpovědět
21.10.2012 14:44
Neaktivní uživatelský účet
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:21.10.2012 15:08

To je nejprimitivnější způsob jak si udělat vlastní Syntax Highlighter. Já ho chtěl použít za účelem, že jednou ten text zformátuje a konec.
V praxi při tvorbě Syntax Highlighteru by se měl udělat lexikální rozbor, aby ten program věděl, kde zrovna se nachází a uměl podle toho reagovat. Nebo tak nějak mi to Kit vysvětloval.
Oni jsou i nějaké projekty, na Syntax Highlighter. Jsem zkoušel myslím tento: http://scintillanet.codeplex.com/
Ale také není nejrychlejší a to je o dost složitější.

Odpovědět
21.10.2012 15:08
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Jančík
Kit:21.10.2012 15:41

Pokud se to dělá "opravdově", tak se text smí procházet pouze 1×. Bere se slovo za slovem (resp. token za tokenem) a hledá se v kontextovém slovníku. Kontextovém proto, že třeba slovo "public" má jiný význam jako klíčové slovo a jiný jako řetězec. Kontext se dá sledovat pomocí zásobníkového automatu.

Primitivní "hajlajtr" si však vystačí i s jednoduchým slovníkem. Schválně píši slovník, ne seznam. Slovo bude klíčem, barva hodnotou. Načtu slovo (resp. token) ze vstupu, nechám vyhledat ve slovníku, obarvím a vypíšu. Pokud slovo ve slovníku nenajdu, použiji implicitní barvu.

Výhodou tohoto postupu je, že program nezabírá zbytečně paměť ani když vstupní soubor bude mít desítky GB. V paměti je jen slovník, který není velký. Samozřejmě i rychlost je někde úplně jinde.

Odpovědět
21.10.2012 15:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:21.10.2012 15:52

Však zde je také použit slovník... Spíše mi vrtá hlavou - jak může text projít jen jedou - když budu psát? Druhá věc je ten kontext - to nechápu, jak se rozliší název proměnné od typu (atp.)...

 
Odpovědět
21.10.2012 15:52
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:21.10.2012 16:07

Jenže tady se slovník používá (nebo spíš zneužívá) jako obyčejný seznam tuples. Místo aby se slovo hledalo ve slovníku, tak se slovo ze slovníku hledá v textu a to je mnohem náročnější.

Proměnnou od typu rozliší syntaktickou analýzou. Ta se dělá pomocí stavového automatu, který si může budovat slovník proměnných a typů. V objektovém jazyku bude výhodnější využití rekurze, ta nám zajistí i jejich kvalitní likvidaci po opuštění bloku.

Syntaktickou analýzu teď neřešíme. V tuto chvíli se zabýváme jen lexikální, která je podstatně jednodušší.

Odpovědět
21.10.2012 16:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Svoboda
Člen
Avatar
Jan Svoboda:24.1.2024 9:28

Ahoj,
v článku se píše: "Přidáme sem veřejnou statickou metodu HighlightText(), která vrací string a jejím parametrem je string text." Dle tohoto tvrzení by člověk odvodil, že deklarace metody je:

public static string HighlightText(string text) {}

Pokud to ovšem chápu správně, tak metoda ve skutečnosti žádný string nevrací, pouze vyhledá slovo v textu a obarví ho. Rovněž v kódu této metody není uveden žádný return, tudíž nemá návratovou hodnotu. Deklarace by tedy měla být:

public static void HighlightText(string text) {}

Tvrzení, že metoda vrací string je tedy chybné.

 
Odpovědět
24.1.2024 9:28
Avatar
Jan Svoboda
Člen
Avatar
Odpovídá na Jan Svoboda
Jan Svoboda:24.1.2024 10:08

Opravuji své tvrzení. Metoda HighlightText() skutečně musí vracet string. Pouze tedy v článku chybí příkaz

return rtb.Rtf;

na konci této metody

 
Odpovědět
24.1.2024 10:08
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 8 zpráv z 8.