3
W                @   sr  d Z ddlmZm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 ddlmZ ddlmZ ddlmZ d	d
lmZmZmZmZmZ dd ZedZedZ edZ!dd Z"dd Z#dd Z$d\ddZ%dd Z&dd Z'dd Z(dd Z)d d! Z*d]d"d#Z+ed$d% Z,ed&d' Z-ed(d) Z.ed*d+ Z/ed,d- Z0ed.d/ Z1ed0d1 Z2ed2d3 Z3ed4d5 Z4d6d7 Z5ed8d9 Z6ee#d:d;d< Z7ed=d> Z8ed^dAdBZ9dCdD Z:edEdF Z;edGdH Z<edIdJ Z=edKdL Z>ee#d:dMdN Z?edOdP Z@edQdR ZAedSdT ZBee#d:dUdV ZCee#dWdXdY ZDedZd[ ZEdS )_a  
    weasyprint.tests.test_draw
    --------------------------

    Test the final, drawn results and compare PNG images pixel per pixel.

    :copyright: Copyright 2011-2014 Simon Sapin and contributors, see AUTHORS.
    :license: BSD, see LICENSE for details.

    )divisionunicode_literalsN   )xrangeizipints_from_bytes)
ensure_url)HTML_HANDLERS)HTML   )resource_filenameTestHTMLFONTSassert_no_logscapture_logsc             C   s4   t jdkr,| d d d d d | dd   S dd S )Nlittler   c             S   s   | dd  | d d  S )Nr   r    )xr   r   Z/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/weasyprint/tests/test_draw.py<lambda>%   s    z<lambda>.<locals>.<lambda>r   r   r   )sys	byteorder)r   r   r   r   r   #   s    ,r   s   s     s     c             C   s(   t jt j||t| |d dj| dS )zSave raw pixels to a PNG file.   )datastrideN)cairoZImageSurfaceFORMAT_ARGB32	bytearrayZwrite_to_png)pixelswidthheightfilenamer   r   r   save_pixels_to_png/   s    r#   c                s\   dddg}x&t  jdD ]\}}t|||< qW tdjdd |D  fdd}|S )Nr   . c             s   s   | ]}d | V  qdS )z%02iNr   ).0numberr   r   r   	<genexpr>;   s    z!requires_cairo.<locals>.<genexpr>c                s   t j  fdd}|S )Nc                  s2   t j k r(tdt j f  tj     d S )Nz+Running cairo %s but this test requires %s+)r   Zcairo_versionprintZcairo_version_stringpytestZxfailr   )testversionversion_numberr   r   decorated_test>   s
    zErequires_cairo.<locals>.require_cairo_version.<locals>.decorated_test)	functoolswraps)r+   r.   )r,   r-   )r+   r   require_cairo_version=   s    z-requires_cairo.<locals>.require_cairo_version)	enumeratesplitintjoin)r,   Ztuple_versionir'   r1   r   )r,   r-   r   requires_cairo7   s    

r7   c             C   sX   t ||kstt |d |d ks(tdj|}t| |||\}}t| |||| dS )z;Helper testing the size of the image and the pixels values.r   r       N)lenAssertionErrorr5   html_to_pixelsassert_pixels_equal)nameexpected_widthexpected_heightZexpected_pixelshtmlexpected_raw_docr   r   r   r   assert_pixelsJ   s    

rC   c             C   sr   g }x0|D ](\}}t || ||\}}|j||f q
W |d \}	}
x*|dd D ]\}}t|| ||
|| qPW dS )z
    Render HTML documents to PNG and check that they render the same,
    pixel-per-pixel.

    Each document is passed as a (name, html_source) tuple.
    r   r   N)r;   appendr<   )r>   r?   	documents	tolerancepixels_listr=   r@   rB   r   _name	referencer   r   r   assert_same_renderingU   s    rJ   c             C   s   g }x0|D ](\}}t || ||\}}|j||f q
W x`t|D ]T\}\}	}
xF||d d D ]2\}}|
|kr^t|	|
| | ds^td|	|f q^W q@W dS )z
    Render HTML documents to PNG and check that no two documents render
    the same.

    Each document is passed as a (name, html_source) tuple.
    r   NFz%s and %s are the same)r;   rD   r2   	write_pngr:   )r>   r?   rE   rG   r=   r@   rB   r   r6   Zname_1Zpixels_1Zname_2Zpixels_2r   r   r   assert_different_renderingsj   s    rL   c             C   sP   t jjt jjtd}t jj|s,t j| t jj|| d }t|||| dS )z)Take a pixel matrix and write a PNG file.Ztest_resultsz.pngN)ospathr5   dirname__file__isdirmkdirr#   )basenamer   r    r!   	directoryr"   r   r   r   rK      s
    
rK   c             C   s&   t |tdd}t|| ||}||fS )z
    Render an HTML document to PNG, checks its size and return pixel data.

    Also return the document to aid debugging.
    z<test>)stringZbase_url)r   r   document_to_pixels)r=   r>   r?   r@   documentr   r   r   r   r;      s    r;   c             C   s   | j  }t|||S )zP
    Render an HTML document to PNG, checks its size and return pixel data.
    )write_image_surfaceimage_to_pixels)rW   r=   r>   r?   surfacer   r   r   rV      s    rV   c                s   | j  | j f||fkst| j tjtjfks4t| j d d   | j }|d |kr|kshtdj	 fddt
d|| |D  t || d kst S )Nr   r8   c             3   s   | ]} ||  V  qd S )Nr   )r&   r6   )r   	row_bytesr   r   r(      s   z"image_to_pixels.<locals>.<genexpr>r   )Z	get_widthZ
get_heightr:   Z
get_formatr   r   ZFORMAT_RGB24get_dataZ
get_strider5   r   r9   )rZ   r    r!   r   r   )r   r[   r   rY      s    rY   c             C   s   ||krxt tt|t|D ]\}\}}t|| |kr t| ||| t| d ||| |d }	|	| }
|	| }|d  tt|||d  }tt|||d  }ds td|
|| ||f q W dS )zZ
    Take 2 matrices of height by width pixels and assert that they
    are the same.
    z	.expectedr   r   z1Pixel (%i, %i) in %s: expected rgba%s, got rgba%sN)r2   r   r   absrK   tupler:   )r=   r    r!   rawrA   rF   r6   valueZexpectedZpixel_nr   ypixelZexpected_pixelr   r   r   r<      s$    
r<   c               C   s  t dddddt g d t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t g
d dS )zATest the background applied on ``<html>`` and/or ``<body>`` tags.Zall_blue
   u   
        <style>
            @page { size: 10px }
            /* body’s background propagates to the whole canvas */
            body { margin: 2px; background: #00f; height: 5px }
        </style>
        <body>
    ZblocksuW  
        <style>
            @page { size: 10px }
            /* html’s background propagates to the whole canvas */
            html { padding: 1px; background: #f00 }
            /* html has a background, so body’s does not propagate */
            body { margin: 1px; background: #00f; height: 5px }
        </style>
        <body>
    N)rC   Brr   r   r   r   test_canvas_background   s    &&&&&&&&&(rf   c           (   C   sL  Kxddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd	d
t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfddt t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfdd t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t t t t t t t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd!d"t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd#d$t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t  t  t  t  t  t  t  t  t  t  t t  t t t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd%d&t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t t  t  t t  t  t  t  t  t  t  t  t  t t t  t  t t  t  t  t  t  t  t  t  t  t t t  t  t t  t  t  t  t  t  t  t  t  t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd'd(t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd)d*t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfd+d,t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t t t t t t t  t  t  t  t  t  t t  t  t  t t t t t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t  t  gfgD ]&\} }}td-|  d.d/|d0|f  JqW td1d2d2t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  g
d3 d4S )5zTest background images.repeatzurl(pattern.png)Zrepeat_xzurl(pattern.png) repeat-xZrepeat_yzurl(pattern.png) repeat-yZleft_topzurl(pattern.png) no-repeat 0 0%Z
center_topz"url(pattern.png) no-repeat 50% 0pxZ	right_topz"url(pattern.png) no-repeat 6px topZbottom_6_right_0z-url(pattern.png) no-repeat bottom 6px right 0Zleft_centerz&url(pattern.png) no-repeat left centerZcenter_leftz&url(pattern.png) no-repeat center leftZcenter_centerz"url(pattern.png) no-repeat 3px 3pxZright_centerz#url(pattern.png) no-repeat 100% 50%Zleft_bottomz$url(pattern.png) no-repeat 0% bottomZcenter_bottomz%url(pattern.png) no-repeat center 6pxZbottom_centerz(url(pattern.png) no-repeat bottom centerZright_bottomz#url(pattern.png) no-repeat 6px 100%Zrepeat_x_1px_2pxz!url(pattern.png) repeat-x 1px 2pxZrepeat_y_local_2px_1pxz'url(pattern.png) repeat-y local 2px 1pxZfixedz url(pattern.png) no-repeat fixedZfixed_rightz*url(pattern.png) no-repeat fixed right 3pxZfixed_center_centerz)url(pattern.png)no-repeat fixed 50%centerZmulti_underzYurl(pattern.png) no-repeat,
                           url(pattern.png) no-repeat 2px 1pxZ
multi_overzXurl(pattern.png) no-repeat 2px 1px,
                          url(pattern.png) no-repeatZbackground_      a0  
            <style>
                @page { size: 14px 16px }
                html { background: #fff }
                body { margin: 2px; height: 10px;
                       background: %s }
                p { background: none }
            </style>
            <body>
            <p>&nbsp;
        Zzero_size_backgroundrc   a  
        <style>
            @page { size: 10px }
            html { background: #fff }
            body { background: url(pattern.png);
                   background-size: cover;
                   display: inline-block }
        </style>
        <body>
    N)_re   rd   rC   )r=   cssr   r   r   r   test_background_image   s   
666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666:666666666666666H
&&&&&&&&&(
rl   c              C   s  d
dd} | dt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t  t  t  t  t  g | dt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t t t t t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  g | dt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t t t t t  t  t  t t  t  t  t  t t t t t  t  t  t t  t  t  t  t t t t t  t  t  t t  t  t  t  t t t t t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  g | dt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t t t  t  t  t t  t  t  t  t  t  t t t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  gdd	 dS )z$Test the background-origin property.Nc             S   s"   t d|  dd|d|p| f  d S )NZbackground_origin_   a  
            <style>
                @page { size: 12px }
                html { background: #fff }
                body { margin: 1px; padding: 1px; height: 6px;
                       border: 1px solid  transparent;
                       background: url(pattern.png) bottom right no-repeat;
                       background-origin: %s }
            </style>
            <body>
        )rC   )r`   r   rk   r   r   r   
test_value  s    
z*test_background_origin.<locals>.test_valuez
border-boxzpadding-boxzcontent-boxzborder-box_clipz(border-box; background-clip: content-box)rk   )N)rj   re   rd   )rn   r   r   r   test_background_origin  sl    
...........4...........4...........4...........0ro   c               C   s  t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd d	S )
z!Test for background-repeat: spaceZbackground_repeat_spacerm   ri   z
        <style>
            @page { size: 12px 16px }
            html { background: #fff }
            body { margin: 1px; height: 14px;
                   background: url(pattern.png) space; }
        </style>
        <body>
    rh   z
        <style>
            @page { size: 12px 14px }
            html { background: #fff }
            body { margin: 1px; height: 12px;
                   background: url(pattern.png) space; }
        </style>
        <body>
       z
        <style>
            @page { size: 12px 13px }
            html { background: #fff }
            body { margin: 1px; height: 11px;
                   background: url(pattern.png) repeat space; }
        </style>
        <body>
    N)rC   rj   re   rd   r   r   r   r   test_background_repeat_space  sb    ...............0	.............0	............0	rq   c               C   s,	  t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd d	S )
z!Test for background-repeat: roundZbackground_repeat_roundrc   rh   a&  
        <style>
            @page { size: 10px 14px }
            html { background: #fff }
            body { margin: 1px; height: 12px;
                   image-rendering: pixelated;
                   background: url(pattern.png) top/6px round repeat; }
        </style>
        <body>
       a.  
        <style>
            @page { size: 10px 18px }
            html { background: #fff }
            body { margin: 1px; height: 16px;
                   image-rendering: pixelated;
                   background: url(pattern.png) center/auto 8px repeat round; }
        </style>
        <body>
    a&  
        <style>
            @page { size: 10px 14px }
            html { background: #fff }
            body { margin: 1px; height: 12px;
                   image-rendering: pixelated;
                   background: url(pattern.png) center/6px 9px round; }
        </style>
        <body>
    a&  
        <style>
            @page { size: 10px 14px }
            html { background: #fff }
            body { margin: 1px; height: 12px;
                   image-rendering: pixelated;
                   background: url(pattern.png) center/5px 9px round; }
        </style>
        <body>
    N)rC   rj   re   rd   r   r   r   r   test_background_repeat_roundN  s    &&&&&&&&&&&&&(
&&&&&&&&&&&&&&&&&(
&&&&&&&&&&&&&(
&&&&&&&&&&&&&(
rs   c              C   s  dd } | dt t  t  t  t  t  t  t  t t t t t t t t  t t t t t t t t  t t t t t t t t  t t t t t t t t  t t t t t t t t  t t t t t t t t  t t  t  t  t  t  t  t  g | dt t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g | dt t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t t t  t  t  t t  t  t t t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g td}| dt t  t  t  t  t  t  t  t | | | | | | t  t | t t t t | t  t | t t t t | t  t | t t t t | t  t | t t t t | t  t | | | | | | t  t t  t  t  t  t  t  t  g dS )	z"Test the background-clip property.c             S   s   t d|  dd|d| f  d S )NZbackground_clip_   a1  
            <style>
                @page { size: 8px }
                html { background: #fff }
                body { margin: 1px; padding: 1px; height: 2px;
                       border: 1px solid  transparent;
                       background: %s }
            </style>
            <body>
        )rC   )r`   r   r   r   r   rn     s    	z(test_background_clip.<locals>.test_valuez#00f border-boxz#00f padding-boxz#00f content-boxs     z"url(pattern.png) padding-box, #0f0N)rj   rd   as_pixelre   )rn   Gr   r   r   test_background_clip  sL    $$$rw   c               C   s$  t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t dddtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g
d	 t d
ddtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g
d t dddtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g
d t dddtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g
d dS )z"Test the background-size property.Zbackground_sizerm   a  
        <style>
            @page { size: 12px }
            html { background: #fff }
            body { margin: 1px; height: 10px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) no-repeat
                               bottom right / 80% 8px; }
        </style>
        <body>
    Zbackground_size_autoas  
        <style>
            @page { size: 12px }
            html { background: #fff }
            body { margin: 1px; height: 10px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) bottom right/auto no-repeat }
        </style>
        <body>
    Zbackground_size_containrh   rc   a  
        <style>
            @page { size: 14px 10px }
            html { background: #fff }
            body { margin: 1px; height: 8px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) no-repeat;
                   background-size: contain }
        </style>
        <body>
    Zbackground_size_mixeda  
        <style>
            @page { size: 14px 10px }
            html { background: #fff }
            body { margin: 1px; height: 8px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) no-repeat left / auto 8px;
                   clip: auto; /* no-op to cover more validation */ }
        </style>
        <body>
    Zbackground_size_doublea  
        <style>
            @page { size: 14px 10px }
            html { background: #fff }
            body { margin: 1px; height: 8px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) no-repeat 0 0 / 8px 4px;
                   clip: auto; /* no-op to cover more validation */ }
        </style>
        <body>
    Zbackground_size_coveras  
        <style>
            @page { size: 14px 10px }
            html { background: #fff }
            body { margin: 1px; height: 8px;
                   /* Use nearest neighbor algorithm for image resizing: */
                   image-rendering: pixelated;
                   background: url(pattern.png) no-repeat right 0/cover }
        </style>
        <body>
    N)rC   rj   re   rd   r   r   r   r   test_background_size  s    ...........0...........06666666668666666666866666666686666666668rx   c              C   sl  xdt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t t  t t t t t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  g
fdt t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t t t t t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  g
fgD ]&\} }td|  dd|dt| f  qW tdddt t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  g
dtf  d	S )
zTest images as list markers.ZoutsideZinsideZlist_style_image_rm   rc   a5  
            <style>
                @page { size: 12px 10px }
                body { margin: 0; background: white; font-family: %s }
                ul { margin: 2px 2px 0 7px; list-style: url(pattern.png) %s;
                     font-size: 2px }
            </style>
            <ul><li></li></ul>
        Zlist_style_nonez
        <style>
            @page { size: 10px }
            body { margin: 0; background: white; font-family: %s }
            ul { margin: 0 0 0 5px; list-style: none; font-size: 2px; }
        </style>
        <ul><li>
    N)rj   re   rd   rC   r   )positionr   r   r   r   test_list_style_image  sJ    .........2.........>&&&&&&&&&(rz   c           '   C   st	  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g} td}t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  | | | | t  t  t t  | | | | t  t  t t  | | | | t  t  t t  | | | | t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g}t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g}xHd| fd| fd| fd| fd|fgD ]"\}}td| dd|d	|  qW td
dd| d t }tddd|d W dQ R X t|dksrtd|d kstd|d ksttddd|d t }tdddd d6D  W dQ R X t|dkstd|d kstd!|d ksttd"dd|d# td$dd|d% td&dd|d' t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t t t t t  t  t t  t  t  t  t  t  t  t t  t  t  t  t  t  t  g}td(dd7|d* td+dd| d, td-dd| d. td/d0d0t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  | | | | | | | | t  t  t t  | | | | | | | | t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  | | | | t  t  t  t  t  t  t t  | | | | t  t  t  t  t  t  t t  | | | | t  t  t  t  t  t  t t  | | | | t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  t t  t  t  t  t  t  t  t  t  t  t  gd1 dS )8z(Test images sizes, positions and pixels.s     zpattern.svgzpattern.pngzpattern.palette.pngzpattern.gifzblue.jpgZinline_image_rt   z
            <style>
                @page { size: 8px }
                body { margin: 2px 0 0 2px; background: #fff; font-size: 0 }
            </style>
            <div><img src="%s"></div>
        Zblock_imagez
        <style>
            @page { size: 8px }
            body { margin: 0; background: #fff; font-size: 0 }
            img { display: block; margin: 2px auto 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_not_founda  
            <style>
                @page { size: 8px }
                body { margin: 0; background: #fff; font-size: 0 }
                img { display: block; margin: 2px auto 0 }
            </style>
            <div><img src="inexistent1.png" alt=""></div>
        Nr   zWARNING: Failed to load imager   zinexistent1.pngZimage_no_srcz
        <style>
            @page { size: 8px }
            body { margin: 0; background: #fff; font-size: 0 }
            img { display: block; margin: 2px auto 0 }
        </style>
        <div><img alt=""></div>
          c             S   s   g | ]\}}|d | fqS )z
                <style>
                    @page { size: 200px 30px }
                    body { margin: 0; background: #fff; font-size: 0 }
                </style>
                <div>%s</div>
            r   )r&   r=   r@   r   r   r   
<listcomp>!  s   ztest_images.<locals>.<listcomp>image_alt_text_referenceHello, world!image_alt_text_not_found/<img src="inexistent2.png" alt="Hello, world!">image_alt_text_no_src<img alt="Hello, world!">image_svg_no_intrinsic_sizeZ<img src="data:image/svg+xml,<svg></svg>"
                            alt="Hello, world!">zinexistent2.pngZ	image_0x1z
        <style>
            @page { size: 8px }
            body { margin: 2px; background: #fff; font-size: 0 }
        </style>
        <div><img src="pattern.png" alt="not shown"
                  style="width: 0; height: 1px"></div>
    Z	image_1x0z
        <style>
            @page { size: 8px }
            body { margin: 2px; background: #fff; font-size: 0 }
        </style>
        <div><img src="pattern.png" alt="not shown"
                  style="width: 1px; height: 0"></div>
    Z	image_0x0z
        <style>
            @page { size: 8px }
            body { margin: 2px; background: #fff; font-size: 0 }
        </style>
        <div><img src="pattern.png" alt="not shown"
                  style="width: 0; height: 0"></div>
    Zimage_page_break   z
        <style>
            @page { size: 8px; margin: 2px; background: #fff }
            body { font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
        <div style="page-break-before: right"><img src="pattern.png"></div>
    Zimage_with_paddingz
        <style>
            @page { size: 8px; background: #fff }
            body { font-size: 0 }
        </style>
        <div style="line-height: 1px">
            <img src=pattern.png style="padding: 2px 0 0 2px">
        </div>
    Zimage_in_inline_blockz
        <style>
            @page { size: 8px }
            body { margin: 2px 0 0 2px; background: #fff; font-size: 0 }
        </style>
        <div style="display: inline-block">
            <p><img src=pattern.png></p>
        </div>
    Zimage_shared_patternrm   a  
        <style>
            @page { size: 12px }
            body { margin: 2px; background: #fff; font-size: 0 }
        </style>
        <div style="background: url(blue.jpg);
                    height: 2px; margin-bottom: 1px"></div>
        <img src=blue.jpg>
    r~   r   r   r   r   r   r   r   )r   r   r   r      )	rj   re   rd   ru   rC   r   r9   r:   rJ   )Zcentered_imagebZ
blue_imageZno_imager"   imageZlogsZ
page_breakr   r   r   test_images  s    """


      


"


...........0	r   c               C   s   t ddd
dddg d S )N   image_resolution_ref
            <style>@page { size: 20px; margin: 2px; background: #fff }</style>
            <div style="font-size: 0">
                <img src="pattern.png" style="width: 8px"></div>
        image_resolution_img
            <style>@page { size: 20px; margin: 2px; background: #fff }</style>
            <div style="image-resolution: .5dppx; font-size: 0">
                <img src="pattern.png"></div>
        image_resolution_content
            <style>@page { size: 20px; margin: 2px; background: #fff }
                   div::before { content: url(pattern.png) }
            </style>
            <div style="image-resolution: .5dppx; font-size: 0"></div>
        image_resolution_background
            <style>@page { size: 20px; margin: 2px; background: #fff }
            </style>
            <div style="height: 16px; image-resolution: .5dppx;
                        background: url(pattern.png) no-repeat"></div>
        )r   r   )r   r   )r   r   )r   r   )rJ   r   r   r   r   test_image_resolution  s        r   c              C   s  d} t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t g| ddi  t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t g| ddi  t d	ddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t g| dd
i  d S )Na9  
        <style>
            @page { size: 12px 7px }
            body { background: #fff; font: 1px/1 serif }
            img { margin: 1px 0 0 1px; }
            %(extra_css)s
        </style>
        <div>
            <img src="pattern.png">
            <span><img src="pattern.png"></span>
        </div>
    Zvisibility_referencerm      	extra_cssr%   Zvisibility_hiddenzdiv { visibility: hidden }Zvisibility_mixedzYdiv { visibility: hidden }
                                 span { visibility: visible } )rC   rj   re   rd   )sourcer   r   r   test_visibility  s:    ......0......0......0r   z1.12c           9   C   s  t d t d< t d t d< d} td}td}td}td	}td
}tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | | | | | | t | t t t t | t | | | | | | t t t t tt t t t t t t t t t | t t t t | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t | | | | | t t t t | | | | | t t t t t t t t t t t tt t t t t t t t t t t | t t t t t t t t t t t t t t t tt t t t t t t t t t t | t t t t t t t t t t t t t t t tt t t t t t t t t t t | t t t t t t t t t t t t t t t tt t t t t t t t t t t | t t t t t t t t t t t t t t t tt t | | | | | | | | | | | | | | t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t | t t t t | t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t t| | | | | | | | | | | | | | | | | | | | | | | | | | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t | | | | | t t t t | | | | | t t t t t t t | t t| t t t t t t t t t t t t | t t t t t t t t t t t | t t| t t t t t t t t t t t t | t t t t t t t t t t t | t t| t t t t t t t t t t t t | t t t t t t t t t t t | t t| t t t t t t t t t t t t | t t t t t t t t t t t | t t| t t t | | | | | | | | | | | | | | t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| | | | | | | | | | | | | | | | | | | | | | | | | | t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t t| | | | | | | | | | | | | | | | | | | | | | | | | | t t| t t t | | | | | | | | | | | | | | t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t | t t t t | t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| t t t t t t t t t t t t t t t t t t t t t t t t | t t| | | | | | | | | | | | | | | | | | | | | | | | | | t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g4| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t t t t t t t t | | | | | | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t t t t t t t t | | | | | | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t t t t t t t t | | | | | | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | | | | | | t | t t t t | t | | | | | | t t t t tt t t t t t t t t t | t t t t | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  tdddtt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t | | | | | | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | t t t t | t | t t t t | t | t t t t | t t t t tt t t | | | | | | t | t t t t | t | | | | | | t t t t tt t t t t t t t t t | t t t t | t t t t t t t t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | t t t t t t | t t t t | t | t t t t | t t t t tt t t | | | | | | | | | | | | | t | | | | | | t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | t t t t | t | t t t t | t t t t t t t t t t t tt t t | | | | | | t | | | | | | t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t t t t t t t g| ddi  td}tdd d!tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | | | | | | | | | | | | | | | | | | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | | | | | | | | | | | | | | | | | | t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | | | | | | | | | | | | | | | | | | t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t g$d" td#d d!tt t t t t t t t t t t t t t t t t t t t t tt | | | | | | | | | | | | | | | | | | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | | | | | | | | | | | | | | | | | | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt | | | | | | | | | | | | | | | | | | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt | t t t t t | t t t t | t t t t t | t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t | t t t t | t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t t t g$d$ td%d&d'tt t t t t t t t t t t t t t t t t t t tt t t t t t t | | | | | | | | | | | t tt t t t t t t | t t t t | t t t t | t tt t t t t t t | t t t t | t t t t | t tt t t t t t t | t t t t | t t t t | t tt t t t t t t | | | | | | | | | | | t tt t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t tt t t t t t t t t t t t t t t t t t t g
d( d S ))Ntdzx-tdthzx-tha  
        <style>
            @page { size: 28px; background: #fff }
            x-table { margin: 1px; padding: 1px; border-spacing: 1px;
                      border: 1px solid transparent }
            x-td { width: 2px; height: 2px; padding: 1px;
                   border: 1px solid transparent }
            %(extra_css)s
        </style>
        <x-table>
            <x-colgroup>
                <x-col></x-col>
                <x-col></x-col>
            </x-colgroup>
            <x-col></x-col>
            <x-tbody>
                <x-tr>
                    <x-td></x-td>
                    <x-td rowspan=2></x-td>
                    <x-td></x-td>
                </x-tr>
                <x-tr>
                    <x-td colspan=2></x-td>
                    <x-td></x-td>
                </x-tr>
            </x-tbody>
            <x-tr>
                <x-td></x-td>
                <x-td></x-td>
            </x-tr>
        </x-table>
    s   s   ??s   s    s    ?Ztable_borders   r   zu
        x-table { border-color: #00f; table-layout: fixed }
        x-td { border-color: rgba(255, 0, 0, 0.5) }
    Ztable_collapsed_bordersz
        x-table { border: 2px solid #00f; table-layout: fixed;
                  border-collapse: collapse }
        x-td { border-color: #ff7f7f }
    Ztable_collapsed_borders_paged4   a  
        x-table { border: solid #00f; border-width: 8px 2px;
                  table-layout: fixed; border-collapse: collapse }
        x-td { border-color: #ff7f7f }
        @page { size: 28px 26px; margin: 1px;
                border: 1px solid rgba(0, 255, 0, 0.5); }
    Ztable_td_backgroundszs
        x-table { border-color: #00f; table-layout: fixed }
        x-td { background: rgba(255, 0, 0, 0.5) }
    Ztable_row_backgroundsz
        x-table { border-color: #00f; table-layout: fixed }
        x-tbody { background: rgba(0, 0, 255, 1) }
        x-tr { background: rgba(255, 0, 0, 0.5) }
    Ztable_column_backgroundsz
        x-table { border-color: #00f; table-layout: fixed }
        x-colgroup { background: rgba(0, 0, 255, 1) }
        x-col { background: rgba(255, 0, 0, 0.5) }
    Z!table_borders_and_row_backgroundsz
        x-table { border-color: #00f; table-layout: fixed }
        x-tr:first-child { background: blue }
        x-td { border-color: rgba(255, 0, 0, 0.5) }
    Z$table_borders_and_column_backgroundsz
        x-table { border-color: #00f; table-layout: fixed }
        x-col:first-child { background: blue }
        x-td { border-color: rgba(255, 0, 0, 0.5) }
    s     Zcollapsed_border_thead   $   a  
        <style>
            @page { size: 22px 18px; margin: 1px; background: #fff }
            td { border: 1px red solid; width: 4px; height: 3px; }
        </style>
        <table style="table-layout: fixed; border-collapse: collapse">
            <thead style="border: blue solid; border-width: 2px 3px;
                "><td></td><td></td><td></td></thead>
            <tr><td></td><td></td><td></td></tr>
            <tr><td></td><td></td><td></td></tr>
            <tr><td></td><td></td><td></td></tr>
    Zcollapsed_border_tfoota+  
        <style>
            @page { size: 22px 18px; margin: 1px; background: #fff }
            td { border: 1px red solid; width: 4px; height: 3px; }
        </style>
        <table style="table-layout: fixed; margin-left: 1px;
                      border-collapse: collapse">
            <tr><td></td><td></td><td></td></tr>
            <tr><td></td><td></td><td></td></tr>
            <tr><td></td><td></td><td></td></tr>
            <tfoot style="border: blue solid; border-width: 2px 3px;
                "><td></td><td></td><td></td></tfoot>
    Zinline_text_alignr   rc   a  
        <style>
            @page { size: 20px 10px; margin: 1px; background: #fff }
            body { text-align: right; font-size: 0 }
            table { display: inline-table; width: 11px }
            td { border: 1px red solid; width: 4px; height: 3px }
        </style>
        <table style="table-layout: fixed; border-collapse: collapse">
            <tr><td></td><td></td></tr>
    )r	   ru   rC   rj   rd   )r   re   Rgr   pr   r   r   test_tables  s   !nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
nnnnnnnnnnnnnnnnnnnnnnnnnnnp
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXNNNNNNNNNP
r   c               C   s@   t ddddgdd t d	dddgdd t ddddgdd d S )Ni,  r|   pseudo_before	  
            <style>
                @page { size: 300px 30px }
                body { margin: 0; background: #fff }
                a[href]:before { content: '[' attr(href) '] ' }
            </style>
            <p><a href="some url">some content</a></p>
        pseudo_before_reference
            <style>
                @page { size: 300px 30px }
                body { margin: 0; background: #fff }
            </style>
            <p><a href="another url"><span>[some url] </span>some content</p>
        rc   )rF   i  pseudo_quotesX  
            <style>
                @page { size: 500px 30px }
                body { margin: 0; background: #fff; quotes: '«' '»' '“' '”' }
                q:before { content: open-quote ' '}
                q:after { content: ' ' close-quote }
            </style>
            <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>
        pseudo_quotes_referencet  
            <style>
                @page { size: 500px 30px }
                body { margin: 0; background: #fff }
                q:before, q:after { content: none }
            </style>
            <p><span><span>« </span>Lorem ipsum
                <span><span>“ </span>dolor<span> ”</span></span>
                sit amet<span> »</span></span></p>
        d   
pseudo_url
            <style>
                @page { size: 100px 30px }
                body { margin: 0; background: #fff; }
                p:before { content: 'a' url(pattern.png) 'b'}
            </style>
            <p>c</p>
        pseudo_url_reference
            <style>
                @page { size: 100px 30px }
                body { margin: 0; background: #fff }
            </style>
            <p><span>a<img src="pattern.png" alt="Missing image">b</span>c</p>
        )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )rJ   r   r   r   r   test_before_after  s$        	  r   10pxborderc                s(  dt dd fdddD   }dd}d d}fddt|D }xTt   D ]B}x<tjt  | t|  | |  D ]}t|| |< qW q\W xTt |  D ]B}x<tjt  | t  |   D ]}t|| |< qW qW dd |D }td dd||df  dS )zTest the rendering of bordersz
        <style>
            @page { size: 140px 110px }
            html { background: #fff }
            body { width: 100px; height: 70px;
                   margin: %s; %s: 10px %s blue }
        </style>
        <body>
       n   c                s&   g | ]}d |f  |f fqS )z%s_%sr   )r&   Zborder_style)marginpropr   r   r   r}     s   z test_borders.<locals>.<listcomp>nonesoliddasheddotteddoubleinsetoutsetgrooveridgerc   c                s   g | ]}t g  qS r   )rj   )r&   ra   )r    r   r   r}   +  s    c             S   s   g | ]}d j |qS )r8   )r5   )r&   liner   r   r   r}   6  s    Z_solidN)	r   r   r   r   r   r   r   r   r   )rL   r   	itertoolschainrangerd   rC   )r   r   Z
css_marginr!   r   Zsolid_pixelsr   ra   r   )r   r   r   r    r   test_borders  s2     
r   c               C   s   t dddS )NZ20pxoutline)r   r   )r   r   r   r   r   test_outlines=  s    r   c              C   sL   d} xdD ]}t | | dj  q
W d} xd	D ]}t | | dj  q.W d S )
Nz
        <style>
            @page { size: 50px 50px }
            html { background: #fff }
            body { margin: 5px; height: 0; border: 10px %s blue }
        </style>
        <body>r   r   r   r   )rU   z
        <style>
            @page { size: 50px 50px }
            html { background: #fff }
            body { height: 0; width: 0; border-width: 1px 0; border-style: %s }
        </style>
        <body>)r   r   r   r   )r   r   r   r   )r
   rX   )r@   styler   r   r   test_small_bordersA  s    

r   c              C   s  t d} t d}t d}t d}t d}t d}tddd| |  |  |  |  |  |  |  |  |  |  |  |  |  |  | | | | |  |  |  |  |  |  | | | | |  | | | | |  |  |  |  |  |  | | | | |  | |  |  |  |  |  |  |  |  |  |  |  |  |  |  | |  |  |  |  | | | | |  |  |  |  |  |  | |  |  |  |  | | | | |  |  |  |  |  |  | |  |  |  |  | | | | |  |  |  |  |  |  | |  |  |  |  | | | | |  |  |  |  |  |  | |  |  |  |  |  |  |  |  |  |  |  |  |  |  | | | | |  |  |  |  |  |  | | | | |  | | | | |  |  |  |  |  |  | | | | |  | | | | |  |  |  |  |  |  | | | | |  | | | | |  |  |  |  |  |  | | | | |  | | | | |  |  |  |  |  |  | | | | |  | |  |  |  |  |  |  |  |  |  |  |  |  |  |  gd	 d
S )z"Test the rendering of margin boxess   s     s     s     s     s     Zmargin_boxes   a  
        <style>
            html { height: 100% }
            body { background: #f00; height: 100% }
            @page {
                size: 15px;
                margin: 4px 6px 7px 5px;
                background: white;

                @top-left-corner {
                    margin: 1px;
                    content: " ";
                    background: #0f0;
                }
                @top-right-corner {
                    margin: 1px;
                    content: " ";
                    background: #00f;
                }
                @bottom-right-corner {
                    margin: 1px;
                    content: " ";
                    background: #008000;
                }
                @bottom-left-corner {
                    margin: 1px;
                    content: " ";
                    background: #000080;
                }
            }
        </style>
        <body>
    N)ru   rC   )rj   r   rv   rd   r   r   r   r   r   test_margin_boxes^  s.    ::::::::::::::<!r   c           (   C   s@  d} d}t ddddj|| \}}tj| d d}ztjj|d	}tjj|d
}tjj|d}t|d}|j|j	d W dQ R X tt
d
d}|j }	W dQ R X t|d}|j|	 W dQ R X t|d,}djt|t|| }
|j|
j	d W dQ R X t|dd}t|ddd}tddd|| W dtj| X dS )zTest non-ASCII filenames (URLs)u   I løvë Unicodezu
        @page {
            background: #fff;
            size: 200px 50px;
        }
        p { color: blue }
    Zunicode_referencer{   2   zK
        <style>{0}</style>
        <p><img src="pattern.png"> {1}</p>
    -)prefixz	style.csszpattern.pngzdoc.htmlwbutf8Nrbzi
                <link rel=stylesheet href="{0}">
                <p><img src="{1}"> {2}</p>
            )encodingunicode)r;   formattempfilemkdtemprM   rN   r5   openwriteencoder   readr   r   rV   r<   shutilrmtree)textr   rB   Zexpected_linestempZ
stylesheetr   r@   fdZimage_contentZhtml_contentrW   linesr   r   r   test_unicode  s.    r   c               C   s  t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd dS )	zTest the overflow property.Zinline_image_overflowrt   z
        <style>
            @page { size: 8px }
            body { margin: 2px 0 0 2px; background: #fff; font-size:0 }
            div { height: 2px; overflow: hidden }
        </style>
        <div><img src="pattern.png"></div>
    Zinline_image_viewport_overflowaI  
        <style>
            @page { size: 8px; background: #fff;
                    margin: 2px;
                    padding-bottom: 2px;
                    border-bottom: 1px transparent solid; }
            body { height: 1px; overflow: hidden; font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zborder_box_overflowz
        <style>
            @page { size: 8px; background: #fff; margin: 2px; }
            div { width: 2px; height: 2px; overflow: hidden;
                  border: 1px solid blue; }
        </style>
        <div></div>
    N)rC   rj   re   rd   r   r   r   r   test_overflow  s<      
 r   c                 s  dg  fdd} t d}| dtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t | t tt t t t t t t t t t t | t tt t t t t t t t t t t | t tt t t t t t t t t t t | t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g | dtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t | | | | | t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g | dtt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t t| t t t t t t t t t t t t t| t t t t t t t t t t t t t| t t t t t t t t t t t t t| t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g | dtt t t t t t t t t t t t t tt t t t t | | | | | t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t tt t t t t t t t t t t t t g d	S )
zTest the clip property.r   c                s6    d  d7  < d d  }t |dd|d| f  d S )Nr   r   zbackground_repeat_clipped_%srh   ri   a  
            <style>
                @page { size: 14px 16px; background: #fff }
                div { margin: 1px; border: 1px green solid;
                      background: url(pattern.png);
                      position: absolute; /* clip only applies on abspos */
                      top: 0; bottom: 2px; left: 0; right: 0;
                      clip: rect(%s); }
            </style>
            <div>
        )rC   )rk   r   r=   )numr   r   clip	  s    

ztest_clip.<locals>.clips     z5px, 5px, 9px, autoz5px, 5px, auto, 10pxz5px, auto, 9px, 10pxzauto, 5px, 9px, 10pxN)ru   rj   re   rd   )r   r   r   )r   r   	test_clip	  s    666666666666666<666666666666666<666666666666666<666666666666666r   c              C   sr   d} t ddd| d fd| d fg t ddd| d fd	| d
 fg t ddd| d fd| d
 fd| d fg dS )zTest the opacity property.z
        <style>
            @page { size: 60px 60px }
            body { margin: 0; background: #fff }
            div { background: #000; width: 20px; height: 20px }
        </style>
        %s
    <   Zopacity_0_referencez!
            <div></div>
        Z	opacity_0zL
            <div></div>
            <div style="opacity: 0"></div>
        Zopacity_color_referencezH
            <div style="background: rgb(102, 102, 102)"></div>
        Zopacity_colorz6
            <div style="opacity: 0.6"></div>
        Zopacity_multiplied_referenceZopacity_multipliedZopacity_multiplied_2z
            <div style="background: none; opacity: 0.666666">
                <div style="opacity: 0.9"></div>
            </div>
        N)rJ   )templater   r   r   test_opacityf	  s$    
r   c              C   sx   d} t ddd| |  | |  gd t ddd| |  | |  gd t ddd| |  | |  gd t d	dd| |  | |  gd
 dS )z-Test inheritance of the currentColor keyword.s     Zbackground_current_colorr   z
        <style>
            @page { size: 2px }
            html, body { height: 100%; margin: 0 }
            html { color: red; background: currentColor }
            body { color: lime; background: inherit }
        </style>
        <body>
    Zborder_current_colorz
        <style>
            @page { size: 2px }
            html { color: red; border-color: currentColor }
            body { color: lime; border: 1px solid; border-color: inherit;
                   margin: 0 }
        </style>
        <body>
    Zoutline_current_colorz
        <style>
            @page { size: 2px }
            html { color: red; outline-color: currentColor }
            body { color: lime; outline: 1px solid; outline-color: inherit;
                   margin: 1px }
        </style>
        <body>
    Zborder_collapse_current_colora1  
        <style>
            @page { size: 2px }
            html { color: red; border-color: currentColor; }
            body { margin: 0 }
            table { border-collapse: collapse;
                    color: lime; border: 1px solid; border-color: inherit }
        </style>
        <table><td>
    N)rC   )rv   r   r   r   test_current_color	  s    	r   c               C   s  t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t dddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd t d	ddtt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t tt t t t t t t t t t t gd
 t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t tt t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t g
d t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t g
d t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t g
d t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t g
d dS )zTest 2D transformations.Zimage_rotate90rt   z
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: rotate(90deg); font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_translateX_rotate90rm   z
        <style>
            @page { size: 12px; margin: 2px; background: #fff; }
            div { transform: translateX(3px) rotate(90deg);
                  font-size: 0; width: 4px }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_rotate90_translateXz
        <style>
            @page { size: 12px; margin: 2px; background: #fff; }
            div { transform: rotate(90deg) translateX(3px);
                  font-size: 0; width: 4px }
        </style>
        <div><img src="pattern.png"></div>
    Znested_rotate90_translateXa  
        <style>
            @page { size: 12px; margin: 2px; background: #fff; }
            div { transform: rotate(90deg); font-size: 0; width: 4px }
            img { transform: translateX(3px) }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_reflectionz
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: matrix(-1, 0, 0, 1, 0, 0); font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_translatez
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: translate(1px, 2px); font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_translate_percentagez
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: translate(25%, 0); font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_translateXa  
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: translateX(0.25em); font-size: 12px }
            div div { font-size: 0 }
        </style>
        <div><div><img src="pattern.png"></div></div>
    Zimage_translateYz
        <style>
            @page { size: 8px; margin: 2px; background: #fff; }
            div { transform: translateY(-1px); font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_scalerc   a8  
        <style>
            @page { size: 10px; margin: 2px; background: #fff; }
            div { transform: scale(2, 2);
                  transform-origin: 1px 1px;
                  image-rendering: pixelated;
                  font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_scale12a8  
        <style>
            @page { size: 10px; margin: 2px; background: #fff; }
            div { transform: scale(1, 2);
                  transform-origin: 1px 1px;
                  image-rendering: pixelated;
                  font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_scaleYa6  
        <style>
            @page { size: 10px; margin: 2px; background: #fff; }
            div { transform: scaleY(2);
                  transform-origin: 1px 1px;
                  image-rendering: pixelated;
                  font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    Zimage_scaleXa6  
        <style>
            @page { size: 10px; margin: 2px; background: #fff; }
            div { transform: scaleX(2);
                  transform-origin: 1px 1px;
                  image-rendering: pixelated;
                  font-size: 0 }
        </style>
        <div><img src="pattern.png"></div>
    N)rC   rj   rd   re   r   r   r   r   test_2d_transform	  s,    ...........0...........0...........0     &&&&&&&&&(
&&&&&&&&&(
&&&&&&&&&(
&&&&&&&&&(
r   c        
      C   s   dd } t  . | d}|j\}}|j|gj \}}}W dQ R X | dj \}}}	||f||	fkshttd||t|||t|||dd dS )	z.A local version of http://acid2.acidtests.org/c             S   s   t t| jddS )NT)Zenable_hinting)r
   r   render)r"   r   r   r   r   
  s    ztest_acid2.<locals>.renderzacid2-test.htmlNzacid2-reference.htmlZacid2r   )rF   )r   ZpagescopyrX   r:   r<   rY   )
r   rW   Z
intro_pageZ	test_pageZ
test_imager    r!   Z	ref_imageZ	ref_widthZ
ref_heightr   r   r   
test_acid2
  s    
r   z1.14c              C   s  t dddtt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t g	d t dddtt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t tt t t t g	d t dddtt t t t t t t t tt t t t t t t t tt t t t t t t t tt t t t t t t t tt t t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd t dddtt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t tt t t t t t t t t gd	 t dddtt t t t t t t t tt t t t t t t t tt t t t t t t t tt t t t t t t t tt t t t t t t t gd
 td} t ddd| |  |  |  |  |  |  |  |  | |  |  |  |  |  |  |  |  | |  |  |  |  |  |  |  |  | |  |  |  |  |  |  |  |  | |  |  |  |  |  |  |  |  gd td}t ddd|| | | | | | | | || | | | | | | | || | | | | | | | || | | | | | | | || | | | | | | | gd d S )NZlinear_gradient   	   zw<style>@page { size: 5px 9px; background: linear-gradient(
        white, white 3px, blue 0, blue 5px, red 0, red
    )zk<style>@page { size: 5px 9px; background: linear-gradient(
        white 3px, blue 0, blue 5px, red 0
    )zu<style>@page { size: 9px 5px; background: linear-gradient(
        to right, white 3px, blue 0, blue 5px, red 0
    )rc   zx<style>@page { size: 10px 5px; background: linear-gradient(
        to right, blue 5px, blue 6px, red 6px, red 9px
    )z<style>@page { size: 10px 5px; background: repeating-linear-gradient(
        to right, blue 50%, blue 60%, red 60%, red 90%
    )zw<style>@page { size: 9px 5px; background: linear-gradient(
        to right, blue 3px, blue 3px, red 3px, red 3px
    )s    z<style>@page { size: 9px 5px; background: repeating-linear-gradient(
        to right, blue 3px, blue 3px, red 3px, red 3px
    )s    @z<style>@page { size: 9px 5px; background: repeating-linear-gradient(
            to right, blue 50%, blue 60%, red 60%, red 90%);
        background-size: 1px 1px;
    )rC   rj   rd   re   ru   )vVr   r   r   test_linear_gradients
  s    """"$&&&&(&&&&(""""$""""$""""$r   c                 sz  t dddtt t t t t tt t t t t tt t t t t tt t t t t tt t t t t tt t t t t gd t dddtt t t t t tt t t t t tt t t t t tt t t t t tt t t t t tt t t t t gd xJdD ]@\} }td	| d
dd| \}  fdd}|ddtkstt|ddtkst|ddtkst|ddtkst|ddtkst|ddtkst|ddtkst|ddtks t|ddttfk| A st|ddttfk| A s8t|ddttfk| A sTt|ddttfk| A s0tq0W d S )NZradial_gradient   zR<style>@page { size: 6px; background:
        radial-gradient(red -30%, blue -10%)zR<style>@page { size: 6px; background:
        radial-gradient(red 110%, blue 130%)Fred 20%, blue 80%Tred 50%, blue 50%Zradial_gradient_rc   ri   z?<style>@page { size: 10px 16px; background: radial-gradient(%s)c                s    | d|  d } ||d  S )Nrc   r   r   )r   ra   r6   )r   r   r   rb   L  s    z$test_radial_gradients.<locals>.pixelr   r   r   r   r   rt   r   r   Fr   Tr   )r   r   )rC   rd   re   r;   r:   )ZthinZgradientrj   rb   r   )r   r   test_radial_gradients1  sF    
r   )r   )r   )r   r   )F__doc__
__future__r   r   r   os.pathrM   r   r   r   r/   Z	cairocffir   r*   compatr   r   r   Zurlsr   r@   r	   r%   r
   Ztesting_utilsr   r   r   r   r   ru   rj   re   rd   r#   r7   rC   rJ   rL   rK   r;   rV   rY   r<   rf   rl   ro   rq   rs   rw   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   
	
$   HKPp: E T.   e=-<,@_++  W