Dwriteshapepy هو امتداد Python تم تصميمه باستخدام Cython. ويوفر روابط مبسطة لمحرك تشكيل DirectWrite. يشبه النموذج النموذج الذي يوفره UharfBuzz ولكن بعض الاختلافات بسبب الاختلافات في نماذج API بين DirectWrite و HarfBuzz.
تم تطوير DwriteshapePy في البداية لدعم بيئة اختبار الخطوط القائمة على Python حيث يتم تنفيذ اختبارات مماثلة باستخدام كل من DirectWrite و Harfbuzz.
يحتوي الريبو على طريقتين لبناء التمديد. طريقة Python/Cython القياسية باستخدام setup.py وحل Visual Studio. يتم استخدام setup.py لإنشاء وتثبيت وإنشاء حزم توزيع. يعد حل Visual Studio للتصحيح للوضع المتقاطع التصحيح للامتداد وكذلك العميل.
يقوم Setup.py بإنشاء الحزمة باسم التمديد "DwriteshapePy". أسطر الأوامر المفيدة عند استخدام setup.py لإنشاء وتثبيت وإنشاء حزم التوزيع هي:
بناء الامتداد على الجهاز المحلي. python setup.py بناء
تثبيت الامتداد المضمّن في بيئة Python الحالية. تثبيت Python Setup.py
إنشاء حزمة توزيع. 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. هناك build.bat في دليل src dwriteshapepy للقيام بذلك. يجب حذف الملف الذي تم إنشاؤه dwriteshape.cpp إذا كان التبديل من البناء باستخدام Visual Studio أو Setup.py أو Visa Vera. عند إنشاء مع setup.py ، يتم إنشاء ملف .cpp تلقائيًا حتى لا يكون build.bat ضروريًا.
يحتوي الدليل 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 Bot تلقائيًا ما إذا كنت بحاجة إلى توفير CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال ، فحص الحالة ، التعليق). ببساطة اتبع الإرشادات التي يقدمها الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع عمليات إعادة الشراء باستخدام CLA لدينا.
اعتمد هذا المشروع رمز سلوك المصدر المفتوح Microsoft. لمزيد من المعلومات ، راجع مدونة الشهادة الأسئلة الشائعة أو الاتصال بـ [email protected] مع أي أسئلة أو تعليقات إضافية.
قد يحتوي هذا المشروع على علامات تجارية أو شعارات للمشاريع أو المنتجات أو الخدمات. يخضع الاستخدام المعتمد للعلامات التجارية أو الشعارات Microsoft ويجب أن يتبعوا إرشادات Microsoft التجارية والعلامة التجارية. يجب ألا يسبب استخدام العلامات التجارية Microsoft أو الشعارات في إصدارات معدلة من هذا المشروع الارتباك أو يعني رعاية Microsoft. يخضع أي استخدام للعلامات التجارية أو الشعارات من طرف ثالث لسياسات تلك الطرف الثالث.