Dwriteshapepy ist eine Python -Erweiterung, die mit Cython gebaut wurde. Es bietet optimierte Bindungen für die DirectWrite -Formungsmotor. Das Modell ähnelt dem von Uharfbuzz bereitgestellten Modell, aber einige Unterschiede aufgrund von Unterschieden in den API -Modellen zwischen DirectWrite und Harfbuzz.
Dwriteshapepy wurde ursprünglich entwickelt, um eine pythonbasierte Schriftbearbeitungsumgebung zu unterstützen, in der ähnliche Tests mit DirectWrite und Harfbuzz durchgeführt werden.
Das Repo enthält zwei Methoden, um die Erweiterung zu erstellen. Die Standard -Python/Cython -Methode unter Verwendung von Setup.py und einer Visual Studio -Lösung. Setup.py wird zum Erstellen, Installieren und Erstellen von Vertriebspaketen verwendet. Die Visual Studio -Lösung dient das Debuggen der Erweiterung sowie für den Client.
Setup.py erstellt das Paket mit dem Erweiterungsnamen "DWriteshapepy". Nützliche Befehlszeilen, wenn Sie Setup.py zum Erstellen, Installieren und Erstellen von Verteilungspaketen verwenden, sind:
Erstellen Sie die Erweiterung auf der lokalen Maschine. Python Setup.py Build
Installieren Sie die gebaute Erweiterung in der aktuellen Python -Umgebung. Python setup.py install
Verteilungspaket erstellen. Python setup.py Bdist_Wheel
Das DWriteshape -Verzeichnis im Repo enthält die Visual Studio -Lösung und die Projekte. Die DWriteshape -Lösung enthält zwei Projekte. Das DWriteshape -Projekt und das Kundenprojekt. Das DWriteshape -Projekt erstellt das Paket als Erweiterungsname „DWriteshape“. Beachten Sie die Differenz zwischen dem Erweiterungsbau mit Setup.py. Dies ist notwendig, da Visual Studio nicht die gleiche Steuerung wie Setup.py hat und den Erweiterungsnamen zu erfordern scheint, wie der der .pyx -Datei. Es könnte auch nützlich sein, Namenskollisionen zu vermeiden. Das Visual Studio -Projekt sollte nur verwendet werden, um Debug -Builds der Erweiterung für die Entwicklung zu erstellen. Das Client -Projekt ist ein einfacher Testkunde für das DWriteshape -Projekt.
Um die Erweiterung mit dem Visual Studio -Projekt zu erstellen, müssen Sie zuerst Cython verwenden, um die .cpp -Datei aus den Dateien .pyx und .pxd zu erstellen. Es gibt ein Build.bat im Src dwriteshapepy -Verzeichnis, um dies zu tun. Die generierte Datei dwriteshape.cpp sollte gelöscht werden, wenn das Wechsel vom Gebäude mit Visual Studio oder Setup.py oder Visa umgekehrt wird. Beim Erstellen mit Setup.py wird die .cpp -Datei automatisch generiert, damit erbaut wird. Bat ist nicht erforderlich.
Das Verzeichnis src cpp enthält die DWRITE -Abstraktionsschicht der Erweiterung im Grunde genommen zwischen der exportierten API und dem DWRITE. Dieser Code ist zwischen Build -Methoden üblich.
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 } " )Dieses Projekt begrüßt Beiträge und Vorschläge. In den meisten Beiträgen müssen Sie einer Mitarbeiters Lizenzvereinbarung (CLA) zustimmen, in der Sie erklären, dass Sie das Recht haben und uns tatsächlich tun, um uns die Rechte zu gewähren, Ihren Beitrag zu verwenden. Weitere Informationen finden Sie unter https://cla.opensource.microsoft.com.
Wenn Sie eine Pull -Anfrage einreichen, bestimmt ein CLA -Bot automatisch, ob Sie eine CLA angeben und die PR angemessen dekorieren müssen (z. B. Statusprüfung, Kommentar). Befolgen Sie einfach die vom Bot bereitgestellten Anweisungen. Sie müssen dies nur einmal über alle Repos mit unserem CLA tun.
Dieses Projekt hat den Microsoft Open Source -Verhaltenscode übernommen. Weitere Informationen finden Sie im FAQ oder wenden Sie sich an [email protected] mit zusätzlichen Fragen oder Kommentaren.
Dieses Projekt kann Marken oder Logos für Projekte, Produkte oder Dienstleistungen enthalten. Die autorisierte Verwendung von Microsoft -Marken oder Logos unterliegt den Marken- und Markenrichtlinien von Microsoft und muss folgen. Die Verwendung von Microsoft -Marken oder Logos in geänderten Versionen dieses Projekts darf keine Verwirrung verursachen oder Microsoft -Sponsoring implizieren. Jede Verwendung von Marken oder Logos von Drittanbietern unterliegt den Richtlinien dieses Drittanbieters.