dwriteShapepy는 Cython을 사용하여 구축 된 파이썬 확장자입니다. DirectWrite 쉐이핑 엔진에 간소화 된 바인딩을 제공합니다. 이 모델은 uharfbuzz가 제공하는 모델과 유사하지만 DirectWrite와 Harfbuzz 간의 API 모델의 차이로 인해 약간의 차이가 있습니다.
DwriteShapepy는 처음에 DirectWrite 및 Harfbuzz를 사용하여 유사한 테스트가 실행되는 Python 기반 글꼴 테스트 환경을 지원하기 위해 처음 개발되었습니다.
리포에는 확장을 구축하는 두 가지 방법이 포함되어 있습니다. setup.py 및 Visual Studio 솔루션을 사용한 표준 Python/Cython 방법. setup.py는 분배 패키지를 빌드, 설치 및 작성하는 데 사용됩니다. Visual Studio 솔루션은 클라이언트뿐만 아니라 확장의 크로스 모드 디버깅을위한 것입니다.
setup.py는 "dwriteShapepy"확장 이름으로 패키지를 빌드합니다. 유용한 명령 줄 setup.py를 사용하여 배포 패키지를 빌드, 설치 및 작성시 : 다음과 같습니다.
로컬 기계에 확장을 구축하십시오. Python setup.py 빌드
내장 확장을 현재의 파이썬 환경에 설치하십시오. Python setup.py 설치
배포 패키지를 만듭니다. Python setup.py bdist_wheel
리포의 DwriteShape 디렉토리에는 Visual Studio 솔루션 및 프로젝트가 포함되어 있습니다. DwriteShape 솔루션에는 두 가지 프로젝트가 포함되어 있습니다. DWRRITESHAPE 프로젝트 및 클라이언트 프로젝트. DwriteShape 프로젝트는 패키지를 확장 이름 "dwriteShape"로 구축합니다. setup.py를 사용한 확장 빌드의 차이점에 유의하십시오. Visual Studio는 Setup.py와 동일한 수준의 제어를 가지고 있지 않으며 확장자 이름이 .pyx 파일과 동일해야하기 때문에 필요합니다. 또한 이름 충돌을 피하는 데 유용 할 수도 있습니다. Visual Studio 프로젝트는 개발을위한 확장의 디버그 빌드를 만드는 데만 사용해야합니다. 클라이언트 프로젝트는 DwriteShape 프로젝트를위한 간단한 테스트 클라이언트입니다.
Visual Studio 프로젝트를 사용하여 확장을 구축하려면 먼저 Cython을 사용하여 .pyx 및 .pxd 파일에서 .cpp 파일을 작성해야합니다. SRC dwriteShapepy 디렉토리에는이를 위해 build.bat가 있습니다. Visual Studio 또는 Setup.py 또는 Versa를 사용하여 빌드에서 전환하는 경우 생성 된 파일 Dwriteshape.cpp를 삭제해야합니다. setup.py로 빌드시 .cpp 파일이 자동으로 생성되므로 build.bat가 필요하지 않습니다.
디렉토리 SRC CPP에는 내보내기 API와 DWRITE 사이의 확장 배관의 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를 사용하여 모든 저장소에서 한 번만이 작업을 수행하면됩니다.
이 프로젝트는 Microsoft 오픈 소스 행동 강령을 채택했습니다. 자세한 내용은 추가 질문이나 의견이 있으면 행동 강령 FAQ 또는 [email protected]에 문의하십시오.
이 프로젝트에는 프로젝트, 제품 또는 서비스에 대한 상표 또는 로고가 포함될 수 있습니다. Microsoft 상표 또는 로고의 승인 된 사용에는 Microsoft의 상표 및 브랜드 지침이 적용되며 따라야합니다. 이 프로젝트의 수정 된 버전에서 Microsoft 상표 또는 로고를 사용한다고해서 혼란을 일으키거나 Microsoft 후원을 암시해서는 안됩니다. 타사 상표 또는 로고를 사용하면 타사 정책이 적용됩니다.