DWriteShAPEPY est une extension Python construite à l'aide de Cython. Il fournit des liaisons rationalisées pour le moteur de mise en forme DirectWrite. Le modèle est similaire au modèle fourni par UharfBuzz mais quelques différences en raison des différences dans les modèles d'API entre DirectWrite et HarfBuzz.
DWriteShAPEPY a été initialement développé pour prendre en charge un environnement de test de police basé sur Python où des tests similaires sont exécutés à la fois à la fois directementwrite et HarfBuzz.
Le repo contient deux méthodes pour construire l'extension. La méthode Python / cython standard à l'aide de setup.py et une solution Visual Studio. Setup.py est utilisé pour créer, installer et créer des packages de distribution. La solution Visual Studio est destinée à déboguer en mode transversal de l'extension ainsi que du client.
Setup.py construit le package avec le nom d'extension «dwriteShapepy». Les lignes de commande utiles lors de l'utilisation de setup.py pour créer, installer et créer des packages de distribution sont:
Construisez l'extension sur la machine locale. Build python setup.py
Installez l'extension construite dans un environnement Python actuel. Python setup.py install
Créer un package de distribution. Python setup.py bdist_wheel
Le répertoire DWriteShape dans le repo contient la solution et les projets Visual Studio. La solution DWriteShape contient deux projets. Le projet DWriteShape et le projet client. Le projet DWriteShape construit le package comme le nom de l'extension «DWriteShape». Remarquez la différence entre la construction d'extension à l'aide de setup.py. Cela est nécessaire car Visual Studio n'a pas le même niveau de contrôle que setup.py et semble exiger que le nom d'extension soit le même que celui du fichier .pyx. Il pourrait également être utile pour éviter les collisions de noms. Le projet Visual Studio ne doit être utilisé que pour créer des versions de débogage de l'extension pour le développement. Le projet client est un client de test simple pour le projet DWriteShape.
Afin de créer l'extension avec le projet Visual Studio, vous devez d'abord utiliser Cython pour créer le fichier .cpp à partir des fichiers .pyx et .pxd. Il y a un build.bat dans le répertoire Src dwriteShapepy pour ce faire. Le fichier généré dwriteShape.cpp doit être supprimé si vous passez de la construction avec Visual Studio ou Settup.py ou Visa Versa. Lors de la construction avec setup.py, le fichier .cpp est généré automatiquement, Build.bat n'est pas nécessaire.
Le répertoire Src CPP contient la couche d'abstraction DWrite de l'extension en plomberie entre l'API exportée et DWrite. Ce code est courant entre les méthodes de construction.
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 } " )Ce projet accueille les contributions et les suggestions. La plupart des contributions vous obligent à accepter un accord de licence de contributeur (CLA) déclarant que vous avez le droit de faire et en fait, accordez-nous les droits d'utilisation de votre contribution. Pour plus de détails, visitez https://cla.opensource.microsoft.com.
Lorsque vous soumettez une demande de traction, un bot CLA déterminera automatiquement si vous devez fournir un CLA et décorer le RP de manière appropriée (par exemple, vérification d'état, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez besoin de le faire qu'une seule fois sur tous les dépositions en utilisant notre CLA.
Ce projet a adopté le code de conduite open source Microsoft. Pour plus d'informations, consultez le code de conduite FAQ ou contactez [email protected] avec toute question ou commentaire supplémentaire.
Ce projet peut contenir des marques ou des logos pour des projets, des produits ou des services. L'utilisation autorisée de marques ou de logos Microsoft est soumise et doit suivre les directives de marque et de marque de Microsoft. L'utilisation de marques ou de logos de Microsoft dans des versions modifiées de ce projet ne doit pas provoquer de confusion ou impliquer le parrainage de Microsoft. Toute utilisation de marques ou de logos tiers est soumis aux politiques de ces tiers.