Обработка шрифта

Эта глава объясняет, как текстовая система Какао имеет дело со шрифтами. Это объясняет, как использовать панель Font в Вашем приложении, как работать непосредственно с объектами шрифта, и как работать с менеджером по шрифту.

Панель шрифта

Панель Font, также названная окном Fonts, является объектом пользовательского интерфейса, выводящим на экран список доступных семейств шрифтов и стилей, позволяя пользователю предварительно просмотреть их и измениться, шрифт раньше выводил на экран текст. Текстовые объекты, такой как NSTextView, работа с NSFontPanel и NSFontManager объекты реализовать систему преобразования шрифта AppKit. По умолчанию текстовый объект сохраняет панель Font обновленной с первым шрифтом в его выборе, или с его атрибутами ввода. Это также изменяет шрифт, в котором это выводит на экран текст в ответ на сообщения от панели Font и меню Font. Такие изменения применяются к выделенному тексту или вводящим атрибутам для объекта обогащенного текста или ко всему тексту в объекте простого текста.

NSFontManager концентратор для преобразования шрифта — т.е. изменяя черты объекта шрифта, такие как его размер или гарнитура. Менеджер по шрифту получает сообщения от панели Font и отправляет сообщениям цепочку респондента для действия с текстовыми объектами.

Обычно, панель Font приложения выводит на экран все стандартные шрифты, доступные в системе. Если это не подходяще для Вашего приложения — например, если только шрифты фиксированной подачи должны использоваться — можно присвоить делегата в NSFontPanel возразите для фильтрации доступных шрифтов. Перед NSFontPanel объект добавляет определенное семейство шрифтов или поверхность к ее списку, NSFontPanel объект просит, чтобы его делегат подтвердил дополнение путем отправки делегату a fontManager:willIncludeFont: сообщение. Если возвращается делегат TRUE (или не реализует этот метод), шрифт добавляется. Если возвращается делегат FALSE, шрифт не добавляется. Этот метод должен быть вызван перед загрузкой основного файла пера.

Создание панели шрифта

В целом Вы добавляете средства панели Font к Вашему приложению, вместе с NSFontManager возразите и меню Font, через которое пользователь открывает панель Font, с помощью Интерфейсного Разработчика. Вы делаете это путем перетаскивания меню Font или Format (который содержит подменю Font) в одно из меню приложения. Во время выполнения объект панели Font создается и сцепляется в систему преобразования шрифта. Можно также создать (или доступ) панель Font с помощью sharedFontPanel метод класса.

Можно добавить пользовательский объект представления к NSFontPanel объектное использование setAccessoryView:, разрешение Вам добавить пользовательские элементы управления к панели Font. Можно также ограничить выведенные на экран шрифты (по умолчанию, все шрифты выведены на экран) путем присвоения делегата в менеджере по шрифту приложения объект.

Если Вы хотите NSFontManager объект инстанцировать панели Font от некоторого класса кроме NSFontPanel, используйте NSFontManager метод класса setFontPanelFactory:. Посмотрите Шрифты Преобразования Вручную для получения дополнительной информации об использовании системы преобразования шрифта.

Используя панель шрифта

Можно включить взаимодействие между текстовым объектом и панелью Font с помощью NSTextView (или NSText) метод setUsesFontPanel: метод. Выполнение так рекомендуется для текстового представления, служащего полевым редактором, например.

Можно использовать панель Font на объектах кроме стандартных текстовых полей. NSFontManager метод setAction: устанавливает действие (указанный селектором), который повышен первая цепочка респондента, когда выбран новый шрифт. Селектор по умолчанию changeFont:. Любой объект, получающий это сообщение от цепочки респондента, должен отправить a convertFont: обменивайтесь сообщениями назад к NSFontManager для преобразования шрифта способом, пользователь указал.

Этот пример предполагает, что существует только один выбранный шрифт:

– (void)changeFont:(id)sender
{
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
    return;
}

Если многократные шрифты выбраны, changeFont: должен отправить сообщения преобразования за каждым выбранным шрифтом. Это полезно для объектов, таких как табличные представления, по сути не реагирующие на сообщения от панели Font.

Работа с объектами шрифта

Компьютерный шрифт является файлом данных в формате, таком как OpenType или TrueType, содержа информацию, описывающую ряд глифов, как описано в Символах и Глифах и различной дополнительной информации, используемой в рендеринге глифа. NSFont класс обеспечивает интерфейс для получения и установки информации о шрифтах. NSFont экземпляр обеспечивает доступ к характеристикам и глифам шрифта. Текстовая система комбинирует символьную информацию с информацией о шрифтах для выбора глифов, используемых во время текстового расположения. Вы используете объекты шрифта путем передачи их методам, принимающим их в качестве параметра. Объекты шрифта являются неизменными, таким образом, безопасно использовать их от многократных потоков в Вашем приложении.

Вы не создаете объекты шрифта с помощью alloc и init методы; вместо этого, Вы используете методы такой как fontWithName:matrix: или fontWithName:size: искать доступный шрифт и изменить его размер или матрицу к Вашим потребностям. Если существует тот, эти методы проверяют на существующий объект шрифта с заданными характеристиками, возвращая его. Иначе, они ищут данные шрифта, которые требуют, и создают надлежащий объект. Можно также использовать дескрипторы шрифта для создания шрифтов. Посмотрите Дескрипторы Шрифта.

NSFont также определяет много методов для указания стандартных системных шрифтов, такой как systemFontOfSize:, userFontOfSize:, и messageFontOfSize:. Запрашивать размер по умолчанию на эти стандартные шрифты, передачу 0 или отрицательное число как размер шрифта. Стандартные методы системного шрифта перечислены в Запросах Изменений Стандартного шрифта.

Дескрипторы шрифта

Дескрипторы шрифта, которые инстанцируют от NSFontDescriptor класс, обеспечьте способ описать шрифт со словарем атрибутов. Дескриптор шрифта может тогда использоваться, чтобы создать или изменить NSFont объект. В частности можно сделать NSFont объект от дескриптора шрифта, можно получить дескриптор от NSFont объект, и можно изменить дескриптор и использовать его для создания нового объекта шрифта. Можно также использовать дескриптор шрифта для указания пользовательских шрифтов, предоставленных приложением.

Дескрипторы шрифта обеспечивают возможность подстановки шрифтов, которой можно частично описать шрифт путем создания дескриптора шрифта с, например, просто фамилия. Можно тогда найти все доступные шрифты в системе с соответствующим использованием фамилии matchingFontDescriptorsWithMandatoryKeys:.

Дескрипторы шрифта могут быть заархивированы, который предпочтителен для архивации объекта шрифта, потому что объект шрифта является неизменным и обеспечивает доступ к определенному шрифту, установленному в определенной системе. Дескриптор шрифта, с другой стороны, описывает шрифт с точки зрения своих характеристик, своих атрибутов, и обеспечивает доступ во время выполнения к шрифтам, в настоящее время доступным, которые соответствуют те атрибуты.

Т.е. можно использовать дескрипторы шрифта для запросов системы для доступных шрифтов, соответствующих определенные атрибуты, и затем создающих экземпляры NSFont соответствуя те атрибуты, такие как имена, черты, языки и другие функции. Например, можно использовать дескриптор шрифта для получения всех шрифтов, соответствующих данное имя семейства шрифтов, с помощью фамилий PostScript (как определено стандартом CSS) как показано в Перечислении 6-1.

  Соответствие имени Семейства шрифтов перечисления 6-1

NSFontDescriptor *helveticaNeueFamily =
    [NSFontDescriptor fontDescriptorWithFontAttributes:
        @{ NSFontFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches =
    [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];

matchingFontDescriptorsWithMandatoryKeys: метод как показано возвращает массив дескрипторов шрифта для всех шрифтов Helvetica Neue в системе, такой как HelveticaNeue, HelveticaNeue-Medium, HelveticaNeue-Light, HelveticaNeue-Thin, и т.д. (Семейство шрифтов PostScript и имена семейства шрифтов для шрифтов, доступных на данной установке OS X, выведены на экран приложением Книги Шрифта в окне Font Info.)

Запросы метрик шрифта

NSFont когда та информация доступна, определяет много методов для доступа к данным метрик шрифта. Методы такой как boundingRectForGlyph:, boundingRectForFont, xHeight, и т.д. все соответствуют данным метрик стандартного шрифта. Рисунок 6-1 показывает, как метрики шрифта применяются к размерностям глифа, и Таблица 6-1 перечисляет имена методов, коррелирующие с метриками. См. различные описания метода для более определенной информации.

  Метрики шрифта рисунка 6-1
Font metricsFont metrics
Табличные 6-1  Метрики шрифта и связанный NSFont методы

Метрика шрифта

Методы

Продвижение

advancementForGlyph:, maximumAdvancement

X-высота

xHeight

Подъем

надстрочный элемент

Ограничительный прямоугольник

boundingRectForFont, boundingRectForGlyph:

Высота прописной буквы

capHeight

Высота строки

defaultLineHeightForFont, pointSize, labelFontSize, smallSystemFontSize, systemFontSize, systemFontSizeForControlSize:

Спуск

подстрочный элемент

Курсивный угол

italicAngle

Запросы изменений стандартного шрифта

Используя методы NSFont перечисленный в Таблице 6-2, можно запросить все изменения стандартного шрифта. Для запроса размера стандартного шрифта на стандартные шрифты можно или явно передать в размерах по умолчанию (полученный из методов класса такой как systemFontSize и labelFontSize), или передача в 0 или отрицательная величина.

Табличные 6-2  методы Стандартного шрифта

Шрифт

Методы

Системный шрифт

[NSFont systemFontOfSize:[NSFont systemFontSize]]

Подчеркнутый системный шрифт

[NSFont boldSystemFontOfSize:[NSFont systemFontSize]]

Маленький системный шрифт

[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]

Подчеркнутый маленький системный шрифт

[NSFont boldSystemFontOfSize:[NSFont smallSystemFontSize]]

Мини-системный шрифт

[NSFont systemFontSizeForControlSize: NSMiniControlSize]

Подчеркнутый мини-системный шрифт

[NSFont boldSystemFontOfSize:[NSFont systemFontSizeForControlSize: NSMiniControlSize]]

Шрифт приложения

[NSFont userFontOfSize:-1.0]

Шрифт фиксированной подачи приложения

[NSFont userFixedPitchFontOfSize:-1.0]

Шрифт метки

[NSFont labelFontOfSize:[NSFont labelFontSize]]

Символы, глифы и менеджер по расположению

Символы являются концептуальными объектами, соответствующими модулям письменного языка. Обычно глиф является конкретным, представленным изображением символа. (Типографские Понятия представляют более детальное обсуждение символов и глифов.)

На английском языке часто существует непосредственное отображение между символами и глифами, но это не всегда имеет место. Например, глиф «Ф» может быть результатом двух символов, одно представление основного символа «o» и другое представление диакритического знака умляута «•». Пользователь текстового процессора может нажать клавишу со стрелкой одно время для перемещения точки вставки с одной стороны «Ф» глифа к другому; однако, текущая позиция в символьном потоке должна быть постепенно увеличена два для учета двух символов, составляющих единственный глиф.

Таким образом текстовая система должна управлять двумя связанными, но различными потоками данных: поток символов (и их атрибуты) и поток глифов, полученных из этих символов. NSTextStorage объектно-ориентированные памяти приписанные символы, и NSLayoutManager объектно-ориентированные памяти полученные глифы. Нахождение корреспонденции между этими двумя потоками является ответственностью менеджера по расположению. Например, когда пользователь выбирает диапазон текста, работающего с глифами, выведенными на экран на экране, менеджер по расположению должен определить, какой диапазон символов соответствует выбору.

Когда символы удалены, некоторые глифы, вероятно, придется перерисовать. Например, если пользователь удаляет символы «исключая ошибки» из слова «чувство», то «f» и «l» теперь смежны и могут быть представлены «fl» лигатурой, а не этими двумя глифами «f» и «l». NSLayoutManager объект направляет объект генератора глифа для генерации новых глифов по мере необходимости. Как только глифы регенерированы, текст должен быть размечен и выведен на экран. Работа с NSTextContainer возразите и другие объекты текстовой системы, менеджер по расположению определяет, где каждый глиф появляется в текстовом представлении. Наконец, текстовое представление представляет текст.

Поскольку NSLayoutManager объект является центральным к работе текстовой системы, это также служит репозиторием информации, поделившейся различными компонентами системы. Для получения дополнительной информации о NSLayoutManager, обратитесь к Ссылке класса NSLayoutManager и к текстовому Руководству по программированию Расположения.

Получение координат представления глифа

Расположения глифа изображаются относительно источника ограничительного прямоугольника фрагмента строки, в котором они размечаются. Для получения прямоугольника фрагмента строки глифа в его контейнерных координатах используйте NSLayoutManager метод lineFragmentRectForGlyphAtIndex:effectiveRange:. Тогда добавьте источник того прямоугольника к расположению глифа, возвращенного locationForGlyphAtIndex: получить расположение глифа в контейнерных координатах.

Следующий фрагмент кода из проекта примера кода CircleView иллюстрирует этот метод.

usedRect = [layoutManager usedRectForTextContainer:textContainer];
NSRect lineFragmentRect = [layoutManager lineFragmentRectForGlyphAtIndex:glyphIndex
                            effectiveRange:NULL];
NSPoint viewLocation, layoutLocation = [layoutManager
                            locationForGlyphAtIndex:glyphIndex];
// Here layoutLocation is the location (in container coordinates) where the glyph was laid out.
layoutLocation.x += lineFragmentRect.origin.x;
layoutLocation.y += lineFragmentRect.origin.y;

Работа с менеджером по шрифту

Любой объект, записывающий шрифты, которые может изменить пользователь, должен сказать менеджеру по шрифту, что - шрифт его выбора то, каждый раз, когда это становится первым респондентом и каждый раз, когда его выбор изменяется, в то время как это - первый респондент. Объект делает так путем отправки совместно используемому менеджеру по шрифту a setSelectedFont:isMultiple: сообщение. Это должно передать в первом шрифте выбора, вместе с флагом, указывающим, существует ли больше чем один шрифт.

Менеджер по шрифту использует эту информацию для обновления панели Font и меню Font для отражения шрифта в выборе. Например, предположите, что шрифт является Helvetica Наклонные 12,0 точек. В этом случае панель Font выбирает тот шрифт и выводит на экран его имя; меню Font добавляет галочку перед своей командой Italic; если нет никакого Полужирного варианта доступного Helvetica, пункт меню Bold отключен; и т.д.

Создание менеджера по шрифту

Вы обычно устанавливаете менеджера по шрифту и Разработчика Интерфейса использования меню Font. Однако можно также сделать так программно путем получения совместно используемого менеджера по шрифту, экземпляр и наличие его создают меню стандартного шрифта во время выполнения, как в этом примере:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
NSMenu *fontMenu = [fontManager fontMenu:YES];

Можно тогда добавить меню Font к меню приложения. Как только меню Font установлено, Ваше приложение автоматически получает функциональность и меню Font и панели Font.

Обработка изменений шрифта

Пользователь обычно изменяет шрифт выбора путем управления панелью Font (также названный окном Fonts) и меню Font. Эти объекты инициируют намеченное изменение путем отправки сообщения действия менеджеру по шрифту. Существует четыре изменяющих шрифт метода действия:

Первые три заставляют менеджера по шрифту запрашивать отправителя сообщения для определения, какую черту добавить или удалить, или как изменить шрифт. Последние причины менеджер по шрифту для использования настроек в панели Font для изменения шрифта. Менеджер по шрифту записывает эту информацию и использует ее в более поздних запросах для преобразования шрифтов.

Когда менеджер по шрифту получает addFontTrait: или removeFontTrait: сообщение, это запрашивает отправителя с a tag сообщение, интерпретируя возвращаемое значение как маску черты для использования с convertFont:toHaveTrait: или convertFont:toNotHaveTrait:, как описано в Преобразовании Шрифтов Вручную. Курсив команд меню Font и Полужирный, например, имеет значения маски черты NSItalicFontMask и NSBoldFontMask, соответственно. Посмотрите раздел Constants в Ссылке класса NSFontManager для списка значений маски черты.

Когда менеджер по шрифту получает a modifyFont: сообщение, это запрашивает отправителя с a tag обменивайтесь сообщениями и интерпретирует возвращаемое значение как определенный вид преобразования для выполнения, через различные методы преобразования, описанные в Преобразовании Шрифтов Вручную. Например, кнопка, значение тега которой SizeUpFontAction вызывает менеджера по шрифту convertFont: метод для увеличения размера NSFont объект передал как параметр. Посмотрите NSFontManager метод modifyFont: поскольку список преобразования тегирует значения.

Для modifyFontViaPanel:, менеджер по шрифту отправляет панель a Font приложения panelConvertFont: сообщение. Панель Font поочередно использует менеджера по шрифту для преобразования шрифта, предоставленного согласно выбору пользователя. Например, если пользователь выбирает только семейство шрифтов в панели Font (возможно, Helvetica), для то для любых шрифтов предоставлены panelConvertFont:, только семья изменяется: Носитель Курьера 10,0 точек становятся Носителем Helvetica 10,0 точек и Курсив Времен 12,0 точек, становится Helvetica Наклонные 12,0 точек.

Менеджер по шрифту реагирует на изменяющий шрифт метод действия путем отправки a changeFont: сообщение действия цепочка респондента. Переносящий текст объект, получающий это сообщение, должен сделать, чтобы менеджер по шрифту преобразовал шрифты в его выборе путем вызова convertFont: для каждого шрифта и использования NSFont объект возвратился. convertFont: метод использует информацию, зарегистрированную изменяющим шрифт методом действия, такой как addFontTrait:, изменение шрифта обеспечило соответственно. (Нет никакого способа явно установить изменяющее шрифт действие или черту; вместо этого, Вы используете методы, описанные в Преобразовании Шрифтов Вручную.)

Этот простой пример предполагает, что в выборе существует только один шрифт:

- (void)changeFont:(id)sender
{
    NSFont *oldFont = [self selectionFont];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setSelectionFont:newFont];
    return;
}

Большинство переносящих текст объектов должно отсканировать выбор для диапазонов с различными шрифтами и вызвать convertFont: для каждого.

Преобразование шрифтов вручную

NSFontManager определяет много методов для того, чтобы явно преобразовать определенные черты и характеристики шрифта. Таблица 6-3 перечисляет эти методы преобразования.

Табличные 6-3  методы преобразования Шрифта

Методы

Поведение

convertFont:toFace:

Изменяет базовую конструкцию предоставленного шрифта. Требует полностью указанного имени гарнитуры, такого как «римлянин времен» или «Helvetica-BoldOblique».

convertFont:toFamily:

Изменяет базовую конструкцию предоставленного шрифта. Требует только фамилии, такой как «Времена» или «Helvetica».

convertFont:toHaveTrait:

Использует маску черты для добавления единственной черты, такой как Курсив, Полужирный, Сжатый, или Расширенный.

convertFont:toNotHaveTrait:

Использует маску черты для удаления единственной черты, такой как Курсив, Полужирный, Сжатый, или Расширенный.

convertFont:toSize:

Возвращает шрифт требуемого размера, со всеми другими характеристиками то же как те из исходного шрифта.

convertWeight:ofFont:

Или увеличения или уменьшения вес шрифта, если, согласно булеву флагу. Толщины шрифта обычно обозначаются серией имен, которые могут варьироваться от шрифта до шрифта. В то время как у других есть Книга, SemiBold, Полужирный, и Черный, некоторые идут от Света до Носителя к Полужирному. Этот метод предлагает универсальный способ постепенно увеличить и постепенно уменьшить вес любого шрифта.

Каждый метод возвращает преобразованную версию шрифта, если, или исходный шрифт, если это не может быть преобразовано.

Реализация по умолчанию преобразования шрифта очень консервативна, внося изменение, только если не затронуты никакая другая черта или аспект. Например, при попытке преобразовать Helvetica Наклонные 12,0 точек путем добавления Полужирной черты, и только Полужирный Helvetica доступен, шрифт не преобразовывается. Можно создать подкласс NSFontManager и переопределите методы преобразования для выполнения менее консервативного преобразования, возможно с помощью Helvetica, Полужирного в этом случае и теряя Наклонную черту.

В дополнение к методам преобразования шрифта, NSFontManager определяет fontWithFamily:traits:weight:size: создать шрифт с данным набором характеристик. Если Вы не хотите сделать подкласс NSFontManager, можно использовать этот метод для выполнения приблизительных преобразований шрифта сами.

Установка стилей шрифтов и черт

Этот раздел показывает, как программно установить стили шрифтов, такие столь же полужирные или курсивные, и атрибуты шрифта, такие как подчеркивание, в приписанной строке.

Подчеркивание является атрибутом, который может быть легко установлен на приписанной строке, с помощью NSUnderlineStyleAttributeName постоянный, как объяснено в Ссылке класса NSMutableAttributedString. Используйте следующий метод:

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange

Передача NSUnderlineStyleAttributeName для параметра имени со значением [NSNumber numberWithInt:1].

В отличие от подчеркивания, полужирного и курсивного, черты шрифта, таким образом, необходимо использовать менеджера по шрифту экземпляр для преобразования шрифта для имения желаемой черты, затем добавьте атрибут шрифта к непостоянной приписанной строке. Для непостоянной приписанной названной строки attributedString, используйте следующий метод:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
unsigned idx = range.location;
NSRange fontRange;
NSFont *font;
 
while (NSLocationInRange(idx, range)){
    font = [attributedString attribute:NSFontAttributeName atIndex:idx
                            longestEffectiveRange:&fontRange inRange:range];
    fontRange = NSIntersectionRange(fontRange, range);
    [attributedString applyFontTraits:NSBoldFontMask range:fontRange];
    idx = NSMaxRange(fontRange);
}

Если Ваша непостоянная приписанная строка фактически NSTextStorage объект, поместите этот код между beginEditing и endEditing вызовы.

Исследование шрифтов

В дополнение к преобразованию шрифтов, NSFontManager предоставляет информацию, на которой шрифты доступны приложению и на характеристиках любого данного шрифта. availableFonts метод возвращает массив имен всех доступных шрифтов. availableFontNamesWithTraits: метод фильтрует доступные шрифты на основе маски черты шрифта.

Существует три метода для исследования отдельных шрифтов. fontNamed:hasTraits: возвраты метода true если шрифт соответствует предоставленную маску черты. traitsOfFont: метод возвращает маску черты для данного шрифта. weightOfFont: метод возвращает приблизительное ранжирование веса шрифта в масштабе 0–15, где 0 самый легкий вес, 5 Нормальное или Книжное начертание, 9 эквивалент Полужирного цвета, и 15 является самым тяжелым (часто называемый Черным или Крайним Черным цветом).

Настройка системы преобразования шрифта

Если необходимо настроить систему преобразования шрифта путем создания подклассов NSFontManager или NSFontPanel, необходимо сообщить NSFontManager класс этого изменения с a setFontManagerFactory: или setFontPanelFactory: сообщение, или перед совместно используемый менеджер по шрифту или перед совместно использованная панель Font создаются. Эти методы записывают Ваш класс как тот для инстанцирования в первый раз, когда менеджера по шрифту или панель Font требуют. Можно быть в состоянии избегать использования подклассов, если все, в чем Вы нуждаетесь, должно добавить некоторые пользовательские элементы управления к панели Font. В этом случае можно вызвать NSFontPanel метод setAccessoryView: добавить NSView объект ниже его браузера шрифта.

При обеспечении собственного меню Font необходимо зарегистрировать его в менеджере по шрифту, использующем setFontMenu: метод. Менеджер по шрифту ответственен за проверку пунктов меню Font и изменение их заголовков и тегов согласно выбранному шрифту. Например, когда выбранный шрифт является Курсивом, менеджер по шрифту добавляет галочку к пункту меню Italic Font и изменяет его тег на UnitalicMask. Ваши элементы меню Font должны использовать методы соответствующих мер и теги, как показано в Таблице 6-4.

  Действия пункта меню Table 6-4 Font и теги

Пункт меню Font

Действие

Тег

Курсив

addFontTrait:

ItalicMask

Полужирный

addFontTrait:

BoldMask

Более тяжелый

modifyFont:

HeavierFontAction

Больше

modifyFont:

SizeUpFontAction

См. также следующие документы: Приписанное Строковое Руководство по программированию описывает NSAttributedString объекты, управляющие наборами атрибутов, такими как шрифт и кернинг, связанные с символьными строками или отдельными символами. Текстовое Руководство по программированию Расположения описывает, как текстовая система Какао преобразовывает строки текстовых символов, информации о шрифтах и спецификаций страницы в строки глифов, помещенных в определенные расположения на странице, подходящей для дисплея и печати.