DWRITESHAPEPY เป็นส่วนขยาย Python ที่สร้างขึ้นโดยใช้ Cython มันให้การเชื่อมโยงที่คล่องตัวสำหรับเอ็นจิ้นการสร้าง DirectWrite โมเดลนั้นคล้ายกับโมเดลที่จัดทำโดย Uharfbuzz แต่ความแตกต่างบางอย่างเนื่องจากความแตกต่างในโมเดล API ระหว่าง DirectWrite และ Harfbuzz
DWRITESHAPEPY ได้รับการพัฒนาในขั้นต้นเพื่อสนับสนุนสภาพแวดล้อมการทดสอบแบบอักษรที่ใช้ Python ซึ่งการทดสอบที่คล้ายกันจะดำเนินการโดยใช้ทั้ง DirectWrite และ Harfbuzz
repo มีสองวิธีในการสร้างส่วนขยาย วิธี Python/Cython มาตรฐานโดยใช้ setup.py และโซลูชัน Visual Studio setup.py ใช้เพื่อสร้างติดตั้งและสร้างแพ็คเกจการกระจาย โซลูชัน Visual Studio ใช้สำหรับการดีบักโหมดข้ามของส่วนขยายเช่นเดียวกับลูกค้า
setup.py สร้างแพ็คเกจด้วยชื่อส่วนขยาย“ DWRITESHAPEPY” บรรทัดคำสั่งที่มีประโยชน์เมื่อใช้ setup.py เพื่อสร้างติดตั้งและสร้างแพ็คเกจการกระจายคือ:
สร้างส่วนขยายบนเครื่องท้องถิ่น Python setup.py build
ติดตั้งส่วนขยายที่สร้างขึ้นในสภาพแวดล้อม Python ปัจจุบัน การติดตั้ง Python.py ติดตั้ง
สร้างแพ็คเกจการกระจาย Python setup.py bdist_wheel
ไดเรกทอรี dwriteshape ใน repo มีโซลูชัน 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 Versa เมื่อสร้างด้วย 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 บอทจะพิจารณาโดยอัตโนมัติว่าคุณจำเป็นต้องให้ CLA และตกแต่ง PR อย่างเหมาะสม (เช่นการตรวจสอบสถานะแสดงความคิดเห็น) เพียงทำตามคำแนะนำที่จัดทำโดยบอท คุณจะต้องทำสิ่งนี้เพียงครั้งเดียวใน repos ทั้งหมดโดยใช้ CLA ของเรา
โครงการนี้ได้นำรหัสการดำเนินงานของ Microsoft โอเพ่นซอร์สมาใช้ สำหรับข้อมูลเพิ่มเติมโปรดดูจรรยาบรรณคำถามที่พบบ่อยหรือติดต่อ [email protected] พร้อมคำถามหรือความคิดเห็นเพิ่มเติมใด ๆ
โครงการนี้อาจมีเครื่องหมายการค้าหรือโลโก้สำหรับโครงการผลิตภัณฑ์หรือบริการ การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft ที่ได้รับอนุญาตขึ้นอยู่กับและต้องปฏิบัติตามแนวทางเครื่องหมายการค้าและแบรนด์ของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของ Microsoft ในรุ่นที่แก้ไขของโครงการนี้จะต้องไม่ทำให้เกิดความสับสนหรือบอกเป็นสปอนเซอร์ของ Microsoft การใช้เครื่องหมายการค้าหรือโลโก้ของบุคคลที่สามจะอยู่ภายใต้นโยบายของบุคคลที่สามเหล่านั้น