Core Text
Core Text — это низкоуровневый программный интерфейс (C API) операционной системы macOS, предназначенный для рендеринга и обработки форматированного текста. Он является частью фреймворка Application Services и предоставляет разработчикам прямой доступ к механизмам компоновки текста, шрифтов, кернинга, лигатур и других типографических возможностей. Core Text работает на основе Core Graphics и Core Foundation, обеспечивая высокую производительность и точность отображения текста на экране и при печати.
История
Core Text был представлен компанией Apple в 2006 году вместе с выходом macOS версии 10.5 Leopard. До его появления разработчики macOS использовали более высокоуровневые API, такие как ATSUI (Apple Type Services for Unicode Imaging) и QuickDraw Text. Эти системы имели ограниченную поддержку современных типографических стандартов и были сложны в расширении. Core Text пришёл на смену ATSUI, предложив унифицированный, объектно-ориентированный подход к работе с текстом, основанный на Core Foundation и Core Graphics.
В последующих версиях macOS Core Text был расширен: добавлена поддержка OpenType, расширенных лигатур, вертикального письма (например, для японского и китайского языков), а также улучшена работа с текстовыми метаданными. Начиная с macOS 10.7 Lion, Core Text стал основой для высокоуровневых текстовых API, таких как Text Kit (часть AppKit) и NSAttributedString. В iOS Core Text также используется, но в более ограниченном объёме, поскольку основным API для работы с текстом в мобильной системе является Text Kit.
Архитектура и компоненты
Core Text состоит из нескольких ключевых модулей, каждый из которых отвечает за определённый этап обработки текста:
Шрифты (CTFont)
Модуль CTFont предоставляет доступ к метаданным шрифтов: имя, размер, стиль, вес, кернинг, метрики (высота строки, ширина символов). Шрифты загружаются из системной библиотеки шрифтов или из пользовательских файлов. Core Text поддерживает форматы TrueType, OpenType, PostScript Type 1 и коллекции шрифтов (dfont, ttc).
Атрибутированный текст (CTAttributedString)
Атрибутированный текст — это строка, к которой применены атрибуты (шрифт, цвет, межстрочный интервал, подчёркивание, тень и др.). Core Text использует класс CTAttributedString (на основе Core Foundation), который является неизменяемым представлением. Для изменяемого текста используется NSMutableAttributedString из Foundation, который затем преобразуется в CTAttributedString.
Компоновка текста (CTFramesetter, CTFrame, CTLine)
Это центральный механизм Core Text. CTFramesetter принимает атрибутированный текст и разбивает его на строки (CTLine) в рамках заданной области (CTFrame). Процесс включает:
- Разбиение на абзацы (с учётом отступов, выравнивания, интервалов).
- Расстановку переносов (автоматическая или ручная).
- Обработку табуляции и списков.
- Поддержка многостолбцовой вёрстки (через несколько CTFrame).
Типографика (CTTypesetter)
CTTypesetter выполняет низкоуровневую разбивку текста на глифы (графические символы) с учётом лигатур, кернинга, альтернативных форм символов (например, в OpenType). Он также управляет направлением текста (слева направо, справа налево, смешанное).
Параграфы (CTParagraphStyle)
Атрибут CTParagraphStyle задаёт параметры абзаца: выравнивание (левое, правое, центрированное, по ширине), межстрочный интервал, отступы первой строки, межсловный интервал, запрет висячих строк и т.д.
Применение
Core Text используется в macOS для рендеринга текста в различных контекстах:
- Вёрстка документов: приложения для работы с текстом (например, Pages от Apple) используют Core Text для точного размещения текста на странице, включая поддержку колонок, таблиц и изображений.
- Печать: Core Text обеспечивает высококачественный вывод текста на принтер, сохраняя все типографические особенности (шрифты, кернинг, цвета).
- Пользовательские интерфейсы: разработчики могут использовать Core Text для создания собственных текстовых элементов, например, для отображения сложных формул, химических структур или музыкальных нот.
- Локализация: Core Text поддерживает Unicode, что позволяет обрабатывать текст на разных языках, включая арабский, иврит, китайский, японский, корейский и другие.
- Графические редакторы: в приложениях типа Adobe Illustrator или Sketch Core Text используется для рендеринга текстовых слоёв с точным контролем над каждым символом.
Сравнение с другими API
Core Text занимает промежуточное положение между низкоуровневым рендерингом (Core Graphics) и высокоуровневыми API (AppKit, UIKit). Основные отличия:
- Text Kit (macOS, iOS) — высокоуровневый API, построенный на Core Text. Он предоставляет готовые классы (NSTextView, UITextView) с автоматическим управлением компоновкой, выделением текста, редактированием. Core Text даёт больше контроля, но требует ручного управления.
- Core Graphics — низкоуровневый API для рисования графики. Core Text использует Core Graphics для отрисовки глифов, но сам занимается компоновкой и типографикой.
- WebKit — для отображения веб-страниц использует собственный движок рендеринга, который не базируется на Core Text.
Ограничения и критика
Несмотря на мощь, Core Text имеет ряд недостатков:
- Сложность: API является низкоуровневым и требует от разработчика глубокого понимания типографики и управления памятью (Core Foundation объекты требуют ручного управления через CFRetain/CFRelease).
- Отсутствие поддержки некоторых современных форматов: Core Text не поддерживает шрифты OpenType SVG (цветные шрифты с векторными элементами) и шрифты с вариативными осями (variable fonts) в полной мере. Поддержка вариативных шрифтов появилась только в macOS 10.13 High Sierra и ограничена.
- Производительность: при работе с большими объёмами текста (например, книги в несколько тысяч страниц) Core Text может потреблять много памяти и процессорного времени, особенно при частом пересчёте компоновки.
- Отсутствие встроенного редактирования: Core Text не предоставляет готовых механизмов для редактирования текста (выделение, вставка, удаление). Разработчику необходимо реализовывать их самостоятельно.
Интересные факты
- Core Text является основой для системы автоматического переноса слов в macOS. Алгоритмы переноса основаны на словарях для разных языков и поддерживают правила типографики (например, запрет переноса в конце строки).
- В macOS Core Text используется для рендеринга текста в системных диалогах, меню и панелях инструментов, что обеспечивает единообразие типографики во всей операционной системе.
- Core Text может работать с текстом, содержащим математические символы и специальные знаки, благодаря поддержке Unicode и OpenType.
Источники
- Apple Inc. (2006). Core Text Programming Guide. macOS Developer Library.
- Apple Inc. (2017). Core Text Reference. macOS Developer Documentation.
- Thomas, J. (2015). Core Text and Text Kit: A Developer’s Guide. O’Reilly Media.
- Документация Apple по Core Text (macOS 10.5–14).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →