dwriteshapepyは、Cythonを使用して構築されたPython拡張機能です。 DirectWriteシェーピングエンジンに合理化されたバインディングを提供します。このモデルは、Uharfbuzzが提供するモデルに似ていますが、DirectWriteとHarfbuzzの間のAPIモデルの違いのためにいくつかの違いがあります。
Dwriteshapepyは、DirectWriteとHarfbuzzの両方を使用して同様のテストが実行されるPythonベースのフォントテスト環境をサポートするために最初に開発されました。
リポジトリには、拡張機能を構築する2つのメソッドが含まれています。 setup.pyとビジュアルスタジオソリューションを使用した標準のPython/Cythonメソッド。 Setup.pyは、配布パッケージの構築、インストール、作成に使用されます。 Visual Studioソリューションは、クライアントだけでなく、クライアントのクロスモードデバッグ用です。
setup.pyは、拡張機能名「dwriteshapepy」でパッケージを構築します。 Setup.pyを使用して配布パッケージを構築、インストール、作成する場合の有用なコマンドラインは次のとおりです。
ローカルマシンに拡張機能を構築します。 python setup.pyビルド
構築された拡張機能を現在のPython環境にインストールします。 python setup.pyインストール
配布パッケージを作成します。 python setup.py bdist_wheel
リポジトリのdwriteshapeディレクトリには、ビジュアルスタジオソリューションとプロジェクトが含まれています。 dwriteshapeソリューションには2つのプロジェクトが含まれています。 dwriteshapeプロジェクトとクライアントプロジェクト。 dwriteshapeプロジェクトは、拡張機能名「dwriteshape」としてパッケージを構築します。 setup.pyを使用して拡張ビルドの違いに注意してください。これは、Visual StudioにはSetup.pyと同じレベルの制御がなく、拡張名が.pyxファイルのレベルと同じであると思われるため、これが必要です。また、名前の衝突を回避するのにも役立ちます。 Visual Studioプロジェクトは、開発用の拡張機能のデバッグビルドを作成するためにのみ使用する必要があります。クライアントプロジェクトは、DWRiteShapeプロジェクトのシンプルなテストクライアントです。
Visual Studioプロジェクトで拡張機能を構築するには、まずCythonを使用して.pyxおよび.pxdファイルから.cppファイルを作成する必要があります。これを行うには、src dwriteshapepyディレクトリにbuild.batがあります。生成されたファイルdwriteshape.cppは、Visual StudioまたはSetup.pyまたはVisa Versaを使用して建物から切り替える場合は削除する必要があります。 setup.pyで構築する場合、.cppファイルは自動的に生成されるため、build.batは必要ありません。
ディレクトリSRC CPPには、拡張機能の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を使用して、すべてのレポでこれを1回だけ行う必要があります。
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれる場合があります。 Microsoftの商標またはロゴの承認された使用は、Microsoftの商標およびブランドガイドラインに従うものであり、従わなければなりません。このプロジェクトの変更されたバージョンでのMicrosoft商標またはロゴの使用は、混乱を引き起こしたり、Microsoftのスポンサーシップを暗示したりしてはなりません。サードパーティの商標またはロゴの使用は、これらのサードパーティのポリシーの対象となります。