Наборные устройства
Использование менеджера по расположению объект помощника вызвало наборное устройство для разметки глифов во фрагментах строки. Объекты наборного устройства инстанцируют от конкретного подкласса NSTypesetter
.
Работая с другими объектами в текстовой системе Какао, наборное устройство создает прямоугольники фрагмента строки, глифы мест во фрагментах строки, определяет разрывы строки переходом на новую строку и расстановкой переносов, и обрабатывает расположение вкладки. Наборное устройство также определяет интервал шпона, расстояние между абзацами и справа налево расположение двунаправленных глифов.
Заполнение прямоугольников фрагмента строки
Объект наборного устройства генерирует фрагменты строки путем передачи с текстовым контейнером, как описано в Генерации Фрагмента Строки. Наборное устройство определяет подходящие размеры фрагмента строки и позиции, которые оно возвращает в контейнерных координатах.
После создания прямоугольника фрагмента строки наборное устройство определяет позиции глифов в нем, в ответ на layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:nextGlyphIndex:
сообщение от менеджера по расположению. Наборное устройство сообщает о расположениях глифа относительно источника их ограничительного прямоугольника фрагмента строки. Наборное устройство заполняет фрагмент строки, пока это не идет вне ширины фрагмента строки. Тогда это создает разрыв строки обтекающим текстом или записью через дефис последнего слова. На этом шаге наборное устройство выполняет замену глифа, при необходимости, и может добавить глифы к потоку глифа. Например, наборное устройство может заменить глифом лигатуры один или несколько односимвольных глифов, или оно может добавить дефис к потоку глифа.
NSTypesetter
подклассы могут управлять строкой, повреждающейся на границах слова путем переопределения shouldBreakLineByWordBeforeCharacterAtIndex:
метод. Точно так же подклассы могут вмешаться в строку, повреждающуюся расстановкой переносов путем переопределения shouldBreakLineByHyphenatingBeforeCharacterAtIndex:
метод.
Каждый раз, когда ширина положенной строки, разделенной на ширину прямоугольника строки, превышает порог расстановки переносов, сохраняемый менеджером по расположению, наборное устройство вызывает внутренний объект hyphenator, пытающийся найти дефисные точки в последнем слове в строке. Если hyphenator находит достоинство, наборное устройство вставляет глиф дефиса в конце прямоугольника фрагмента строки.
Расстановкой переносов управляет порог, названный фактором расстановки переносов, сохраняющимся менеджером по расположению. Можно установить порог с помощью NSLayoutManager
метод setHyphenationFactor:
. фактором расстановки переносов является плавание, располагающееся между 0,0 и 1.0. По умолчанию ее значение 0.0, означая, что расстановка переносов выключена. Установка фактора расстановки переносов к 1,0 причинам наборное устройство для попытки расстановки переносов всегда.
Способы поведения наборного устройства и версии
Текстовая система использует совместно используемый, повторно используемый экземпляр наборного устройства, сделанный доступный NSLayoutManager
метод typesetter
. NSLayoutManager
метод setTypesetterBehavior:
выбирает среди исходного наборного устройства по умолчанию, поставленного с OS X до версии 10.2, инкапсуляция наборного устройства Apple Type Services (ATS), поставившая с версией 10.2 OS X, расширенной версией основанного на ATS наборного устройства, поставившего с версией 10.3 OS X., и поведение наборного устройства представлено в версии 10.4 OS X. NSTypesetterBehavior
перечисление определяет соответствующие константы.
NSTypesetter
подкласс, реализующий исходное поведение наборного устройства, NSSimpleHorizontalTypesetter
, который определяется в NSTypesetter.h
заголовочный файл. NSSimpleHorizontalTypesetter
расположение глифа поддержек со слева направо развертывается и нисходящее перемещение строки только. NSSimpleHorizontalTypesetter
осуждается в версии 10.4 OS X и позже.
Поведение наборного устройства, представленное в версии 10.2 OS X, реализовано NSATSTypesetter
класс, определяющийся в NSATSTypesetter.h
заголовочный файл. NSATSTypesetter
обеспечивает улучшенную строку и точность межсимвольного интервала и поддерживает больше языков, включая языки с двунаправленной письменностью, чем оригинал NSSimpleHorizontalTypesetter
.
Версия 10.3 OS X представила новую версию NSATSTypesetter
это объявляет общедоступный APIs для NSATSTypesetter
и NSGlyphGenerator
. Этот APIs открывает наборное устройство для использования с механизмом пользовательского макета, имеющим проект, отличающийся от традиционной текстовой системы Какао, как описано в Проекте NSTypesetter. В версии 10.4 OS X этот APIs переместился в NSTypesetter
.
Если Вы не требуете определенного поведения более ранней версии наборного устройства, необходимо использовать или разделить последнюю версию на подклассы NSATSTypesetter
.
Важно использовать то же поведение наборного устройства когда и измеряющийся и представляющий текст, избежать различий в расстоянии между абзацами, межстрочном интервале и главной обработке отступа. Посмотрите, что Строка Рисует и Способы поведения Наборного устройства для получения дополнительной информации о несоответствиях поведения наборного устройства.
Проект NSTypesetter
В текстовой системе Какао менеджер по расположению владеет наборным устройством и генератором глифа как частные объекты и поддерживает массив текстовых контейнеров, как описано в менеджере по Расположению. Понятие наборного устройства сильно связывается с менеджером по расположению и текстовыми понятиями контейнера. Ответственность наборного устройства состоит в том, чтобы заполнить текстовые контейнеры в массиве с глифами, предоставленными генератором глифа. По умолчанию, NSATSTypesetter
работы таким образом. Однако NSTypesetter
разработан, чтобы позволить разработчикам разъединить его от других компонентов текстовой системы Какао.
Проект NSTypesetter
изолирует примитивное, базовое наборное устройство от остальной части текстовой системы Какао, как показано на рисунке 1. NSTypesetter
имеет базовый наборный механизм, интерфейс фазы макета и уровень интерфейса хранения глифа, связывающийся с текстовой системой и управляющий механизмом расположения. Базовый наборный механизм обеспечивает усовершенствованные типографские возможности через упрощенный API. Базовый наборный механизм размечает глифы в бесконечной горизонтальной строке и ничего не знает о текстовых контейнерах или текстовом направлении. Уровень интерфейса хранения глифа обращается к текстовой системе, чтобы генерировать прямоугольники фрагмента строки и удостовериться, что они соответствуют на страницу должным образом.
API разрабатывает для NSTypesetter
имеет две основных цели. Первое должно повредить связь между этими двумя классами и NSLayoutManager
, разрешение разработчикам коснуться глубоко в типографские возможности Какао без использования NSLayoutManager
. Вторая цель состоит в том, чтобы обеспечить точки переопределения, чтобы позволить разработчикам расширять различные аспекты наборного процесса. Кроме того, прямой доступ к этим классам упрощает порту Carbon, Windows или приложениям UNIX с их собственными механизмами расположения к Какао.
NSTypesetter
категоризирует его методы следующим образом:
Интерфейс хранения глифа (
NSGlyphStorageInterface
) объявляет все примитивные методы, взаимодействующие через интерфейс к складу глифа, который являетсяNSLayoutManager
в Какао. Путем переопределения всех этих методов приложение может реализоватьNSTypesetter
подкласс, взаимодействующий с пользовательским складом глифа и менеджером по расположению. Реализации по умолчанию этих методов вызовNSLayoutManager
.NSTypesetter
копирует глифы для фрагмента строки, в настоящее время обрабатываемого от менеджера по расположению, и выполняет расположение, замену, вставку и удаление на копии. Как последний шаг в процессе создания макета, это перемещает получающиеся глифы в хранение глифа. БольшинствоNSGlyphStorageInterface
методы включаяinsertGlyph:atGlyphIndex:characterIndex:
используются для последнего шага копирования результата назад к хранению глифа.Так как индекс глифа и индексы символа номинальны во время процесса создания макета, необходимо ожидать до заключительного процесса перед изменением
NSLayoutManager
.Интерфейс фазы макета (
NSLayoutPhaseInterface
) объявляет контрольные точки, вызванные во время текстового расположения, если реализовано. Эти вызовы метода действуют как уведомления о событиях, происходящих в процессе создания макета.NSTypesetter
подкласс может переопределить любой из этих методов при желании для изменения различных аспектов процесса создания макета. Например, вызовы наборного устройстваwillSetLineFragmentRect:forGlyphRange:usedRect:baselineOffset:
сразу, прежде чем это вызываетsetLineFragmentRect:forGlyphRange:usedRect:baselineOffset:
сохранить фактическое прямоугольное расположение фрагмента строки в менеджере по расположению.Остаток от
NSTypesetter
методы являются примитивными методами наборного устройства, которые менеджер по пользовательскому макету может вызвать для управления наборным устройством непосредственно.
С его многоуровневой структурой, NSTypesetter
может инстанцироваться и использоваться в его стандартной конфигурации с текстовой системой Какао или разделяться на подклассы и адаптироваться для работы с другой текстовой системой, даже та, имеющая полностью различные понятия того, как выполнить макет страницы.