403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.216.73
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/reportlab/graphics/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/reportlab/graphics/__pycache__/renderSVG.cpython-311.pyc
�

}G�b6����dZddlZddlZddlZddlZddlZddlmZmZddl	m
Z
ddlmZddl
mZddlmZmZmZddlmZmZmZdd	lTdd
lmZddl
mZmZmZddlmZmZd
dlm Z ddl!m"Z"ej#Z#ej$Z$ej%Z%d�&��Z'd�&��Z(d�&��Z)d�&��Z*d�&��Z+ej,fd�Z-ej,fd�Z.ddej,fd�Z/d�Z0d(d�Z1Gd�de2��Z3edddddedddddiZ4d �Z5Gd!�d"��Z6Gd#�d$e��Z7d)d&�Z8e9d'kre8��dSdS)*aAn experimental SVG renderer for the ReportLab graphics framework.

This will create SVG code from the ReportLab Graphics API (RLG).
To read existing SVG code and convert it into ReportLab graphics
objects download the svglib module here:

  http://python.net/~gherman/#svglib
�N)�BytesIO�StringIO)�stringWidth��fp_str)�asNative)�
getStateDelta�Renderer�renderScaledDrawing)�STATE_DEFAULTS�Path�UserNode)�*)�	rl_config)�RLString�	isUnicode�isBytes)�
FILL_EVEN_ODD�
FILL_NON_ZERO�)�	_getImage)�getDOMImplementationzsstroke-width stroke-linecap stroke stroke-opacity fill fill-opacity stroke-dasharray stroke-dashoffset fill-rule idzWstroke-width stroke-linecap stroke stroke-opacity stroke-dasharray stroke-dashoffset idz<font-family font-weight font-style font-variant font-size idzTstroke-width stroke-linecap stroke stroke-opacity stroke-dasharray stroke-dashoffsetzfill fill-opacityc�f�t��}t||fd|i|��|���S)z>Returns a SVG as a string in memory, without touching the disk�showBoundary)r�
drawToFile�getvalue)�dr�kwds�ss    �>/usr/lib/python3/dist-packages/reportlab/graphics/renderSVG.py�drawToStringr!'s6���
�
�A��q�!�6�6�,�6��6�6�6��:�:�<�<��c��t|��}t|j|jffi|��}t	||dd|���|�|��dS)Nr�r)r�	SVGCanvas�width�height�draw�save)r�fnrr�cs     r rr-sY���A���A��1�7�A�H�%�-�-��-�-�A���A�q�!�,�/�/�/�/��F�F�2�J�J�J�J�Jr"c�p�t��}|�t|��||||���dS)zAs it says.r$N)�_SVGRendererr(r)�drawing�canvas�x�yr�rs      r r(r(3s6�����A��F�F��w�'�'���A�L�F�Q�Q�Q�Q�Qr"c��g}tdt|��d��D](}|�||||dzf���)|S)zo
    given a list of coordinates [x0, y0, x1, y1....]
    produce a list of points [(x0,y0), (y1,y0),....]
    r�r)�range�len�append)�L�P�is   r �_pointsFromListr;9sT��	�A�
�1�S��V�V�Q�
�
�!�!��	���!�A�$��!�A�#��� � � � ��Hr"c��|�|��}|���D]Z\}}t|��}|s|�||���-|�|��}|�||p|���[|S)a�Transform a DOM node into new node and copy selected attributes.

    Creates a new DOM node with tag name 'newTag' for document 'doc'
    and copies selected attributes from an existing 'node' as provided
    in 'attrDict'. The source 'node' can be None. Attribute values will
    be converted to strings.

    E.g.

        n = transformNode(doc, "node1", x="0", y="1")
        -> DOM node for <node1 x="0" y="1"/>

        n = transformNode(doc, "node1", x=0, y=1+1)
        -> DOM node for <node1 x="0" y="2"/>

        n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar())
        -> DOM node for <node1 x="[node0.x0]" y="[node0.y0]" zoo="[bar()]"/>
    )�
createElement�items�str�setAttribute�getAttribute)	�doc�newTag�node�attrDict�newNode�newAttr�attr�sattr�attrVals	         r �
transformNoderKEs���(����'�'�G�!���)�)�<�<�
����T�����	<�� � ��%�0�0�0�0��'�'��.�.�G�� � ��'�*:�U�;�;�;�;��Nr"c�t�eZdZdZejejejejej	ej
d�Zdd�Zd�Z
d�ZdS)	�
EncodedWriterz�
    EncodedWriter(encoding) assumes .write will be called with
    either unicode or utf8 encoded bytes. it will accumulate
    unicode
    )zutf-32z	utf-32-bez	utf-32-lezutf-16z	utf-16-bez	utf-16-leFc���t�|��tj|��jx|_}|rd|vsd|vr"|�|j|��dSdS)N�16�32)�list�__init__�codecs�lookup�name�encoding�write�BOMS)�selfrV�boms   r rRzEncodedWriter.__init__rsp���
�
�d����#)�=��#:�#:�#?�?��
���	,�4�8�#�#�t�x�'7�'7��J�J�t�y��*�+�+�+�+�+�(8�'7r"c�\�t|��rY	|�d��}np#tj��\}}}t	|��}~~td|�d|�����xYwt
|��stdt|��z���|�|��dS)N�utf-8zString z not encoded as 'utf-8'
error=z?EncodedWriter.write(%s) argument should be 'utf-8' bytes or str)	r�decode�sys�exc_infor?�
ValueErrorr�asciir7)rY�u�et�ev�tbs     r rWzEncodedWriter.writexs����1�:�:�		k�
X��X�X�g�&�&����
X� �\�^�^�
��B����W�W���� �j�QR�QR�QR�SU�SU�!V�W�W�W�����1���	k��^�af�gh�ai�ai�i�j�j�j����A�����s	�'�?A&c�:�d�|��}|dd�=|S)N���join)rYr2s  r rzEncodedWriter.getvalue�s!���G�G�D�M�M������G��r"N)F)�__name__�
__module__�__qualname__�__doc__rS�	BOM_UTF32�BOM_UTF32_BE�BOM_UTF32_LE�	BOM_UTF16�BOM_UTF16_BE�BOM_UTF16_LErXrRrWr�r"r rMrMds����������!��'��'��!��'��'�

�
�D�,�,�,�,��������r"rM�nonzeroznon-zero�evenoddzeven-oddc�@�d�d�|D����S)N� c3�lK�|]/}d|z�d���d��V��0dS)z%f�0�.N)�rstrip)�.0�as  r �	<genexpr>zpy_fp_str.<locals>.<genexpr>�sB����F�F�A�d�Q�h�&�&�s�+�+�2�2�3�7�7�F�F�F�F�F�Fr"rh)�argss r �	py_fp_strr��s#���8�8�F�F��F�F�F�G�G�Gr"c�^�eZdZd8d�Zd9d�Zd:d�Zgd	fd
�Zd�Zd�Zdde	dfd
�Z
d�Zd�Zgdfd�Z
d�Zd�Zd�Zd�Zd�Zd�Zd;d�Zd;d�Zd<d�Z		d=d�Z		d>d�Zd �Zd?d"�Zd#�Zd9d$�Zd9d%�Zd@d&�ZdAd(�ZdBd)�Z d:d*�Z!d+�Z"e#d	�,��fd-�Z$d.�Z%d/�Z&d0�Z'd1�Z(d2�Z)d3�Z*d4�Z+d5�Z,d6�Z-d7�Z.dS)Cr%��,r�r\rFc�	��|�_tj|��j�_|�_|�dd��}|�di���_|�dd���_|�dd��}t�_
|x\�_�_�_
g�_i�_d�_dx�_x�_x�_x�_x�_x�_�_|�dd��r
t0�_nt2�_�fd	��_t7d
��}|�ddd
��}	|�dd|	���_�jj�_ tCtE|d��tE�j��dd�j�jfzdd���}
tF�j
|
d<d|
d<|
�$|�di����|
�%��D] \}}�j �&||���!�j�'d��}
�j�(d��}|
�)|���j �)|
���j�'d��}�j�(d��}|�)|���j �)|����*tVdtVd����,tVd����-d����.d����/d��|s{ta�jd d!�"��}ta�jd#dd�j�j�$��}|�)|���j �)|��tCd%�&��}ntCd�j�jfz�'��}ta�jd(fd)d*�jzd+�|���_1|r\ta�jd(|d,�+���_2�j2�)�j1���j �)�j2��n�j �)�j1���j1�_3dS)-a�
        verbose = 0 >0 means do verbose stuff
        useClip = False True means don't use a clipPath definition put the global clip into the clip property
                        to get around an issue with safari
        extraXmlDecl = ''   use to add extra xml declarations
        scaleGroupId = ''   id of an extra group to add around the drawing to allow easy scaling
        svgAttrs = {}       dictionary of attributes to be applied to the svg tag itself
        �useClipF�	fontHacks�extraXmlDeclrg�scaleGroupIdN�
use_fp_strc�@���j|��dd��S)Nrx�,)r�replace)r�rYs �r �<lambda>z$SVGCanvas.__init__.<locals>.<lambda>�s ���[�T�[�$�%7�%?�%?��C�%H�%H�r"�minidom�svgz-//W3C//DTD SVG 1.0//ENz8http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtdrz
xMinYMin meetz	0 0 %d %dzhttp://www.w3.org/2000/svgz1.0)r&r'�preserveAspectRatio�viewBox�xmlns�version�	fill-rulezhttp://www.w3.org/1999/xlinkzxmlns:xlink�svgAttrs�titlez...�desc�fontName�fontSize�strokeColorr4r�clipPath�clip)�id�rect)r0r1r&r'zclip-path: url(#clip))�style)r��g�groupzscale(1,-1) translate(0,-%d))r��	transformz
scale(1,1))4�verboserSrTrUrVrZ�popr�r�r�	_fillModer&r'�size�coder��path�_strokeColor�
_fillColor�
_lineWidth�_font�	_fontSize�_lineCap�	_lineJoinrr��cfp_strr�createDocumentType�createDocumentrB�documentElementr��dictr?�_fillRuleMap�updater>r@r=�createTextNode�appendChild�setFontr�setStrokeColor�
setLineCap�setLineJoin�setLineWidthrK�	groupTree�	scaleTree�	currGroup)rYr�rVr�rZrr�r��implementation�doctyper��k�vr��textr�r��clipRect�gtkws`                  r rRzSVGCanvas.__init__�s��������
�h�/�/�4��
�����(�(�9�U�+�+�����+�b�1�1��� �H�H�^�B�7�7����x�x��r�2�2��&���.2�2���
�D�K�$�)���	���
���	�"�	"���	"�D�O�	"�d�o�	"��J�	"���	"�*.�-��N��8�8�L��'�'�	$� �D�K�K�#�D�K�H�H�H�H���-�i�8�8��!�3�3�E�+�L�N�N��"�0�0��e�G�D�D����8�+������Q��L�L��t�{�+�+�(7�'�4�:�t�{�*C�C�7�!�
�
�
��!-�T�^� <����"@�����������B�/�/�0�0�0��>�>�#�#�	'�	'�C�A�a��H�!�!�!�A�&�&�&�&���&�&�w�/�/���x�&�&�u�-�-��
���$��������U�#�#�#��x�%�%�f�-�-���x�&�&�u�-�-�������������T�"�"�"����^�J�/��
�1K�L�L�L����N�=�9�:�:�:������������������!�����		E�$�T�X�z�f�E�E�E�H�$�T�X�v��a��j���6�6�6�H�� � ��*�*�*��H� � ��*�*�*��5�6�6�6�D�D��[�D�J�t�{�+C�C�D�D�D�D�&�t�x����4�t�{�B���������	1�*�4�8�S�\�Ua�b�b�b�D�N��N�&�&�t�~�6�6�6��H� � ���0�0�0�0��H� � ���0�0�0������r"Nc��t|j|j���}|j�|dd|j���t|d��r|}nt
|d|j���}|���}|j}|r|�	dd|z��}|�
|��||ur|���dSdS)	N)rZ�	�
)�	addindent�newlrVrW�w)rVz?>)rMrVrZrB�writexml�hasattr�openrr�r�rW�close)rYr*�writer�fr��exds      r r)zSVGCanvas.saves����t�}���:�:�:������&�4�T�4�=��Q�Q�Q��2�g���	5��A�A��R��d�m�4�4�4�A��o�o��������	-��+�+�d�4��8�,�,�C�	��������B�;�;�
�G�G�I�I�I�I�I��;r"c�H�|p|j}|p|j}t|||��S)zuReturn the logical width of the string if it were drawn
        in the current font (defaults to self.font).
        )r�r�r)rYr�fontr�s    r �NOTUSED_stringWidthzSVGCanvas.NOTUSED_stringWidths.��
�!�t�z���-�t�~���1�d�H�-�-�-r"rgc�^����|j������|��t������}�r�fd�|D��}�r$�������fd�|D��}n�fd�|D��}d�|��dzS)Nc���g|]}|�v�|��	Srtrt)r}r��includes  �r �
<listcomp>z*SVGCanvas._formatStyle.<locals>.<listcomp>%s���4�4�4�!�q�G�|�|�A�|�|�|r"c�N��g|]!}|�v�|dzt�|��z��"S�z: �r?)r}r��excluder�s  ��r r�z*SVGCanvas._formatStyle.<locals>.<listcomp>(s6���L�L�L�a�1�G�;K�;K�Q�t�V�C��a��M�M�)�;K�;K�;Kr"c�F��g|]}|dzt�|��z��Sr�r�)r}r�r�s  �r r�z*SVGCanvas._formatStyle.<locals>.<listcomp>*s,���8�8�8�a�Q�t�V�C��a��M�M�)�8�8�8r"z; �;)r��copyr�rQ�keys�splitri)rYr�r�rr�r>r�s ``   @r �_formatStylezSVGCanvas._formatStyle s�������
���!�!��
���T�����E�J�J�L�L�!�!���	5�4�4�4�4�t�4�4�4�D��	9��m�m�o�o�G�L�L�L�L�L�4�L�L�L�E�E�8�8�8�8�4�8�8�8�E��y�y����#�%�%r"c��|S)zKI don't think this was ever needed; seems to have been copied from renderPSrt)rYrs  r �_escapezSVGCanvas._escape-s���r"c��dS)zXCalculate the path for an arc inscribed in rectangle defined
        by (x1,y1),(x2,y2).N)�abs)rY�x1�y1�x2�y2�startAng�extent�xScale�yScaler0r1�codeline�arc�datas              r �_genArcCodezSVGCanvas._genArcCode1s	��	�r"c��i}|rt||d<t|jd|j|�|�����}|r|�||��}|j�|��d|_dS)Nr�r��rr�rg)r�rKrBr�r��	_add_linkr�r�)rYr�r��	link_info�styles�fillMode�xtrar�s        r �_fillAndStrokezSVGCanvas._fillAndStrokeGs������	7� ,�X� 6�D����T�X�v��i�t�0�0��8�8������	3��>�>�$�	�2�2�D���"�"�4�(�(�(���	�	�	r"c�Z�dddd�}|j|kr||_|||jd<dSdS)N�butt�round�square�rrr4�stroke-linecap)r�r��rYr��valss   r r�zSVGCanvas.setLineCapUsD���G�x�0�0���=�A����D�M�+/��7�D�J�'�(�(�(��r"c�Z�dddd�}|j|kr||_|||jd<dSdS)N�miterr�bevelrr)r�r�rs   r r�zSVGCanvas.setLineJoin[sD���W��0�0���>�Q����D�N�+/��7�D�J�'�(�(�(��r"c���t|ttf��r4d�t	t
||g����|jd<dSt|ttf��rrt|��dkra|dks
Jd���d�t	t
|����|jd<|dkrt|��|jd<dSdSdSdS)z7Two notations. Pass two numbers, or an array and phase.�, zstroke-dasharrayrzphase is a length in user spacezstroke-dashoffsetN)
�
isinstance�float�intri�mapr?r��tuplerQr6)rY�array�phases   r �setDashzSVGCanvas.setDashas����e�U�3�K�(�(�	=�-1�Y�Y�s�3�%���7Q�7Q�-R�-R�D�J�)�*�*�*�
��u�T�l�
+�
+�	=��E�
�
�Q����A�:�:�:�@�:�:�:�-1�Y�Y�s�3����-G�-G�D�J�)�*��Q�w�w�25�e�*�*��
�.�/�/�/�		=�	=����wr"c���||_|dkrd|jd<dS|j|j|j}}}d|dz|dz|dzfz|jd<|j}|dkrd|z|jd<dSd|jvr
|jd=dSdS)N�none�stroke�rgb(%d%%,%d%%,%d%%)�dr�%szstroke-opacity)r�r��red�green�blue�normalizedAlpha�rY�colorr2r��b�alphas      r r�zSVGCanvas.setStrokeColorls���!����D�=�=�#)�D�J�x� � � ��i���e�j�!�q�A�#8�A�c�E�1�S�5�!�C�%�;P�#P�D�J�x� ��)�E��a�x�x�/3�e�|��
�+�,�,�,�!�T�Z�/�/��J�/�0�0�0�0�/r"c���||_|dkrd|jd<dS|j|j|j}}}d|dz|dz|dzfz|jd<|j}|dkrd|z|jd<dSd|jvr
|jd=dSdS)Nr�fillrrrrzfill-opacity)r�r�rrrrrs      r �setFillColorzSVGCanvas.setFillColorys�������D�=�=�!'�D�J�v�����i���e�j�!�q�A�!6�!�C�%��3���#��9N�!N�D�J�v���)�E��a�x�x�-1�E�\��
�>�*�*�*��4�:�-�-��J�~�.�.�.�.�-r"c�>�||_t||jd<dS)Nr�)r�r�r�)rYr�s  r �setFillModezSVGCanvas.setFillMode�s�����".�q�/��
�;���r"c�B�||jkr||_||jd<dSdS)Nzstroke-width)r�r�)rYr&s  r r�zSVGCanvas.setLineWidth�s0���D�O�#�#�#�D�O�).�D�J�~�&�&�&�$�#r"c���|j|ks|j|kr�||_||_|j}tD]	}||vr||=�
||jvr
|j|ni}t|t��r9|�t|j	�
������|r-|�
��D]\}}d|z}|tvr|||<�d|vr||d<d|z|d<dSdS)Nzfont-zfont-familyz%spxz	font-size)r�r�r��TEXT_STYLESr�rrr��iterr�r>)rYr�r�r�r�r�r�r~s        r r�zSVGCanvas.setFont�s���:������8�!;�!;��D�J�%�D�N��J�E� �
!�
!����:�:��a���/3�t�~�/E�/E�t�~�d�+�+�2�H��$�x�(�(�
=�����T�]�%8�%8�%:�%:� ;� ;�<�<�<��
%�#�>�>�+�+�%�%�C�A�a���	�A��K�'�'�#$��a����E�)�)�'+��m�$�!'�(�!2�E�+����#"<�!;r"c��t|t��sJ�t|jdfi|��}|�|��|S)Nr~)rr�rKrBr�)rY�
dom_objectr��links    r r�zSVGCanvas._add_link�sJ���)�T�*�*�*�*�*��T�X�s�8�8�i�8�8������$�$�$��r"�c
��|jrtd��t||��}	t||��}
i}t|jdf|	|
t||��|	z
t||��|
z
|�t��d�|��}|r|�||��}|j	�
|��dS)z)Draw a rectangle between x1,y1 and x2,y2.z+++ SVGCanvas.rectr�)r0r1r&r'r�N)r��print�minrKrB�maxr��AREA_STYLESr�r�r�)
rYr�r�r�r��rx�ryr��	_svgAttrsr0r1rr�s
             r r�zSVGCanvas.rect�s����<�4��3�4�4�4���2�J�J����2�J�J�����T�X�v�>��1�C��2�J�J�q�L��R����A���#�#�K�0�0�>�>�3<�>�>���	3��>�>�$�	�2�2�D���"�"�4�(�(�(�(�(r"c���t|jdf||||z
||z
|||�t��d�|��}	|r|�|	|��}	|j�|	��dS)z�Draw a rounded rectangle between x1,y1 and x2,y2.

        Corners inset as ellipses with x-radius rx and y-radius ry.
        These should have x1<x2, y1<y2, rx>0, and ry>0.
        r�)r0r1r&r'r4r5r�N�rKrBr�r3r�r�r�)
rYr�r�r�r�r4r5r�r6r�s
          r �	roundRectzSVGCanvas.roundRect�s����T�X�v�?��B�b��e�B�r�E�b�R��#�#�K�0�0�?�?�4=�?�?���	3��>�>�$�	�2�2�D���"�"�4�(�(�(�(�(r"�leftc	�6�|dkrdSt|��}|jrtd��|dkp|dkp|dkp|dk}	|dkp|dkp|dkp|dk}
|jdkr|	s|jdk�r�|
�r�|d	vr|t||j|j��}|d
kr||z}nU|dkr	||dzz}nF|d
kr!|t||||j|j��z}ntdt|��z���|�|��}|�t��}|dkr|d|�|||��zz}|	r||�t��z
}n|dz
}|
r||�t ��z
}n|dz
}t#|jdf|||dd|zzd�|��}
|j�|��}|
�|��|r|�|
|��}
|j�|
��dSdSdS)N�z+++ SVGCanvas.drawStringrr4��r�)�start�	inheritedr:�end�middle�@�numericzbad value for text_anchor z rotate(%s);z fill:none;z
 stroke:none;r�ztranslate(0,%d) scale(1,-1))r0r1r�r�)rr�r0r�r�rr�r��
numericXShiftr`r?r�r�r)r�EXTRA_FILL_STYLES�EXTRA_STROKE_STYLESrKrBr�r�r�r�)rYrr0r1�angler��text_anchor�textRenderModer6�needFill�
needStroke�textLen�str��contents               r �
drawStringzSVGCanvas.drawString�s����1���f�f��Q�K�K���<�:��9�:�:�:�!�1�$�c���(9�c�^�Q�=N�c�R`�bc�Rc��#�Q�&�e�.�!�*;�e�~�q�?P�e�Tb�de�Te�
��O�T�!�!�h�!�D�4E�t�4K�4K�PZ�4K��"@�@�@�%�a��
�4�>�B�B����%�%���L�A�A� �(�*�*�����O�A�A� �)�+�+���{�1�W�T�Z���W�W�W�A�A�$�%A�C��DT�DT�%T�U�U�U����Q���A��"�"�;�/�/�B���z�z���$�+�+�e�Q��*B�*B�B�B�r��
$��d�'�'�(9�:�:�:����m�#���
&��d�'�'�(;�<�<�<����o�%��!���6���q��7�1�Q�3�?������D�
�h�-�-�a�0�0�G����W�%�%�%��
7��~�~�d�I�6�6���N�&�&�t�,�,�,�,�,�I5L�4K�4K�4Kr"rCc�\�|jrtd��|j|||f||||d�|��dS)Nz+++ SVGCanvas.drawCentredString�rIr�rJrK�r�r0rQ)	rYrr0r1rIrJr�rKr6s	         r �drawCentredStringzSVGCanvas.drawCentredString�sY���<�A��@�A�A�A�����!�A�	<�E�Y�K�-�	<�	<�1:�	<�	<�	<�	<�	<r"rBc�\�|jrtd��|j|||f||||d�|��dS)Nz+++ SVGCanvas.drawRightStringrSrT)	rYr�r0r1rIrJr�rKr6s	         r �drawRightStringzSVGCanvas.drawRightString�sY���<�?��>�?�?�?�����Q�q�	<�u�	�{�-�	<�	<�1:�	<�	<�	<�	<�	<r"c�:�|j�|��}dS)zAdd a comment.N)rB�
createComment)rYr��comments   r rZzSVGCanvas.comments���(�(�(��.�.���r"Tc�d�t��}|�|d��ttj|�������}|j�t|j	d||||d|zd|�
ddddd|d|zz��z�	����dS)
N�png�imagezdata:image/png;base64,�
matrix(%s)rr���r4)r0r1r&r'�hrefr�)rr)r�base64�	b64encoderr�r�rKrBr�)rYr]r0r1r&r'�embed�bufs        r �	drawImagezSVGCanvas.drawImage
s����i�i��
�
�
�3�u�����v�'������7�7�8�8����"�"��d�h�w��!�%�v�1�#�5�*�T�\�\�!�A�a��1�V�A�a�C�Z�-P�-P�P����	�	�	�	�	r"c��|jdkr|	t|jdd|�||���d|�||���d�|�t�����}|j�|��dSdS)	Nr�line)r0r1r�r�r�r��M � L z Zr�)r�rKrBr��LINE_STYLESr�r�r�)rYr�r�r�r�rgr�s       r rgzSVGCanvas.lines������$�$�
1�
!���6�6�#'�<�<��2�#6�#6�#6�#6�t�|�|�B�r�7J�7J�7J�7J�K��'�'��4�4�6�6�6�D�
�N�&�&�t�,�,�,�,�,�%�$r"c��t|jd||zdz||zdz||z
dz||z
dz|�t�����}|r|�||��}|j�|��dS)z{Draw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.

        These should have x1<x2 and y1<y2.
        �ellipserD)�cx�cyr4r5r�Nr8)rYr�r�r�r�r�rls       r rlzSVGCanvas.ellipse"s���
 ���)��2��s�{��2��s�{��2��s�{��2��s�{��#�#�K�0�0�2�2�2���	9��n�n�W�i�8�8�G���"�"�7�+�+�+�+�+r"c
���t|jd||||�t�����}|r|�||��}|j�|��dS)N�circle)rmrnr2r�r8)rY�xc�ycr2r�rps      r rpzSVGCanvas.circle0sm���t�x���b�A��#�#�K�0�0�2�2�2���	7��^�^�F�I�6�6�F���"�"�6�*�*�*�*�*r"c
��	dS�N)rr�r�r7r�)rYr�r�r�r��x3�y3�x4�y4�closedr�r�s            r �	drawCurvezSVGCanvas.drawCurve:s
����r"�hc�p�||zdz||zdz}	}||z
dz||z
dz}}
|
t|tzdz��z|z}|t|tzdz��z|	z}
|
t||ztzdz��z|z}|t||ztzdz��z|	z}|j}gj}|r%|d|||	���d|||������|r,|d||
|��d|dkd|||
��fz��n6|d|||
��||
|��d|dkd|||
��fz��|r|d|||	��z��t|jd	d
�|j��|�	�����}|j
�|��dS)
aDraw a partial ellipse inscribed within the rectangle x1,y1,x2,y2.

        Starting at startAng degrees and covering extent degrees. Angles
        start with 0 to the right (+x) and increase counter-clockwise.
        These should have x1<x2 and y1<y2.
        rD�rhrizA %s %d %d %d %srzM %s A %s %d %d %d %s ZzL %s Zr�rxr�N)�cos�pi�sinr�r7rKrBri�__self__r�r�r�)rYr�r�r�r�r�r��
fromcenterrmrnr4r5�mx�my�ax�ayr�rr�s                   r �drawArczSVGCanvas.drawArcGs.���R�%���r�"�u�c�k�B���R�%���r�"�u�c�k�B��
�#�h�r�k�#�o�&�&�
&��
+��
�#�h�r�k�#�o�&�&�
&��
+��
�#�x����*�3�.�/�/�
/�"�
4��
�#�x����*�3�.�/�/�
/�"�
4���,���I���	@�
�A�A�W�W�R��_�_�_�_�g�g�b�"�o�o�o�>�?�?�?��	V�
�A� ��w�r�2����6�3�;��7�7�2�r�?�?�C�D�
E�
E�
E�
E�
�A�'��w�r�2������B����F�C�K��G�G�B�PR�O�O�T�U�
V�
V�
V��	*�
�A�h����R���(�)�)�)��T�X�v��h�h�q�z�"�"�$�*;�*;�*=�*=�?�?�?����"�"�4�(�(�(�(�(r"c�r�t|��dks
Jd���|jdks|jdkr�d�d�|D����}t	|jd||�t�����}|r|�||��}|j	�
|��dSdS)Nr4z"Polygon must have 2 or more pointsrc� �g|]}t|���Srtr�r}�ps  r r�z%SVGCanvas.polygon.<locals>.<listcomp>m���8�8�8�A�V�Q�Z�8�8�8r"�polygon��pointsr�)r6r�r�rirKrBr�r3r�r�r�)rYr�ryr��pts�polylines      r r�zSVGCanvas.polygonis����6�{�{�a����!E������d�"�"�d�o�t�&;�&;��)�)�8�8��8�8�8�9�9�C�$�T�X�y��$�"3�"3�K�"@�"@�B�B�B�H��
?��>�>�(�I�>�>���N�&�&�x�0�0�0�0�0�'<�&;r"c��dSrt)r�r�r7r)rY�lineListrr&r�rgs      r �lineszSVGCanvas.linesxs���r"c	�0�t|��dks
Jd���|jdkrmd�d�|D����}t|jd||�td������}|j�|��dSdS)Nrz#Polyline must have 1 or more pointsrc� �g|]}t|���Srtrr�s  r r�z&SVGCanvas.polyLine.<locals>.<listcomp>�r�r"r�)r#r�)	r6r�rirKrBr�r3r�r�)rYr�r�r�s    r �polyLinezSVGCanvas.polyLine�s����6�{�{�a����!F�������$�$��)�)�8�8��8�8�8�9�9�C�$�T�X�z��$�"3�"3�K�T�"3�"J�"J�L�L�L�H��N�&�&�x�0�0�0�0�0�	%�$r")r�c���|jrtd��|j}t|jdfi|��}|�|��||_|jrtd��|S)Nz+++ begin SVGCanvas.startGroupr�z+++ end SVGCanvas.startGroup)r�r0r�rKrBr�)rYrEr�r�s    r �
startGroupzSVGCanvas.startGroup�so���<�@��?�@�@�@��N�	��d�h��8�8�x�8�8�����e�$�$�$�����<�>��=�>�>�>��r"c�p�|jrtd��||_|jrtd��dSdS)Nz+++ begin SVGCanvas.endGroupz+++ end SVGCanvas.endGroup)r�r0r�)rYr�s  r �endGroupzSVGCanvas.endGroup�sA���<�>��=�>�>�>�"����<�<��;�<�<�<�<�<�<�<r"c	��|jrtd||||||��|j�d��}||||||fdkr?d|�||||||��z}|j�d|�d|����dSdS)Nz!!! begin SVGCanvas.transformr�)rrrrrrr^rx)r�r0r�rAr�r@)	rYr~r r+r�er��tr�ts	         r r�zSVGCanvas.transform�s����<�Q��>��1�a��A�q�Q�Q�Q�
�^�
(�
(��
5�
5��
�q�!�Q��1��!3�3�3��t�|�|�A�a��!�A�a�8�8�8�A��N�'�'�����A�A�5F�G�G�G�G�G�4�3r"c
��||fdkrQ|j�d|j�d���dd|�||��z����dSdS)N)rrr�rxz
translate(%s))r�r@rAr��rYr0r1s   r �	translatezSVGCanvas.translate�ss��
�a�5�E�>�>��N�'�'���>�.�.�{�;�;�;�;�#�d�l�l�1�Q�&7�&7�7�7�69�
:�
:�
:�
:�
:��>r"c
���||fdkrW|j�d|jd�d���dd|�||��z����dSdS)N)rrr�r_rxz	scale(%s))r�r@�groupsrAr�)rY�sx�sys   r �scalezSVGCanvas.scale�sz���r�7�e����N�'�'���{�2��3�3�K�@�@�@�@�#�d�l�l�2�r�&:�&:�:�:�6<�
=�
=�
=�
=�
=��r"c�R�|jd|�||��zz|_dS)NzM %s �r�rr�s   r �moveTozSVGCanvas.moveTo��'���I��$�+�+�a��*;�*;� ;�;��	�	�	r"c�R�|jd|�||��zz|_dS)NzL %s r�r�s   r �lineTozSVGCanvas.lineTo�r�r"c
�Z�|jd|�||||||��zz|_dS)NzC %s r�)rYr�r�r�r�rurvs       r �curveTozSVGCanvas.curveTo�s/���I��$�+�+�b�"�b�"�b�"�*M�*M� M�M��	�	�	r"c�$�|jdz|_dS)NzZ )r��rYs r �	closePathzSVGCanvas.closePath�s���I��$��	�	�	r"c��dSrtrtr�s r �	saveStatezSVGCanvas.saveState�����r"c��dSrtrtr�s r �restoreStatezSVGCanvas.restoreState�r�r")r�r\rFrt)NN)r.r.N)rNr:r)rrCNr)rrBNr)T)r)rr{r)rN)/rjrkrlrRr)r�r�r�r�r3r�r�r�rr�r$r&r�r�r�r�r9rQrUrWrZrergrlrprzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rtr"r r%r%�s8������j(�j(�j(�j(�X����$.�.�.�.�$&�r�&�&�&�&�������,)*�T��VZ�
�
�
�
�3�3�3�3�3�3��a�	=�	=�	=�	=�1�1�1�/�/�/�2�2�2�/�/�/�
3�3�3�(���)�)�)�)�")�)�)�)� +-�+-�+-�+-�Z?G�+,�<�<�<�<�?D�+,�<�<�<�<�/�/�/�
�
�
�
�
-�
-�
-�,�,�,�,�+�+�+�+�)�)�)�)� )� )� )� )�D1�1�1�1�P�P�P�P�1�1�1�"&���!3�!3�!3�����=�=�=�
H�H�H�:�:�:�=�=�=�<�<�<�<�<�<�N�N�N�%�%�%�
�
�
�
�
�
�
�
r"r%c��eZdZdZd�Zd�Zdddddd	d
d�Zd�Zd
�Zd�Z	d�Z
d�Zd�Zd�Z
d�Zd�Zd�Zefd�Zd�Zd�ZdS)r-z%This draws onto an SVG document.
    c��d|_dS)Nr)r�r�s r rRz_SVGRenderer.__init__�s
������r"c��|jrtd|z��|j�d|z��|jj���}t
|t��r|js	t|��}|j
�|��|�|i��|�
|��|j
���}t
|t��r|js	|j�d|z��|���D]/\}}||jvr!t#|j|j||���0||j_|jrtd|z��dSdS)zGThis is the recursive method called for each node in the tree.
        z#### begin _SVGRenderer.drawNode(%r)z
begin node %rzend node %rz!### end _SVGRenderer.drawNode(%r)N)r�r0�_canvasrZr�r�rr
�
isClipPathr	�_tracker�push�applyStateChanges�drawNodeDispatcherr�r>�	_restores�setattr)rYrDr��deltas�rDeltasr�r�s       r �drawNodez_SVGRenderer.drawNode�s����<�L��D�t�K�L�L�L�����_�T�1�2�2�2���"�'�'�)�)���4��&�&�	�4�?�	���t�$�$���
���6�"�"�"����v�r�*�*�*�	
����%�%�%��-�#�#�%�%���4��&�&�	�4�?�	������]�4�/�0�0�0��M�M�O�O�	:�	:�D�A�q��D�N�"�"����T�^�A�%6�q�9�9�9��"�����<�J��B�T�I�J�J�J�J�J�J�Jr"r�r�r�r�r�r�r�)r��strokeWidth�
strokeLineCap�strokeLineJoin�	fillColorr�r�c�b�t|dd��pd}t|dd��pd}|r||dd�SdS)N�hrefURLrg�	hrefTitle�_top)z
xlink:hrefzxlink:title�target)�getattr)rY�obj�urlr�s    r �_get_link_info_dictz _SVGRenderer._get_link_info_dict�sQ���c�9�b�)�)�/�R����[�"�-�-�3����	�"%�E�F�K�K�K�$�4r"c��|jrtd��|j���}|j���d\}}}}}}|���D]C}	t|	t��r|	�	��}
n|	}
|�
|
���D|j�||||||��|j�|��|jrtd��dSdS)Nz ### begin _SVGRenderer.drawGroupr�z### end _SVGRenderer.drawGroup)
r�r0r�r�r��getState�getContentsrr�provideNoder�r�r�)rYr�r�r~r r+rr�r��	childNode�node2s           r �	drawGroupz_SVGRenderer.drawGroup	s���<�B��A�B�B�B��L�+�+�-�-�	��=�1�1�3�3�K�@���1�a��A�q��*�*�,�,�	!�	!�I��)�X�.�.�
"�!�-�-�/�/���!���M�M�%� � � � �����q�!�Q��1�a�0�0�0�����i�(�(�(��<�@��?�@�@�@�@�@�@�@r"c��|�|��}t|di��}|j|jcxkrdkrAnn>|jj|j|j|j|jz|j|j	zfd|i|��dS|jj
|j|j|j|jz|j|j	z|j|jfd|i|��dS)Nr6rr�)r�r�r4r5r�r�r0r1r&r'r9)rYr�r�r�s    r �drawRectz_SVGRenderer.drawRects���,�,�T�2�2�	��4��B�/�/���7�d�g�"�"�"�"��"�"�"�"�"��D�L���F�D�F��F�4�:�%�t�v�d�k�'9�
\�
\�EN�
\�RZ�
\�
\�
\�
\�
\�
#�D�L�"��F�D�F��F�4�:�%�t�v�d�k�'9��G�T�W�
5�
5�(�	
5�,4�	
5�
5�
5�
5�
5r"c
��|j���}|d|j|j|jf\}}}}|jj|||f|�|��|t|dd��d�t|di����dS)N�
textAnchorrKr)r�rJrKr6)	r�r�r0r1r�r�rQr�r�)rY�	stringObj�SrJr0r1r�s       r rQz_SVGRenderer.drawString*s����M�"�"�$�$��"#�L�/�9�;�	��Y�^�"[���Q��4������Q�q�	9�4�3K�3K�I�3V�3V�'��	�JZ�[\�8]�8]�	9�	9��i��B�7�7�	9�	9�	9�	9�	9r"c��|jjr3|j�|j|j|j|j��dSdSrt)r�r�rgr�r�r�r�)rYrgs  r �drawLinez_SVGRenderer.drawLine1sF���<�$�	B��L���d�g�t�w�����A�A�A�A�A�	B�	Br"c��|j�|j|j|j|�|�����dS�N)r�)r�rprmrnr2r�)rYrps  r �
drawCirclez_SVGRenderer.drawCircle5s<������V�Y��	�6�8�t�G_�G_�`f�Gg�Gg��h�h�h�h�hr"c	���|���\}}}|dks|�|dks|�w|jsp|j|j|j|j|jf\}}}}}	|jp|j}||z
||z
}}
||z||z}
}|	|z
}|j�	|
|||
||d���dS|�
��}t|t��r|�
|��dS|�|��dS)Nrr)r�)�
_xtraRadii�annular�centerx�centery�radius�startangledegrees�endangledegrees�yradiusr�r��	asPolygonrr
�drawPath�drawPolygon)rY�wedger��radius1�yradius1r�r�r�r�r�r�r�r�r�r�r9s                r �	drawWedgez_SVGRenderer.drawWedge8s$��%*�%5�%5�%7�%7�"���(��Q�J�J�'�/��!���x�?O�Y^�Yf�?O�
�]�E�M�5�<��9P�RW�Rg�
g�
I�G�W�f�&7���m�3�u�|�G��������R��������R�$�'8�8�F��L� � ��R��R�1B�F�WX� �Y�Y�Y�Y�Y����!�!�A��!�D�!�!�
$��
�
�a� � � � � �� � ��#�#�#�#�#r"c�z�|jjr.|j�t|j����dSdSrt)r�r�r�r;r��rYr�s  r �drawPolyLinez_SVGRenderer.drawPolyLineIs?���<�$�	=��L�!�!�/�!�(�";�";�<�<�<�<�<�	=�	=r"c	���|j|jz
}|j|jz}|j|jz
}|j|jz}|j�|||||�|�����dSr�)rmr4rnr5r�rlr�)rYrlr�r�r�r�s      r �drawEllipsez_SVGRenderer.drawEllipseMso��
�Z�'�*�
$��
�Z�'�*�
$��
�Z�'�*�
$��
�Z�'�*�
$������R��2�b�D�4L�4L�W�4U�4U��V�V�V�V�Vr"c��|j�t|j��d|�|�����dS)Nr)ryr�)r�r�r;r�r�r�s  r r�z_SVGRenderer.drawPolygonUs>������_�Q�X�6�6�q�D�Ld�Ld�ef�Lg�Lg��h�h�h�h�hr"c����	�
�ddlm�	|j}|j|j|j|jf�
|�t�dt��}|�	���}t�dd��}�	�
�fd�}|dkr*|��|�
g�j||���dS|d	kr,|d
���|�
g�j||���dS|��}|sn|j}|�
d��	d}|�
g�j||���|�
|��dS#|�
|��wxYw|�
g�j||���dS)Nr)�_renderPathr��	autoclosergc������fi|��Srtrt)rr��	drawFuncsr�s ���r �rPz!_SVGRenderer.drawPath.<locals>.rPas����;�t�Y�7�7�$�7�7�7r"r�)r�r�r��pdfT)�
forceClose)�reportlab.graphics.shapesr�r�r�r�r�r�r�rr�r�r�r�r$)rYr�r�r+r�r�r�isClosed�ofcr�r�s `       @@r r�z_SVGRenderer.drawPathXs������9�9�9�9�9�9��L���X�q�x���A�K�@�	����t�J�}�=�=�H��,�,�T�2�2�	��D��R�0�0�	�	8�	8�	8�	8�	8�	8�	8��e����B�D�D�D�
���R�d�o��U]��^�^�^�^�^�
��
�
��B�$�����
���R�d�o��U]��^�^�^�^�^��r�t�t�H��	
c��l�����t�$�$�$�(� $�I��$�$�R�d�o��]e�$�f�f�f��N�N�3�'�'�'�'�'��A�N�N�3�'�'�'�'����� � ��$�/�Y�Ya� �b�b�b�b�bs�; D2�2E	c��|j}t|t��rE|rtj�|��sdSt���|��}nt|d��r|}ndS|j\}}|j	|j
}}|�|}|�|}|j�||j
|j||d���dS)N�convertT)rc)r�rr?�os�isfilerr�r�r�r&r'r�rer0r1)rYr]r��im�srcW�srcH�dstW�dstHs        r rez_SVGRenderer.drawImagevs����z���d�3���	��:�R�W�^�^�D�1�1�:�F�F����!�!�$�'�'�B�B�
�T�)�
$�
$�	��B�B��F��W�
��d��[�%�,�d���<����<�������r�5�7�E�G�T�4�t��L�L�L�L�Lr"c���|���D�]�\}}|dkr�
|dkr|j�|���.|dkr|j�|���O|dkr|j�|���p|dkr|j�|����|dkr�|r�t
|ttf��rFt|��dkr3t
|dttf��r|d	}|d}nd	}|j�
||����|j�
����5|d
kr|j�|����W|dvr]|�d|jj
��}|�d
|jj��}|j�||�����|dkr|j�|�����dS)z\This takes a set of states, and outputs the operators
        needed to set those propertiesr�r�r�r�r��strokeDashArrayr4rrr�)r�r�r�r�r�N)r>r�r�r�r�r�rrQrr6rr$�getr�r�r�r&)rY�delta�newState�key�valuer�fontname�fontsizes        r r�z_SVGRenderer.applyStateChanges�s�� �+�+�-�-�	0�	0�J�C���k�!�!���
�%�%���+�+�E�2�2�2�2��
�%�%���)�)�%�0�0�0�0���'�'���'�'��.�.�.�.��(�(�(���(�(��/�/�/�/��)�)�)��+�!�%��e��5�5�"�#�e�*�*�a�-�-�J�W\�]^�W_�af�gk�`l�Lm�Lm�-� %�a��� %�a���� !���L�(�(��u�5�5�5�5��L�(�(�*�*�*�*���#�#���)�)�%�0�0�0�0��0�0�0� �9�9�Z���1C�D�D�� �9�9�Z���1G�H�H����$�$�X�x�8�8�8�8��
�"�"���(�(��/�/�/��;	0�	0r"N)rjrkrlrmrRr�r�r�r�r�rQr�r�r�r�r�r�rr�rer�rtr"r r-r-�sD�����������K�K�K�@ .�\�Zd�!,��QX�&�(�(�I����>A�A�A� 5�5�5�"9�9�9�B�B�B�i�i�i�$�$�$�"=�=�=�W�W�W�i�i�i�'4�c�c�c�c�<
M�
M�
M�!0�!0�!0�!0�!0r"r-�out-svgc��tj�|��stj|��ddlm}g}t
|��D]R}|dd�dkrBt||��}|��}t|dd��}|�||f���Sd}|D]=\}}tj�	|d|z��}	t||	��|dz
}�>dd	lm}
|
��}t|tj�	|d
����ddl
m}ddlm}|��}
||
j|
j��}|�|
��t|tj�	|d
����dS)Nr)�
testshapes�
�
getDrawingrmrgzrenderSVG_%d.svgr)�getDrawing01ztest.svg)�RL_CorpLogo)�Drawingzcorplogo.svg)rr��isdir�mkdir�reportlab.graphicsr�dirr�r7rir�reportlab.graphics.testshapesr�reportlab.lib.corprrrr&r'�add)�outDirr�drawings�funcname�funcr.�	docstringr:r�filenamerrr�rls              r �testr.�s����7�=�=�� � ��
������-�-�-�-�-�-��H��
�O�O�2�2���A�b�D�>�\�)�)��:�h�/�/�D��d�f�f�G���Y�r�2�2�I��O�O�W�i�0�1�1�1��	�A�"�����I��7�<�<��'9�A�'=�>�>���1�h����	�Q����:�:�:�:�:�:�����A��q�"�'�,�,�v�j�1�1�2�2�2�.�.�.�.�.�.�1�1�1�1�1�1�	����B�������#�#�A��E�E�"�I�I�I��q�"�'�,�,�v�n�5�5�6�6�6�6�6r"�__main__rt)r):rm�mathr^rrSra�iorr�reportlab.pdfbase.pdfmetricsr�reportlab.lib.rl_accelr�reportlab.lib.utilsr�reportlab.graphics.renderbaser	r
rrrr
r�	reportlabrrrr�reportlab.pdfgen.canvasrr�renderPMr�xml.domrr�r~rr�r3rjr)rHrGrr!rr(r;rKrQrMr�r�r%r-r.rjrtr"r �<module>r:sI��	��%�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$� � � � � � � � �4�4�4�4�4�4�)�)�)�)�)�)�(�(�(�(�(�(�V�V�V�V�V�V�V�V�V�V�D�D�D�D�D�D�D�D�D�D�'�'�'�'�������<�<�<�<�<�<�<�<�<�<�@�@�@�@�@�@�@�@�������(�(�(�(�(�(��h��
�h��	�W��D�J�J�L�L��g�m�m�o�o��L�R�R�T�T��l�r�r�t�t��'�-�-�/�/��"+�!7�����$-�#9��������1G�R�R�R�R�

�

�

�����>$�$�$�$�$�D�$�$�$�N	�y��I��9��y��I��9�

��H�H�H�f
�f
�f
�f
�f
�f
�f
�f
�Pg0�g0�g0�g0�g0�8�g0�g0�g0�R 7� 7� 7� 7�D�Z����D�F�F�F�F�F��r"

Youez - 2016 - github.com/yon3zu
LinuXploit