DWRITESHAPEPY - это расширение Python, построенное с использованием цинтона. Он обеспечивает упорядоченные привязки для двигателя формирования DirectWrite. Модель аналогична модели, предоставленной Uharfbuzz, но некоторые различия из -за различий в моделях API между DirectWrite и Harfbuzz.
Первоначально был разработан DWRITESHAPEPY для поддержки среды тестирования шрифтов на основе Python, где аналогичные тесты выполняются с использованием как DirectWrite, так и Harfbuzz.
Репо содержит два метода для построения расширения. Стандартный метод Python/Cython с использованием setup.py и решения Visual Studio. Setup.py используется для создания, установки и создания распределительных пакетов. Решение Visual Studio предназначено для отладки перекрестной режима расширения и клиента.
Setup.py создает пакет с именем расширения «dwriteshapeepy». Полезные командные строки при использовании setup.py для сборки, установки и создания распределительных пакетов:
Создайте расширение на локальной машине. Python setup.py Build
Установите встроенное расширение в текущую среду Python. Python setup.py install
Создать распределительный пакет. Python setup.py bdist_wheel
Справочник DWRITESHAPE в репо содержит решение и проекты Visual Studio. Решение DWRITESHAPE содержит два проекта. Проект DWRITESHAPE и клиент -проект. Проект DWRITESHAPE создает пакет как имени расширения «DWRITESHAPE». Обратите внимание на разницу между расширением сборки с использованием setup.py. Это необходимо, потому что Visual Studio не имеет того же уровня управления, что и setup.py, и, по -видимому, требуется, чтобы имя расширения было таким же, как и в файле .pyx. Это также может быть полезно во избежание столкновений имен. Проект Visual Studio должен использоваться только для создания сборки отладки расширения для разработки. Клиентский проект является простым тестовым клиентом для проекта DWRITESHAPE.
Чтобы построить расширение с помощью проекта Visual Studio, вы должны сначала использовать Cython для создания файла .cpp из файлов .pyx и .pxd. В каталоге SRC DWRITESHAPEPY есть Build.Bat.bat. Сгенерированный файл dwriteshape.cpp должен быть удален при переходе из здания с помощью Visual Studio или Setup.py или Visa Versa. При построении с setup.py файл .cpp генерируется автоматически, поэтому build.bat не требуется.
Directory SRC CPP содержит слой абстракции DWRITE расширения в основном сантехнику между экспортируемым API и DWRITE. Этот код распространен между методами сборки.
import sys
import dwriteshapepy as dw
from pathlib import Path
with open ( sys . argv [ 1 ], 'rb' ) as fontfile :
fontdata = fontfile . read ()
text = sys . argv [ 2 ]
face = dw . Face ( fontdata )
font = dw . Font ( face )
upm = font . upem
print ( upm )
buf = dw . Buffer ()
buf . add_str ( text )
features = { "kern" : True , "liga" : True }
dw . shape ( font , buf , features )
glyph_names = [ font . glyph_to_string ( g . codepoint ) for g in buf . glyph_infos ]
infos = [( g . codepoint , g . cluster ) for g in buf . glyph_infos ]
print ( glyph_names )
print ( infos )
advance = [( adv . x_advance , adv . y_advance , adv . x_offset , adv . y_offset ) for adv in buf . glyph_positions ]
print ( advance )
infos = buf . glyph_infos
positions = buf . glyph_positions
for info , pos in zip ( infos , positions ):
gid = info . codepoint
cluster = info . cluster
x_advance = pos . x_advance
x_offset = pos . x_offset
y_offset = pos . y_offset
print ( f"gid { gid } = { cluster } @ { x_advance } , { x_offset } + { y_offset } " )Этот проект приветствует вклады и предложения. Большинство взносов требуют, чтобы вы согласились с лицензионным соглашением о участнике (CLA), заявив, что вы имеете право и фактически предоставить нам права на использование вашего вклада. Для получения подробной информации, посетите https://cla.opensource.microsoft.com.
Когда вы отправляете запрос на привлечение, бот CLA автоматически определит, нужно ли вам предоставить CLA и правильно украсить PR (например, проверка состояния, комментарий). Просто следуйте инструкциям, предоставленным ботом. Вам нужно будет сделать это только один раз во всех репо, используя наш CLA.
Этот проект принял код поведения с открытым исходным кодом Microsoft. Для получения дополнительной информации см. Кодекс поведения FAQ или свяжитесь с [email protected] с любыми дополнительными вопросами или комментариями.
Этот проект может содержать товарные знаки или логотипы для проектов, продуктов или услуг. Уполномоченное использование товарных знаков или логотипов Microsoft подлежит и должно следовать указаниям Microsoft по товарной марке и брендам. Использование товарных знаков Microsoft или логотипов в модифицированных версиях этого проекта не должно вызывать путаницу или подразумевать спонсорство Microsoft. Любое использование сторонних товарных знаков или логотипов подвержена политике сторонних сторон.