Mac OS X Co vše se dá přidat do textu... Posledně jsme se seznámili s řadou služeb, které nabízí standardní textový editor systému Mac OS X, TextEdit. Zbylo nám však několik vlastností, jež stojí za zmínku a na něž nám minule nezbylo místo; podíváme se na ně proto podrobněji dnes. Asi hlavní a nejzajímavější z nich je vkládání objektů do textu. Vkládání objektů TextEdit umožňuje do dokumentů vkládat libovolné objekty. Nejběžnějším případem samozřejmě budou obrázky, které se automaticky zobrazují korektně bez ohledu na použitý formát - stejně dobře můžeme použít standardní TIFF, GIF, JPEG nebo proprietární formáty, jako PICT nebo BMP. Jak je to možné? Celkem snadno: Mac OS X totiž podporuje velmi obecnou službu tzv. grafických filtrů. Jakákoli aplikace může zveřejnit svou schopnost převádět vzájemně různé grafické formáty. Systémová podpora je taková, že kterákoli další aplikace bude moci bez nejmenších obtíží a zcela automaticky tyto služby využívat. TextEdit díky tomu "rozumí" jakémukoli grafickému formátu, který podporuje libovolná další nainstalovaná aplikace. Práce s obrázky je jednoduchá - požadovaný obrázek prostě myší vhodíme do okna TextEditu. Stejně dobře můžeme použít služby copy/paste. Třetí alternativou je využití systému služeb (Services): chceme-li například do textového dokumentu vložit snímek obrazovky, prostě v menu TextEditu vybereme příkaz Services/Grab/Selection, myší zvolíme požadovaný výřez obrazovky - a je to. Výsledek vypadá podobně jako obsah obr. 1. Jak je vidět, TextEdit se v zásadě nestará o obtékání obrázku písmem; tak daleko jeho služby nesahají. Chceme-li však, můžeme toto omezení za cenu určitého nepohodlí alespoň částečně obejít využitím ostatních formátovacích služeb - formátování odstavce a fixní výšky řádku (obr. 2). Na TextEditu však je nejzajímavější to, že do dokumentů můžeme vkládat i jiné objekty: soubory, složky a dokonce i celé disky. Podívejte se na textové okno v pozadí na obr. 3 (k obsahu okna v popředí se hned vrátíme), v němž je postupně shora dolů obrázek kytičky, tři soubory, jedna složka a dva disky. Obsah dokumentu totiž do jisté míry funguje stejně jako jakákoli složka: libovolný objekt tam můžeme vhodit, a objekt se do dokumentu zkopíruje. Pro složky (nebo disky) nám navíc TextEdit dá na vybranou, chceme-li je opravdu zkopírovat, nebo vytvořit zástupce. Tuto službu se, mimochodem, firmě Apple podařilo také trochu poničit - původní TextEdit umožňoval zkopírovat nebo vytvořit zástupce libovolného objektu (včetně obyčejných souborů), prostě na základě (ne)přidržení patřičného přepínače: fungovalo to přesně stejně jako při práci se soubory ve Workspace Manageru... Zpět k současnému TextEditu: i přes všechny změny nejen vkládání, ale i další práce s vloženými objekty odpovídá dosti slušně službám oken Finderu. Dokument však musíme nejprve uložit na disk (pokud bychom na to zapomněli, následující služby by prostě nefungovaly): - poklepáním kterýkoli vložený objekt otevřeme stejně, jako kdybychom na něj poklepali ve Finderu; - vhozením do okna Finderu můžeme vytvořit zástupce (bohužel jde o finderovský "alias" namísto standardního linku). Objekty můžeme z oken TextEditu vhazovat i do oken ostatních aplikací; pokud vhazování objektů podporují, bude vše pracovat korektně. Za zvláštní zmínku stojí i formát dokumentu s vloženými objekty: je totiž geniálně jednoduchý a lze jej pohodlně zpracovávat i přímo (nejde tedy o proprietární řešení, jakým je např. nechvalně známý MS Word). Mac OS X tento formát naštěstí převzal beze změny z NeXTStepu. Jde o tzv. "package" - takový dokument je ve skutečnosti vlastně složka, jež obsahuje všechny vložené objekty jako docela standardní soubory (nebo zástupce), a navíc soubor TXT.rtf, v němž je uložen textový obsah dokumentu (opět ve standardním formátu RTF) včetně odkazů na vložené objekty. Obsah této složky (částečný) vidíme na obr. 3 v okně na popředí. Povšimněte si, že pro objekty, jež samy nejsou obrázky (např. složka Gigaset), obsahuje dokument také stejně pojmenované ikony, které je v jeho okně reprezentují. Toho můžeme snadno využít pro změnu grafické reprezentace objektů: pokud například obsah souboru Gigaset.tiff nahradíme obsahem souboru qq.tiff (který reprezentuje obrázek "kytičky"), bude okno vypadat tak, jak ukazuje obr. 4. Přitom i nadále vše funguje stejně dobře - například poklepáním na novou kytičku stále otevíráme složku Gigaset. Jen se zamyslete nad možnostmi, které to dává pro tvorbu multimediálních dokumentů! Práce se soubory Před chvilkou jsem se zmínil o tom, že TextEdit naštěstí nemá vlastní, s nikým a s ničím jiným nekompatibilní souborový formát. Namísto toho používá ten nejstandardnější standard pro formátované texty - RTF. Díky tomu lze texty z TextEditu snadno zpracovávat kdekoli jinde, a naopak TextEdit otevře bez obtíží dokument z jakéhokoli jiného editoru, který podporuje standardy (tento přístup je ostatně pro NeXTStep typický: připomeňme třeba, že jeho standardním obrázkovým formátem je TIFF). Kromě formátu RTF umí TextEdit načítat i zapisovat soubory v obyčejném textovém formátu a načítat (nikoli zapisovat) dokáže i data ve formátu HTML a v applovském zastaralém proprietárním formátu SimpleText. Žádný problém není ani s kódováním českých znaků. Celý operační systém Mac OS X (patrně s výjimkou některých služeb nešťastného Carbonu) totiž sám vnitřně využívá kódování Unicode, takže není žádným způsobem omezen na anglickou (nebo jinou) abecedu: kromě češtiny bez obtíží podporuje třeba i japonštinu nebo řečtinu. V Unicode jsou texty kódovány vnitřně. Jsou v něm zapisovány RTF soubory TextEditu (formát RTF samozřejmě Unicode podporuje, viz tag \U), v Unicode jsou ukládány cizojazyčné znaky ve standardním HTML editoru a samozřejmě Unicode využívají i služby API Cocoa pro práci se soubory. U obyčejného textového formátu se ovšem nezřídka stává, že soubor, který chceme načíst z disku, přišel z nějakého zastaralého prostředí, a proto je uložen v nějakém osmibitovém kódování. Nezřídka také chceme v některém z osmibitových kódování ukládat na disk soubory vytvořené v Mac OS X (např. proto, že komunikujeme s někým, kdo používá třeba MS Windows, a proto nedokáže Unicode korektně zpracovat). Ani to není problém: standardní API Cocoa nabízí služby pro vzájemné převody nejrůznějších kódování, a každá korektně naprogramovaná nativní aplikace - a takovou aplikací TextEdit je - těchto služeb dokáže bez obtíží využít. Podívejte se na obr. 5, na němž je panel pro otevření souboru s otevřenou nabídkou osmibitových kódování, podle nichž může být otevíraný textový soubor interpretován. Volba Automatic automaticky použije Unicode, pokud je v něm dokument uložen (kódování Unicode je možné snadno poznat), nebo standardní systémové osmibitové kódování, pokud je dokument uložen osmibitově. Přesně stejná nabídka (vyjma volby Automatic) je samozřejmě k dispozici i při ukládání souboru na disk. Tentokrát ale TextEdit může omezit výběr kódování: nabídne nám totiž jen ta kódování, v nichž je možné uložit daný dokument. Jestliže tedy máme například v textu české znaky, nebude možné jej uložit v kódování Latin1. (TextEdit umí seznam osmibitových kódování omezit, aby pop-up nabídka nebyla zbytečně velká. Jestliže proto nemůžete některé z kódování ve svém TextEditu najít, podívejte se dovnitř do aplikace: v její složce Contents/Resources jsou soubory DefaultEncodings.plist a MoreEncodings.plist. Ty můžete použít jako vzory pro vytvoření vlastního souboru Encodings.plist, obsahujícího právě ta kódování, která chcete v nabídce mít.) Services O systému služeb (Services) jsem se už dnes zběžně zmínil. Tento systém sice není specialitou TextEditu, ale zcela obecnou aplikační službou Mac OS X; v rámci popisu TextEditu však je ideální chvíle na to podrobně si jej vysvětlit. Především, ačkoli systém služeb může pracovat nad libovolnými daty, daleko nejčastěji se využívá právě nad textem a grafikou - tj. nad dvěma formáty, s nimiž umí TextEdit velmi dobře pracovat. Kromě toho jsme se předtím věnovali aplikaci Finder a v rámci jejího popisu nemělo smysl se systému služeb věnovat. Finder totiž, jak víme, není napsán v API Cocoa, ale v nešťastném Carbonu; jedním z tristních důsledků tohoto faktu je to, že v něm Services nefungují (mimochodem, existují nezaručené zprávy, že ve verzi OS X 10.1, jež bude k dispozici na podzim, bude tento problém odstraněn). Příště si proto služby podrobně popíšeme. Ondřej Čada