Наборные устройства

Использование менеджера по расположению объект помощника вызвало наборное устройство для разметки глифов во фрагментах строки. Объекты наборного устройства инстанцируют от конкретного подкласса 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. Базовый наборный механизм размечает глифы в бесконечной горизонтальной строке и ничего не знает о текстовых контейнерах или текстовом направлении. Уровень интерфейса хранения глифа обращается к текстовой системе, чтобы генерировать прямоугольники фрагмента строки и удостовериться, что они соответствуют на страницу должным образом.

  Проект рисунка 1 NSTypesetter
Design of NSATSTypesetter

API разрабатывает для NSTypesetter имеет две основных цели. Первое должно повредить связь между этими двумя классами и NSLayoutManager, разрешение разработчикам коснуться глубоко в типографские возможности Какао без использования NSLayoutManager. Вторая цель состоит в том, чтобы обеспечить точки переопределения, чтобы позволить разработчикам расширять различные аспекты наборного процесса. Кроме того, прямой доступ к этим классам упрощает порту Carbon, Windows или приложениям UNIX с их собственными механизмами расположения к Какао.

NSTypesetter категоризирует его методы следующим образом:

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