Рубрики
Без рубрики

Текстовый макет двигателя

Основы механизма макета текста!

Автор оригинала: Susmit.

Обзор и цель

Чтобы построить двигатели макета текста для KIVY (Pango, Harfbuzz), позволяющие ей для перезарядки для таких алфавитов, как арабский, персидский, тайский и деванаграм.

Что такое механизм макета текста?

  • TLE идентифицирует скрипт, в котором интересует пользователь, и отображает текст соответственно.
  • https://en.wikipedia.org/wiki/Complex_text_layout

Комплексные сложности текстовых макетов: –

  1. Двунаправленность: символы могут предпринять право налево или налево на прямо в линии.

    • Визуальный заказ отличается от заказа на хранение.
    • Бывший арабский, герматчит прочитал слева направо
  2. Формирование: где персонаж может изменить свою форму, зависит от его Расположение и/или окружающие персонажи.

    • Арабские характеристики изменяются, чтобы соединить соседние символы.
    • Персонаж в арабском скрипте может иметь столько, сколько Четыре различных формы формы, в зависимости от контекста
  3. Лигатуры: обязательные специальные формы, а без эквивалента Unicode

    • Арабский и деванагари представляют собой некоторую последовательность персонажей с Лигатуры.
  4. Позиционирование: регулировка вертикальная, горизонтальная

    • Тайский и другой скрипт требуют, чтобы персонажи наносят изменения.
  5. Переупорядочение: позиции символов зависят от контекста.

    • Некоторые ссылки на хинди на основе контекста
  6. Раскомый характер: какой-то символ появляется в более чем одной позиции.

    • Тайский и многие угодий языки отображают один символ в несколько позиций.

Рабочий обзор макета двигателя

  ● The font for a particular script contains rules.
  ● Two main categories called GPOS(glyph positioning) and GSUB(glyph
    substitution)
  ● There are features like "ccmp"(composition and decomposition),
    "blws"(below base substitution) etc falling under GSUB rule.Other features
    like "blwn" (below base mark positioning),"abvm" (above base mark
    positioning) "kern" etc .fall under GPOS rule.
  ● The fonts may contain language tags for the languages they support.
  ● All combinations of characters used by particular languages are accessed
    by rules or lookups defined in the fonts.
  ● The rendering engine has to identify the script, select the fonts, apply
    correct rules from the fonts and display it.

Работа двигателя макета

  • Пользовательский ввод сохраняется в буфере/памяти.
  • Определите скрипт, глядя на значения Unicode в буфере.
  • Определите двунаправленные уровни для текста.
  • Обновите языковой тег, используя информацию.
  • Определите языковой двигатель из обновленного языкового тега и сценария.
  • Определите набор возможных шрифтов из обновленного языкового тега и Свойства шрифта для персонажа. Эти шрифты сортируются в соответствии с тем, как Ну, они соответствуют языковому тегу и свойствам шрифта.
  • Примените правила, определенные в шрифте в значения Unicode, хранящихся в буфер.
  • Делайте характер, слово, линия границы анализа.
  • Выход этого процесса обычно в соответствии с линией. Затем они подаются в рендерер.

Панго

  • Основная работа Pango состоит в том, чтобы взять текст Unicode, возможно, аннотированный с дополнительными атрибуты и преобразовать, что в соответствующие позиционные глифы выбраны из шрифтов на системе.
  • В некоторых случаях пользователь использует процедуры от Pango непосредственно для визуализации позиционируемые глифы; В других случаях Pango используется как часть большей системы который использует позиционированный глифы
  • С точки зрения прикладного программиста, Pango выглядит совсем просто. Существует объект макета, Pangolayout, который удерживает один или несколько Пункты текста Unicode. Создан Pangolayout, приложение может Определите размер текста или сделайте его на выходное устройство.

Панго рендеринг трубопровода

Под API высокого уровня показано выше, что касается абзацами текста, существует API низкого уровня, который выставляет детали трубопровода макета Pango. Шаги в этом трубопроводе являются:

  • Детализация: Входной текст разбивается в серию сегментов с уникальным шрифтом, двигателем формы, языковым двигателем и набором дополнительных атрибутов.
  • Определение границы текста: Текст анализируется для определения логических атрибуты такие как возможные положения лома линии, а также слово и предложение границы.
  • Формирование: Каждый элемент текста передается в форму формы для преобразования в глифы.
  • Строки линии: Формы сгруппированы в линии; Если индивидуальные пробежки дольше, чем конкретные линии, то они разбиты на линии Разрушить позиции.

Harfbuzz.

  • Harfbuzz превратился из кода, который изначально был частью проекта FreeType. Затем он был разработан отдельно в Qt и Pango. Тогда это было объединено в общий репозиторий
  • Harfbuzz только делает формирование. То есть hb_shape () функционально эквивалентно Pango_shape ()
  • В настоящее время используется в последних версиях Firefox, Gnome, Chromeos, Chrome, LibreOffice, Xetex, Android и KDE, среди других мест.

Ограничение Harfbuzz

  • Это не предоставляет детали
  • Это не обеспечивает двунаправленную алгоритм Unicode
  • Он также не предоставляет реализацию строки.
  • Без глифа растера
  • Информация о метрике глифа

https://github.com/phunsukwangdu/python_pango/blob/master/TextLayoutEngine.pdf