Dwriteshapepy adalah ekstensi Python yang dibangun menggunakan Cython. Ini memberikan binding yang ramping untuk mesin pembentuk DirectWrite. Model ini mirip dengan model yang disediakan oleh UharfBuzz tetapi beberapa perbedaan karena perbedaan dalam model API antara DirectWrite dan HarfBuzz.
DWRITESHAPEPY pada awalnya dikembangkan untuk mendukung lingkungan pengujian font berbasis Python di mana tes serupa dieksekusi menggunakan DirectWrite dan HarfBuzz.
Repo berisi dua metode untuk membangun ekstensi. Metode Python/Cython standar menggunakan setup.py dan solusi Visual Studio. Setup.py digunakan untuk membangun, menginstal, dan membuat paket distribusi. Solusi Visual Studio adalah untuk debugging mode silang dari ekstensi serta klien.
Setup.py membangun paket dengan nama ekstensi "dwriteshapepy". Baris perintah yang berguna saat menggunakan setup.py untuk membangun, menginstal dan membuat paket distribusi adalah:
Bangun ekstensi di mesin lokal. Python setup.py build
Pasang ekstensi yang dibangun ke lingkungan Python saat ini. Python Setup.py Instal
Buat paket distribusi. Python setup.py bdist_wheel
Direktori DWriteShape dalam repo berisi solusi dan proyek Visual Studio. Solusi DWRITESHAPE berisi dua proyek. Proyek DWriteshape dan Proyek Klien. Proyek DWriteshape membangun paket sebagai nama ekstensi "DWriteShape". Perhatikan perbedaan antara Extension Build menggunakan setup.py. Ini diperlukan karena Visual Studio tidak memiliki tingkat kontrol yang sama dengan setup.py dan tampaknya memerlukan nama ekstensi sama dengan file .pyx. Ini juga bisa berguna dalam menghindari tabrakan nama. Proyek Visual Studio hanya boleh digunakan untuk membuat bangunan debug dari ekstensi untuk pengembangan. Proyek klien adalah klien uji sederhana untuk proyek DWRITESHAPE.
Untuk membangun ekstensi dengan proyek Visual Studio, Anda harus terlebih dahulu menggunakan Cython untuk membuat file .cpp dari file .pyx dan .pxd. Ada build.bat di direktori src dwriteshapepy untuk melakukan ini. File yang dihasilkan dwriteshape.cpp harus dihapus jika beralih dari membangun dengan visual studio atau setup.py atau visa versa. Saat membangun dengan setup.py file .cpp dihasilkan secara otomatis sehingga build.bat tidak diperlukan.
Direktori SRC CPP berisi lapisan abstraksi DWRITE dari ekstensi pada dasarnya pipa antara API dan DWRITE yang diekspor. Kode ini umum di antara metode pembuatan.
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 } " )Proyek ini menyambut kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda untuk menyetujui perjanjian lisensi kontributor (CLA) yang menyatakan bahwa Anda memiliki hak untuk, dan benar -benar melakukannya, beri kami hak untuk menggunakan kontribusi Anda. Untuk detailnya, kunjungi https://cla.opensource.microsoft.com.
Saat Anda mengirimkan permintaan tarik, bot CLA akan secara otomatis menentukan apakah Anda perlu memberikan CLA dan menghiasi PR secara tepat (misalnya, pemeriksaan status, komentar). Cukup ikuti instruksi yang disediakan oleh bot. Anda hanya perlu melakukan ini sekali di semua repo menggunakan CLA kami.
Proyek ini telah mengadopsi kode perilaku open source Microsoft. Untuk informasi lebih lanjut, lihat FAQ Kode Perilaku atau hubungi [email protected] dengan pertanyaan atau komentar tambahan.
Proyek ini dapat berisi merek dagang atau logo untuk proyek, produk, atau layanan. Penggunaan resmi merek dagang atau logo Microsoft tunduk dan harus mengikuti pedoman merek dagang & merek Microsoft. Penggunaan merek dagang atau logo Microsoft dalam versi yang dimodifikasi dari proyek ini tidak boleh menyebabkan kebingungan atau menyiratkan sponsor Microsoft. Setiap penggunaan merek dagang atau logo pihak ketiga tunduk pada kebijakan pihak ketiga tersebut.