
    \
jSv                    $   d dl Z d dlZd dlZd dlZd dlT d dlmZmZmZ d dl	Z	d dl
Z
d dlmZ d dlmZmZmZ d dlmZ d dlT d dlT d dlmZ 	 dZ ej                    d          d	k    rI ej                                        d
          r'ej                            ej        d         dd          Zej                             e          Z!n# e"$ r
Z#Y dZ#[#ndZ#[#ww xY we
j$        d         Z% ed          Z&d Z'e(Z)d Z*dZ+e(Z,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<i de-de.de/de0d e1d!e2d"e3d#e4d$e5d%e6d&e7d'e8d(e9d)e:d*e;d+e<Z=e(Z>d Z?dZ@d,ZAd-ZBd.ZCd/ZDd/ZEd0ZFd1ZGd2ZHe?e@eAeBeCeDeEeFeGeHeBd3ZIeJZKd ZLdZMd,ZNd.ZOd2ZPd4ZQd5ZRd6ZSd7ZTe(ZUd ZVdZWd,ZXeMeNz  eOz  ePz  eQz  eRz  eSz  eTz  ZYe(ZZd Z[dZ\d,Z]e[e\e]d8Z^e_Z`eaZbecZdeeZfegZheiZjehZkd ZldZmd,Znd-Zod.Zpd/Zqd0Zrd1Zsd2Ztd9Zud:Zvd;Zwd<Zxd=Zyd>Zzd?Z{d4Z|d@Z}dAZ~dBZdCZdDZdEZdFZdGZ G dH dIe          Z G dJ dKe          Z G dL dMe          Z G dN dOej                  Z G dP dQej                  Z G dR dSej                  Z G dT dUej                  Z G dV dWej                  Z G dX dYej                  Z G dZ d[ej                  Z G d\ d]ej                  Z G d^ d_eej                  Ze                    d`dadbdcdddedfd2dgdhdc          Z G di djej                  Z G dk dlej                  Ze                    dmdndodpdqdrdsdtdudvdw          Z G dx dyeej                  Z G dz d{ej                  Ze(Zd Z G d| d}ej                  Ze(Z G d~ dej                  Z G d dej                  Z G d dej                  Z G d dej                  Ze(Zd Z G d dej                  Z G d dej                  Z G d d          Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d deej                  Z G d deeej                  Z G d dej                  Z G d deej                  Z G d dej                  Z G d deej                  Ze(ZdZd,Zd-Zd.Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d deej                  Z G d deeej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Ze                    ddddcdddddddæ          Z G dĄ dej                  Z G dƄ dej                  Ze                    dddddd.dddddѦ          Z G d҄ deej                  Z G dԄ dej                  Z G dք dej                  Z G d؄ deeej                  Ze                    ddddddddgdddd          Z G d dej                  Z G d dej                  Z G d deej                  Z G d deej                  Z G d deej                  Z G d deej                  Z G d dej                  Ze                    ddddwdddGdd-dd          Z G d deeeeeej                  Ze!j        Zee_        e)ej         eej                  ge_         G d dej                  Z G d deej                  Z G d deeej                  Ze(Zd ZdZd,Zd-Ze(Zd ZdZd,Ze(Zd Ze(Zd ZdZd,Ze(Zd Ze(Zd ZdZd,Zd-Ze(ZdZd,Zd.Zd2Zd Zd Z G d de          Z G d de          ZdZ  e            Zee_        ee_         e            Zee_        ee_        de_        de_        ee_	        ee_
         G d deej                  Ze                    d	d
dddd@ddddd1          Z G d dej                  Zej        j        Ze(Zd ZdZej        Zeِe_        eej        eege_        dZe
j        j                                        D ]Z eee          reZes ed          defdZ G d dej                  Z G d dej                   Z! e            Z" eeed e#e"                    Z$e(Z%d Z&dZ'd,Z( edddd          Z) edddd          Z* ed d           Z+e
j$        d         re!j,        e!_-        dS dS (      N)*)ListOptionalTuple)base)
IWICBitmap
WICDecoderGUID_WICPixelFormat32bppPBGRA)	_kernel32)debug_printdwrite32bit64WINDIRSysWOW64z
dwrite.dll
debug_fontc                     t          |          dz  t          |          dz  z  t          |          dz  z  t          |           z  S )N         ord)abcds       Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/font/directwrite.pyDWRITE_MAKE_OPENTYPE_TAGr   %   s;    q66R<#a&&B,&Q14s1vv==       d      i,  i^  i  i  iX  i  i   i  i  thin
extralight
ultralightlight	semilightnormalregularmediumdemiboldsemiboldbold	extrabold	ultraboldblackheavy
extrablack                  r   )	undefinedultracondensedextracondensed	condensedsemicondensedr(   r*   semiexpandedexpandedextraexpandednarrowr       @      )r(   obliqueitalic	   
                                       r   c                       e Zd ZdefdeffZdS )D2D_POINT_2FxyN__name__
__module____qualname__FLOAT_fields_ r   r   rV   rV      s#        	e	eHHHr   rV   c                   *    e Zd ZdefdefdefdeffZdS )D2D1_RECT_FlefttoprightbottomNrY   r_   r   r   ra   ra      3        			%	5	HHHr   ra   c                   *    e Zd ZdefdefdefdeffZdS )D2D1_COLOR_Frgr   r   NrY   r_   r   r   rh   rh      s1        	e	e	e	e	HHHr   rh   c            
       H    e Zd Zdefdefdefdefdefdefdefdefd	eff	Zd
S )DWRITE_TEXT_METRICSrb   rc   width widthIncludingTrailingWhitespaceheightlayoutWidthlayoutHeightmaxBidiReorderingDepth	lineCountN)rZ   r[   r\   r]   UINT32r^   r_   r   r   rl   rl      s[        			%	+U3	5			!6*	f
HHHr   rl   c                   N    e Zd Zdefdefdefdefdefdefdefdefd	efd
eff
ZdS )DWRITE_FONT_METRICSdesignUnitsPerEmascentdescentlineGap	capHeightxHeightunderlinePositionunderlineThicknessstrikethroughPositionstrikethroughThicknessN)rZ   r[   r\   UINT16INT16r^   r_   r   r   rv   rv      se        	V$	6	F	E	f	F	e$	v&	 %(	!6*HHHr   rv   c                   <    e Zd ZdefdefdefdefdefdefdeffZdS )	DWRITE_GLYPH_METRICSleftSideBearingadvanceWidthrightSideBearingtopSideBearingadvanceHeightbottomSideBearingverticalOriginYN)rZ   r[   r\   INT32rt   r^   r_   r   r   r   r      sM        	E"	 	U#	5!	&!	e$	E"HHHr   r   c                   $    e Zd ZdefdeffZd ZdS )DWRITE_GLYPH_OFFSETadvanceOffsetascenderOffsetc                 (    d| j          d| j         dS )NzDWRITE_GLYPH_OFFSET(, ))r   r   selfs    r   __repr__zDWRITE_GLYPH_OFFSET.__repr__   s!    Rd&8RRD<ORRRRr   N)rZ   r[   r\   r]   r^   r   r_   r   r   r   r      s?        	% 	5!H
S S S S Sr   r   c            
       N    e Zd Zdefdefdedfdedfdedfdedfdedfd	ed
ffZdS )DWRITE_CLUSTER_METRICSrm   lengthcanWrapLineAfterr    isWhitespace	isNewlineisSoftHyphenisRightToLeftpaddingrI   N)rZ   r[   r\   r]   r   r^   r_   r   r   r   r      sa        	%	6	VQ'	#	fa 	#	&!$	FB	HHHr   r   c            
          e Zd Zde                    e ee          ee ee                    fde                    ee          fde                    e ee                    fde                    e ee                    fgZdS )IDWriteFontFileStreamReadFileFragmentReleaseFileFragmentGetFileSizeGetLastWriteTimeN)	rZ   r[   r\   com	STDMETHODc_void_pPOINTERUINT64	_methods_r_   r   r   r   r   
  s        		x!2!2FFGGHDUDU	V	V	X		x	*	*	,		x	1	1	3		x	1	1	3	IIIr   r   c                   h    e Zd Zde                    eee e ee                              fgZ	dS )IDWriteFontFileLoader_LICreateStreamFromKeyN
rZ   r[   r\   r   r   r   rt   r   r   r   r_   r   r   r   r     H        		x67777CX;Y;Y3Z3Z	[	[	]IIIr   r   c                   h    e Zd Zde                    eee e ee                              fgZ	dS )IDWriteFontFileLoaderr   Nr   r_   r   r   r   r     r   r   r   c                       e Zd Zde                    ee ee                    fde                    eeee          fde                                fgZ	dS )IDWriteLocalFontFileLoaderGetFilePathLengthFromKeyGetFilePathFromKeyGetLastWriteTimeFromKeyN)
rZ   r[   r\   r   r   r   rt   r   	c_wchar_pr   r_   r   r   r   r   %  sh        	#	x	9	9	;		xF	;	;	=	"		IIIr   r   l   se i  iJ           b         c                       e Zd Zde                     ee           ee                    fde                     ee                    fde                                fgZ	dS )IDWriteFontFileGetReferenceKey	GetLoaderAnalyzeN)
rZ   r[   r\   r   r   r   r   rt   r   r   r_   r   r   r   r   3  su        		wwx((''&//	:	:	<		ww455	6	6	8			IIIr   r   c                   N   e Zd Zde                                fde                     ee           ee                    fde                                fde                                fde                                fde                    e	 ee
                    fde                    e          fde                     ee          e ee          e          fd	e                     ee          e ee                    fd
e                    ee ee          e ee                    fde                    e	          fde                                fde                                fde                                fde                                fgZdS )IDWriteFontFaceGetTypeGetFilesGetIndexGetSimulationsIsSymbolFont
GetMetricsGetGlyphCountGetDesignGlyphMetricsGetGlyphIndicesTryGetFontTableReleaseFontTableGetGlyphRunOutlineGetRecommendedRenderingModeGetGdiCompatibleMetricsGetGdiCompatibleGlyphMetricsN)rZ   r[   r\   r   r   r   rt   r   METHODc_voidrv   r   r   BOOLr   r   r_   r   r   r   r   >  s       					wwv(@(@	A	A	C											FGG$788	9	9	;		F				 	wwv8L0M0Mt	T	T	V		wwv	@	@	B		vx(GGDMM	R	R	T		F							&			"			'		;IIIr   r   l   }=N i۟  i8H                    =      c                   L   e Zd Zde                                fde                                fde                                fde                                fde                                fde                    e ee                    fde                                fde                    e	 ee
           ee                    fd	e                    e          fd
e                                fde                                fde                                fgZdS )IDWriteFontFace1
GetMetric1GetGdiCompatibleMetrics1GetCaretMetricsGetUnicodeRangesIsMonospacedFontGetDesignGlyphAdvancesGetGdiCompatibleGlyphAdvancesGetKerningPairAdjustmentsHasKerningPairsGetRecommendedRenderingMode1GetVerticalGlyphVariantsHasVerticalGlyphVariantsN)rZ   r[   r\   r   r   r   r   r   rv   rt   r   r   r   r   r_   r   r   r   r   d  s'       				#												!	FGG$788	9	9	;	(			$	vwwv	?	?	A		D				'			#			#		/IIIr   r   c            	       x    e Zd Zdefdefdefd ee          fd ee          fd ee          fde	fdeffZ
d	S )
DWRITE_GLYPH_RUNfontFace
fontEmSize
glyphCountglyphIndicesglyphAdvancesglyphOffsets
isSideways	bidiLevelN)rZ   r[   r\   r   r]   rt   r   r   r   r   r^   r_   r   r   r   r     sp        	_%	u	v	)	''%..)	!4556	t	f	HHHr   r   c                       e Zd ZdefdeffZdS )DWRITE_SCRIPT_ANALYSISscriptshapesN)rZ   r[   r\   r   DWRITE_SCRIPT_SHAPESr^   r_   r   r   r   r     s&        	6	'(HHHr   r   c                       e Zd ZdefdeffZdS )DWRITE_FONT_FEATUREnameTag	parameterN)rZ   r[   r\   DWRITE_FONT_FEATURE_TAGrt   r^   r_   r   r   r   r     s&        	+,	fHHHr   r   c                   0    e Zd Zd ee          fdeffZdS )DWRITE_TYPOGRAPHIC_FEATURESfeaturesfeatureCountN)rZ   r[   r\   r   r   rt   r^   r_   r   r   r  r    s0        	WW0112	 HHHr   r  c                   8    e Zd ZdedfdedfdedfdedffZd ZdS )	DWRITE_SHAPING_TEXT_PROPERTIESisShapedAloner    	reserved1canBreakShapingAfterreservedrK   c                 8    d| j          d| j         d| j         dS )NzDWRITE_SHAPING_TEXT_PROPERTIES(r   r   )r  r	  r
  r   s    r   r   z'DWRITE_SHAPING_TEXT_PROPERTIES.__repr__  s,    u1Cuut~uuY]Yruuuur   N)rZ   r[   r\   r   r^   r   r_   r   r   r  r    sW        	&!$	fa 	+	VR 	Hv v v v vr   r  c                   :    e Zd ZdedfdedfdedfdedfdedffZd	S )
DWRITE_SHAPING_GLYPH_PROPERTIESjustificationr5   isClusterStartr    isDiacriticisZeroWidthSpacer  rG   N)rZ   r[   r\   r   r^   r_   r   r   r  r    sG        	&!$	61%	"	VQ'	VQHHHr   r  c                   p   e Zd Zde                    eee ee	           ee                    fde
                    ee	 ee                    fde                    e          fde
                    ee ee           ee	                    fde
                    e ee          e          fgZdS )IDWriteTextAnalysisSourceGetTextAtPositionGetTextBeforePositionGetParagraphReadingDirectionGetLocaleNameGetNumberSubstitutionN)rZ   r[   r\   r   r   HRESULTr   rt   r   r   r   DWRITE_READING_DIRECTIONr   r_   r   r   r  r    s        		GXvwwy/A/A776??	S	S	U	 	vy''&//	:	:	<	'	,	-	-	/		x''):L:L	M	M	O	 	vwwv	9	9	;IIIr   r  c            	           e Zd Zde                    eee ee                    fde                    eee          fde                    eee	e	          fde                    eee          fgZ
dS )IDWriteTextAnalysisSinkSetScriptAnalysisSetLineBreakpointsSetBidiLevelSetNumberSubstitutionN)rZ   r[   r\   r   r   r   rt   r   r   UINT8r   r_   r   r   r  r    s        		x9O1P1P	Q	Q	S		vvx	0	0	2		vvue	4	4	6	 	vvx	0	0	2	IIIr   r  c                       e Zd Zd Zd ZdS )Runc                     d| _         d| _        d| _        d| _        t	                      | _        d| _        d| _        d| _        d | _	        d S )Nr   F)

text_starttext_lengthglyph_startglyph_countr   r   bidiisNumberSubstitutedr   next_runr   s    r   __init__zRun.__init__  sO    ,..	#( r   c                 >    || j         k    o|| j         | j        z   k     S N)r&  r'  r   textPositions     r   ContainsTextPositionzRun.ContainsTextPosition  s$    t.d<$/TXTdBd3ddr   N)rZ   r[   r\   r-  r2  r_   r   r   r$  r$    s7        
 
 
e e e e er   r$  c                   b     e Zd ZeegZ fdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Z xZS )TextAnalysisc                     t                                                       d| _        d| _        d| _        d| _        g | _        d | _        d| _        d S Nr   )	superr-  
_textstart_textlength_glyphstart_glyphcount_ptrs_script_bidi)r   	__class__s    r   r-  zTextAnalysis.__init__  sQ    



r   c                    || _         d| _        || _        d| _        d| _        | j                                         t                      | _        || j        _	        | j        | _
        |                    | d||            d S r6  )_textr8  r9  r:  r;  r<  clearr$  
_start_runr'  _current_runAnalyzeScript)r   analyzertextr'  s       r   GenerateResultszTextAnalysis.GenerateResults   s{    
&
%%&1# OtQT:::::r   c                    |                      |           |                     |           |dk    rX|                     |          \  }}|d         j        |j        _        |d         j        |j        _        |j        | _        |dk    XdS r6  )SetCurrentRunSplitCurrentRunFetchNextRunr   r   r=  )r   thisr1  
textLengthscriptAnalysisruns         r   r  zTextAnalysis.SetScriptAnalysis  s     	<(((\***1nn"//
;;OC .q 1 8CJ .q 1 8CJ:DL 1nn qr   c                      t          d          )NzCurrently not implemented.)	Exception)r   rM  r1  
textStringrN  s        r   r  z"TextAnalysis.GetTextBeforePosition!  s    4555r   c                     || j         k    r$t          d           | _        | j        |d<   d|d<   nHt          | j        |d                    }| j                            |           ||d<   | j         |z
  |d<   dS r6  )r9  r   _no_ptrrA  r<  append)r   rM  r1  rS  rN  ptrs         r   r  zTextAnalysis.GetTextAtPosition$  s     4+++$T??DL LJqMJqMMDJ|}}566CJc"""JqM ,|;JqMqr   c                     dS r6  r_   r   s    r   r  z)TextAnalysis.GetParagraphReadingDirection8      qr   c                 \    t          d          | _        | j        |d<   | j        |z
  |d<   dS )N r   )r   _TextAnalysis__local_namer9  )r   rM  r1  rN  
localeNames        r   r  zTextAnalysis.GetLocaleName;  s2    %bMM)
1(<7
1qr   c                     dS r6  r_   r   s    r   r  z"TextAnalysis.GetNumberSubstitutionA  rY  r   c                 P    | j         r| j                             |          rd S d S d S r/  )rD  r2  r0  s     r   rJ  zTextAnalysis.SetCurrentRunD  s>     	!2!G!G!U!U 	F	 	 	 	r   c                 ,   | j         sd S || j         j        k    rd S t          j        | j                   }| j         j        |_        || j         _        || j         j        z
  }|xj        |z  c_        |xj        |z  c_        || j         _        || _         d S r/  )rD  r&  copyr,  r'  )r   r1  new_run
splitPoints       r   rK  zTextAnalysis.SplitCurrentRunH  s      	F4,777F)D-..,5%,"!D$5$@@
j(z)(2%#r   c                     | j         }|| j         j        k     r#|                     | j         j        |z              n| j         j        | _         ||j        z  }||fS r/  )rD  r'  rK  r&  r,  )r   rN  original_runs      r   rL  zTextAnalysis.FetchNextRun\  sc    (*666  !2!=
!JKKKK $ 1 :Dl..
Z''r   )rZ   r[   r\   r  r  _interfaces_r-  rH  r  r  r  r  r  r  rJ  rK  rL  __classcell__r?  s   @r   r4  r4    s        -/FGL	 	 	 	 	; ; ;  $6 6 6  (        $ $ $(
( 
( 
( 
( 
( 
( 
(r   r4  c                      e Zd Zde                     ee          ee ee                    fde                                fde                                fde                                fde                    e	ee
ee ee          e	e e ee                     ee          ee ee           ee           ee           ee           ee                    fde                    e	 ee           ee          e ee           ee          ee
eee ee          e	 ee           ee          e ee           ee                    fde                                fgZdS )	IDWriteTextAnalyzerrE  AnalyzeBidiAnalyzeNumberSubstitutionAnalyzeLineBreakpoints	GetGlyphsGetGlyphPlacementsGetGdiCompatibleGlyphPlacementsN)rZ   r[   r\   r   r   r   r  rt   r  r   r   r   r   r   r  r   r  r  r]   r   r   r_   r   r   rj  rj  i  s       		ww8996677SjKkKk	l	l	n				$			!				y&/4wwOeGfGf (GGGG<W4X4X,Y,Y[b[bci[j[jvwwv@^8_8_wv0O(P(PRYRYZ`RaRa
c 
c	d
 
	y''&//77;Y3Z3Z\bdkdklrdsdsw>??Z_aegkw566	77KfCgCgwvH[@\@\
^ 
^	_
 
+		'IIIr   rj  c                   r   e Zd Zde                    e          fde                    e ee           ee	                    fde                    e ee                    fde                    eee          fde                    e ee                    fde                    eee          fgZ
dS )IDWriteLocalizedStringsGetCountFindLocaleNameGetLocaleNameLengthr  GetStringLength	GetStringN)rZ   r[   r\   r   r   rt   r   r   r   r   r   r_   r   r   rr  rr    s        		F					y''&//774==	A	A	C		vwwv	/	/	1		vy&	1	1	3		vwwv	/	/	1		vy&	1	1	3IIIr   rr  c                       e Zd Zde                                fde                    e          fde                    ee          fgZdS )IDWriteFontListGetFontCollectionGetFontCountGetFontN)	rZ   r[   r\   r   r   r   rt   r   r   r_   r   r   ry  ry    sX        					F					vx	(	(	*IIIr   ry  c                       e Zd Zde                     ee                    fde                    eee	e
          fde                                fgZdS )IDWriteFontFamilyGetFamilyNamesGetFirstMatchingFontGetMatchingFontsN)rZ   r[   r\   r   r   r   rr  DWRITE_FONT_WEIGHTDWRITE_FONT_STRETCHDWRITE_FONT_STYLEr   r   r_   r   r   r~  r~    sl        		ww677	8	8	:		)+>@QS[	\	\	^			IIIr   r~  c                       e Zd Zde                                fde                                fde                                fgZdS )IDWriteFontFamily1GetFontLocalityGetFont1GetFontFaceReferenceNrZ   r[   r\   r   r   r   r_   r   r   r  r    sN        									IIIr   r  c                   d   e Zd Zde                     ee                    fde                    e          fde                    e	          fde                    e
          fde                    e          fde                     ee                    fde                    e ee           ee                    fde                                fd	e                                fd
e                    e ee                    fde                     ee                    fgZdS )IDWriteFontGetFontFamily	GetWeight
GetStretchGetStyler   GetFaceNamesGetInformationalStringsr   r   HasCharacterCreateFontFaceN)rZ   r[   r\   r   r   r   r~  r   r  r  r  r   rr  DWRITE_INFORMATIONAL_STRING_IDrt   r   r   r_   r   r   r  r    sU       		ww011	2	2	4		&	'	'	)		'	(	(	*		%	&	&	(		D					ww677	8	8	:	"	5ww?V7W7WY`Y`aeYfYf	g	g	i								vwwt}}	-	-	/		ww//	0	0	2+IIIr   r  c                       e Zd Zde                                fde                                fde                                fde                                fgZdS )IDWriteFont1GetMetrics1	GetPanoser   r   Nr  r_   r   r   r  r    sa        													IIIr   r  c            
           e Zd Zde                    e          fde                    e ee                    fde                    e	 ee
           ee                    fde                                fgZdS )IDWriteFontCollectionGetFontFamilyCountr  FindFamilyNameGetFontFromFontFaceN)rZ   r[   r\   r   r   rt   r   r   r~  r   UINTr   r   r_   r   r   r  r    s        		F					vww'899	:	:	<		y''$--	?	?	A				IIIr   r  c                   z    e Zd Zde                                fde                     ee                    fgZdS )IDWriteFontCollection1
GetFontSetGetFontFamily1N)rZ   r[   r\   r   r   r   r  r   r_   r   r   r  r    sJ        					ww122	3	3	5IIIr   r  c            
       "   e Zd Zde                     ee           ee                    fde                                fde                                fde                    e ee	                    fde                                fgZ
dS )IDWriteGdiInteropCreateFontFromLOGFONTConvertFontToLOGFONTConvertFontFaceToLOGFONTCreateFontFaceFromHdcCreateBitmapRenderTargetN)rZ   r[   r\   r   r   r   LOGFONTWr  HDCr   r   r_   r   r   r  r    s        	 	wwx((''+*>*>	?	?	A				#			 	sGGO44	5	5	7	#		IIIr   r  c                   J   e Zd Zde                    e          fde                                fde                                fde                                fde                                fde                                fde                                fde                                fd	e                                fd
e                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                    e ee                    fde                    eee          fde                                fde                                fde                                fde                                fde                                fde                                fgZ	dS )IDWriteTextFormatSetTextAlignmentSetParagraphAlignmentSetWordWrappingSetReadingDirectionSetFlowDirectionSetIncrementalTabStopSetTrimmingSetLineSpacingGetTextAlignmentGetParagraphAlignmentGetWordWrappingGetReadingDirectionGetFlowDirectionGetIncrementalTabStopGetTrimmingGetLineSpacingrz  GetFontFamilyNameLengthGetFontFamilyNameGetFontWeightGetFontStyleGetFontStretchGetFontSizeru  r  N)
rZ   r[   r\   r   r   DWRITE_TEXT_ALIGNMENTrt   r   r   r   r_   r   r   r  r    s       		,	-	-	/	 												 												 												 												"	vwwv	/	/	1		vy&	1	1	3																		c3IIIr   r  c                       e Zd Zde                    e          fde                    e          fde                                fgZdS )IDWriteTypographyAddFontFeatureGetFontFeatureCountGetFontFeatureN)	rZ   r[   r\   r   r   r   r   rt   r   r_   r   r   r  r  ?  sW        		*	+	+	-		F						IIIr   r  c                       e Zd ZdefdeffZdS )DWRITE_TEXT_RANGEstartPositionr   N)rZ   r[   r\   rt   r^   r_   r   r   r  r  J  s%        	&!	6HHHr   r  c                   *    e Zd ZdefdefdefdeffZdS )DWRITE_OVERHANG_METRICSrb   rc   rd   re   NrY   r_   r   r   r  r  Q  rf   r   r  c            	          e Zd Zg de                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fd	e                                fd
e                                fde                                fde                                fde                    ee          fde                                fde                    e          fde                    e          fde                                fde                    e	 e
e	          e          fde                    e	ee	e          fde                    e	 e
e           e
e                    fde                                fde                                fde                                fde                                fde                    e	 e
e           e
e                    fde                                fde                                fde                    e	 e
e           e
e                    fde                                fde                                fde                                fd e                                fd!e                     e
e                    fd"e                     e
e                    fd#e                     e
e          e	 e
e	                    fd$e                     e
e                    fd%e                                fd&e                                fd'e                                fZd(S ))IDWriteTextLayoutSetMaxWidthSetMaxHeightSetFontCollectionSetFontFamilyNameSetFontWeightSetFontStyleSetFontStretchSetFontSizeSetUnderlineSetStrikethroughSetDrawingEffectSetInlineObjectSetTypographySetLocaleNameGetMaxWidthGetMaxHeightGetFontCollection2GetFontFamilyNameLength2GetFontFamilyName2GetFontWeight2GetFontStyle2GetFontStretch2GetFontSize2GetUnderlineGetStrikethroughGetDrawingEffectGetInlineObjectGetTypographyGetLocaleNameLength1GetLocaleName1DrawGetLineMetricsr   GetOverhangMetricsGetClusterMetricsDetermineMinWidthHitTestPointHitTestTextPositionHitTestTextRangeN)rZ   r[   r\   r   r   r  r  r   r]   rt   r   r   r   r  r   rl   r  r   r   r_   r   r   r  r  Z  s)       O			O 
		O
 
		O 
		O 
		O 
		O 
		O 
		O" 
		#O& 
		'O* 
		+O. 
		/O2 
	(*;	<	<	>3O6 
		7O: 
	E			;O> 
	E			?OB 
		COF 
$	vwwv	9	9	;GOJ 
	vy&(	;	;	=KON 
	vww'9::GGDU<V<V	W	W	YOOR 
		SOV 
		WOZ 
		[O^ 
		_Ob 
	vwwt}}gg6G.H.H	I	I	KcOf 
		gOj 
		kOn 
	vww'89977CT;U;U	V	V	XoOr 
 		sOv 
		wOz 
		{O~ 
		OB 
	ww233	4	4	6COF 
	ww677	8	8	:GOJ 
	ww566	P	P	RKON 
	wwu~~	&	&	(OOR 
		SOV 
		WOZ 
		[OIIIr   r  c                      e Zd Zde                                fde                                fde                                fde                    e ee           ee           ee           ee                    fgZ	dS )IDWriteTextLayout1SetPairKerningGetPairKerningSetCharacterSpacingGetCharacterSpacingN)
rZ   r[   r\   r   r   rt   r   r]   r  r   r_   r   r   r  r    s        											vwwu~~wwu~~wwu~~wwWhOiOi	j	j	l	IIIr   r  c                       e Zd Zde                    e ee                    fde                    ee          fgZdS )IDWriteFontFileEnumeratorMoveNextGetCurrentFontFileN)	rZ   r[   r\   r   r   r   r   r   r   r_   r   r   r  r    sO        		x	/	/	1		x	*	*	,IIIr   r  c                   j    e Zd Zde                    eeee e ee                              fgZ	dS )IDWriteFontCollectionLoaderCreateEnumeratorFromKeyN)
rZ   r[   r\   r   r   r   rt   r   r  r   r_   r   r   r  r    sJ        	"	x8VWWWWMfEgEg=h=h	i	i	kIIIr   r  c                   D    e Zd ZegZd Zd Zd Zd Zd Z	d Z
d Zd Zd	S )
MyFontFileStreamc                 J    || _         t          |          | _        g | _        d S r/  )_datalen_sizer<  )r   datas     r   r-  zMyFontFileStream.__init__  s!    
YY



r   c                     dS Nr    r_   r   rM  s     r   AddRefzMyFontFileStream.AddRef  rY  r   c                     dS r  r_   r  s     r   ReleasezMyFontFileStream.Release  rY  r   c                     dS r6  r_   r   rM  refiidtesters       r   QueryInterfacezMyFontFileStream.QueryInterface  rY  r   c                 .   ||z   | j         k    rdS | j        |d          }t          j        t	          |          z                      t          |                    }t          |t                    }| j	        
                    |           ||d<   d |d<   dS )Nl   @   r   )r
  r  ctypesc_ubyter	  from_buffer	bytearraycastr   r<  rV  )	r   rM  fragmentStart
fileOffsetfragmentSizefragmentContextfragmentbufferrW  s	            r   r   z!MyFontFileStream.ReadFileFragment  s    $tz11::jkk*.3x==0==i>Q>QRR68$$
#a!qr   c                     dS r6  r_   )r   rM  r   s      r   r   z$MyFontFileStream.ReleaseFileFragment  rY  r   c                     | j         |d<   dS r6  )r
  )r   rM  fileSizes      r   r   zMyFontFileStream.GetFileSize  s    jqr   c                     dS )Nl   @   r_   )r   rM  lastWriteTimes      r   r   z!MyFontFileStream.GetLastWriteTime  s    zr   N)rZ   r[   r\   r   rf  r-  r  r  r  r   r   r   r   r_   r   r   r  r    s        )*L  
                r   r  c                   8    e Zd ZegZd Zd Zd Zd Zd Z	d Z
dS )LegacyFontFileLoaderc                     i | _         d S r/  )_streamsr   s    r   r-  zLegacyFontFileLoader.__init__  s    r   c                     dS r6  r_   r  s       r   r  z#LegacyFontFileLoader.QueryInterface  rY  r   c                     dS r  r_   r  s     r   r  zLegacyFontFileLoader.AddRef  rY  r   c                     dS r  r_   r  s     r   r  zLegacyFontFileLoader.Release  rY  r   c                    t          |t          t                              }t                               | j        |j        j                 j        t                   t          t                              | _	        | j	        |d<   dS r6  )
r  r   c_uint32r  r+  contentsvalue	_pointersr   _ptr)r   rM  fontfileReferenceKeyfontFileReferenceKeySizefontFileStreamconvert_indexs         r   r   z(LegacyFontFileLoader.CreateStreamFromKey  sf    1783D3DEEKKm.D.J K UVk l '(= > >@ @	 Iqqr   c                 4    t          |          | j        |<   d S r/  )r  r+  )r   indexr  s      r   SetCurrentFontz#LegacyFontFileLoader.SetCurrentFont
  s    /55er   N)rZ   r[   r\   r   rf  r-  r  r  r  r   r;  r_   r   r   r)  r)    sv        ,-L          6 6 6 6 6r   r)  c                   ,    e Zd ZegZd Zd Zd Zd ZdS )MyEnumeratorc                 (   t          |t                    | _        d| _        t	          | j                  | _        d| _        g | _        g | _        g | _	        d | _
        t          d          | _        t	          | j                  | _        || _        d S )Npyglet_dwritenone)r  IDWriteFactoryfactorykeyr	  sizecurrent_index_keys
_font_data_font_files_current_filecreate_unicode_buffer_font_key_ref_font_key_len_file_loaderr   rC  loaders      r   r-  zMyEnumerator.__init__  s    G^44"MM	
!26:: !344"r   c                     || _         d S r/  )rH  r   fontss     r   AddFontDatazMyEnumerator.AddFontData!  s    r   c                    | xj         dz  c_         | j         t          | j                  k    r
t                      }| j                            | j         | j        | j                             | j         }| j         | j        vrKt          t          |                    }t          |t                    }| j                            |           | j                            | j        | j                  t          |          | j        t          |                     | j                            |           d|d<   nd|d<   d S )Nr    r   )rF  r	  rH  r   rN  r;  rG  pointerr0  r  r   rV  rC  CreateCustomFontFileReferencesizeofbyrefrI  )r   rM  hasCurrentFile	font_filerD  r"  rW  s          r   r   zMyEnumerator.MoveNext$  s(   aT_!5!555'))I,,T-?QUQcAdeee$C%33 #//68,,
!!#&&&L66tz$BT7U7=f~~7;7H7<Y7G7GI I I
 ##I... !N1 !N1r   c                 t    t          |t          t                              }| j        | j                 |d<   dS r6  )r  r   r   rI  rF  )r   rM  fontFiles      r   r  zMyEnumerator.GetCurrentFontFileB  s2    '/":":;;&t'9:qr   N)	rZ   r[   r\   r  rf  r-  rT  r   r  r_   r   r   r=  r=    sX        -.L# # #        <    r   r=  c                   8    e Zd ZegZd Zd Zd Zd Zd Z	d Z
dS )LegacyCollectionLoaderc                 0    t          ||          | _        d S r/  )r=  _enumeratorrO  s      r   r-  zLegacyCollectionLoader.__init__K  s    '88r   c                 :    | j                             |           d S r/  )ra  rT  rR  s     r   rT  z"LegacyCollectionLoader.AddFontDataN  s    $$U+++++r   c                     d| _         dS r  _ir  s     r   r  zLegacyCollectionLoader.AddRefQ      qr   c                     d| _         dS Nr   r    rd  r  s     r   r  zLegacyCollectionLoader.ReleaseU  rf  r   c                     dS r6  r_   r  s       r   r  z%LegacyCollectionLoader.QueryInterfaceY  rY  r   c                     t                               | j        j        t                   t          t                              | _        | j        |d<   dS r6  )r  r  ra  r3  r  r   r4  )r   rM  rC  rD  key_size
enumerators         r   r  z.LegacyCollectionLoader.CreateEnumeratorFromKey\  sE    KK 0 :;T U '(A B BD D	 	
1qr   N)rZ   r[   r\   r  rf  r-  rT  r  r  r  r  r_   r   r   r_  r_  H  sv        /0L9 9 9, , ,          r   r_  l   Znp i8  i[K           }         H   c                       e Zd Zde                    e          fde                    e          fde                    e          fde                    e          fde                    e          fgZdS )IDWriteRenderingParamsGetGammaGetEnhancedContrastGetClearTypeLevelGetPixelGeometryGetRenderingModeN)rZ   r[   r\   r   r   r]   r  r   r_   r   r   ru  ru  g  s        		E					E					E					D					D			IIIr   ru  c                      e Zd Zde                     ee          e          fde                     ee          e	e
 ee                    fde                     ee                    fde                     ee                    fde                    ee	 ee                    fde                    e	e
 ee           ee                    fde                                fde                     ee                    fd	e                                fd
e                    eeeee ee                    fde                    e	          fde                     ee                    fde                    eeeeeee ee                    fde                     ee                    fde                     ee                    fde                    ee
eee ee                    fde                                fde                                fde                     ee                    fde                                fde                                fgZdS )rB  GetSystemFontCollectionCreateCustomFontCollectionRegisterFontCollectionLoaderUnregisterFontCollectionLoaderCreateFontFileReferencerW  r  CreateRenderingParamsCreateMonitorRenderingParamsCreateCustomRenderingParamsRegisterFontFileLoaderUnregisterFontFileLoaderCreateTextFormatCreateTypographyGetGdiInteropCreateTextLayoutCreateGdiCompatibleTextLayoutCreateEllipsisTrimmingSignCreateTextAnalyzerCreateNumberSubstitutionCreateGlyphRunAnalysisN)rZ   r[   r\   r   r   r   r  r   r  r   rt   r   r   r   ru  r]   r  r  r  r  r  r  r  r  rj  r   r_   r   r   rB  rB  v  s       	"	ww455t	<	<	>	%	ww:;;XvwwWlOmOm	n	n	p	'	ww:;;	<	<	>	)	ww:;;	<	<	>	"	y(GGO,D,D	E	E	G	(	x1I)J)JGGTcLdLd	e	e	g				 	ww566	7	7	9	'			&	ueUD$@V8W8W	X	X	Z	!	x	 	 	"	#	ww788	9	9	;		y"79KM^`si1B)C)C
E 
E	F 
	ww011	2	2	4		ww011	2	2	4		y&*;UE77SdKeKe	f	f	h	(			%				ww233	4	4	6	#			!		U,IIIr   rB  i/W0i  iA     n      0   ~   `   j   c                   f    e Zd Zde                                fde                                fgZdS )IDWriteFactory1GetEudcFontCollectionCreateCustomRenderingParams1Nr  r_   r   r   r  r    s;        	 			'		IIIr   r  c                       e Zd Zde                     ee          eeee	e
ee ee           ee           ee                    fgZdS )IDWriteFontFallbackMapCharactersN)rZ   r[   r\   r   r   r   r  rt   r  r   r  r  r  r  r]   r   r_   r   r   r  r    su        		ww89966K`bk)+<>QSZSZ[aSbSbw{++wu~~
' 
'	(IIIr   r  c                   f    e Zd Zde                                fde                                fgZdS )IDWriteColorGlyphRunEnumeratorr   GetCurrentRunNr  r_   r   r   r  r    s;        						IIIr   r  c                   ,   e Zd Zde                     ee                    fde                                fde                    ee ee          e	e
e	e ee                    fde                                fde                                fgZdS )IDWriteFactory2GetSystemFontFallbackCreateFontFallbackBuilderTranslateColorGlyphRunCreateCustomRenderingParams2r  N)rZ   r[   r\   r   r   r   r  r]   r   r   DWRITE_MEASURING_MODErt   r  r   r_   r   r   r  r    s        	 	ww233	4	4	6	$			!	ueWW-=%>%>J_aikqw=>>
@ 
@	A 
(			!		IIIr   r  i`9iD  iI        :         2   c            
       b   e Zd Zde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fgZdS )	IDWriteFontSetr{  r  FindFontFaceReferenceFindFontFaceGetPropertyValuesGetPropertyOccurrenceCountr  Nr  r_   r   r   r  r    s        							 									%								IIIr   r  c            	           e Zd Zde                                fde                                fde                                fde                     ee                    fgZdS )IDWriteFontSetBuilderAddFontFaceReference
AddFontSetCreateFontSetN)rZ   r[   r\   r   r   r   r  r   r_   r   r   r  r    so        											ww~..	/	/	1	IIIr   r  c                   >    e Zd Zde                    e          fgZdS )IDWriteFontSetBuilder1AddFontFileN)rZ   r[   r\   r   r   r   r   r_   r   r   r  r    s,        			'	'	)IIIr   r  c                      e Zd Zde                                fde                                fde                                fde                                fde                                fde                     ee                    fde                    e ee                    fde                                fde                                fg	Z	d	S )
IDWriteFactory3r  CreateCustomRenderingParams3CreateFontFaceReferenceGetSystemFontSetCreateFontSetBuilderCreateFontCollectionFromFontSetGetSystemFontCollection3GetFontDownloadQueueN)
rZ   r[   r\   r   r   r   r  r  r  r   r_   r   r   r  r    s        	!			'			"			"							ww455	6	6	8	*	~ww/E'F'F	G	G	I	#					#IIIr   r  c                   <    e Zd Zde                                fgZdS )IDWriteColorGlyphRunEnumerator1GetCurrentRun1Nr  r_   r   r   r  r    s(        			IIIr   r  c                       e Zd Zde                    e ee          ee	e
ee ee                    fde                                fde                                fgZdS )IDWriteFactory4TranslateColorGlyphRun4ComputeGlyphOrigins_ComputeGlyphOriginsN)rZ   r[   r\   r   r   rV   r   r   r   DWRITE_GLYPH_IMAGE_FORMATSr  rt   r  r   r_   r   r   r  r     s        	"	|WW-=%>%>Jd,hHg@h@h
j 
j	k 
 					IIIr   r  c                       e Zd Zde                                fde                    eeee ee	                    fde                                fgZ
dS )IDWriteInMemoryFontFileLoaderr   CreateInMemoryFontFileReferenceGetFileCountN)rZ   r[   r\   r   r   rB  r   r  r   r   r   r_   r   r   r  r  ,  se        				*	~xxAYAY	Z	Z	\			IIIr   r  l   9+ i*  i	O  e            c                       e Zd Zde                     ee                    fde                     ee                    fde                                fde                                fgZdS )IDWriteFactory5CreateFontSetBuilder1CreateInMemoryFontFileLoaderCreateHttpFontFileLoaderAnalyzeContainerTypeN)	rZ   r[   r\   r   r   r   r  r  r   r_   r   r   r  r  :  s         
!	ww566	7	7	9	'	ww<==	>	>	@	#						IIIr   r  c                   <    e Zd Zde                                fgZdS )ID2D1Resource
GetFactoryNr  r_   r   r   r  r  M  s(        			IIIr   r  c                       e Zd Zde                                fde                                fde                                fde                                fgZdS )
ID2D1Brush
SetOpacitySetTransform
GetOpacityGetTransformNr  r_   r   r   r  r  T  sa        													IIIr   r  c                   f    e Zd Zde                                fde                                fgZdS )ID2D1SolidColorBrushSetColorGetColorNr  r_   r   r   r  r  a  s;        						IIIr   r  l    c                       e Zd ZdefdeffZdS )D2D1_PIXEL_FORMATformat	alphaModeN)rZ   r[   r\   DXGI_FORMATD2D1_ALPHA_MODEr^   r_   r   r   r  r    s%        	;	o&HHHr   r  c                   6    e Zd ZdefdefdefdefdefdeffZdS )D2D1_RENDER_TARGET_PROPERTIEStypepixelFormatdpiXdpiYusageminLevelN)	rZ   r[   r\   D2D1_RENDER_TARGET_TYPEr  r]   D2D1_RENDER_TARGET_USAGED2D1_FEATURE_LEVELr^   r_   r   r   r  r    sG        	()	)*			*+	'(HHHr   r  W           c                   	   e Zd Zg de                                fde                                fde                                fde                                fde                     ee          e ee                    fde                                fde                                fde                                fd	e                                fd
e                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                    e	e
e ee          eee          fde                    eeeee          fde                    ee ee          ee          fde                    e          fde                                fde                    ee          fde                                fde                    ee          fd e                                fd!e                    e          fd"e                                fd#e                                fd$e                                fd%e                                fd&e                                fd'e                    ee          fd(e                                fd)e                                fd*e                                fd+e                                fd,e                    e ee                    fd-e                    e          fd.e                    ee          fd/e                                fd0e                                fd1e                                fd2e                                fd3e                                fd4e                                fd5e                                fZd6S )7ID2D1RenderTargetCreateBitmapCreateBitmapFromWicBitmapCreateSharedBitmapCreateBitmapBrushCreateSolidColorBrushCreateGradientStopCollectionCreateLinearGradientBrushCreateRadialGradientBrushCreateCompatibleRenderTargetCreateLayer
CreateMeshDrawLineDrawRectangleFillRectangleDrawRoundedRectangleFillRoundedRectangleDrawEllipseFillEllipseDrawGeometryFillGeometryFillMeshFillOpacityMask
DrawBitmapDrawTextDrawTextLayoutDrawGlyphRunr  r  SetAntialiasModeGetAntialiasModeSetTextAntialiasModeGetTextAntialiasModeSetTextRenderingParamsGetTextRenderingParamsSetTagsGetTags	PushLayerPopLayerFlushSaveDrawingStateRestoreDrawingStatePushAxisAlignedClipPopAxisAlignedClipClear	BeginDrawEndDrawGetPixelFormatSetDpiGetDpiGetSizeGetPixelSizeGetMaximumBitmapSizeIsSupportedN)rZ   r[   r\   r   r   r   rh   r   r  r   r  r  ra   r  D2D1_DRAW_TEXT_OPTIONSr  r   r   rV   r  rt   r   D2D1_TEXT_ANTIALIAS_MODEru  r   r_   r   r   r  r    s       l			l 
%		l
 
		l 
		l 
!	ww|,,h@T8U8U	V	V	Xl 
(		l 
%		l 
%		l" 
(		#l& 
		'l* 
		+l. 
		/l2 
		3l6 
		7l: 
 		;l> 
 		?lB 
		ClF 
		GlJ 
		KlN 
		OlR 
		SlV 
		WlZ 
		[l^ 
	y$(977;;O;OQ[]s,
. 
.	/_ld 
	FL*;Z	P	P	Relh 
	FL''2B*C*CZQW	X	X	Zill 
	F			mlp 
		qlt 
	F4	5	5	7ulx 
		yl| 
 	F4	5	5	7}l@ 
 		AlD 
"	-	.	.	0ElH 
"		IlL 
		MlP 
		QlT 
		UlX 
		Yl\ 
	x	*	*	,]l` 
		ald 
		elh 
		ill 
		mlp 
	FGGL11	2	2	4qlt 
	F			ulx 
	x	*	*	,yl| 
		}l@ 
		AlD 
		ElH 
		IlL 
		MlP 
 		QlT 
		UlIIIr   r  iG"iPo  iZF     E         ;   c                      e Zd Zde                                fde                                fde                                fde                                fde                                fde                                fde                                fde                                fd	e                                fd
e                                fde                    e ee           ee                    fde                                fde                                fde                                fgZ	dS )ID2D1FactoryReloadSystemMetricsGetDesktopDpiCreateRectangleGeometryCreateRoundedRectangleGeometryCreateEllipseGeometryCreateGeometryGroupCreateTransformedGeometryCreatePathGeometryCreateStrokeStyleCreateDrawingStateBlockCreateWicBitmapRenderTargetCreateHwndRenderTargetCreateDxgiSurfaceRenderTargetCreateDCRenderTargetN)
rZ   r[   r\   r   r   r   r   r  r  r   r_   r   r   r8  r8  #  s>       							"			)			 						$									"			&	z77+H#I#I77SdKeKe	f	f	h	!			(					7IIIr   r8  z,Cannot use DirectWrite without a WIC Decoderreturnc                  l    t          t                    } t          j        | t                     | j        S )z3Retrieve the string representing the system locale.)rK  LOCALE_NAME_MAX_LENGTHkernel32GetUserDefaultLocaleNamer2  )
local_names    r   get_system_localerM  X  s-    &'=>>J%j2HIIIr   c                   h     e Zd ZeZereneZe	Z
 fdZd Zd Zd Zd Zd Zd Zd Zd	 Zd
 Z xZS )DirectWriteGlyphRendererc                 L   d | _         d | _        d | _        d| _        t	          t
          |                               |           || _        t                      | _	        | j        j
                            t          | j	                             t                      | _        d S )N)r   r   )_render_target_bitmap_brush_bitmap_dimensionsr7  rO  r-  fontrj  	_analyzer_write_factoryr  rY  r4  _text_analysis)r   rU  r?  s     r   r-  z!DirectWriteGlyphRenderer.__init__d  s    ""(&--66t<<<	,..	 33E$.4I4IJJJ*nnr   c           
         t          |          }t                      }| j        j                            |t          |          | j        j        ||t          |                     t                      }|	                    t          |                     t          t          j        |j                            t          t          j        |j                            }}t                      }t           j                            ||t&          t(          t          |                     t+                      }t,                              |t0          t          |                     |                    | j                   | j        st9                      | _        |                    t<          dt          | j                             |                                 |                     tB                     |"                    tF          || j        | j$                   |%                    dd           |&                                 t           '                    |          }	|	S )zThis process takes Pyglet out of the equation and uses only DirectWrite to shape and render text.
        This may allows more accurate fonts (bidi, rtl, etc) in very special circumstances.N)(rK  r  rU  rW  r  r	  _text_formatrY  rl   r   intmathceilrm   ro   r   wic_decoder_factoryr  r
   WICBitmapCacheOnDemandr  d2d_factoryrC  default_target_propertiesr  antialias_moderS  r  r  whiter'  r&  transparentr  	no_offsetdraw_optionsr(  r  	get_image)
r   rG  rm   ro   text_buffertext_layoutlayout_metricsbitmaprt
image_datas
             r   render_to_imagez(DirectWriteGlyphRenderer.render_to_imageq  s    ,D11'))	 11I"+	
 	
 	
 -..u^44555DIn&:;;<<c$)NLaBbBb>c>cv)))"&MM	
 	
 	
   //8QSXY[S\S\]]] 	 3444{ 	1.00DK
  eDK.@.@AAA


)%++	- 	- 	-
 	

4


 **622
r   c                    t          |                    d                    dz  }t          ||          }| j                            | j        |t          |                     t          d|z  dz  dz             }|}t          |z              }t          |z              }t          |z              }	t          |z              }
t                      }| j                            |||dd| j        j        ddddd||||	|
t          |                     t          |z              }t          |z              }| j                            |||||	|
||| j        j        j        dd| j        j        | j        j        ddd||           ||j        |	|||fS )zOConverts a string of text into a list of indices and advances used for shaping.z	utf-16-ler3   r4   r   FNr   )r	  encoderK  rX  rH  rV  r[  r   r  r  rt   rn  r=  rY  r]   r   ro  rU  _font_metricsrw   localer2  )r   rG  	font_facer'  ri  max_glyph_sizer   clusters
text_propsindicesglyph_propsactual_countadvancesoffsetss                 r   get_string_infoz(DirectWriteGlyphRenderer.get_string_info  s   $++k2233q8 ,D+>> 	++DNK[IYIYZZZ Q_q02566VO&&4v=@@
N*--6GJJxx  ',#	
 	
 	
( FN%%&/22))I#45'I#	
 	
 	
( L.7HTTr   c                 0   t          |z              }|                    |||d           g }|D ]g}|j        |j        z
  |j        z
  }|dk    rd}|j        |j        z
  |j        z
  }|j        }	|j        }
|j        }|                    |||	||
f           h|S )zReturns a list of tuples with the following metrics per indice:
            (glyph width, glyph height, lsb, advanceWidth)
        Fr   r    )	r   r   r   r   r   r   r   r   rV  )r   rt  rx  countglyph_metricsmetrics_outmetricglyph_widthglyph_heightlsbbsbadvance_widths               r   get_glyph_metricsz*DirectWriteGlyphRenderer.get_glyph_metrics  s     .588''uMMM# 	U 	UF!.1GG&JaaK a"063HH6KccL(C*C"/M\3sSTTTTr   c           
      2    t          ||d|||||          }|S r  )r   )	r   rt  rE  rx  r{  r|  sidewaysr*  rP  s	            r   _get_single_glyph_runz.DirectWriteGlyphRenderer._get_single_glyph_run  s0    	
 	
 
r   c                    	 t           rQt                      }| j        j                            t
          |dt          | j        ddt          |                    }nPt          rGt                      }| j        j                            dd|d| j        ddt          |                    }ndS dS # t          $ r}|j        dk    r|Y d}~nd}~ww xY wdS )z5Will return True if the run contains a colored glyph.Nr   r  FTiP)%WINDOWS_10_CREATORS_UPDATE_OR_GREATERr  rU  rW  r  rf  DWRITE_GLYPH_IMAGE_FORMATS_ALLmeasuring_moderY  WINDOWS_8_1_OR_GREATERr  r  OSErrorwinerror)r   rP  rl  colordw_errs        r   is_color_runz%DirectWriteGlyphRenderer.is_color_run  s   	4 <>>
	0HH2'*%%	 	 ( ;==
	0GG'*%%  u4 	 	 	+-- .----	
 us   B&B, ,
C6CCc           	         |\  }}}}	}
t          dz  |          }t          dz  |          }|                     || j        j        ||t          |          dd          }| j        t          z  r|                     |          rdS |	r/t          t          j        |	| j        j        z                      }n.t          t          j        || j        j        z                      }d}|dk     r|| j        j        z  }| j        j        r||dz  z  }|                     |dz   t          t          j        | j        j                                       t!          | |j        z
  | j        j        |j        z             }| j                                         | j                            t.                     | j                            ||| j        | j                   | j                            dd           t8                              | j                  }| j                            |          }|                     | j        j!         |||j        |j                   |S )z-Renders a single glyph using D2D DrawGlyphRunr    Fr   Nr3   )"r   r]   r  rU  
_real_sizerV  rg  (D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONTr  r[  r\  r]  font_scale_ratiorF   _create_bitmapmax_glyph_heightrV   r   rx   r   rQ  r'  r&  re  r  rS  r  r(  r^  rh  rR  create_glyphset_bearingsry   )r   rt  indiceadvanceoffsetmetricsr  r  	glyph_lsbglyph_advance	glyph_bsb
new_indicenew_advancerP  render_widthrender_offset_xbaseline_offsetimageglyphs                      r   render_single_glyphz,DirectWriteGlyphRenderer.render_single_glyph8  si   IPF\9mY qj&))
qy'**((I FOO
 
 GG 	DL]L]^aLbLb 	4  	Tty9S)STTUULLtyty7Q)QRRSSLq=='$)*DDO 9 	0\Q./L
 	L1,	$)*D E EFF	H 	H 	H ''7&:N'N'+y'7&:O'OQ Q 	%%'''!!+...((),)-)-)<	> 	> 	>
 	##D$///%%dl33	&&u--DI--"!/!0	2 	2 	2
 r   c           	         | j                             |          }t                      }|                    t	          |                     t          t          j        |j                            }t          t          j        |j	                            }|dk    s|dk    rdS | 
                    ||           t          dd          }| j                                         | j                            t                     | j                            ||| j        | j                   | j                            dd           t(                              | j                  }| j                             |          }|                    | j         j         dt          t          j        |j                                       |S )a  This will render text given the built in DirectWrite layout. This process allows us to take
        advantage of color glyphs and fallback handling that is built into DirectWrite.
        This can also handle shaping and many other features if you want to render directly to a texture.r   N)rU  create_text_layoutrl   r   rY  r[  r\  r]  rm   ro   r  rV   rQ  r'  r&  re  r  rS  rg  r(  r^  rh  rR  r  r  ry   )	r   rG  rj  rk  rm   ro   pointr  r  s	            r   render_using_layoutz,DirectWriteGlyphRenderer.render_using_layout~  s    i22488,..u^44555DIn23344TY~45566A::14E6*** Q""%%'''!!+...**5+6+/;+/+<	> 	> 	>
 	##D$///%%dl33	&&u--DI--q#di@T6U6U2V2VWWWr   c                     |                      dd           t                              | j                  }| j                            |          }|                    | j        j         dd           |S )zZero glyph is a 1x1 image that has a -1 advance. This is to fill in for ligature substitutions since
        font system requires 1 glyph per character in a string.r    r   r@  )r  r^  rh  rR  rU  r  r  ry   )r   r  r  s      r   create_zero_glyphz*DirectWriteGlyphRenderer.create_zero_glyph  si     	Aq!!!%%dl33	&&u--DI--q"555r   c           	         | j         d         |k    s| j         d         |k    r+| j        r| j                                         t                      | _        t          j                            ||t          t          t          | j                             t                      | _        t                              | j        t          t          | j                             | j                            | j                   | j        sJt%                      | _        | j                            t(          dt          | j                             dS dS dS )z(Creates a bitmap using Direct2D and WIC.r   r    N)rT  rR  r  r   r^  r_  r  r
   r`  rY  r  rQ  ra  rC  rb  r  rc  rS  r  r  rd  )r   rm   ro   s      r   r  z'DirectWriteGlyphRenderer._create_bitmap  s4    "1%..$2I!2LPV2V2V| '$$&&&%<<DL --eV.K.D.3DL.A.AC C C
 #4"5"5D33DLB[]bcgcv]w]wxxx 44T5HIII; [244#99%uT[GYGYZZZZZ' 3W2V"[ [r   )rZ   r[   r\    D2D1_TEXT_ANTIALIAS_MODE_DEFAULTrc  r  r  D2D1_DRAW_TEXT_OPTIONS_NONErg  DWRITE_MEASURING_MODE_NATURALr  r-  ro  r}  r  r  r  r  r  r  r  rg  rh  s   @r   rO  rO  _  s        5N?Uv;;[vL2N- - - - -7 7 7r?U ?U ?UB  6  # # #JD D DL# # #J  [ [ [ [ [ [ [r   rO  c                       e Zd ZdZdZdZdZdZdZg Z	dZ
dZdZdZdZeZej        j        Zd* fd	Zed             Zed             Zd+d	Zd
 Zd,dZd Zd Zd Zd Zd Z e!d             Z"e!d             Z#e!d             Z$e!de%e&e'         e&e(         f         fd            Z)e!de%e&e*         e&e+         f         fd            Z,e!de-fd            Z.e/de-de'de'de'fd            Z0e/d-de+de-de&e*         fd             Z1e/d!e2e%e'e'e'e*f                  d"e'd#e'de'de&e*         f
d$            Z3e/d%e4d&e-de2e-         fd'            Z5e/d(e4d&e-fd)            Z6 xZ7S ).Win32DirectWriteFontNzSegoe UIFc                 	   d | _         i | _        t          t          |                                            |s| j        }|| _        || _        || _        || _	        || _
        || _        || _        | j        d| _        d| _        | j        d| _        | j        | j        z  dz  | _        | j        r@t          | j                  t           u rt"          | j                 | _        nt&          | _        nt(          | _        | j	        r@t          | j	                  t           u rt*          | j	                 | _        nt.          | _        nt0          | _        | j
        r@t          | j
                  t           u rt2          | j
                 | _        nt6          | _        nt8          | _        |                     |          \  | _        | _        d }t@          j!        d         r=| j        6| j        /| "                    || j        | j        | j                  \  }| _        | j        J d| d            | j        }tG                      }	| j        $                    | j        tK          |	                     tM                      }|	'                    | j        | j        | j        tK          |                     tQ                      | _)        | j*        +                    | j        | j        | j        | j        | j        | j        tY          | j                  tK          | j)                             t[                      }
|.                    tK          |
                     t_                      | _0        |
1                    td          tK          | j0                             tg                      | _4        | j0        5                    tK          | j4                             | j        | j4        j6        z  | _7        tq          j9        | j4        j:        | j7        z            | _:        tw          | j4        j<        | j7        z             | _<        | j4        j:        | j4        j<        z   | j7        z  | _=        | j4        j>        | j7        z  | _?        d | _@        t          rAt                      | _@        | j*        C                    tK          | j@                             d S t          d          sJ d S )	Nr[  Fr  rs  dw_legacy_namingzFont: 'z0' not found in loaded or system font collection.zMWindows 8.1+ is required for font fallback. Colored glyphs cannot be omitted.)E	_filename_advance_cacher7  r  r-  _default_name_namer-   rE  rF   stretchdpirs  rtlr  r  strname_to_weight_weightDWRITE_FONT_WEIGHT_BOLDDWRITE_FONT_WEIGHT_NORMALname_to_style_styleDWRITE_FONT_STYLE_ITALICDWRITE_FONT_STYLE_NORMALname_to_stretch_stretchDWRITE_FONT_STRETCH_EXPANDEDDWRITE_FONT_STRETCH_NORMALget_collection_font_index_collectionpygletoptionsfind_font_facer  r  rY  r  r  r  rZ  rW  r  rK  r   r  r   rt  r  IID_IDWriteFontFace1rv   rr  r   rw   r  r\  r]  rx   roundry   r  rz   line_gap	_fallbackr  r  r  _debug_print)r   namerE  r-   rF   r  r  rs  
write_fontfont_familyrt  r?  s              r   r-  zWin32DirectWriteFont.__init__  sD   (, "D))22444 	&%D
		;DKDH 8DH  9tx/B69 	5DI#%%-di864DL; 	3DK  C''+DK862DK< 	7DL!!S(( / = <6DM-1-@-@-F-F*$*
>,- 	s'D,<,D/3/B/B4W[Wbdhdq/r/r,
D,++-mt-m-m-m+++',..K**4+;U;=O=OPPP$J,,j!!	   .//,,JLKMO!$+..$#$$		
 		
 		
 $%%	!!%	"2"2333)++  !5uT^7L7LMMM022!!%(:";";<<<!%43E3V!Vi 2 9D<Q QRRd084;PPQQQ!%!3!:T=O=W!W[_[p p*2T5JJ! 	q022DN55eDN6K6KLLLLL opppppppr   c                    | j         | j         S t                      }| j                            t	          |          d           t          |j        z              }| j                            t	          |          |           d| _         |d         }t                      }t                      }|                    t	          |          t	          |                     t                      }|
                    t	          |                     	 t                      }|                    t          t	          |                     n?# t          $ r2 |                                 |                                 | j         cY S w xY wt                      }|                    ||t	          |                     t#          |j        dz             }	|                    |||	t'          |	                     |                                 |                                 |                                 t)          j        |	j                                                  | _         | j         S )zReturns a filename associated with the font face.
        Note: Capable of returning more than 1 file in the future, but will do just one for now.NzNot Availabler   r    )r  rt   rt  r   rY  r   r2  r   r   r   r   r   r  IID_IDWriteLocalFontFileLoaderr  r  r   rK  r   r	  pathlibPureWindowsPathas_posix)
r   file_ct
font_filespffkey_dataff_key_sizerP  local_loaderpath_lenr"  s
             r   filenamezWin32DirectWriteFont.filenameO  s     >%>!((g555%588
g
;;;(m::hhE(OOU;-?-?@@@&((eFmm$$$	"577L!!"@%BUBUVVVV 	" 	" 	"NNKKMMM>!!!	"
 88--hU8__UUU&x~'9::''+vs6{{SSS 0>>GGII~s   6E 9FFc                     | j         S r/  )r  r   s    r   r  zWin32DirectWriteFont.name~  s
    zr   '  P   c                 |    | j         s|                     |           | _         | j                             |||          S )a  This process takes Pyglet out of the equation and uses only DirectWrite to shape and render text.
        This may allow more accurate fonts (bidi, rtl, etc) in very special circumstances at the cost of
        additional texture space.

        :Parameters:
            `text` : str
                String of text to render.

        :rtype: `ImageData`
        :return: An image of the text.
        )_glyph_rendererglyph_renderer_classro  )r   rG  rm   ro   s       r   ro  z$Win32DirectWriteFont.render_to_image  sA     # 	C#'#<#<T#B#BD #33D%HHHr   c                     t          j        |j        |j        |j        |j        |j        |j                  }|                    |j	        |j
        ||j        |j                   |S )zThis takes the existing glyph texture and puts it into a new Glyph with a new advance.
        Texture memory is shared between both glyphs.)r   GlyphrW   rX   zrm   ro   ownerr  baseliner  r   r   )r   r  r  r  	new_glyphs        r   
copy_glyphzWin32DirectWriteFont.copy_glyph  sd     Juw%+u|UZU`aa	NI !	
 	
 	
 r   Tc                    |                     |          }|                    |          }||||z            }|| j        vr| j                            ||||z                      }|rJ|rG| j        j        t          z  r3|                     ||          }	|	r|                     |	|          |_	        n| j
        }|| j        |<   | j        |         S r/  )r  r:  glyphsr  r  rg  r  _get_fallback_font_faceis_fallback_str_coloredcolored_empty_glyph)
r   ri  irv  check_colorr'  
text_indexactual_textr  fb_ffs
             r   _render_layout_glyphz)Win32DirectWriteFont._render_layout_glyph  s    nnQ'' ^^A&&
 "*Z+-E"EF dk))(<<[T^alTlIl=mnnE * Y4#7#DGo#o Y 88[QQE Y(,(D(DUK(X(X)',DK${;''r   c           	         t                      }t          t          |          z  d |D              }|                    |t          |          t	          |                     t          dz  |          }t          dz  d          }t          dz              }| j                            || j	        |||dd          }| j        
                    |          S )Nc                 ,    g | ]}t          |          S r_   r   ).0r   s     r   
<listcomp>z@Win32DirectWriteFont.is_fallback_str_colored.<locals>.<listcomp>  s    ,B,B,BSVV,B,B,Br   r    r!   F)r   rt   r	  r   rY  r]   r   r  r  r  r  )	r   rt  rG  r  code_pointsr  r  r  rP  s	            r   r  z,Win32DirectWriteFont.is_fallback_str_colored  s    D		),B,BT,B,B,BC!!+s4yy%--HHHqj&))
qy#&&%),,"88O
 
 #00555r   c                    t           rt                      }t                      }t                      }| j                            | j        j        ||d d | j        | j	        | j
        t          |          t          |          t          |                     |r2t                      }|                    t          |                     |S d S r/  )r  rt   r  r]   r  r  r  rX  r  r  r  rY  r   r  )r   r  r'  
out_lengthfb_fontscalefb_font_faces          r   r  z,Win32DirectWriteFont._get_fallback_font_face  s    ! 	$J!mmGGGEN(($3j!!ge    $.00&&u\':':;;;##tr   c                 r   | j         s9|                     |           | _         | j                             d          | _        g }|D ]q}|dk    rd}|| j        vr>| j                             |          | j        |<   | j        |         s| j        | j        |<   |                    | j        |                    r|S )a  This differs in that it does not attempt to shape the text at all. May be useful in cases where your font
        has no special shaping requirements, spacing is the same, or some other reason where faster performance is
        wanted and you can get away with this. 	)r  r  r  r  r  rV  )r   rG  r  r   s       r   get_glyphs_no_shapez(Win32DirectWriteFont.get_glyphs_no_shape  s     # 	N#'#<#<T#B#BD  $ 4 H H M MD 		* 		*ADyy##!%!5!I!I!!L!LA{1~ 7%)%6DKNMM$+a.))))r   c           	         | j         sW|                     |           | _         | j                             d          | _        | j                                         | _        | j                             || j                  \  }}}}}}| j                             | j        ||          }t          |          }	t          |          D ]}
||
xx         | j        z  cc<   t          |          D ]8}
||
         xj        | j        z  c_        ||
         xj        | j        z  c_        9g }i }|D ]%}|	                    |          }|dk    r|dz
  ||<   &t          |          D ]o}
||
         }|dk    r-|                     ||
|	          }|                    |           n|||
         ||
         j        ||
         j        f}|| j        v rP|| j        v r| j        |         }n|                     | j        |         ||
         ||
                   }|| j        |<   nk| j                             | j        |||
         ||
         ||
                   }| |                     ||
|	d          }d|_        || j        |<   || j        |<   |                    |           |
|v r2t          ||
                   D ]}|                    | j                   q|S )Nr  r    r   F)r  T)r  r  r  r  r  _zero_glyphr}  rt  r  listranger  r   r   r  r  rV  r  r  r  r  r  )r   rG  ri  rz  rx  r{  r|  rv  r  formatted_clustersr  r  substitutionsidxctr  r  advance_key_s                      r   
get_glyphszWin32DirectWriteFont.get_glyphs	  s+   # 	H#'#<#<T#B#BD  $ 4 H H M MD#3EEGGDJNJ^JnJnososo}K KG\7Hgx &88R^__!(^^ |$$ 	1 	1AQKKK400KKKK|$$ 	? 	?AAJ$$(==$$AJ%%)>>%%%  	, 	,C#))#..BAvv%'!Vc"|$$ "	4 "	4AQZF{{ 11+qBTUUe$$$$%x{GAJ4LgVWjNgh T[(("d&999 $ 3K @ $F0CXa[RYZ[R\ ] ];@+K88 0DDT^U[]efg]hjqrsjtELQZQ QE} $ 9 9+qJ\jo 9 p p(,*/DK'7<D'4e$$$M!!}Q/00 4 4AMM$"23333r   c           
          t          |          }t                      }| j                            |t	          |          | j        ddt          |                    }|S )Nr  r  )rK  r  rW  r  r	  rZ  rY  )r   rG  ri  rj  hrs        r   r  z'Win32DirectWriteFont.create_text_layoutG	  s^    +D11')) 11+25k2B2B262C2724272D2D4 4 r   c                    t           rt                      | _        t          }n<t          rt                      | _        t          }nt                      | _        t          }t          t          |t          | j                             dS )zD All direct write fonts needs factory access as well as the loaders.N)r  r  rW  IID_IDWriteFactory5r  r  IID_IDWriteFactory2rB  IID_IDWriteFactoryDWriteCreateFactoryDWRITE_FACTORY_TYPE_SHAREDrY  )clsguids     r   _initialize_direct_writez-Win32DirectWriteFont._initialize_direct_writeU	  su     1 	&"1"3"3S'TT# 	&!0!2!2C&DD!/!1!1C%D6eCDV>W>WXXXXXr   c                    t           rt                      | _        | j                            t          | j                             | j                            | j                   t                      | _        | j        	                    t          | j                             dS t                      | _        | j                            | j        j        t                              t          | j        | j                  | _        | j                            | j                   t!          t#          d          t$                    | _        dS )z3Initialize the loaders needed to load custom fonts.legacy_font_loaderN)r  r  _font_loaderrW  r  rY  r  r  _font_builderr  r)  pointersr   r_  _font_collection_loaderr~  r  rK  r   _font_loader_key)r$  s    r   _initialize_custom_loadersz/Win32DirectWriteFont._initialize_custom_loadersd	  s    1 	_<>>C;;E#BR<S<STTT55c6FGGG !7 8 8C44U3;L5M5MNNNNN355C 55c6F6OPh6ijjj*@ASUXUe*f*fC';;C<WXXX#'(=>R(S(SU]#^#^C   r   c           	         | j         s|                                  | j        s|                                  t          r9t                      }| j                            | j         |t          |          d t          |                    }| j	        
                    |          }|dk    rt          d          | j        r2| j                                         | j                                         t                      | _        | j	                            t          | j                             t#                      | _        | j                             | j        t          | j                             d S | j                            |           | j        rd | _        | j                             | j                   | j                             | j                   t1                      | _        t3          | j         | j                  | _        | j                             | j                   | j                             | j        j        t:                              | j                            | j                   t?                      | _        | j                              | j        | j!        tE          | j!                  t          | j                             d S )Nr   z5This font file data is not not a font or unsupported.)#rW  r&  r)  r.  r  r   r  r	  rY  r*  r  rR  _custom_collection	_font_setr  r  r  r  r  _font_cacherV  r  r,  r  r)  r_  r~  r  r+  r   rT  r  r}  r-  rX  )r$  r  r[  r  s       r   add_font_dataz"Win32DirectWriteFont.add_font_data|	  s   ! 	+((*** 	-**,,,0 0	Y'))I!AA#BTBFBEd))BFBG	BRBR	T TB "..y99BQww WXXX
 % 1%%'''&..000*,,CM++E#-,@,@AAA%;%=%=C">>s}eTWTjNkNklllll O""4((( % 
o)-&"AA#B]^^^";;C<LMMM#7#9#9 .DSEWY\Yi.j.j+"??@[\\\"99#:J:STl:mnnn'33CODDD%:%<%<C"99#:U:=:N:@AU:V:V:?@V:W:WY Y Y Y Yr   rG  c                 J   | j         s|                                  	 t                      }t                      }| j        rX| j                            t          |          t          |          t          |                     |j        r|j        | j        fS t                      }|j        sv| j         
                    t          |          d           |                    t          |          t          |          t          |                     |j        r	|j        |fS dS )z|Returns which collection this font belongs to (system or custom collection), as well as its index in the
        collection.r    NN)rW  r&  r  r   r0  r  rK  rY  r2  r  r|  )r$  	font_name
font_indexfont_existssys_collections        r   r  z#Win32DirectWriteFont.get_collection	  s4    ! 	+((***<VV
ff ! 	@"112G	2R2R27
2C2C272D2DF F F   @!')??? /00  	866u^7L7LaPPP))*?	*J*J*/
*;*;*/*<*<> > >   8!'77zr   c                 `   |                      ||||          \  }}}t          d| d           |                     | j        ||||          }|	|| j        fS t	                      }	| j                            t          |	          d           |                     |	||||          }|||	fS dS )a  This will search font collections for legacy RBIZ names. However, matching to bold, italic, stretch is
        problematic in that there are many values. We parse the font name looking for matches to the name database,
        and attempt to pick the closest match.
        This will search all fonts on the system and custom loaded, and all of their font faces. Returns a collection
        and IDWriteFont if successful.
        zdirectwrite: 'z>' not found. Attempting legacy name lookup in all collections.Nr    r5  )
parse_namer  find_legacy_fontr0  r  rW  r|  rY  )
r$  r6  r-   rF   r  p_boldp_italic	p_stretchcollection_idxr9  s
             r   r  z#Win32DirectWriteFont.find_font_face	  s     '*nnYfg&V&V#)oioooppp--c.DiQWYaclmm%!3#999.002253H3H!LLL--niQY[dee%!>11zr   r  c                 @    |                      |          d         dS dS )Nr   TF)r  )r$  r  s     r   	have_fontzWin32DirectWriteFont.have_font	  s%    d##A&24ur   r6  weightstyler  c                 z   |                                  } |                     d          }|}|}|}t          |          dk    rut                                          D ]\  }}	||v r|	} nt
                                          D ]\  }}	||v r|	} nt                                          D ]\  }}	||v r|	} n|||fS )zXAttempt at parsing any special names in a font for legacy checks. Takes the first found.r  r    )lowersplitr	  r  itemsr  r  )
r6  rC  rD  r  
split_namefound_weightfound_stylefound_stretchr  r2  s
             r   r;  zWin32DirectWriteFont.parse_name	  s    OO%%	__S))
 z??Q-3355  e:%%#(LE &  -2244  e:%%"'KE &  /4466  e:%%$)ME & [-77r   
collectionc                    |                                  }t          d| d          sJ t                      }t          |          D ]}t	                      }	|                     |t          |	                     t                      }
|	                    t          |
                     t          
                    |
|          }|d         }|d         |d         k    r|	                                 t          d|           sJ |	                                }g }g }t          |          D ]}t                      }|	                    |t          |                     t          rt|rrt                      }|                    t          |                     t          
                    ||          }|                    |           t%          d|            t                      }t'                      }|                    t*          t          |          t          |                     d}|j        dk    rt          
                    ||          D ]y}||k    rqt          d| d| d	| d
| d	          sJ d}|                    |                                |                                |                                |f            nz|s|                                 |	                                 |rLt                              ||||          }|D ](}|d         |k    r|d                                          )|c S d S )Nzdirectwrite: Found z fonts in collection.r   z%directwrite: Inspecting family name: zdirectwrite: Face names found: FzFound legacy name 'z' as 'z' in font face 'z' (collection id #z).Tr4   )r  r  rM  r  r~  r  rY  rr  r  r  unpack_localized_stringr  r{  r  r|  _debug_fontr  extendprintr   r  .DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMESr2  rV  r  r  r  match_closest_font)rM  r6  r-   rF   r  
full_debug
coll_countrs  r  familyfamily_name_strfamily_namesfamily_nameft_ct
face_namesmatchesjtemp_ftfc_strstringscompat_namesexistsmatch_foundcompat_namer  matchs                             r   r<  z%Win32DirectWriteFont.find_legacy_font
  s     2244
S*SSSTTTTT"$$z"" E	" E	"A&((F$$Qf666 677O!!%"8"8999/GGY_``L&q/K1~1--    U U UVVVVV ''))EJG5\\ "& "&%--q%..111 G: G466F((v7772JJ6SYZZG%%g...EGEEFFF  788//0^05l0C0C05f? ? ?
 $<1$$';'S'ST`bh'i'i " "&)33#/ ~i ~ ~{ ~ ~de ~ ~yz ~ ~ ~$@ $@ @ @ $@ +/K#NNG,=,=,?,?AQAQASASU\UgUgUiUikr+sttt!E 4 # &OO%%%NN  "1DDWdTZ\cdd
 % + +EQx:--a((***!!!!" tr   	font_listr-   rF   c           
      P   g }| D ]}|\  }}}}	||k    r)||k    r#||k    rt          d| d| d| d           |	c S d}
d}||k    r|
dz  }
n|t          k    r|t          k    r|dz  }||k    r|
dz  }
n|t          k    r|t          k    r|dz  }||k    r|
dz  }
n|t          k    r|t          k    r|dz  }|                    |
|g|R            |                    d d	           |r;|d         }t          d
|d          d|d          d|d          d           |d         S dS )a  Match the closest font to the parameters specified. If a full match is not found, a secondary match will be
        found based on similar features. This can probably be improved, but it is possible you could get a different
        font style than expected.z&directwrite: full match found. (bold: z
, italic: z, stretch: r   r   r    c                 "    | d         | d         fS rh  r_   )ftss    r   <lambda>z9Win32DirectWriteFont.match_closest_font.<locals>.<lambda>
  s    c!fc!f%5 r   T)rD  reversez3directwrite: falling back to partial match. (bold: r3   r4   r5   r6   N)r  r  r  r  rV  sort)rg  r-   rF   r  closestrf  f_weightf_style	f_stretch	writefont
prop_matchsimilar_matchclosest_matchs                r   rT  z'Win32DirectWriteFont.match_closest_fonth
  s     	@ 	@E8=5Xw	9 4Gv$5$5)w:N:NqXqqQXqqenqqqs s s    JM 4a

222xC\7\7\"&  a

333C[8[8[")##a

6669Hb;b;b"NNJ>>>???? 	55tDDD 	$#AJM p#0#3p p?LQ?Op p\ijk\lp p p q q q ##tr   local_stringrs  c                    |                                  }g }t          |          D ]}t                      }t                              | |          }|                     |t          |                     |j        }t          |dz             }| 	                    ||t          |                     |                    |j                   |                                  |S )zOTakes IDWriteLocalizedStrings and unpacks the strings inside of it into a list.r    )rs  r  rt   r  get_localized_indexrv  rY  r2  rK  rw  r	  rV  r  )	rv  rs  str_array_lenra  r  string_sizer  buffer_sizer"  s	            r   rO  z,Win32DirectWriteFont.unpack_localized_string
  s     %--//}%% 	) 	)A ((K&::<PPC((eK.@.@AAA%+K*;?;;F""3F<<<NN6<((((r   ra  c                 *   t                      }t                      }|rt|                     |t          |          t          |                     |j        s5|                     dt          |          t          |                     |sdS |j        S dS )Nzen-usr   )rt   r   rt  rY  r2  )ra  rs  r  rc  s       r   rx  z(Win32DirectWriteFont.get_localized_index
  s    hh 
	""65::uV}}EEE< &&wc

E&MMJJJ 19qr   )FFFNN)r  r  )T)F)8rZ   r[   r\   r0  rW  r)  r*  r1  r,  r2  r-  r  r  r  r  rO  r  r  glGL_RGBAtexture_internalformatr-  propertyr  r  ro  r  r  r  r  r  r  r  classmethodr&  r.  r3  r   r   r[  r  r  r  r  r  r  rB  staticmethodr;  r<  r   rT  rr  rO  rx  rg  rh  s   @r   r  r    s        NL MI #KMOLK3#Y.mq mq mq mq mq mq^ , , X,\   XI I I I"  ( ( ( (46 6 6,  8  ,C C CJ   Y Y [Y _ _ [_. 7Y 7Y [7Yr %xH^?_0_*`    [B x(=>>B@    [0 S    [ 8c 83 8s 8S 8 8 8 \8: O O%: Os O[!O O O \Ob .d5c31K+L&M .UX .be .ps .[!. . . \.` .E s W[\_W`    \0 %< c    \    r   r  g      ?win32_disable_shaping(.  ra  osr  platformr  typingr   r   r   r\  r  pyglet.fontr   pyglet.image.codecs.wicr   r	   r
   pyglet.libs.win32r   rJ  pyglet.libs.win32.constantspyglet.libs.win32.typespyglet.utilr   r   architecturemachineendswithpathjoinenvironwindllLoadLibrary
dwrite_libr  errr  rP  r  r   r  DWRITE_FACTORY_TYPEr#  DWRITE_FACTORY_TYPE_ISOLATEDr  DWRITE_FONT_WEIGHT_THINDWRITE_FONT_WEIGHT_EXTRA_LIGHTDWRITE_FONT_WEIGHT_ULTRA_LIGHTDWRITE_FONT_WEIGHT_LIGHTDWRITE_FONT_WEIGHT_SEMI_LIGHTr  DWRITE_FONT_WEIGHT_REGULARDWRITE_FONT_WEIGHT_MEDIUMDWRITE_FONT_WEIGHT_DEMI_BOLDDWRITE_FONT_WEIGHT_SEMI_BOLDr  DWRITE_FONT_WEIGHT_EXTRA_BOLDDWRITE_FONT_WEIGHT_ULTRA_BOLDDWRITE_FONT_WEIGHT_BLACKDWRITE_FONT_WEIGHT_HEAVYDWRITE_FONT_WEIGHT_EXTRA_BLACKr  r  DWRITE_FONT_STRETCH_UNDEFINED#DWRITE_FONT_STRETCH_ULTRA_CONDENSED#DWRITE_FONT_STRETCH_EXTRA_CONDENSEDDWRITE_FONT_STRETCH_CONDENSED"DWRITE_FONT_STRETCH_SEMI_CONDENSEDr  DWRITE_FONT_STRETCH_MEDIUM!DWRITE_FONT_STRETCH_SEMI_EXPANDEDr  "DWRITE_FONT_STRETCH_EXTRA_EXPANDEDr  c_intr  DWRITE_GLYPH_IMAGE_FORMATS_NONE#DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPEDWRITE_GLYPH_IMAGE_FORMATS_CFFDWRITE_GLYPH_IMAGE_FORMATS_COLRDWRITE_GLYPH_IMAGE_FORMATS_SVGDWRITE_GLYPH_IMAGE_FORMATS_PNGDWRITE_GLYPH_IMAGE_FORMATS_JPEGDWRITE_GLYPH_IMAGE_FORMATS_TIFF1DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8r  r  !DWRITE_MEASURING_MODE_GDI_CLASSIC!DWRITE_MEASURING_MODE_GDI_NATURALr  r  r  DWRITE_FONT_STYLE_OBLIQUEr  r  c_uint8r"  c_uint16r   c_int16r   c_int32r   r0  rt   c_uint64r   r   DWRITE_INFORMATIONAL_STRING_NONE,DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE+DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS%DWRITE_INFORMATIONAL_STRING_TRADEMARK(DWRITE_INFORMATIONAL_STRING_MANUFACTURER$DWRITE_INFORMATIONAL_STRING_DESIGNER(DWRITE_INFORMATIONAL_STRING_DESIGNER_URL'DWRITE_INFORMATIONAL_STRING_DESCRIPTION+DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL/DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URLrS  1DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES4DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES7DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES'DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT%DWRITE_INFORMATIONAL_STRING_FULL_NAME+DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME/DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME<DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME6DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG9DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG2DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES5DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES+DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME	StructurerV   ra   rh   rl   rv   r   r   r   r   IUnknownr   r   	pIUnknownr   r   GUIDr  r   r   r  r   r   r   DWRITE_SCRIPT_SHAPES_DEFAULTr   r  r   r  r  r  r  &DWRITE_READING_DIRECTION_LEFT_TO_RIGHTr  r  r$  	COMObjectr4  rj  rr  ry  r~  r  r  r  r  r  r  DWRITE_TEXT_ALIGNMENT_LEADINGDWRITE_TEXT_ALIGNMENT_TRAILINGDWRITE_TEXT_ALIGNMENT_CENTERDWRITE_TEXT_ALIGNMENT_JUSTIFIEDr  r  r  r  r  r  r  r  r  r  r)  r=  r_  r!  ru  rB  IID_IDWriteFactory1r  r  r  r  r   r  r  r  r  r  r  r  r  r  r"  r  restypeREFIIDr   argtypesr  r  r  r1  r  "D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE"D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE D2D1_TEXT_ANTIALIAS_MODE_ALIASEDr  D2D1_RENDER_TARGET_TYPE_DEFAULT D2D1_RENDER_TARGET_TYPE_SOFTWARE D2D1_RENDER_TARGET_TYPE_HARDWAREr  D2D1_FEATURE_LEVEL_DEFAULTr  D2D1_RENDER_TARGET_USAGE_NONE.D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING'D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLEr  DXGI_FORMAT_UNKNOWNr  D2D1_ALPHA_MODE_UNKNOWND2D1_ALPHA_MODE_PREMULTIPLIEDD2D1_ALPHA_MODE_STRAIGHTD2D1_ALPHA_MODE_IGNOREr0  D2D1_DRAW_TEXT_OPTIONS_NO_SNAPD2D1_DRAW_TEXT_OPTIONS_CLIPr  4D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPINGr  "D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORDr  r  DXGI_FORMAT_B8G8R8A8_UNORMpixel_formatr  r  rb  r  r  r  r  r  r  r  IID_ID2D1Factoryr8  d2d1d2d_libD2D1_FACTORY_TYPE!D2D1_FACTORY_TYPE_SINGLE_THREADED D2D1_FACTORY_TYPE_MULTI_THREADEDD2D1CreateFactoryr   r^  r  codecsget_decodersdecoder
isinstancerR  r  rM  GlyphRendererrO  Fontr  ra  rY  r  WICBitmapCreateCacheOptionWICBitmapNoCacher`  WICBitmapCacheOnLoadre  rd  rf  r  r  r_   r   r   <module>r     s    				       ( ( ( ( ( ( ( ( ( (         Y Y Y Y Y Y Y Y Y Y 3 3 3 3 3 3 ) ) ) ) % % % % # # # # # #	F
 xq!W,,8&&t,, 	RW\\"*X"6
LQQF**622JJ 	 	 	DDDD	 n\*{<((> > >       !$ !$   #     " "   #  #   !$ &1  > > 3 <	
 5 7 5 : : 1 < < 3 3  >$   ! &' #&' # ! %& "  $% !  %& " =%H%H =$F77#D;$F:  # ", &0 #!+ ", !+ !+ ", ", 4> 1  ! $% !$% !!D!?"@!@"A "@"@ "@	"@
 "A"A "A"A "S"S      3535 5 				!' #$  /0 ,./ +() %+, ('( $+, (*+ './ +23 //1 ,13 .46 179 4:< 7*, '(* %.0 +24 /?A <9; 6<> 957 28: 5.0 +    9       )       9       &*       &*   	 	 	 	 	6+ 	 	 	S S S S S&* S S S
 
 
 
 
V- 
 
 

 
 
 
 
CL 
 
 
    s|       CM       !6    "%*ffdDRVX\^bdhjnpt!u!u     cm            cm      F xx
FFD$dTXZ^`dfjkk        :
 
 
 
 
v' 
 
 
        V-         &*       &"2   	v 	v 	v 	v 	vV%5 	v 	v 	v    f&6      )* &       
 
 
 
 
cl 
 
 
e e e e e e e e"u( u( u( u( u(3= u( u( u(p    #-   2    cm   "    cm              *OS]       #-   6
 
 
 
 
; 
 
 

 
 
 
 
CM 
 
 
    2CM      ! !"   "#        4 4 4 4 4 4 4 4n           (       f.   P P P P P)3= P P Pf
 
 
 
 
*,=s} 
 
 
           #,   & & & & &s} & & &R6 6 6 6 63= 6 6 667 7 7 7 73= 7 7 7t    S]   8 XXj&&$dDRVX\^bdhii     S]   - - - - -S] - - -` hhz664tTSWY]_ceijj     ncm       #-       S]       o~s}     hhz664tTSWY]_ceijj     S]   *
 
 
 
 
CM 
 
 
    2CM       os}   2    &Dcm   	 	 	 	 	os} 	 	 	    CM    hhz664tTSWY]_ceijj     oZhm   !4 %   3SZAWAWX      CM   
 
 
 
 
 
 
 
    :}cm      #$  %& "%& "#$   "# #$  #$      ! 12 .*+ '   !    !+ ( +5 (7A 4( %/ "    	       I        "") 0 99;; !@  (4  %!$  !$  "?  %?  "m m m m ms} m m m` 88JdD$PTVZ\`bfgg     3=   B -
 $% !#$  - #  /XxP   |"//11  Gz':&&  D
)B
C
CC3    d[ d[ d[ d[ d[t1 d[ d[ d[N} } } } }49 } } }@ lnn8:JDRWRWXcRdRdee!    l3S#..S#sC((LA	 
>)* O&:&N###O Os   A>C CC