Přehled tříd AppKitu 4: textový systém - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Přehled tříd AppKitu 4: textový systém

27. října 2005, 00.00 | Vzhledem k tomu, že minule jsme dokončili pomocné třídy grafického uživatelského rozhraní až po NSToolbarItem včetně, nyní je čas podívat se na služby textového subsystému.

Ani ve čtvrtém pokračování přehledného seznamu tříd, s nimiž se v knihovně aplikačních služeb AppKit setkáme, se neodchýlíme od postupu "shora dolů" v přehledném obrázku, na který se opět můžete podívat zde:

nebo si jej – máte-li samozřejmě v počítači instalováno vývojové prostředí Xcode a programátorskou dokumentaci – můžete najít v plném rozlišení v rámci úvodního článku popisu AppKitu. Vzhledem k tomu, že minule jsme dokončili pomocné třídy grafického uživatelského rozhraní až po NSToolbarItem včetně, nyní je čas podívat se na služby textového subsystému.

Základní struktura

Textový systém, kterým disponuje AppKit, je poměrně velmi bohatý a flexibilní – a tedy také notně složitý. Jeho standardní služby nabízejí vše, co může uživatel vidět prostřednictvím TextEditu – kerning, slitky, atributy textu i odstavců, zalamování... a ještě mnohem více, včetně předlouhé řady služeb, o nichž se než TextEditu ani nezdá. Mezi možnosti AppKitu patří např. obecné oblasti se vzájemným přetékáním textu (tedy zalamování obrázků včetně nepravoúhlých, sazba do sloupců a podobně).

Tomu také odpovídá značné množství poměrně komplikovaných tříd – tak kupříkladu NSGlyph* se starají o vazbu mezi znaky a glyfy ("znak" je abstraktní vyjádření nějakého písmene, kdežto "glyf" je konkrétní obrázek, který je representuje), a tak dále. S těmito třídami se ovšem za normálních okolností – nepíšeme-li zrovna vlastní Quark – nesetkáme; proto si je ani do hloubky nebudeme popisovat.

Základní struktura – pomineme-li "speciality" – je ale poměrně jednoduchá: vlastní text je samozřejmě uložen jako NSString, a jeho atributy a dodatečná nastavení a způsob, jakým se k němu přistupuje, určuje v textovém subsystému třída NSTextStorage (velmi důležité jsou služby, které tato třída dědí od své nadtřídy NSAttributedString, viz příští odstavec). Grafická struktura, do které je text zalomen, je representována instancí třídy NSLayoutManager. To celé zastřešuje třída NSTextView. Zjednodušená struktura textového systému – ale postačující pro naprostou většinu běžných úloh – tedy vypadá přibližně nějak takto:

NSTextView
    NSLayoutManager

    NSTextStorage
        NSString

Konkrétní třídy

Nejdůležitější třídy, representující text a textové služby v Cocoa, jsou následující:

  • NSString – tu již známe, její instance odpovídají textovým řetězcům, a samozřejmě tedy i text, který zpracováváme v rámci textového systému, je cílově representován právě instancí třídy NSString. Jeho možnosti obohacuje třída
  • NS(Mutable)AttributedString: ta nad string doplňuje obecné atributy, které se mohou týkat libovolné skupiny znaků. Chceme-li využívat služby této třídy, je zapotřebí si dát pozor na to, že jsou rozděleny do dvou skupin: již Foundation Kit obsahuje obecnou podporu pro práci s textovými řetězci a jejich atributy; AppKit pak doplňuje využití konkrétních atributů, kterých využívá textový subsystém Cocoa;
  • podtřídou je NSTextStorage; ten již slouží přímo jako representace kompletního textu v rámci textového subsystému. Chceme-li v textovém editoru s textem dělat cokoli (pro co nejsou přímo k dispozici "pohodlné" služby na úrovni NSText a NSTextView, viz níže), vystačíme si obvykle právě se službami tříd NSTextStorage, NSAttributedString a případně, pro nejzákladnější věci – NSString;
  • s třídou NSLayoutManager a s řadou jejích spolupracujících tříd (z nichž se zde zmíníme pouze o třídě NSTextContainer, jejíž instance representují konkrétní zobrazované oblasti) jen málokdy potřebujeme pracovat přímo; nastane to tehdy, když chceme implementovat např. sloupcovou sazbu;
  • třídy NS(Mutable)ParagraphStyle, NSTextAttachment, NSTextBlock a její podtřídy, NSTextList, NSTextTab slouží pro representaci různých textových služeb a atributů – tabulek, seznamů, vložených objektů a podobně;
  • konečně, daleko nejčastěji pracujeme s třídami NSTextView a NSText. V zásadě lze říci, že jde o třídu jedinou – rozdělení jejích služeb mezi třídy NSText a NSTextView je dáno především historicky, a nemá v praxi moc rozumný smysl. Třída NSTextView representuje obecný a dosti bohatý textový editor; sama je "view" (a tedy také "responder"), ale hlavně – sama automaticky vytvoří strukturu všech potřebných podtříd.

Práce s písmy

Ačkoli třídy, sloužící pro práci s písmy, nejsou přímo součástí textového systému, ale mají širší působnost, vyplatí se zběžně se o nich zmínit hned dnes. Je to jednoduché: základem je třída NSFont; její instance representují konkrétní písma, a sama nabízí služby pro jejich vyhledání. Náročnější úkoly – např. vzájemné převody mezi různými písmy – pak zajišťují služby třídy NSFontManager. Konečně NSFontDescriptor pak slouží k obecnému popisu písma prostřednictvím jeho požadovaných atributů (tím se tedy liší od NSFontu, jenž je konkrétním písmem).

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: