Текстовые атрибуты

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

Эта глава обеспечивает краткое введение в различные типы текстовых атрибутов с перекрестными ссылками на более подробную документацию.

Символьные атрибуты

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

Два атрибута специального символа принадлежат ссылкам и присоединениям. Атрибут ссылки указывает на URL (инкапсулировавший в NSURL объект) или любой другой объект по Вашему выбору. Присоединяемый атрибут связан со специальным присоединяемым символом и указывает на NSFileWrapper объект, содержащий прикрепленный файл или данные в памяти.

Предопределенный символьный атрибут NSCharacterShapeAttributeName позволяет Вам установить значение для символьной функции формы, использованной в рендеринге шрифта Apple Type Services. Эта функция в настоящее время используется для указания традиционных форм в китайских и японских сценариях, но разработчики шрифта могли использовать ее для других сценариев также.

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

Хранение символьных атрибутов

Приписанная строка хранит символьные атрибуты как пары ключ/значение в NSDictionary объекты. Ключ является названием атрибута, представленным идентификатором ( NSString постоянный) такой как NSFontAttributeName. Рисунок 5-1 показывает, что приписанная строка со словарем атрибута применилась к диапазону в строке.

Рисунок 5-1  состав объекта NSAttributedString включая его словарь атрибутов
Composition of an NSAttributedString including its attributes dictionary

Концептуально, каждый символ в приписанной строке имеет связанный словарь атрибутов. Как правило, однако, словарь атрибута применяется к более длинному диапазону символов. NSAttributedString класс обеспечивает методы, берущие индекс символа и возвращающие связанный словарь атрибута и диапазон, к которому применяются его значения атрибута. Посмотрите Атрибуты Доступа для получения дополнительной информации об использовании этих методов.

В дополнение к предопределенным атрибутам можно присвоить любую пару ключ/значение атрибута, которой Вы желаете к диапазону символов. Вы добавляете атрибуты к надлежащему диапазону символов в NSTextStorage объект с помощью NSMutableAttributedString метод addAttribute:value:range:. Можно также создать NSDictionary объект, содержащий имена и значения ряда пользовательских атрибутов и, добавляет их к диапазону символов на единственном шаге с помощью addAttributes:range: метод. Для использования пользовательских атрибутов Вам нужен пользовательский подкласс NSLayoutManager это понимает, что сделать с ними. Ваш подкласс должен переопределить drawGlyphsForGlyphRange:atPoint: метод сначала для вызова суперкласса для рисования диапазона глифа затем нарисуйте собственные атрибуты на вершине или иначе нарисуйте глифы полностью собственный путь.

Фиксация атрибута

Редактирование приписанных строк может вызвать несоответствия, которые должны быть очищены фиксацией атрибута. Расширения AppKit NSMutableAttributedString определить fix... методы для фиксации несоответствий среди присоединения, шрифта и атрибутов абзацев. Эти методы гарантируют, чтобы присоединения не оставались после того, как их присоединяемые символы удалены, что атрибуты шрифта применяются только к символам, доступным в том шрифте и этом, атрибуты абзацев являются непротиворечивыми всюду по абзацам.

Дополнительную информацию см. в Приписанном Строковом Руководстве по программированию о фиксации атрибута и символьных атрибутах.

Временные атрибуты

Временные атрибуты являются символьными атрибутами, которые не сохранены приписанной строкой. Скорее менеджер по расположению присваивает временные атрибуты во время процесса создания макета и использует их только при рисовании текста. Например, можно использовать временные атрибуты, чтобы подчеркнуть слова с ошибками или окрасить ключевые слова в языке программирования.

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

Для получения дополнительной информации о временных атрибутах посмотрите Ссылку класса NSLayoutManager.

Атрибуты абзацев

Атрибуты абзацев влияют на способ, которым менеджер по расположению располагает строки текста в абзацы на странице. Текстовая система инкапсулирует атрибуты абзацев в объектах NSParagraphStyle класс. Значение одного из предопределенных символьных атрибутов, NSParagraphStyleAttributeName, точки к NSParagraphStyle объект, содержащий атрибуты абзацев для того диапазона символов. Фиксация атрибута гарантирует это только один NSParagraphStyle объект принадлежит символам всюду по каждому абзацу.

Атрибуты абзацев включают черты, такие как выравнивание, позиции табуляции, повреждающий строку режим и межстрочный интервал (также известный как ведущий). Пользователи текстовых приложений управляют атрибутами абзацев посредством представлений линейки, определенных NSRulerView класс.

Дополнительную информацию см. в Темах Программирования Линейки и Стиля абзаца об атрибутах абзацев.

Атрибуты глифа

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

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

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

Для получения дополнительной информации об атрибутах глифа, см. описание setIntAttribute:value:forGlyphAtIndex: метод в Ссылке класса NSLayoutManager.

Атрибуты документа

Атрибуты документа принадлежат документу в целом. Атрибуты документа включают черты, такие как формат бумаги, поля, и просматривают процент изменения масштаба. Несмотря на то, что текстовая система не имеет никакого встроенного механизма для хранения атрибутов документа, методы инициализации такой как initWithRTF:documentAttributes: может заполнить NSDictionary возразите, что Вы обеспечиваете атрибутами документа, полученными из потока данных HTML или RTF. С другой стороны, методы, пишущие данные RTF, такой как RTFFromRange:documentAttributes:, запишите атрибуты документа при передаче ссылки на NSDictionary объект, содержащий их с сообщением.

См. Файлы RTF и Приписанную Строковую и дополнительную NSAttributedString AppKit Ссылку для получения дополнительной информации.