3
!T                 @   s  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T ddlmZmZ e
jdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d\d8d9Z+d:d; Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9dVdW Z:dXdY Z;dZd[ Z<dS )]z
    cairocffi.tests
    ~~~~~~~~~~~~~~~

    Test suite for cairocffi.

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

    N   )*)upixelc              c   s:   t jtd} td| kstz
| V  W d tj|  X d S )N   é)tempfilemkdtempr   AssertionErrorshutilrmtree)tempdir r   T/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cairocffi/test_cairo.pytemp_directory   s
    
r   c             C   s   t dd | D S )Nc             s   s   | ]}t |d V  qdS )   N)round).0vr   r   r   	<genexpr>*   s    zround_tuple.<locals>.<genexpr>)tuple)valuesr   r   r   round_tuple)   s    r   c          
   O   s6   t jtj}| || W d Q R X dt|ks2td S )NZSURFACE_FINISHED)pytestraises	cairocffiZ
CairoErrorstrr	   )funcargskwargsexcr   r   r   assert_raise_finished-   s    r    c              C   s:   t tt jd\} }}t | d |d  | ks6td S )N.i'  d   )mapintZcairo_version_stringsplitcairo_versionr	   )majorminormicror   r   r   test_cairo_version3   s    r*   c              C   s    t j  dd l} | t kstd S )Nr   )r   Zinstall_as_pycairocairor	   )r+   r   r   r   test_install_as_pycairo8   s    r,   c              C   s   t jtjddkstt jtjddks,tt tjdd} | j tjksLt| j dks\t| j dkslt| j	 dks|tt
jt( tjddd }t j|tjd	d W d Q R X tjddd
 }t j|tjd	ddd} t| }|j j dk st|jd |j tdd kstd S )Nr"   i           B    i  
   i   (   )strider   r   g      ?s         P   )r   r   r   r   )ImageSurfaceZformat_stride_for_widthr   FORMAT_ARGB32r	   	FORMAT_A8
get_format	get_width
get_height
get_strider   r   
ValueErrorarraycreate_for_dataContext
get_sourceget_rgbapaint_with_alphatostringr   )surfacedatacontextr   r   r   test_image_surface>   s&    

rI   c              C   sV   dt jkrtj  td} tj| tjdddd}t	|j
d | tdd	 ksRtd S )
N__pypy__i   r2   r-   r3   )r4   g      ?s      r5   )sysmodulesr   xfail	bytearrayr7   r@   r   r8   rA   rD   r   r	   )rG   rF   r   r   r   test_image_bytearray_bufferX   s    

rO   c              C   s   t  dk rtj  ttjdd} | jtjdd}t|ts>t	|j
 tjksPt	|j tjksbt	|j dksrt	|j dkst	d S )Ni+  r-   r.   r/   r"   )r&   r   rM   r7   r   r8   Zcreate_similar_imager9   
isinstancer	   get_contentCONTENT_ALPHAr:   r;   r<   )rF   similarr   r   r   !test_surface_create_similar_imaged   s    
rT   c              C   sl   t  dk rtj  ttjdd} | j }|d d  dks<tt| j	ddddj
  |d d  dkshtd S )	Ni*  r/   r1      r      s               s                   )r&   r   rM   r7   r   r9   get_datar	   rA   Zcreate_for_rectanglepaint)rF   rG   r   r   r   !test_surface_create_for_rectanglep   s    

rY   c              C   s  t tjdd} | jtjdd}t|t s,t|j tjks>t|j tj	ksPt|j
 dks`t|j dkspt|j dksttd ddj dkst| j  | j  | j  | jddd	d
 | j  | jdd | j dkst| jdd | j dkstt| }t|j t sttjj}zH|tj= |j }|j| jksJtt|tsZtt|t  sltW d t |tj< X | j  t| j t| j t| jdd t| jdd d S )Nr-   r.   r/   r"   Fr   TrV   i,  i.           r   )rZ   r[   )r\   r   ) r7   r   r8   Zcreate_similarrR   rP   r	   rQ   r:   r9   r;   r<   Zhas_show_text_glyphs
PDFSurface	copy_page	show_pageZ
mark_dirtyZmark_dirty_rectangleflushZset_device_offsetZget_device_offsetZset_fallback_resolutionZget_fallback_resolutionrA   
get_targetsurfacesZSURFACE_TYPE_TO_CLASSSURFACE_TYPE_IMAGE_pointerSurfacefinishr    )rF   rS   rH   Zsurface_maptargetr   r   r   test_surface~   sB    

rh   c              C   s   t tdstj  tj  tj } tj| }t	t
jjjdksBtt| dd}t	t
jjjdksdttj| |d kszt~tj  t	t
jjjdksttj| |kstd S )Ngetrefcountr   r"   r   )hasattrrK   r   rM   gccollectioBytesIOri   lenr   rb   	KeepAlive	instancesr	   r]   )rg   Zinitial_refcountrF   r   r   r   test_target_lifetime   s    

rr   c              C   s   t  dk rtj  td dd} | jdd ks0ttj  tt	j
jjdksNt| jdd tt	j
jjdkspt| jdd d  dkst| jdd  tt	j
jjdkstt  dkr| jdd kst| j  t| jdd  d S )Ni*  r   z
image/jpegr   s   loli+  )r&   r   rM   r]   Zget_mime_datar	   rk   rl   ro   r   rb   rp   rq   Zset_mime_datarf   r    )rF   r   r   r   test_mime_data   s    

rs   c              C   sP   t  dk rtj  td ddjddks,tttjdd} | jddksLtd S )Ni+  r   z
image/jpegTF)	r&   r   rM   r]   Zsupports_mime_typer	   r7   r   r9   )rF   r   r   r   test_supports_mime_type   s
    
rt   c        
   4   C   s*  t jd} | d d }t }tjj|d}|jtj }t	t
jdd}|j| t|d}|j }|j|svtW d Q R X t|dj  t|d}|j dkstW d Q R X |j| t|d}|j |kstW d Q R X tj }|j| |j |kst|j |kstt|d}|j|  W d Q R X xtj| ||gD ]x}	t	j|	}|j t
jksnt|j dkst|j dkst|j dkst|j d d  td	ksLtqLW W d Q R X tjt t	jtj| d d
 }W d Q R X tjt t	jtjd}W d Q R X d S )Ns`   iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQI12Ow69x7BgAE3gJRgNit0AAAAABJRU5ErkJggg==   zfoo.pngr   rbwb    r/   s   2nr.   ) base64	b64decoder   ospathjoinencoderK   getfilesystemencodingr7   r   r8   Zwrite_to_pngopenread
startswithr	   closerm   rn   getvaluewriteZcreate_from_pngr:   r;   r<   r=   rW   r   r   r   IOError)
Z	png_bytesZpng_magic_numberr   filenamefilename_bytesrF   fdZwritten_png_bytesfile_objsourcer   r   r   test_png   sD    




."r   c              C   s   t  dk rtj  ttj ttjtjgks2t	tj
tjdksFt	tjt tj
d W d Q R X tjt tj
d W d Q R X tj } t| ddj  | j jdst	tj } t| dd}|jtj |j  | j jdst	d S )Ni*  zPDF 1.4ZPDF_VERSION_42*   r   s   %PDF-1.5s   %PDF-1.4)r&   r   rM   setr]   get_versionsr   PDF_VERSION_1_4PDF_VERSION_1_5r	   version_to_stringr   	TypeErrorr>   rm   rn   rf   r   r   restrict_to_version)r   rF   r   r   r   test_pdf_versions  s"    
r   c        	      C   sz  t  } tjj| d}|jtj }tj }x(|||d gD ]}t	|dd}|j
  q:W t|d}|j jdsttW d Q R X t|d}|j jdstW d Q R X |j }|jdstd|kst|jddkstW d Q R X tj }t	|dd}t|}|jd	d
 |j  |jdd |j  |j
  |j }d|ksFtd|ksTtd|ksbt|jddksvtd S )Nzfoo.pdf{   i  rv   s   %PDFs   /MediaBox [ 0 0 123 432 ]s   /Type /Page
r      r"   r   i  s   /MediaBox [ 0 0 1 1 ]s   /MediaBox [ 0 0 12 100 ]s   /MediaBox [ 0 0 42 700 ]rV   )r   r{   r|   r}   r~   rK   r   rm   rn   r]   rf   r   r   r   r	   r   countrA   set_sizer_   r^   )	r   r   r   r   rg   rF   r   Z	pdf_bytesrH   r   r   r   test_pdf_surface  s8    r   c           '   C   sd  t tj t tjtjgks ttjtjdks4ttj	t
 tjd W d Q R X tj	t tjd W d Q R X t } tjj| d}|jtj }tj }x$|||d gD ]}t|ddj  qW t|d}|j jdstW d Q R X t|d}|j jdstW d Q R X |j }|jds0td	|ks>tW d Q R X td d
d
}|jtj d S )NzSVG 1.1ZSVG_VERSION_42r   zfoo.svgr   i  rv   s   <?xmls   viewBox="0 0 123 432"r   )r   Z
SVGSurfacer   r   SVG_VERSION_1_1SVG_VERSION_1_2r	   r   r   r   r   r>   r   r{   r|   r}   r~   rK   r   rm   rn   rf   r   r   r   r   r   )r   r   r   r   rg   r   Z	svg_bytesrF   r   r   r   test_svg_surface8  s,    r   c           '   C   s  t tj t tjtjgks ttjtjdks4ttj	t
 tjd W d Q R X tj	t tjd W d Q R X t } tjj| d}|jtj }tj }x$|||d gD ]}t|ddj  qW t|d}|j jdstW d Q R X t|d}|j jdstW d Q R X |j jds,tW d Q R X tj }t|d	d	}|jtj |j d
ksht|jd |j dkst|jd |j d
kst|jdd |jtd |j   |jd |j!  |jd |j  |j }d|kstd|ks
td|kstd S )Nz
PS Level 3ZPS_LEVEL_42r   zfoo.psr   i  rv   s   %!PSr   FZlolT r2   r   z%%Loremz%%ipsumz%%dolors   %%Lorems   %%ipsums   %%dolor)"r   Z	PSSurfaceZ
get_levelsr   
PS_LEVEL_2
PS_LEVEL_3r	   Zps_level_to_stringr   r   r   r>   r   r{   r|   r}   r~   rK   r   rm   rn   rf   r   r   r   r   Zrestrict_to_levelZget_epsZset_epsr   Zdsc_commentr   Zdsc_begin_setupZdsc_begin_page_setup)r   r   r   r   rg   r   rF   Zps_bytesr   r   r   test_ps_surfaceT  sJ    



r   c             C   s  t  dk rtj  ttjdd}|j d d  }|dd ks@tttjdd}t|}|j	dd |j
d |j d d  }||kstttj| }t|}|j	dd |j d	kst|j
d |j  |j d
kstttjdd}t|}|j| |j  |j d d  }||fS )Ni*  r"   r1   i@  r-   2   zSomething about us.r   )r   r   r   r   )r   r   r   r   )r&   r   rM   r7   r   r8   rW   r	   rA   move_to	show_textRecordingSurfaceCONTENT_COLOR_ALPHAZink_extentsr`   set_source_surfacerX   )extentsrF   Zempty_pixelsrH   text_pixelsZrecording_surfacerecorded_pixelsr   r   r   _recording_surface_common~  s2    



r   c              C   s   t d\} }|| kstd S )Nr      r6   )r   r   r   r6   )r   r	   )r   r   r   r   r   test_recording_surface  s    r   c              C   s.   t  dk rtj  td \} }|| ks*td S )Ni+  )r&   r   rM   r   r	   )r   r   r   r   r    test_unbounded_recording_surface  s    
r   c              C   s@   t  dk rtj  x(dD ] } ttj| }|j | kstqW d S )Ni+  r   r   r6   r   r   r   r6   )Nr   )r&   r   rM   r   r   r   Zget_extentsr	   )r   rF   r   r   r   "test_recording_surface_get_extents  s
    

r   c              C   s  t  } tjt | j W d Q R X | j dks2t| jdd | j dksNt| jdd | j dksjt| d dkszt| j	dkstd| _	| j dkstt
| dkstt| dkst| jdddk st| jdddk st| j }|| ks t|j  |j dkst| j |ks,t| j dks>tt |  }|| ksTt|j  |j d!ksnt| j |kst| j d"kst| jtjd  t| j d$kst| t jtj9 } t| j d(kstd S ))Nr   r   r   r/   rV      r[   zMatrix(2, 0, 0, 3, 12, 4)r   rZ   r2         ?g      ?g      @)r   r   r   r   r   r   )r   r   r   r   r   r/   )rV   r   r   r   r   r/   )rV   r   r   r[   r   r/   )rV   r   )rZ   r2   UUUUUU?i      g      UUUUUU)r   r   r   r   r   r   )rV   r   r   r[   r   r/   UUUUUU?i      g      UUUUUU)r   r   r   r   r   r   )rV   r   r   r[   r   r/   )r   r[   r   r   r   r/   )r   r   rV   r   r   r   )Matrixr   r   AttributeErrorZsome_inexistent_attributeas_tupler	   	translatescaleyyreprr   Ztransform_distanceZtransform_pointcopyinvertinvertedrotatemathpir   init_rotate)mm2r   r   r   test_matrix  s@    r   c              C   s   t tjdd} t| }|j }|| k	s*t|j| jks:t|j tjksLt|j	tj
 |j tj
ksjt|j tjks|t|jtj |j tjkst|j t ksttjd}|j| |j |kst|j t kstd S )Nr   g      ?)r7   r   	FORMAT_A1SurfacePatternget_surfacer	   rd   Z
get_extendEXTEND_NONEZ
set_extendEXTEND_REPEATZ
get_filterFILTER_GOODZ
set_filterFILTER_BEST
get_matrixr   r   
set_matrix)rF   patternZsurface_againZmatrixr   r   r   test_surface_pattern  s     

r   c              C   s   t dddj dkstt ddddj dks2ttd dd} t| }t ddd}|j| t|j t snttj	j
}zB|tj= |j }|j|jkstt|tstt|t  stW d t |tj< X d S )Nr         ?      ?      ?)r   r   r   r   )r   r   r   r   )SolidPatternrC   r	   r]   rA   
set_sourcerP   rB   r   patternsZPATTERN_TYPE_TO_CLASSPATTERN_TYPE_SOLIDrd   Pattern)rF   rH   r   Zpattern_mapZ
re_patternr   r   r   test_solid_pattern  s    
r   c             C   sF   t j }t|dd}t|}| d k	r.|j|  |j  |j  |j S )Nr"   )rm   rn   r]   rA   r   rX   rf   r   )r   r   rF   rH   r   r   r   pdf_with_pattern  s    
r   c              C   s"  t dddd} | j dkst| jdddd | jddddd | jddddd | j dddgkshtttjd	d
}|j	 d d  dd kstt dddd} | jddddd | jddddd t
|}|j|  |j  |j	 d d  dd
 k stdt kstdt| kstd S )Nr   rV   r2   r-         ?      ?)offsetredgreenblue      ?ru   r/   r1       g      ?r   g      @s     3fs   /ShadingType 2)r   rV   r2   r-   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )ZLinearGradientZget_linear_pointsr	   add_color_stop_rgbadd_color_stop_rgbaget_color_stopsr7   r   r9   rW   rA   r   rX   r   )gradientrF   rH   r   r   r   test_linear_gradient  s(    
r   c              C   s   t dddddd} | j dks"t| jdddd	 | jdddd	d
 | jddddd	 | j dddgksltdt ksztdt| kstd S )Nr     r2   +     r"   r         ?      ?)r   r   r   r         ?s   /ShadingType 3)r   r   r2   r   r   r"   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )ZRadialGradientZget_radial_circlesr	   r   r   r   r   )r   r   r   r   test_radial_gradient+  s    r   c              C   s   t tjdd} t| }|j j dks*t|( |jddd |j j dksRtW d Q R X |j j dkspty<|. |jdddd |j j d	kstt	W d Q R X W n t	k
r   Y nX |j j d
kstd S )Nr   r         ?      ?      ?)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )
r7   r   r8   rA   rB   rC   r	   Zset_source_rgbset_source_rgbar>   )rF   rH   r   r   r   test_context_as_context_manager:  s    r   c              C   s  t tjdd} t| }t|j t s(t|j j| jks<t|j j| jksPt|j j	 tj
ksft| j d d  tdkst| |jtj |j j	 tjkst|jdddd t|j tst|j  |j  t|j tst| j d d  tdkst|j  | j d d  tdks2tW d Q R X | |j  |jddd |j  |j }t|j ts|tt|tst|j|j  | j d d  tdkst|j  | j d d  tdkstW d Q R X d S )Nr   s       g?g?g?s      s   3f)r7   r   r8   rA   rP   ra   r	   rd   Zget_group_targetrQ   r   rW   r   Zpush_group_with_contentrR   r   rB   r   rX   Zpop_group_to_sourcer   Z
push_groupZ	pop_groupr   r   )rF   rH   groupr   r   r   test_context_groupsO  s>    

(r   c              C   s  t tjdd} t| }t|j ts(t|j j dks<t|j	dd |j j dks\t|j
dd |j j dks|t|j
d |j j dkst|jtjd  t|j j dk st|j  |j j dk st|jtddddd	d |j j dkst|jtdddddd |j j dks>t|jtdddddd
 |jdddkslt|jdddkst|jdddkstt|jdddkstd S )Nr   r   r            ?r[   rV   r   ru   r/         ?      @r   rZ   r2   )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   r   r   )rV   r   r[   r   ru   rV   )r/   rV   r   r  ru   rV   )rV   r   )rZ   r2   )r   rV   )r   rV   )r7   r   r8   rA   rP   r   r   r	   r   r   r   r   r   r   r   Zidentity_matrixr   Z	transformZuser_to_device_distanceZuser_to_deviceZdevice_to_user_distanceZdevice_to_user)rF   rH   r   r   r   %test_context_current_transform_matrixt  s.    
r  c              C   s  t tjdd} t| }|j g ks&t|j dks6t|j dksFt|jdddt	j
d d |j }|d tjdfks|tt|dksttd	d
 |dd  D st|j dkst|j d kst|j  |j |kst|j dkst|j d!kst|j  |j g kst|j dks0t|j d"ksBt|jdddt	j
d d |j }|d tjd#fksztt|dksttdd
 |dd  D st||kst|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f fgks0t|j d+ksBt|j  |jdd |jdd |jdd |jdd |jdddddd |jdddddd |j  |j }|d, tjd-fkr|d d. }|tjd/ftjd0ftjd1ftjd2ftjd3ftjd4ftjf fgkst|j  |jdd |jdddddd |j tjd5ftjd6fgksbt|j }t|dks|t|d tjd7fksttdd
 |dd  D st|d8 tjd9fkst|j  |jdd |jdd |j }|tjd:ftjd;fgksttjd<fg}|j| |j || ks>ttj t! |jtjd=fg W d Q R X tj t! |jtjd>fg W d Q R X d S )?Nr   Fr   r"   r5   r-   rV      c             s   s   | ]}|d  t jkV  qdS )r   N)r   PATH_CURVE_TO)r   partr   r   r   r     s    z$test_context_path.<locals>.<genexpr>Tx   c             s   s   | ]}|d  t jkV  qdS )r   N)r   r  )r   r  r   r   r   r     s    r2   n   r.   r   F   r   r   #   rZ   r3            r\   c             s   s   | ]}|d  t jkV  qdS )r   N)r   PATH_LINE_TO)r   r  r   r   r   r     s    r/   )r   r   )r"   r  )r  r5   )r   r   )r   r   )r"   r  )r2   r-   r  )r2   r-   )r  r-   )r  r  )r2   r  )r2   r-   r  r  r  )r   r
  r  )r2   r-   )r2   r.   )r   r
  )rZ   r3   )r-   r.   r	  r   r"   r  )r  r  r  r  r5   r  )r2   r\   )r-   r.   r	  r   r"   r  )r2   r\   r  )r"   r  )r2   r-   )r2   r.   )r.   r  )r.   r  r   )r.   r  r   r/   )"r7   r   r8   rA   	copy_pathr	   Zhas_current_pointZget_current_pointZarcr   r   PATH_MOVE_TOro   allZnew_sub_pathnew_pathZarc_negative	rectangler  PATH_CLOSE_PATHZpath_extentsr   Zline_toZrel_move_toZrel_line_toZcurve_toZrel_curve_toZ
close_pathr  Zcopy_path_flatZappend_pathr   r   r>   )rF   rH   Zpath_1Zpath_2r|   Zadditional_pathr   r   r   test_context_path  s      
r  c              C   s  t tjdd} t| }|j tjks(t|jtj |j tjksFt|j	 g dfksZt|j
ddddgd |j	 ddddgdfkst|j dkst|j tjkst|jtj |j tjkst|j tjkst|jtj |j tjkst|j tjkst|jtj |j tjks.t|j dks@t|jd |j dks\t|j dksnt|jd |j dkst|j tjkst|jtj |j tjkst|j  d	kst|j!d
 |j  d
kstd S )Nr   r   r/   r[   rV   g      ?   r2   g?g      ?)"r7   r   r8   rA   get_antialiasANTIALIAS_DEFAULTr	   set_antialiasANTIALIAS_BESTZget_dashZset_dashZget_dash_countZget_fill_ruleFILL_RULE_WINDINGZset_fill_ruleFILL_RULE_EVEN_ODDZget_line_capLINE_CAP_BUTTZset_line_capLINE_CAP_SQUAREZget_line_joinLINE_JOIN_MITERZset_line_joinLINE_JOIN_ROUNDZget_line_widthset_line_widthZget_miter_limitZset_miter_limitZget_operatorOPERATOR_OVERZset_operatorOPERATOR_XORZget_toleranceZset_tolerance)rF   rH   r   r   r   test_context_properties  s<    


r%  c              C   sP  t tjdd} | j d d  dks&tt| }|jdddd |jd |jdddd |j	 dksht|j
 dksxt|jdddkst|jdddkst|jdddkst|jdddkstt|j }|st|j  t|j |k st| j d d  dkst|j  t|j g ks2t| j d d  dksLtd S )Nr/   r1   rU   r   g      ?r   rV   r[         ?      
@Tg?Fs               s               s                   )r   r   r[   r[   )r&  r&  r'  r'  )r7   r   r9   rW   r	   rA   r   r"  r  Zfill_extentsZstroke_extentsZin_fillZ	in_strokelistr  Zfill_preservefill)rF   rH   r|   r   r   r   test_context_fill  s,    
r*  c              C   s   xdD ]} t tjdd}|j d d  dks0tt|}|jdddd |jd |jddd	d	 t	|j
 }|svt| r|j n|j  t	|j
 | r|ng kst|j d d  d
kstqW d S )NTFr/   r1   rU   r   r   g      ?rV   s           )TFs                   )r7   r   r9   rW   r	   rA   r   r"  r  r(  r  Zstroke_preserveZstroke)ZpreserverF   rH   r|   r   r   r   test_context_stroke9  s    

r+  c              C   s&  t tjdd} | j d d  dks&tt| }|jdddd |j d	ksNtt|j	 }|sbt|j
  t|j	 |ks~t|j d
kst|j  t|j	 g kst|j dkst|j  |j dkst|jdddd |jdddd |j  |j ddgkst|j dks"td S )Nr/   r1   rU   r   rV   r   r[   s                   )r   r   r/   r/   )r   r   r[   r[   )r   r   r[   r[   )r   r   r/   r/   )r   r   rV   rV   )r   r[   r   r   )r   r   r[   r/   )r7   r   r9   rW   r	   rA   r  Zclip_extentsr(  r  Zclip_preserveclipZ
reset_clipZcopy_clip_rectangle_list)rF   rH   r|   r   r   r   test_context_clipL  s(    r-  c              C   s   t  dk rtj  ttjdd} t| }|jdddd |jdddksLt	|jdddks`t	|j
  |jdddks|t	|jdddkst	d S )	Ni*  r/   r   rV   g      ?Tg      ?F)r&   r   rM   r7   r   r9   rA   r  Zin_clipr	   r,  )rF   rH   r   r   r   test_context_in_clipd  s    
r.  c              C   s  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  || | | | | | | | | | | | | | | kstt tjdd}t|}|j| ddd	 t	d}t	d}t	d}|j
 d d  || | | | | | | | | | | | | | | kstd S )
NrV   r   r   g      ?r/   s       s      s      )Z	surface_xZ	surface_y)r7   r   r8   rA   r   r  r)  maskr   r   rW   r	   mask_surface)r0  rH   rF   obr0   r   r   r   test_context_maskq  s0    Fr3  c              C   sB  t tjdd} tjt| jdd}|j j dks6t|j	t
dddddd |j j dksbt|jd	 |j j dkst|jd |jd
tj |j }t|tst|j dkst|j tjkst|j tjk stzLtjjtj= |j }|j|jkstt|tstt|t s.tW d ttjjtj< X |j \}}}}}|dksbt|dkspt|jd\}	}	}	}	}
}|
dkst|dkst|jttdtjd |jd\}	}	}	}	}}||
kst|dkstt|j g kst|j d t|j st| j! d d  dd ks<t|j"dd |j#d | j! d d  dd kspt|j$ j% tj&kst|j't(tj)d |j$ j% tj)kst| j$ j% tj)kst|j	t
dddddd |j* j j dkst|j+t,t t
ddddddd |j j dks4t|jd  d S )Nr2   T)Zincrefr   rV   r[   r   r/   rZ   s   serifZserifi	monospace)Zweightar1   i  r   	   )hint_metrics)Zfont_matrix)r2   r   r   r2   r   r   )rV   r   r   r[   r   r/   )rZ   r   r   rZ   r   r   
iiiiiiiiiir9  )rV   r   r   r[   r   r/   )r   r   r/   r   r   r/   )-r7   r   r8   rA   _from_pointerrd   get_font_matrixr   r	   Zset_font_matrixr   Zset_font_sizeZselect_font_faceFONT_SLANT_ITALICget_font_facerP   ToyFontFaceZ
get_familyZ	get_slantZ
get_weightFONT_WEIGHT_NORMALZfontsZFONT_TYPE_TO_CLASSFONT_TYPE_TOYFontFacefont_extentstext_extentsZset_font_facer   FONT_WEIGHT_BOLDr(  r  	text_pathrW   r   r   get_font_optionsget_hint_metricsHINT_METRICS_DEFAULTZset_font_optionsFontOptionsHINT_METRICS_ONget_scaled_fontZset_scaled_font
ScaledFont)rF   rH   Z	font_faceZre_font_faceascentdescentheightmax_x_advancemax_y_advance_	x_advance	y_advancex_advance_monor   r   r   test_context_font  sl    






rV  c              C   sj  t t } | j }|\}}}}}|dks,t|dks8t| jd\}}}}}}	|dksZt|	dksftt td} | jd\}}}}}
}	|
|kst|	dkstt| j tstt tdtdddtdddt	t
jd	} | j j t
jkst| j j dkst| j j dkst| j j dks4t| jd\}}}}}}|	|ksXt||
ksftd S )Nr   r4  r2   r5  r-   )xxr   r[         ?)Z	antialias<   r9  r9  )r-   r   r   r-   r   r   )r[   r   r   rX  r   r   )rY  r   r   r2   r   r   r9  )rL  r>  r   r	   rC  rP   r=  rA  r   rI  r   r  rF  r  r;  r   Zget_ctmZget_scale_matrix)fontrB  rM  rN  rO  rP  rQ  rR  rS  rT  rU  Zx_advance_mono_2Zy_advance_2r   r   r   test_scaled_font  s.    
r[  c              C   sv  t  } | j tjkst| jtj | j tjks6t| j tjksHt| j	tj
 | j tj
ksft| j tjksxt| jtj | j tjkst| j tjkst| jtj | j tjkstt tjd}|j tjkst|j tjkst|j }||ksttt||gdks&t|jtj ||ks@ttt||gdksZt|j| ||ksrtd S )N)r8  r   rV   )rI  r  r   r  r	   r  ANTIALIAS_FASTZget_subpixel_orderSUBPIXEL_ORDER_DEFAULTZset_subpixel_orderSUBPIXEL_ORDER_BGRZget_hint_styleHINT_STYLE_DEFAULTZset_hint_styleHINT_STYLE_SLIGHTrG  rH  Zset_hint_metricsHINT_METRICS_OFFrJ  r   ro   r   r  merge)optionsZ	options_1Z	options_2r   r   r   test_font_options  s0    
rd  c              C   s  t tjdd} t| }|j }td}|jdd|dd\}}}|jdd|dd|ksXt|\\}}}	\}
}}\}}}||
  ko|kn  st|	|  ko|  kodkn  std|  ko|  k o|k n  st|dddgkst|dk st|j||j	|kst|j||j|ks0t|j
 g ksBt|j| |j
 }|s^t|j  |j
 g ksxt|jdd |j| |j
 g kst|j
 |kst|j  |j
 g kst|jdd |j| |j
 }|d d |d d kstdd d d }| j d d  |ks2t|j| | j d d  }||ksZtt tjdd} t| }|jdd |j|||| | j d d  }||kstt tjdd} t| }|jdd |j| | j d d  }||kstd S )Nr"   r-   u   Éttr   r\   T)Zwith_clustersFrV   r   r   r2   r1   r/   )rV   r   )r   r   )r   r   r  r  )r7   r   r8   rA   rK  r   Ztext_to_glyphsr	   Zglyph_extentsrC  r  
glyph_pathr  r   rE  rW   Zshow_glyphsZshow_text_glyphsr   )rF   rH   rZ  textZglyphsZclustersZis_backwardsZidx1x1y1Zidx2Zx2y2Zidx3Zx3Zy3re  rE  emptyZglyph_pixelsZtext_glyphs_pixelsr   r   r   r   test_glyphs  s`    &&





rk  c              C   sB   x<t ttttgD ]*} tjt | jt	j
jd W d Q R X qW d S )Nunused)re   rA   r   rA  rL  r   r   r>   r:  r   ffiNULL)class_r   r   r   test_from_null_pointerU  s    rp  )N)=__doc__rm   rk   r{   rK   r   r?   ry   r
   r   
contextlibr   r   r   compatr   r   contextmanagerr   r   r    r*   r,   rI   rO   rT   rY   rh   rr   rs   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r*  r+  r-  r.  r3  rV  r[  rd  rk  rp  r   r   r   r   <module>   sr   
)	+ *'
%^*!%F! 8