Bundles v Intype
Projektu Intype sa venujem už rok. Za tú dobu sa stal reálnym produktom, aj keď je stále vo fáze vývoja. Čo nové Intype prináša? Čo sú to bundles, snippets, scopes?
Intype je editor zdrojových kódov. Cieľom Intype je byť univerzálny – nezávislý na jazyku. Z toho vychádza aj množina vlastností, ktoré sú implementované v hlavnej aplikácii. Tá nebude nikdy obsahovať vlastnosti ako automatické uzatváranie HTML tagov, alebo náhľad v prehliadači. O tieto vlastnosti sa bude starať modul rozšírení.
V súčastnosti je možné Intype rozširovať pomocou bundles (balíčkov). Časom pribudné možnosť napísať si vlastný natívny plug-in, alebo skriptovať pomocou JavaScriptu. Ale pekne po poriadku…
Bundles (balíčky)
Bundle je balíček jazykov, snippetov, nastavení a príkazov. V súčasnosti sú balíčky organizované podľa jazykov pre ktoré prinášajú rozšírenia. Toto ale nie je povinné. Osobne mám napríklad balíček MyBundle.itBundle v ktorom mám vlastné snippety ako pre HTML, tak Ruby a tak aj JavaScript. Balíčky sú iba organizačnou záležitosťou a Intype ich nijak nezohľadňuje. Dôležité pre funkčnosť sú práve tzv. scopes o ktorých píšem nižšie.
Bundles sú dvojakého typu:
- Zabudované, ktoré dostanete spoločne s inštaláciou Intype
- Užívateľské, ktoré si definujete sami.
Rozdiel medzi nimi je ten, že zabudované balíčky by nemali byť menené užívateľom. Môžu byť ale preťažené pomocou užívateľských balíčkov. Ak teda máte snippet HTML.itBundle > snippets > img.itSnippet v zabudovaných balíčkoch, tak vytvorením snippetu s rovnakou cestou a menom ho preťažíte, ergo Intype ignoruje zabudovaný snippet a nahrá váš uživateľský.
V súčasnosti sú implementované iba zabudované balíčky. Podpora pre preťažovanie pomocou užívateľských pribudne v ďalších verziách.
Podpora jazykov a scopes
Intype implementuje pokročilé zvýrazňovanie syntaxe. Parser využíva externé itGrammar súbory, ktoré pomocou regulárnych výrazov definujú spôsob akým sa text spracováva. Text je rozparsovaný do stromu, ktorý je podobný XML. Napríklad:
<img src="image.jpeg" />
je v Intype rozparsovaný do takéhoto stromu:
tags obsahom ”<”tag.names obsahom ”img”texts obsahom ”” (medzera)attributeattribute.names obsahom ”src”symbols obsahom ”=”string.quoted.doubles obsahom ”"image.jpeg"”
Špeciálne mená ako tag.name sú definované gramatikou a majú svoju vlastnú konvenciu. V aplikácii sa nazývajú scopes.
Na takýto strom potom môžete aplikovať selektory podobné CSS (tzv. scope selectors), napríklad: tag string.quoted.double, ktorý vyberie string s dvojitými úvodzovkami v tagu. S takýmito možnosťami je potom možné:
- Priraďovať jednotlivým kúskom kódu vizuálne štýly. Tieto štýly sú definované v súboroch
itTheme. Tým sa robí zvýrazňovanie syntaxe. - Určovať akciám (príkazom, snippetom) kde sú aktívne a kde nie. Môžete teda vytvoriť snippet so skratkou
Ctrl-Shift-Cktorý v HTML vloží komentár ako<!-- ... -->, ale v JavaScripte/* ... */.
Snippety
Snippety sú asi najviditeľnejším prínosom Intype. V súčasnosti sú implementované s rovnakou syntaxou ako používa editor TextMate. Snippet je kúsok textu v ktorom môžete:
- Definovať viac editovateľných regiónov
- Kopírovať v reálnom čase jeden región do druhého
- Transformovať obsah jedného regiónu
Snippety sú definované v súboroch itSnippet. Snippet pre vloženie obrázku vyzerá nasledovne:
/* file: img.itSnippet */
{
title: "Image Tag"
tab_trigger: "img"
scope: "text.html"
content: '<img src="$1" alt="$2"${3: title="$2"} />'
}
Atribút title určuje meno snippetu, ktoré sa zobrazuje užívateľovi. Meno súboru sa používa ako interný identifikátor a využíva sa na preťažovanie v užívateľskom balíčku. Interne je každý snippet identifkovaný ako <bundle>.snippet.<snippet_name>, v tomto prípade HTML.snippet.img
Atribút tab_trigger je spôsob akým sa snippet aktivuje. Pre aktiváciu snippetov sa používajú v súčasnosti buď klávesové skratky (atribút key_equivalent), alebo tab triggery. Metóda aktivácie pomocou tab triggeru je relatívne nová, prvý krát masívne použitá v plugine Visual Assist pre Microsoft Visual Studio. Funguje to tak, že v editore napíšete text tab triggeru a stlačíte klávesu TAB. V tomto prípade ”img[TAB]”.
Atribút scope je scope selector (viď vyššie), určuje kde v rozparsovanom strome je snippet aktívny. V tomto prípade bude snippet aktívny ak sa kurzorom nachádzate v HTML kóde.
Atribút content definuje už samotný snippet. Špeciálne značky $? definujú editovateľné regióny. Po vložení snippetu sa kurzor umiestni na značku s najnižším číslom (väčším ako nula; nula má špeciálny význam).
Pomocou kláves TAB a Shift-TAB postupne prechádzate z regiónu na región. Ak už nie je žiadny ďalší región, kurzor sa umiestni buď na značku $0, ak je definovaná, alebo za snippet, ak $0 definovaná nie je.
Dve značky s rovnakým číslom sa prepoja a obsah prvej sa automaticky kopíruje do druhej. V tomto prípade sa obsah alt atribútu kopíruje do title atribútu ako píšete. Počas kopírovania je ešte možné text transformovať, ale o tom inokedy.
3 Komentáre
Snippets = efektívnosť a produktivita. Intype ich predvádza v plnej kráse. Dúfam, že to dlhé čakanie na novú verziu, ktoré Intype sprevádza čoskoro skončí.
Hej, planujeme kopu novych veci, potrebujeme sa prekopnut cez ranny alpha stav (ako kodu, tak aplikacie), aby sme ostranili par menezerskych problemov s opravami chyb, testovanim a rychlostou release. Budem o tom pisat v samostatnom clanku.
adsfadf