
     h                     $   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 e	jb                  dk(  rd Z2nd Z2ejf                  d        Z4d	 Z5d
 Z6d Z7d Z8d Z9d Z:ejv                  jy                   e/       dk  d      d        Z=ejv                  jy                   e/       dk  d      d        Z>d Z?d Z@ejv                  jy                   e/       dk  d      d        ZAejv                  jy                   e/       dk  d      d        ZBejv                  jy                   e/       dk  d      d        ZCejv                  jy                   e/       dk  d      d        ZDejv                  jy                   e/       dk  d      d        ZEejv                  jy                   e/       dk  d      d        ZFejv                  jy                   e/       dk  d      d        ZGejv                  jy                   e/       dk  d      d         ZHejv                  jy                   e/       d!k  d      d"        ZId# ZJejv                  jy                   e/       dk  d      d$        ZKd% ZLd& ZMd' ZNejv                  jy                   e/       dk  d      d(        ZOd) ZPejv                  jy                   e/       dk  d      d*        ZQejv                  jy                   e/       dk  d      d+        ZRd, ZSd- ZTd. ZUdEd/ZVd0 ZWd1 ZXd2 ZYd3 ZZd4 Z[d5 Z\d6 Z]d7 Z^d8 Z_d9 Z`ejv                  jy                   e/       dk  d      d:        Zad; Zbd< Zcd= Zdd> Zeejv                  jy                   e/       d?k  d      d@        ZfdA ZgdB Zhejv                  jy                   e/       dCk  d      dD        Ziy)Fz
    cairocffi.tests
    ~~~~~~~~~~~~~~~

    Test suite for cairocffi.

    :copyright: Copyright 2013-2019 by Simon Sapin
    :license: BSD, see LICENSE for details.

    N   )"PDF_METADATA_AUTHORPDF_METADATA_CREATE_DATEPDF_METADATA_CREATORPDF_METADATA_KEYWORDSPDF_METADATA_MOD_DATEPDF_METADATA_SUBJECTPDF_METADATA_TITLEPDF_OUTLINE_FLAG_BOLDPDF_OUTLINE_FLAG_OPENPDF_OUTLINE_ROOTSVG_UNIT_PCSVG_UNIT_PTSVG_UNIT_PXSVG_UNIT_USERTAG_LINKContextFontFaceFontOptionsImageSurfaceLinearGradientMatrixPattern
PDFSurface	PSSurfaceRadialGradientRecordingSurface
ScaledFontSolidPatternSurfaceSurfacePattern
SVGSurfaceToyFontFacecairo_versioncairo_version_stringlittlec                     | ddd   S ).Convert a 4-byte ARGB string to native-endian.N argbs    p/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/cairocffi/test_cairo.pypixelr.   '   s    DbDz    c                     | S )r(   r*   r+   s    r-   r.   r.   +   s    r/   c               #      K   t        j                  d      } d| v sJ 	 |  t        j                  |        y # t        j                  |        w xY ww)N   é)tempfilemkdtempshutilrmtree)tempdirs    r-   temp_directoryr8   0   sD     t$G7??ggs   A9 AAAc                 &    t        d | D              S )Nc              3   4   K   | ]  }t        |d         yw)   N)round).0vs     r-   	<genexpr>zround_tuple.<locals>.<genexpr>;   s     -q!-s   )tuple)valuess    r-   round_tuplerB   :   s    -f---r/   c                     t        j                  t        j                        5 } | |i | d d d        dt	              v sdt	        |      v sJ y y # 1 sw Y   'xY w)NSURFACE_FINISHEDExceptionInfo)pytestraises	cairocffi
CairoErrorstr)funcargskwargsexcs       r-   assert_raise_finishedrO   >   s[    	y++	, dfS)_C-HHH-H) s   	AAc                      t        t        t               j                  d            \  } }}t	               | dz  |dz  z   |z   k(  sJ y )N.i'  d   )mapintr%   splitr$   )majorminormicros      r-   test_cairo_versionrY   D   sF    c#7#9#?#?#DEE5%?eemeck9EAAAAr/   c                  H    t        j                          dd l} | t         u sJ y )Nr   )rH   install_as_pycairocairo)r\   s    r-   test_install_as_pycairor]   I   s      "Ir/   c                     t        j                  t        j                  d      dk(  sJ t        j                  t        j                  d      dk(  sJ t        t        j                  dd      } | j                         t        j                  k(  sJ | j                         dk(  sJ | j                         dk(  sJ | j                         dk(  sJ t        j                  t              5  t        j                  dd      }t        j                  |t        j                  dd       d d d        t        j                  dd	      }t        j                  |t        j                  ddd
      } t        |       }|j                         j!                         dk(  sJ |j#                  d       |j%                         t'        d      dz  k(  sJ y # 1 sw Y   xY w)NrR   i        P   Bs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (   strider   r   r   r         ?         )r   format_stride_for_widthrH   FORMAT_ARGB32	FORMAT_A8
get_format	get_width
get_height
get_striderF   rG   
ValueErrorarraycreate_for_datar   
get_sourceget_rgbapaint_with_alphatobytesr.   )surfacedatacontexts      r-   test_image_surfacer|   O   s   //&),- - -//S"%() ) ) 922B;G9#:#::::"$$$2%%%6)))	z	" L{{3.$$T9+B+BBKL ;;sM*D**41H1H+-r">GgG((*l:::S!<<>U#67#====L Ls   )=GGc                     dt         j                  v rt        j                          t	        d      } t        j                  | t        j                  ddd      }t        |      j                  d       | t        d      d	z  k(  sJ y )
N__pypy__i   rc   r_   rd   re   rh   ri   rj   )sysmodulesrF   xfail	bytearrayr   rt   rH   rl   r   rw   r.   )rz   ry   s     r-   test_image_bytearray_bufferr   i   so    S[[  S>D**41H1H+-r">GG%%c*5,-3333r/   +  zCairo version too low)reasonc                     t        t        j                  dd      } | j                  t        j                  dd      }t        |t               sJ |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ |j                         dk(  sJ |j                         dk(  sJ y )Nr_   r`      rR   )r   rH   rl   create_similar_imagerm   
isinstanceget_contentCONTENT_ALPHArn   ro   rp   )ry   similars     r-   !test_surface_create_similar_imager   u   s     922B;G**9+>+>3GGg|,,, I$;$;;;;9#6#6666!###3&&&r/   i*  c                      t        t        j                  dd      } | j                         }|d d  dk(  sJ t	        | j                  dddd            j                          |d d  dk(  sJ y )Nr                      r      s               )r   rH   rm   get_datar   create_for_rectanglepaint)ry   rz   s     r-   !test_surface_create_for_rectangler      su     9..15GD7l"""G((Aq!45;;=7	  r/   c                     t        t        j                  dd      } | j                  t        j                  dd      }t        |t               sJ |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ |j                         dk(  sJ |j                         dk(  sJ |j                         du sJ t        d dd      j                         du sJ | j                          | j                          | j                          | j!                  ddd	d
       | j#                          | j%                  dd       | j'                         dk(  sJ | j)                  dd       | j+                         dk(  sJ t-        |       }t        |j/                         t               sJ t        j0                  j2                  }	 |t        j4                  = |j/                         }|j6                  | j6                  k(  sJ t        |t8              sJ t        |t               rJ 	 t         |t        j4                  <   | j;                          t=        | j                         t=        | j                         t=        | j$                  dd       t=        | j(                  dd       y # t         |t        j4                  <   w xY w)Nr_   r`   r   rR   Fr   Tr   i,  i.        )r   r      r;   )r   r;   )r   rH   rl   create_similarr   r   r   rn   rm   ro   rp   has_show_text_glyphsr   	copy_page	show_page
mark_dirtymark_dirty_rectangleflushset_device_offsetget_device_offsetset_fallback_resolutionget_fallback_resolutionr   
get_targetsurfacesSURFACE_TYPE_TO_CLASSSURFACE_TYPE_IMAGE_pointerr    finishrO   )ry   r   r{   surface_maptargets        r-   test_surfacer      sn   922B;G$$Y%<%<aEGg|,,, I$;$;;;;9#6#6666!###3&&&'')U222dAq!668D@@@  AsE2MMOb!$$$&'111##B***,777gGg((*L999$$::KA	445##%'"2"2222&'***fl33334@I001NN'++,'++,'33Q:'991a@ 5AI001s   A J; ;Kc                     t        t        d      st        j                          t	        j
                          t        j                         } t        j                  |       }t        t        j                  j                  j                        dk(  sJ t        | dd      }t        t        j                  j                  j                        dk(  sJ t        j                  |       |dz   k(  sJ ~t	        j
                          t        t        j                  j                  j                        dk(  sJ t        j                  |       |k(  sJ y )Ngetrefcountr   rR   r   )hasattrr   rF   r   gccollectioBytesIOr   lenrH   r   	KeepAlive	instancesr   )r   initial_refcountry   s      r-   test_target_lifetimer      s     3&JJLZZ\Fv.y!!++556!;;;c*Gy!!++556!;;;??6"&6&::::JJLy!!++556!;;;??6"&6666r/   c                     t        d dd      } | j                  d      J t        j                          t	        t
        j                  j                  j                        dk(  sJ | j                  dd       t	        t
        j                  j                  j                        dk(  sJ | j                  d      d d  dk(  sJ | j                  dd        t	        t
        j                  j                  j                        dk(  sJ t               dk\  r| j                  d      J | j                          t        | j                  dd        y )Nr   
image/jpegr   s   lolr   )r   get_mime_datar   r   r   rH   r   r   r   set_mime_datar$   r   rO   ry   s    r-   test_mime_datar      s    q!$G  .666JJLy!!++556!;;;,/y!!++556!;;;  .q1V;;;,-y!!++556!;;;%$$\2:::NN'//tDr/   c                      t        d dd      j                  d      du sJ t        t        j                  dd      } | j                  d      du sJ y )Nr   r   TF)r   supports_mime_typer   rH   rm   r   s    r-   test_supports_mime_typer      sS     dAq!44\BdJJJ9..15G%%l3u<<<r/   i,  c                      t        d dd      } | j                         dk(  sJ | j                  dd       | j                         dk(  sJ y )Nr   r   r   r   r   )r   r   )r   get_device_scaleset_device_scaler   s    r-   test_device_scaler      sP     q!$G##%///Q"##%///r/   i,  c                     t        j                         } t        | dd      }|j                  t        d       |j                  t
        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                          t        j                  j                  |       }|j                  d	   dk(  sJ |j                  d
   dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ t!        |j                  d         j#                  d      sJ |j                  d   dk(  sJ y )Nr   titlesubjectcreatorauthorkeywordsz2013-07-21T23:46:00+01:00z2013-07-21T23:46:00Zz/Titlez/Subjectz/Creatorz/Authorz	/Keywordsz/CreationDatez20130721234600+01'00z/ModDate20130721234600Z)r   r   r   set_metadatar
   r	   r   r   r   r   r   r   pikepdfPdfopendocinforJ   
startswithfile_objry   pdfs      r-   test_metadatar      sd    zz|H1a(G+W5-y9-y9,h7.
;13NO.0FGNN
++

8
$C;;x G+++;;z"i///;;z"i///;;y!X---;;{#z111 s{{?+,778NOOO;;z"&7777r/   c                     t        j                         } t        | dd      }|j                  t        ddt
        t        z        }|j                  |dd       |j                          t        j                  j                  |       }|j                         }|j                  d   j                  dk(  sJ |j                  d   j                  d   j                  dk(  sJ y )Nr   ztitle 1zpage=1 pos=[1 1]ztitle 2r   )r   r   r   add_outliner   r   r   r   r   r   r   open_outlinerootr   children)r   ry   outliner   s       r-   test_outliner   
  s     zz|H1a(G!!)%7 557G ,>?NN
++

8
$C G<<?  I---<<?##A&,,	999r/   c                     t        j                         } t        | dd      }|j                  d       |j	                          t
        j                  j                  |       }|j                  d   j                  dk(  sJ y )Nr   abcr   )
r   r   r   set_page_labelr   r   r   r   pageslabelr   s      r-   test_page_labelr     se     zz|H1a(G5!NN
++

8
$C99Q<&&&r/   c                  J   t        j                         } t        | dd      }t        |      }|j	                  d       |j	                  t
        d       |j                  dddd       |j                  dd	d
d       |j                          |j                  t
               |j                  d       |j                          |j                          t        j                  j                  |       }dt        |j                         v sJ dt        |j                         v sJ y )Nrc   Documentz3rect=[1 2 4 5] uri='https://www.courtbouillon.org/')
attributesr   r   rh   r   r   r      z("/URI": "https://www.courtbouillon.org/"z"/S": "/Document")r   r   r   r   	tag_beginr   set_source_rgba	rectanglefilltag_endr   r   r   r   r   rJ   objects)r   ry   r{   r   s       r-   test_tagr   %  s     zz|H2r*GgGj!J  L Aq"a(aAq!LLNOOHOOJNN
++

8
$C5S[[9IIII#ckk"2222r/   c                     t        j                         } t        | dd      }|j                  dd       |j	                          | j                         }t        j                         } t        | dd      }|j                  dd       |j	                          | j                         }t        |      t        |      k  sJ y )Nr   	   )r   r   r   set_thumbnail_sizer   getvaluer   )r   ry   
pdf_bytes1
pdf_bytes2s       r-   test_thumbnail_sizer   ;  s     zz|H1a(Gq!$NN""$Jzz|H1a(Gq!$NN""$Jz?S_,,,r/   i,  c                  F   t        d dd      } | j                         t        t        fv sJ t	        j
                         }t        |dd      } | j                  t               | j                         t        k(  sJ | j                          |j                         }d|v sJ d|v sJ t	        j
                         }t        |dd      } | j                  t               | j                         t        k(  sJ | j                          |j                         }d|v sJ d|v sJ y )Nr   r   s   width="1px"s   height="2px"s   width="1pc"s   height="2pc")r"   get_document_unitr   r   r   r   set_document_unitr   r   r   r   )ry   r   	pdf_bytess      r-   test_document_unitr   M  s    q!$G$$&=+*FFFFzz|H1a(Gk*$$&+555NN!!#IY&&&i'''zz|H1a(Gk*$$&+555NN!!#IY&&&i'''r/   c                     t        j                  d      } | d d }t               5 }t        j                  j                  |d      }|j                  t        j                               }t        t        j                  dd      }|j                  |       t        |d      5 }|j                         }|j                  |      sJ 	 d d d        t        |d      j!                          t        |d      5 }|j                         dk(  sJ 	 d d d        |j                  |       t        |d      5 }|j                         k(  sJ 	 d d d        t#        j$                         }|j                  |       |j'                         k(  sJ |j                         |k(  sJ t        |d      5 }|j)                  |        d d d        t#        j$                  |       ||fD ]  }	t        j*                  |	      }|j-                         t        j                  k(  sJ |j/                         dk(  sJ |j1                         dk(  sJ |j3                         dk(  sJ |j5                         d d  t7        d	      k(  rJ  	 d d d        t9        j:                  t<              5  t        j*                  t#        j$                  | d d
             }d d d        t9        j:                  t<              5  t        j*                  t#        j$                  d            }d d d        y # 1 sw Y   VxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Ns`   iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQI12Ow69x7BgAE3gJRgNit0AAAAABJRU5ErkJggg==   zfoo.pngr   rbwbr/   r   s   2nr`   )base64	b64decoder8   ospathjoinencoder   getfilesystemencodingr   rH   rl   write_to_pngr   readr   closer   r   r   writecreate_from_pngrn   ro   rp   rq   r   r.   rF   rG   IOError)
	png_bytespng_magic_numberr7   filenamefilename_bytesry   fdwritten_png_bytesr   sources
             r-   test_pngr  f  s     	12I !!}		 GW77<<3!)B)B)DEy661=X&(D! 	BR "	$//0@AAA	B 	Xt""$(D! 	$R779###	$^,(D! 	2R779 1111	2::<X&  "&7777##%)::::(D! 	 RHHY	 zz),hG 	GF"226:G%%'9+B+BBBB$$&!+++%%'1,,,%%'1,,,##%a(E2E,FFFF	G-G< 
w	 K..rzz)CR./IJK 
w	 @..rzz#?@ @7	B 	B	$ 	$	2 	2	  	 )G G<K K@ @s   A<M!$L.M4L'%M0L4A#M*M<B9M6M,M()M&L$	M'L1	,M4L>	9MM	MMM#&M/c                  v   t        t        j                               t        t        j                  t        j
                  g      k\  sJ t        j                  t        j                        dk(  sJ t        j                  t              5  t        j                  d       d d d        t        j                  t              5  t        j                  d       d d d        t        j                         } t        | dd      j                          | j                         j                  d      sJ t        j                         } t        | dd      }|j!                  t        j                         |j                          | j                         j                  d      sJ y # 1 sw Y   xY w# 1 sw Y   xY w)NzPDF 1.4PDF_VERSION_42*   r   )s   %PDF-1.5s   %PDF-1.7s   %PDF-1.4)setr   get_versionsrH   PDF_VERSION_1_4PDF_VERSION_1_5version_to_stringrF   rG   	TypeErrorrr   r   r   r   r   r   restrict_to_version)r   ry   s     r-   test_pdf_versionsr    sS    z&&()S!!9#<#<2> .? ? ? ?''	(A(ABiOOO	y	! 7$$%567	z	" )$$R() zz|HxA%%'))*DEEEzz|H1a(G	 9 9:NN))+6667 7) )s   F"F/"F,/F8c                      t               5 } t        j                  j                  | d      }|j	                  t        j                               }t        j                         }|||d fD ]  }t        |dd      }|j                          ! t        |d      5 }|j                         j                  d      sJ 	 d d d        t        |d      5 }|j                         j                  d      sJ 	 d d d        t        j                  j                  |      }|j                   d   d   g dk(  sJ t#        |j                         d	k(  sJ 	 d d d        t        j                         }t        |d	d	      }t%        |      }|j'                  d
d       |j)                          |j'                  dd       |j+                          |j                          t        j                  j                  |      }dt-        |j.                        vsJ |j                   d   d   g dk(  sJ |j                   d	   d   g dk(  sJ t#        |j                         dk(  sJ y # 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   )xY w)Nzfoo.pdf{     r   s   %PDFr   z	/MediaBox)r   r   r!  r"  r      rR   r    z"/MediaBox": [ 0 0 1 1 ])r   r   r#  rR   )r   r   r  r$  r   )r8   r  r  r  r  r   r  r   r   r   r   r   r  r   r   r   r   r   r   set_sizer   r   rJ   r   )	r7   r  r  r   r   ry   r  r   r{   s	            r-   test_pdf_surfacer&    s!   		 #W77<<3!)B)B)DE::<4@ 	F c2GNN	 (D! 	1R779''000	1.$' 	12779''000	1kkx(yy|K(,<<<<399~"""# zz|H1a(GgGRRNN
++

8
$C%S-====99Q<$77799Q<$777syy>Q)	1 	1	1 	1# #s=   BI3"I:I3"I&1AI3I#	I3&I0	+I33I=c                     t        t        j                               t        t        j                  t        j
                  g      k\  sJ t        j                  t        j                        dk(  sJ t        j                  t              5  t        j                  d       d d d        t        j                  t              5  t        j                  d       d d d        t               5 } t        j                  j                  | d      }|j                  t!        j"                               }t%        j&                         }|||d fD ]  }t        |dd      j)                           t+        |d      5 }|j-                         j/                  d      sJ 	 d d d        t+        |d      5 }|j-                         j/                  d      sJ 	 d d d        |j1                         }|j/                  d      sJ d	|v sJ 	 d d d        t        d d
d
      }|j3                  t        j                         y # 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w)NzSVG 1.1SVG_VERSION_42r  zfoo.svgr!  r"  r   s   <?xmls   viewBox="0 0 123 432"r   )r  r"   r  rH   SVG_VERSION_1_1SVG_VERSION_1_2r  rF   rG   r  rr   r8   r  r  r  r  r   r  r   r   r   r   r  r   r   r  )r7   r  r  r   r   r  	svg_bytesry   s           r-   test_svg_surfacer,    s	   z&&()S!!9#<#<2> .? ? ? ?''	(A(ABiOOO	y	! 7$$%567	z	" )$$R() 
	 5W77<<3!)B)B)DE::<4@ 	2FvsC(//1	2(D! 	2R779''111	2.$' 	22779''111	2%%'	##H---'94445 q!$G	 9 9:+7 7) )	2 	2	2 	25 5sU   H5I*B
I'4"II'+"I1I'5H?II	I'I$	 I''I0c                     t        t        j                               t        t        j                  t        j
                  g      k\  sJ t        j                  t        j
                        dk(  sJ t        j                  t              5  t        j                  d       d d d        t        j                  t              5  t        j                  d       d d d        t               5 } t        j                  j                  | d      }|j                  t!        j"                               }t%        j&                         }|||d fD ]  }t        |dd      j)                           t+        |d      5 }|j-                         j/                  d      sJ 	 d d d        t+        |d      5 }|j-                         j/                  d      sJ 	 d d d        |j1                         j/                  d      sJ 	 d d d        t%        j&                         }t        |d	d	      }|j3                  t        j                         |j5                         d
u sJ |j7                  d       |j5                         du sJ |j7                  d       |j5                         d
u sJ |j9                  dd       |j;                  d       |j=                          |j;                  d       |j?                          |j;                  d       |j)                          |j1                         }d|v sJ d|v sJ d|v sJ y # 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   txY w)Nz
PS Level 3PS_LEVEL_42r  zfoo.psr!  r"  r   s   %!PSr   FlolT rc   r#  z%%Loremz%%ipsumz%%dolors   %%Lorems   %%ipsums   %%dolor) r  r   
get_levelsrH   
PS_LEVEL_2
PS_LEVEL_3ps_level_to_stringrF   rG   r  rr   r8   r  r  r  r  r   r  r   r   r   r   r  r   r   restrict_to_levelget_epsset_epsr%  dsc_commentdsc_begin_setupdsc_begin_page_setup)r7   r  r  r   r   r  ry   ps_bytess           r-   test_ps_surfacer<    s   y##%&#i22/4 +5 5 5 5''	(<(<=MMM	y	! 4$$]34	z	" )$$R() 
	 
7W77<<2!)B)B)DE::<4@ 	1Ffc3'..0	1(D! 	1R779''000	1.$' 	12779''000	1  "--g666
7 zz|H!Q'Gi223??%%%OOE??$$$OOB??%%%R	"	"  "	"NN  "H!!!!!!!!!G4 4) )	1 	1	1 	1
7 
7sU   L6M*B
M*4"MM*+"M)M*6M MM	M*M'	"M**M4c                    t        t        j                  dd      }|j                         d d  }|ddz  k(  sJ t        t        j                  dd      }t	        |      }|j                  dd       |j                  d       |j                         d d  }||k7  sJ t        t        j                  |       }t	        |      }|j                  dd       |j                         dk(  sJ |j                  d       |j                          |j                         dk7  sJ t        t        j                  dd      }t	        |      }|j                  |       |j                          |j                         d d  }||fS )NrR       i@  r_   2   zSomething about us.)r   r   r   r   )r   rH   rl   r   r   move_to	show_textr   CONTENT_COLOR_ALPHAink_extentsr   set_source_surfacer   )extentsry   empty_pixelsr{   text_pixelsrecording_surfacerecorded_pixelss          r-   _recording_surface_commonrJ    se    922C=G##%a(L7U?***922C=GgGOOB+,""$Q'K,&&&()F)F)02'(GOOB((*l:::+,((*l:::922C=GgG01MMO&&(+O''r/   c                  .    t        d      \  } }|| k(  sJ y N)r   r      ra   rJ  rG  rI  s     r-   test_recording_surfacerP  +  s    #<_#M Kk)))r/   c                  .    t        d       \  } }|| k(  sJ y NrN  rO  s     r-    test_unbounded_recording_surfacerS  0  s!     $=T#B Kk)))r/   c                  p    dD ]1  } t        t        j                  |       }|j                         | k(  r1J  y )NrL  )r   rH   rB  get_extents)rE  ry   s     r-   "test_recording_surface_get_extentsrV  7  s<     + 0"9#@#@'J""$///0r/   c                     t               } t        j                  t              5  | j                   d d d        | j                         dk(  sJ | j                  dd       | j                         dk(  sJ | j                  dd       | j                         dk(  sJ | d   dk(  sJ | j                  dk(  sJ d| _        | j                         d	k(  sJ t        |       d
k(  sJ t        |       d
k(  sJ | j                  dd      dk(  sJ | j                  dd      dk(  sJ | j                         }|| k(  sJ |j                          |j                         dk(  sJ | j                         |k(  sJ | j                         d	k(  sJ t        |  }|| k(  sJ |j                          |j                         dk(  sJ | j                         |k(  sJ | j                         d	k(  sJ | j!                  t"        j$                  dz         t'        | j                               dk(  sJ | t        j(                  t"        j$                        z  } t'        | j                               dk(  sJ y # 1 sw Y   ;xY w)Nr   r   r   r   r   r   r#  r   )r   r   r   r   r#  r   r      )r   r   r   rY  r#  r   r   r   r   r   r   r#  r   zMatrix(2, 0, 0, 3, 12, 4)r   r   r;   r   rc   )rh   r   r   gUUUUUU?g      gUUUUUU)r   r   r   r#  r   )r   r   r   i)r   rF   rG   AttributeErrorsome_inexistent_attributeas_tuple	translatescaleyyreprrJ   transform_distancetransform_pointcopyinvertinvertedrotatemathpirB   init_rotate)mm2s     r-   test_matrixrr  ?  s?   A	~	& $	##$::<////KKA::<0000GGAqM::<0000Q419944199AD::<000071111q600001%///Q"h...	
B7N7IIK;;=AAAA::<2::<0000	B7N7IIK;;=AAAA::<2::<0000HHTWWq[qzz|$(>>>>		DGG	$$Aqzz|$(@@@@E$ $s   I**I4c                  0   t        t        j                  dd      } t        |       }|j	                         }|| usJ |j
                  | j
                  k(  sJ |j                         t        j                  k(  sJ |j                  t        j                         |j                         t        j                  k(  sJ |j                         t        j                  k(  sJ |j                  t        j                         |j                         t        j                  k(  sJ |j                         t               k(  sJ t        j                   d      }|j#                  |       |j                         |k(  sJ |j                         t               k7  sJ y )Nr   rh   )r   rH   	FORMAT_A1r!   get_surfacer   
get_extendEXTEND_NONE
set_extendEXTEND_REPEAT
get_filterFILTER_GOOD
set_filterFILTER_BEST
get_matrixr   ro  
set_matrix)ry   patternsurface_againmatrixs       r-   test_surface_patternr  f  sY   9..15GW%G'')M'''!!W%5%55559#8#8888y../9#:#::::9#8#8888y,,-9#8#888868+++$Fv6)))68+++r/   c                     t        ddd      j                         dk(  sJ t        dddd      j                         dk(  sJ t        d dd      } t        |       }t        ddd      }|j	                  |       t        |j                         t               sJ t        j                  j                  }	 |t        j                  = |j                         }|j                  |j                  k(  sJ t        |t              sJ t        |t               rJ 	 t         |t        j                  <   y # t         |t        j                  <   w xY w)Nr   rh         ?)r   rh   r  r         ?)r   rh   r  r  )r   rv   r   r   
set_sourcer   ru   rH   patternsPATTERN_TYPE_TO_CLASSPATTERN_TYPE_SOLIDr   r   )ry   r{   r  pattern_map
re_patterns        r-   test_solid_patternr  }  s#   2s#,,./AAA2sC(1137HHHHq!$GgG1b#&Gwg((*L999$$::KA	445'')
""g&6&6666*g...j,77774@I001LI001s   3A D, ,Ec                     t        j                         }t        |dd      }t        |      }| |j	                  |        |j                          |j                          |j                         S )NrR   )r   r   r   r   r  r   r   r   )r  r   ry   r{   s       r-   pdf_with_patternr    s[    zz|H3,GgG7#MMONNr/   c                     t        dddd      } | j                         dk(  sJ | j                  dddd       | j                  dddd       | j                  dddd	d       | j	                         g d
k(  sJ t        t        j                  dd      }|j                         d d  dk(  sJ t        dddd      } | j                  ddddd       | j                  ddddd       t        |      }|j                  |        |j                          |j                         d d  dk(  sJ dt               vsJ dt        |       v sJ y )Nr   r   rc   r_   )r   r   rc   r_   rh   r  offsetredgreenbluer  )rh   r   rh   r  r   )rh   r   rh   r  r  )r   r   rh   r  r   r   r   s                                          ?r   g      @s      3f  3f  3f  3fs   /ShadingType 2)r   get_linear_pointsadd_color_stop_rgbadd_color_stop_rgbaget_color_stopsr   rH   rm   r   r   r  r   r  )gradientry   r{   s      r-   test_linear_gradientr    s\   aB+H%%'>9991b#.rqE  QC5##% *    9..15Ga L000c1c1-H  Aq!Q/  Aq!Q/gGx MMOa $KKKK$4$6666 0 ::::r/   c                  2   t        dddddd      } | j                         dk(  sJ | j                  ddd	d
       | j                  d	dd	d
       | j                  d	dd	dd
       | j	                         g dk(  sJ dt               vsJ dt        |       v sJ y )Nr    rc   +     rR   )r  r  rc   r  r  rR   r   rh   r  r  r  r  s   /ShadingType 3)r   get_radial_circlesr  r  r  r  )r  s    r-   test_radial_gradientr    s    b#r2sC8H&&(,GGGG1b#.rqE  QC5##% *   
 $4$6666 0 ::::r/   c                  x   t        t        j                  dd      } t        |       }|j	                         j                         dk(  sJ |5  |j                  ddd       |j	                         j                         dk(  sJ 	 d d d        |j	                         j                         dk(  sJ 	 |5  |j                  dddd       |j	                         j                         dk(  sJ t        # 1 sw Y   mxY w# 1 sw Y   nxY wn# t        $ r Y nw xY w|j	                         j                         dk(  sJ y )Nr   rg   r  rh   )r   r  rh   r   r  )r   r  r  rh   )	r   rH   rl   r   ru   rv   set_source_rgbr   rr   ry   r{   s     r-   test_context_as_context_managerr    s>   922Aq9GgG((*l:::	 Bq#r*!!#,,./AAAB ((*l::: 	##AsC4%%'0026GGGGB B	 	 	   ((*l:::s0   7C00D	 2>C<0C9<DD	 		DDc                  0   t        t        j                  dd      } t        |       }t	        |j                         t               sJ |j                         j                  | j                  k(  sJ |j                         j                  | j                  k(  sJ |j                         j                         t        j                  k(  sJ | j                         d d  t        d      k(  sJ |5  |j                  t        j                         |j                         j                         t        j                  k(  sJ |j                  dddd       t	        |j                         t               sJ |j#                          |j%                          t	        |j                         t&              sJ | j                         d d  t        d      k(  sJ |j#                          | j                         d d  t        d      k(  sJ 	 d d d        |5  |j)                          |j                  ddd       |j#                          |j+                         }t	        |j                         t               sJ t	        |t&              sJ |j-                  |j/                                | j                         d d  t        d      k(  sJ |j#                          | j                         d d  t        d      k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr          g?g?皙?s      s   3f)r   rH   rl   r   r   r   r   get_group_targetr   rB  r   r.   push_group_with_contentr   r   ru   r   r   pop_group_to_sourcer!   
push_group	pop_grouprD  ru  )ry   r{   groups      r-   test_context_groupsr    s   922Aq9GgGg((*L999((G,<,<<<<##%..'2B2BBBB$$&224))* + *a E*=$>>>>	 C''	(?(?@((*668''( 	) (2r2.',,.===##%',,.???!!$.A(BBBB!!$.A(BBBBC 
 
C2r*!!#',,.===%000""5#4#4#67!!$.A(BBBB!!$.A(BBBB
C 
CC C
C 
Cs   -DL C'L L	Lc            
      $   t        t        j                  dd      } t        |       }t	        |j                         t              sJ |j                         j                         dk(  sJ |j                  dd       |j                         j                         dk(  sJ |j                  dd       |j                         j                         dk(  sJ |j                  d       |j                         j                         dk(  sJ |j                  t        j                  d	z         t        |j                         j                               d
k(  sJ |j                          |j                         j                         dk(  sJ |j                  t        d	ddddd	             |j                         j                         dk(  sJ |j!                  t        d	ddddd             |j                         j                         dk(  sJ |j                  t        d	ddddd             |j#                  dd	      dk(  sJ |j%                  dd	      dk(  sJ |j'                  d	d      dk(  sJ t        |j)                  dd            dk(  sJ y )Nr   rX  r;   r   )r   r   r   r   r;   r   )r   r   r   r;   r;   r   rh   )rh   r   r   r   r;   r   r   )r   r   g      r   r;   r   r   rY  r   )r   r   r   rY  r   r   r   )r   r   r  g      @r   r   r#  r   r[  r\  )r   r   r   rc   )r   rH   rl   r   r   r~  r   rb  rc  rd  rl  rm  rn  rB   identity_matrixr  	transformuser_to_device_distanceuser_to_devicedevice_to_user_distancedevice_to_userr  s     r-   %test_context_current_transform_matrixr    sX   922Aq9GgGg((*F333((*.@@@@a((*.@@@@MM!Q((*.@@@@MM"((*.AAAANN477Q;w))+4467;OOOO((*.@@@@vaAq!Q/0((*.@@@@fQ1b!Q/0((*.DDDDvaQB23**1a0F:::!!!Q'8333**1a0F:::w--b"56&@@@r/   c            	         t        t        j                  dd      } t        |       }|j	                         g k(  sJ |j                         du sJ |j                         dk(  sJ |j                  dddt        j                  dz  d       |j	                         }|d   t        j                  d	fk(  sJ t        |      dkD  sJ t        d
 |dd  D              sJ |j                         du sJ |j                         dk(  sJ |j                          |j	                         |k(  sJ |j                         du sJ |j                         dk(  sJ |j                          |j	                         g k(  sJ |j                         du sJ |j                         dk(  sJ |j                  dddt        j                  dz  d       |j	                         }|d   t        j                  d	fk(  sJ t        |      dkD  sJ t        d |dd  D              sJ ||k7  sJ |j                          |j!                  dddd       |j	                         }|d   t        j                  dfk(  r|d d }|t        j                  dft        j"                  dft        j"                  dft        j"                  dft        j$                  dfgk(  sJ |j'                         dk(  sJ |j                          |j)                  dd       |j+                  dd       |j-                  dd       |j/                  dd       |j1                  dddddd       |j3                  dddddd       |j5                          |j	                         }|d   t        j                  dfk(  r|d d }|t        j                  dft        j"                  dft        j                  dft        j"                  dft        j6                  dft        j6                  dft        j$                  dfgk(  sJ |j                          |j)                  dd        |j1                  dddddd       |j	                         t        j                  d!ft        j6                  dfgk(  sJ |j9                         }t        |      dkD  sJ |d   t        j                  d!fk(  sJ t        d" |dd  D              sJ |d   t        j"                  d#fk(  sJ |j                          |j)                  dd       |j+                  dd       |j	                         }|t        j                  dft        j"                  dfgk(  sJ t        j"                  d$fg}|j;                  |       |j	                         ||z   k(  sJ t=        j>                  t@              5  |j;                  t        j"                  d%fg       d d d        t=        j>                  t@              5  |j;                  t        j"                  d&fg       d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)'Nr   F)r   r   rR   rj   r_   r   r   )rR      c              3   H   K   | ]  }|d    t         j                  k(    ywr   NrH   PATH_CURVE_TOr=   parts     r-   r?   z$test_context_path.<locals>.<genexpr>(       IdtAw)111I    "T)x   rj   c              3   H   K   | ]  }|d    t         j                  k(    ywr  r  r  s     r-   r?   z$test_context_path.<locals>.<genexpr>9  r  r  rc   r)   )rc   r_   )n   r_   )r  r  )rc   r  r*   )rc   r_   r  r  r`   r   F   r?  r  )r#  #   )rc   r`   )r   rd   )r_   r`   r  r?  rR   r  )r        r  rj      r   )rc   r   c              3   H   K   | ]  }|d    t         j                  k(    ywr  )rH   PATH_LINE_TOr  s     r-   r?   z$test_context_path.<locals>.<genexpr>g  s     FTtAw)000Fr  )rR   r  )r`   r  )r`   r  r   )r`   r  r   r   )!r   rH   rl   r   	copy_pathhas_current_pointget_current_pointarcrm  rn  PATH_MOVE_TOr   allnew_sub_pathnew_patharc_negativer   r  PATH_CLOSE_PATHpath_extentsr@  line_torel_move_torel_line_tocurve_torel_curve_to
close_pathr  copy_path_flatappend_pathrF   rG   rr   )ry   r{   path_1path_2r  additional_paths         r-   test_context_pathr    s2   922Aq9GgG"$$$$$&%///$$&&000KKS"dggai+ F!9//<<<<v;??IfQRjIIII$$&$...$$&*444&((($$&%///$$&&000"$$$$$&%///$$&&000c2twwqy!4 F!9//<<<<v;??IfQRjIIIIVb"c3'DBxI**H55CRy			*			+			,			+		"	"B') ) ) ) !%7777OOBOOB11RRS#.RRc2DBxI**H55CRy			*			*			*			*		 	 "<=		 	 "@A		"	"B') ) ) ) OOBRRS#.			*		 	 "<=#? ? ? ? !!#Dt9q==7y--x8888FT!"XFFFF8	..
;;;;OOBOOBD			*			*, , , , "..	:;O($"8888	z	" Fi44lCDEF	z	" Ii44oFGHI IF FI Is   <#X, #X8,X58Yc                  V   t        t        j                  dd      } t        |       }|j	                         t        j
                  k(  sJ |j                  t        j                         |j	                         t        j                  k(  sJ |j                         g dfk(  sJ |j                  g dd       |j                         g ddfk(  sJ |j                         dk(  sJ |j                         t        j                  k(  sJ |j                  t        j                         |j                         t        j                  k(  sJ |j                         t        j                   k(  sJ |j#                  t        j$                         |j                         t        j$                  k(  sJ |j'                         t        j(                  k(  sJ |j+                  t        j,                         |j'                         t        j,                  k(  sJ |j/                         dk(  sJ |j1                  d       |j/                         dk(  sJ |j3                         dk(  sJ |j5                  d       |j3                         dk(  sJ |j7                         t        j8                  k(  sJ |j;                  t        j<                         |j7                         t        j<                  k(  sJ |j?                         d	k(  sJ |jA                  d
       |j?                         d
k(  sJ y )Nr   r   )r   r   r   r   r  r   r      rc   g?r  )!r   rH   rl   r   get_antialiasANTIALIAS_DEFAULTset_antialiasANTIALIAS_BESTget_dashset_dashget_dash_countget_fill_ruleFILL_RULE_WINDINGset_fill_ruleFILL_RULE_EVEN_ODDget_line_capLINE_CAP_BUTTset_line_capLINE_CAP_SQUAREget_line_joinLINE_JOIN_MITERset_line_joinLINE_JOIN_ROUNDget_line_widthset_line_widthget_miter_limitset_miter_limitget_operatorOPERATOR_OVERset_operatorOPERATOR_XORget_toleranceset_tolerancer  s     r-   test_context_propertiesr  {  s   922Aq9GgG  "i&A&AAAA)223  "i&>&>>>>"a(((\3',!4444!!#q(((  "i&A&AAAA)667  "i&B&BBBB!Y%<%<<<<223!Y%>%>>>>  "i&?&????)334  "i&?&????!!#q(((2!!#r)))""$***A""$)))!Y%<%<<<<//0!Y%;%;;;;  "c)))$  "d***r/   c                  H   t        t        j                  dd      } | j                         d d  dk(  sJ t	        |       }|j                  dddd       |j                  d       |j                  dddd       |j                         dk(  sJ |j                         dk(  sJ |j                  dd      d	u sJ |j                  d
d      du sJ |j                  dd      du sJ |j                  d
d      d	u sJ t        |j                               }|sJ |j                          t        |j                               |k(  sJ | j                         d d  dk(  sJ |j                          t        |j                               g k(  sJ | j                         d d  dk(  sJ y )Nr   r   r   rh   r   r   r   r   r   r   )r  r        
@r  Tr  Fs               s               )r   rH   rm   r   r   r   r  r   fill_extentsstroke_extentsin_fill	in_strokelistr  fill_preserver   ry   r{   r  s      r-   test_context_fillr    s   9..15Ga L000gGAq!R(2aAq!!\111!!#'====??1a D(((??2q!U***Q"e+++R#t+++!!#$DK4!!#$,,,a 	   LLN!!#$***a 	  r/   c                     dD ]  } t        t        j                  dd      }|j                         d d  dk(  sJ t	        |      }|j                  dddd       |j                  d       |j                  dddd       t        |j                               }|sJ | r|j                         n|j                          t        |j                               | r|ng k(  sJ |j                         d d  dk(  rJ  y )	N)TFr   r   r   r   rh   r   s           )r   rH   rm   r   r   r   r  r   r  r  stroke_preservestroke)preservery   r{   r  s       r-   test_context_stroker    s    ! !y22Aq9!!$444'"1a+q!"b!Q'G%%'(t%-!7>>3CG%%'(XT2FFF!!$ ! 	! !!r/   c                  *   t        t        j                  dd      } | j                         d d  dk(  sJ t	        |       }|j                  dddd       |j                         dk(  sJ t        |j                               }|sJ |j                          t        |j                               |k(  sJ |j                         dk(  sJ |j                          t        |j                               g k(  sJ |j                         dk(  sJ |j                          |j                         dk(  sJ |j                  dddd       |j                  dddd       |j                          |j                         ddgk(  sJ |j                         d	k(  sJ y )
Nr   r   r   r   )r   r   r   r   r  )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   rH   rm   r   r   r   clip_extentsr  r  clip_preserveclip
reset_clipcopy_clip_rectangle_listr  s      r-   test_context_clipr    s   9..15Ga L000gGaAq!!\111!!#$DK4!!#$,,,!\111LLN!!#$***!\111!\111aAq!aAq!LLN++-,1MMMM!\111r/   c                  H   t        t        j                  dd      } t        |       }|j	                  dddd       |j                  dd      du sJ |j                  dd      du sJ |j                          |j                  dd      du sJ |j                  dd      du sJ y )Nr   r   r   rh   Tr  F)r   rH   rm   r   r   in_clipr  r  s     r-   test_context_in_clipr    s     9..15GgGaAq!??2q!T)))??3"d***LLN??2q!U***??3"d***r/   c                     t        t        j                  dd      } t        |       }|j	                  dddd       |j                  dddd       |j                          |j	                  dddd       |j                  dddd       |j                          t        t        j                  dd      }t        |      }|j                  t        |              t        d      }t        d      }t        d      }|j                         d d  ||z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   k(  sJ t        t        j                  dd      }t        |      }|j                  | dd	       t        d      }t        d      }t        d      }|j                         d d  ||z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   k(  sJ y )
Nr   r   r   rh   r   r  ri   s      )	surface_x	surface_y)r   rH   rl   r   r   r   r   maskr!   r.   r   mask_surface)r#  r{   ry   obrb   s         r-   test_context_maskr&    sV   	 7 7A>Ll#GAq"a(aAq!LLNAr1b)aAq!LLN922Aq9GgGLL-.!"A!"A!"Aa 	A	A		
					
			 	
	
 	 	 	   922Aq9GgGa@!"A!"A!"Aa 	A	A		
					
			 	
	
 	 	 	  r/   c                  (
   t        t        j                  dd      } t        j                  t        |       j
                  d      }|j                         j                         dk(  sJ |j                  t        dddddd	             |j                         j                         d
k(  sJ |j                  d       |j                         j                         dk(  sJ |j                  d       |j                  dt        j                         |j                         }t        |t              sJ |j!                         dk(  sJ |j#                         t        j                  k(  sJ |j%                         t        j&                  k(  sJ 	 t        j(                  j*                  t        j,                  = |j                         }|j
                  |j
                  k(  sJ t        |t.              sJ t        |t              rJ 	 t        t        j(                  j*                  t        j,                  <   |j1                         \  }}}}}|dkD  sJ |dk(  sJ |j3                  d      \  }	}	}	}	}
}|
dkD  sJ |dk(  sJ |j5                  t        dt        j6                               |j3                  d      \  }	}	}	}	}}||
kD  sJ |dk(  sJ t9        |j;                               g k(  sJ |j=                  d       t9        |j;                               sJ | j?                         d d  dk(  sJ |jA                  dd       |jC                  d       | j?                         d d  dk7  sJ |jE                         jG                         t        jH                  k(  sJ |jK                  tM        t        jN                               |jE                         jG                         t        jN                  k(  sJ | jE                         jG                         t        jN                  k(  sJ |j                  t        dddddd	             |jQ                         j                         j                         d
k(  sJ |jS                  tU        t               t        ddd	ddd	                   |j                         j                         dk(  sJ |j5                  d        y # t        t        j(                  j*                  t        j,                  <   w xY w)Nrc   T)incref)rc   r   r   rc   r   r   r   r   r   r#  r   rZ  r   )r   r   r   r   r   r   s   @cairo:serif@cairo:serif
iiiiiiiiii@cairo:monospace)weightas                                                                                                                                                                                                                                                                                                                                                                                                                  r   r   hint_metrics)font_matrix)r   r   r   r   r#  r   )+r   rH   rl   r   _from_pointerr   get_font_matrixrb  set_font_matrixr   set_font_sizeselect_font_faceFONT_SLANT_ITALICget_font_facer   r#   
get_family	get_slant
get_weightFONT_WEIGHT_NORMALfontsFONT_TYPE_TO_CLASSFONT_TYPE_TOYr   font_extentstext_extentsset_font_faceFONT_WEIGHT_BOLDr  r  	text_pathr   r@  rA  get_font_optionsget_hint_metricsHINT_METRICS_DEFAULTset_font_optionsr   HINT_METRICS_ONget_scaled_fontset_scaled_fontr   )ry   r{   	font_facere_font_faceascentdescentheightmax_x_advancemax_y_advance_	x_advance	y_advancex_advance_monos                r-   test_context_fontrV  #  s   922B;G##GG$4$=$=dKG""$--/3GGGGF1a!QQ78""$--/3HHHH"""$--/3GGGG"_i.I.IJ%%'Ii---!^333 I$?$????!Y%A%AAAAOO..y/F/FG,,.$$	(:(::::,111lK8888  	**9+B+BC 	 :FGV]M 1A'.';';H'E$Aq!Q	9q==>>&y/I/IJL,3,@,@,J)Aq!Q	I%%%>>!!#$***c!!#$$$a M111OOAqca M111$$&779**+ , +!:!:;=$$&779%%& ' &$$&779%%& ' & F1a!QQ78""$446??A F   J{}&	1q!b!C  ""$--/3HHHH $Q  	**9+B+BCs   A8S   1Tc                     t        t                     } | j                         }|\  }}}}}|dkD  sJ |dk(  sJ | j                  d      \  }}}}}}	|dkD  sJ |	dk(  sJ t        t        d            } | j                  d      \  }}}}}}	t        t        d            } | j                  d      \  }}}}}
}	|
|kD  sJ |	dk(  sJ t	        | j                         t              sJ t        t        d      t        dd      t        dd      t        t        j                  	            } | j                         j                         t        j                  k(  sJ | j                         j                         d
k(  sJ | j                         j                         dk(  sJ | j!                         j                         dk(  sJ | j                  d      \  }}}}}}|	|k(  sJ ||
kD  sJ y )Nr   r*  r)  r+  r_   )xxre  r   rh   )	antialias)r_   r   r   r_   r   r   )r   r   r   rh   r   r   )<   r   r   rc   r   r   )r   r#   rE  r@  r   r7  r   r   r   rH   r  rD  r  r2  rb  get_ctmget_scale_matrix)fontr?  rM  rN  rO  rP  rQ  rR  rS  rT  rU  x_advance_mono_2y_advance_2s                r-   test_scaled_fontr`  h  s   km$D<<>L<H9FGV]M1A'+'8'8'B$Aq!Q	9q==>>k.12D'+'8'8'B$Aq!Q	9k"456D,0,=,=h,G)Aq!Q	I%%%>> d((*H555&'"fb1i6679D   "002i6N6NNNN!**,0DDDD<<>""$(;;;;  "++-1EEEE040A0A(0K-Aq!Q +###n,,,r/   c                     t               } | j                         t        j                  k(  sJ | j	                  t        j
                         | j                         t        j
                  k(  sJ | j                         t        j                  k(  sJ | j                  t        j                         | j                         t        j                  k(  sJ | j                         t        j                  k(  sJ | j                  t        j                         | j                         t        j                  k(  sJ | j                         t        j                  k(  sJ | j!                  t        j"                         | j                         t        j"                  k(  sJ t        t        j$                        }|j                         t        j$                  k(  sJ |j                         t        j                  k(  sJ |j'                         }||k(  sJ t)        t+        ||g            dk(  sJ |j	                  t        j,                         ||k7  sJ t)        t+        ||g            dk(  sJ |j/                  |       ||k(  sJ y )Nr.  r   r   )r   r  rH   r  r  ANTIALIAS_FASTget_subpixel_orderSUBPIXEL_ORDER_DEFAULTset_subpixel_orderSUBPIXEL_ORDER_BGRget_hint_styleHINT_STYLE_DEFAULTset_hint_styleHINT_STYLE_SLIGHTrE  rF  set_hint_metricsHINT_METRICS_OFFrH  ri  r   r  r  merge)options	options_1	options_2s      r-   test_font_optionsrq    s   mG  "i&A&AAAA)223  "i&>&>>>>%%'9+K+KKKKy;;<%%'9+G+GGGG!!#y'C'CCCC9667!!#y'B'BBBB##%)G)GGGGY778##%)C)CCCC)B)BCI%%'9+D+DDDD""$	(F(FFFF I	!!!sIy)*+q000I445	!!!sIy)*+q000OOI	!!!r/   i,  c                      t               } | j                         J | j                  d       | j                         dk(  sJ | j                  d        | j                         J y )Nzwght 400, wdth 300)r   get_variationsset_variations)rn  s    r-   test_font_options_variationsru    sj     mG!!#+++/0!!#';;;;4 !!#+++r/   c                     t        t        j                  dd      } t        |       }|j	                         }d}|j                  dd|d      \  }}}|j                  dd|d      |k(  sJ |\  \  }}}	\  }
}}\  }}}||
cxk7  r|k(  sJ  J |	|cxk(  r|cxk(  rdk(  sJ  J d|cxk(  r|cxk  r|k  sJ  J |g d	k(  sJ |d
k(  sJ t        |j                  |            t        |j                  |            k(  sJ t        |j                  |            t        |j                  |            k(  sJ |j                         g k(  sJ |j                  |       |j                         }|sJ |j                          |j                         g k(  sJ |j                  dd       |j                  |       |j                         g k7  sJ |j                         |k7  sJ |j                          |j                         g k(  sJ |j                  dd       |j                  |       |j                         }|d d |d d k(  sJ ddz  }| j                         d d  |k(  sJ |j                  |       | j                         d d  }||k7  sJ t        t        j                  dd      } t        |       }|j                  dd       |j!                  ||||       | j                         d d  }||k(  sJ t        t        j                  dd      } t        |       }|j                  dd       |j#                  |       | j                         d d  }||k(  sJ y )NrR   r_   u   Éttr   r   T)with_clustersF))r   r   r   r   r   rc   r)   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  r   )r   rH   rl   r   rI  text_to_glyphsrB   glyph_extentsr@  r  
glyph_pathr  r@  rC  r   show_glyphsshow_text_glyphsrA  )ry   r{   r]  textglyphsclustersis_backwardsidx1x1y1idx2x2y2idx3x3y3rz  rC  emptyglyph_pixelstext_glyphs_pixelsrG  s                         r-   test_glyphsr    s   922C<GgG""$DD%)%8%8	2t4 &9 &)"FHlq"d%@FJJJ5;2NT2rNT2rNT2r44rRR"////1t))&12D%%d+,. . .t))&12G))&124 4 4 "$$$v""$J:"$$$OOBd"$$$*,,,"$$$OOArd!!#ISb>Z_,,,"Ea E)))##%a(L5   922C<GgGOOArT68\B ))+A.----922C<GgGOOArd""$Q'K;&&&r/   c                      t         t        t        t        t        fD ]N  } t        j                  t              5  | j                  t        j                  j                  d       d d d        P y # 1 sw Y   [xY w)Nunused)r    r   r   r   r   rF   rG   rr   r1  rH   ffiNULL)class_s    r-   test_from_null_pointerr    s\    GWh
C ?]]:& 	?  !3!3X>	? 	??	? 	?s   +A..A7	i.  c                      dD ]q  } t        t        j                  |       }t        |      }|j	                  d       |j                         du sJ |j	                  d       |j                         du rqJ  y )NrL  TF)r   rH   rB  r   set_hairlineget_hairline)rE  ry   ctxs      r-   test_hairliner    sy     + ,"9#@#@'Jg!T)*)!U*+*,r/   rR  )j__doc__rs   r   
contextlibr   r   rm  r  r5   r   r3   r   rF   rH   r0  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   	byteorderr.   contextmanagerr8   rB   rO   rY   r]   r|   r   markr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r,  r<  rJ  rP  rS  rV  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  rV  r`  rq  ru  r  r  r  r*   r/   r-   <module>r     s  	    	 	  	  
    ) ) ) ) ) ) ) ) ) ==H
  .IB
>4	4 =?U*1  3'3' =?U*1  3	3	&AR7& =?U*1  3E3E$ =?U*1  3=3= =?U*1  3030 =?U*1  3838. =?U*1  3:3: =?U*1  3'3' =?U*1  3333( =?U*1  3-3-  =?U*1  3(3(.(@V =?U*1  3737(>;8'"T =?U*1  3(3(:*
 =?U*1  3*3*
 =?U*1  3030$AN,.A(;8;;*"CJA8[I|'+TB!&20 =?U*1  3+3+"JA J!-H"@ =?U*1  3,3,7't? =?U*1  3,3,r/   