О текстовых атрибутах
Текстовая система Какао обрабатывает пять видов текстовых атрибутов: символьные атрибуты, временные атрибуты, атрибуты абзацев, атрибуты глифа и атрибуты документа. Символьные атрибуты включают черты, такие как шрифт, цвет и нижний индекс, который может быть связан с отдельным символом или диапазоном символов. Временные атрибуты являются символьными атрибутами, которые применяются только к определенному расположению и не являются персистентными. Атрибуты абзацев являются чертами, такими как добавление отступа, вкладки и межстрочный интервал. Атрибуты глифа влияют на способ, которым менеджер по расположению представляет глифы, и включайте черты, такие как сверхнанесение удара предыдущего глифа. Атрибуты документа включают черты всего документа, такие как формат бумаги, поля, и просматривают процент изменения масштаба.
Символьные атрибуты
Текстовые системные символьные атрибуты хранилищ постоянно в приписанном следуют за символами, к которым они применяются. Предопределенные символьные атрибуты системы текста управляют появлением символов (шрифт, основной цвет, цвет фона и обработка лигатуры) и их размещение (верхний индекс, базовое смещение и кернинг).
Два атрибута специального символа принадлежат ссылкам и присоединениям. Атрибут ссылки указывает на URL (инкапсулировавший в объекте NSURL) или любом другом объекте по Вашему выбору. Присоединяемый атрибут связан со специальным присоединяемым символом и точками к объекту NSFileWrapper, содержащему прикрепленный файл или данные в памяти.
Два из предопределенных символьных атрибутов, NSCharacterShapeAttributeName
и NSGlyphInfoAttributeName
, редко используются, но описываются здесь для полноты. NSCharacterShapeAttributeName
позволяет Вам установить значение для символьной функции формы, использованной в рендеринге шрифта Apple Type Services. Эта функция в настоящее время используется для указания традиционных форм в китайских и японских сценариях, но разработчики шрифта могли использовать ее для других сценариев также.
В версии 10.2 OS X и позже, предопределенный символьный атрибут NSGlyphInfoAttributeName
точки к объекту NSGlyphInfo, обеспечивающему средние значения, чтобы переопределить стандартный процесс генерации глифа и заменить указанным глифом по диапазону атрибута.
Хранение символьных атрибутов
Приписанная строка хранит символьные атрибуты как пары ключ/значение в объектах NSDictionary. Ключ является названием атрибута, представленным идентификатором (константа NSString) такой как NSFontAttributeName
. Рисунок 1 показывает, что приписанная строка со словарем атрибута применилась к диапазону в строке.
Концептуально, каждый символ в приписанной строке имеет связанный словарь атрибутов. Как правило, однако, словарь атрибута применяется к более длинному диапазону символов. Класс NSAttributedString обеспечивает методы, берущие индекс символа и возвращающие связанный словарь атрибута и диапазон, к которому применяются его значения атрибута. Посмотрите Атрибуты Доступа для получения дополнительной информации об использовании этих методов.
В дополнение к предопределенным атрибутам можно присвоить любую пару ключ/значение атрибута, которой Вы желаете к диапазону символов. Вы добавляете атрибуты к надлежащему диапазону символов в объекте NSTextStorage использование NSMutableAttributedStringaddAttribute:value:range:
метод. Можно также создать NSDictionary, содержащий имена и значения ряда пользовательских атрибутов, и добавить их к диапазону символов на единственном шаге с помощью addAttributes:range:
метод. Для использования пользовательских атрибутов Вам нужен пользовательский подкласс NSLayoutManager, понимающего, что сделать с ними. Ваш подкласс должен переопределить drawGlyphsForGlyphRange:atPoint:
метод сначала для вызова суперкласса для рисования диапазона глифа затем нарисуйте собственные атрибуты на вершине или иначе нарисуйте глифы полностью собственный путь.
Фиксация атрибута
Редактирование приписанных строк может вызвать несоответствия, которые должны быть очищены фиксацией атрибута. Расширения Набора Приложения NSMutableAttributedString определяют fix...
методы для фиксации несоответствий среди присоединения, шрифта и атрибутов абзацев. Эти методы гарантируют, чтобы присоединения не оставались после того, как их присоединяемые символы удалены, что атрибуты шрифта применяются только к символам, доступным в том шрифте и этом, атрибуты абзацев являются непротиворечивыми всюду по абзацам.
Дополнительную информацию см. в Приписанном Строковом Руководстве по программированию о фиксации атрибута и символьных атрибутах.
Временные атрибуты
Временные атрибуты являются символьными атрибутами, которые не сохранены приписанной строкой. Скорее менеджер по расположению присваивает временные атрибуты во время процесса создания макета и использует их только при рисовании текста. Например, можно использовать временные атрибуты, чтобы подчеркнуть слова с ошибками или окрасить ключевые слова в языке программирования.
Временные атрибуты влияют только на появление текста, не путь, которым это размечается. Вы храните временные атрибуты в NSDictionary использование тех же ключей как регулярные символьные атрибуты или использование имен пользовательского атрибута (если Вы сделали, чтобы NSLayoutManager разделил на подклассы, который может обработать их). Тогда Вы добавляете атрибуты с помощью метода NSLayoutManager такой как addTemporaryAttributes:forCharacterRange:
. По умолчанию единственные временные распознанные атрибуты являются теми, которые влияют на цвет и подчеркивания. Во время расположения временные атрибуты заменяют регулярные символьные атрибуты. Так, например, если символ имеет сохраненное NSForegroundColorAttributeName
значение, указывающее синий и временный атрибут того же идентификатора, указывающего красный, тогда символ, представляется в красном.
Для получения дополнительной информации о временных атрибутах см. справочную документацию NSLayoutManager.
Атрибуты абзацев
Атрибуты абзацев влияют на способ, которым менеджер по расположению располагает строки текста в абзацы на странице. Текстовая система инкапсулирует атрибуты абзацев в объектах класса NSParagraphStyle. Значение одного из предопределенных символьных атрибутов, NSParagraphStyleAttributeName
, точки к объекту NSParagraphStyle, содержащему атрибуты абзацев для того диапазона символов. Фиксация атрибута гарантирует, что только один объект NSParagraphStyle принадлежит символам всюду по каждому абзацу.
Атрибуты абзацев включают черты, такие как выравнивание, позиции табуляции, повреждающий строку режим и межстрочный интервал (также известный как ведущий). Пользователи текстовых приложений управляют атрибутами абзацев посредством представлений линейки, определенных классом NSRulerView.
Дополнительную информацию см. в Темах Программирования Линейки и Стиля абзаца об атрибутах абзацев.
Атрибуты глифа
Глифы являются конкретными представлениями символов, что текстовая система фактически привлекает дисплей. Атрибуты глифа не являются сложными структурами данных как символьные атрибуты, но являются просто целочисленными значениями что менеджер по расположению использование для обозначения специальной обработки для определенных глифов во время рендеринга.
Текстовая система редко использует атрибуты глифа, и приложения должны иметь мало причины, которая будет касаться их. Тем не менее, NSLayoutManager обеспечивает открытые методы, обрабатывающие атрибуты глифа, таким образом, можно использовать подклассы для расширения механизма для обработки пользовательских атрибутов глифа при необходимости.
Генераторные установки глифа встроенный глиф приписывают как требуется на глифах во время набора. Они сохраняются в кэше глифа менеджера по расположению во время того процесса, но они постоянно не сохранены. Двумя примерами атрибутов глифа является эластичный атрибут для пробелов, используемых для разметки полностью выровненного текста и атрибута NSGlyphAttributeInscribe
, когда шрифт не включает встроенный символ с умляутом, который используется для ситуаций, таких как рисование умляута по символу.
Для получения дополнительной информации об атрибутах глифа, см., что справочная документация NSLayoutManager описывает setIntAttribute:value:forGlyphAtIndex:
метод.
Атрибуты документа
Атрибуты документа принадлежат документу в целом. Атрибуты документа включают черты, такие как формат бумаги, поля, и просматривают процент изменения масштаба. Несмотря на то, что текстовая система не имеет никакого встроенного механизма для хранения атрибутов документа, методы инициализации такой как initWithRTF:documentAttributes:
может заполнить объект NSDictionary, что Вы обеспечиваете атрибутами документа, полученными из потока данных HTML или RTF. С другой стороны, методы, пишущие данные RTF, такой как RTFFromRange:documentAttributes:
, запишите атрибуты документа при передаче ссылки на объект NSDictionary, содержащий их с сообщением.
См. Файлы RTF и Приписанные Строки и Дополнительную справочную документацию NSAttributedString для получения дополнительной информации.