Ë
    £ëiI3  ã                   óÎ   — d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ eeddfZd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeeeeeeeeeeeeedœZy)z%Calculate bounding boxes of SVG tags.é    )
ÚatanÚatan2ÚcosÚinfÚisinfÚpiÚradiansÚsinÚsqrtÚtané   )ÚPATH_LETTERS)Ú	normalizeÚpointc                 óŒ  — |j                   t        vrt        S t        |j                      | ||«      }t        |«      st        S |r~|j                   dk7  rot	        | j                  |j                  d«      «      «      rF| j                  |j                  dd«      |«      }|d   |dz  z
  |d   |dz  z
  |d   |z   |d   |z   f}|S )	zBounding box for any node.ÚgÚstrokezstroke-widthÚ1pxr   é   r   é   )ÚtagÚBOUNDING_BOX_METHODSÚEMPTY_BOUNDING_BOXÚis_valid_bounding_boxÚanyÚ	get_paintÚgetÚlength)ÚsvgÚnodeÚ	font_sizer   ÚboxÚstroke_widths         ú[/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/svg/bounding_box.pyÚbounding_boxr%      sÁ   € à‡x�xÔ+Ñ+Ü!Ð!Ü
˜tŸx™xÑ
(¨¨d°IÓ
>€CÜ  Ô%Ü!Ð!Ù�$—(‘(˜c’/¤c¨#¯-©-¸¿¹ÀÓ8JÓ*KÔ&LØ—z‘z $§(¡(¨>¸5Ó"AÀ9ÓMˆà�‰F�\ AÑ%Ñ% s¨1¡v°¸qÑ0@Ñ'@Ø�‰F�\Ñ! 3 q¡6¨LÑ#8ð:ˆð €Jó    c                 óÞ   — | j                  |j                  d«      |j                  d«      |«      \  }}| j                  |j                  d«      |j                  d«      |«      \  }}||||fS )zBounding box for rect node.ÚxÚyÚwidthÚheight©r   r   )r   r    r!   r(   r)   r*   r+   s          r$   Úbounding_box_rectr-      sb   € à�9‰9�T—X‘X˜c“] D§H¡H¨S£M°9Ó=�D€A€qØ—I‘IØ�‰�Ó˜4Ÿ8™8 HÓ-¨yó:�M€Eˆ6àˆa�˜ÐÐr&   c                 óÐ   — | j                  |j                  d«      |j                  d«      |«      \  }}| j                  |j                  d«      |«      }||z
  ||z
  d|z  d|z  fS )zBounding box for circle node.ÚcxÚcyÚrr   )r   r   r   )r   r    r!   r/   r0   r1   s         r$   Úbounding_box_circler2   "   s_   € à�Y‰Y�t—x‘x “~ t§x¡x°£~°yÓA�F€BˆØ�
‰
�4—8‘8˜C“= )Ó,€AØ�‰6�2˜‘6˜1˜q™5 ! a¡%Ð'Ð'r&   c                 óö   — | j                  |j                  d«      |j                  d«      |«      \  }}| j                  |j                  d«      |j                  d«      |«      \  }}||z
  ||z
  d|z  d|z  fS )zBounding box for ellipse node.ÚrxÚryr/   r0   r   r,   )r   r    r!   r4   r5   r/   r0   s          r$   Úbounding_box_ellipser6   )   sm   € à�Y‰Y�t—x‘x “~ t§x¡x°£~°yÓA�F€BˆØ�Y‰Y�t—x‘x “~ t§x¡x°£~°yÓA�F€BˆØ�‰7�B˜‘G˜Q ™V Q¨¡VÐ+Ð+r&   c                 óJ  — | j                  |j                  d«      |j                  d«      |«      \  }}| j                  |j                  d«      |j                  d«      |«      \  }}t        ||«      t        ||«      }}t        ||«      |z
  t        ||«      |z
  }
}	|||	|
fS )zBounding box for line node.Úx1Úy1Úx2Úy2)r   r   ÚminÚmax)r   r    r!   r8   r9   r:   r;   r(   r)   r*   r+   s              r$   Úbounding_box_liner>   0   s�   € à�Y‰Y�t—x‘x “~ t§x¡x°£~°yÓA�F€BˆØ�Y‰Y�t—x‘x “~ t§x¡x°£~°yÓA�F€BˆÜˆr�2‹;œ˜B ›€q€AÜ˜˜B“K !‘O¤S¨¨R£[°1¡_ˆ6€EØˆa�˜ÐÐr&   c                 ó²   — t         }g }t        |j                  dd«      «      }|r't        | ||«      \  }}}|j	                  ||f«       |rŒ't        ||«      S )zBounding box for polyline node.ÚpointsÚ )r   r   r   r   ÚappendÚextend_bounding_box)r   r    r!   r%   r@   Únormalized_pointsr(   r)   s           r$   Úbounding_box_polylinerE   9   s`   € ä%€LØ€FÜ! $§(¡(¨8°RÓ"8Ó9ÐÙ
Ü"'¨Ð->À	Ó"JÑˆˆ1ÐØ�‰�q˜!�fÔò ô ˜|¨VÓ4Ð4r&   c                 óx  — |j                  dd«      }t        D ]  }|j                  |d|› d�«      }Œ t        |«      }t        }d}d}d}|�rl|j                  «       }|j                  dd«      d   t        v r|› d�j                  dd«      \  }}|dv �rtt        | ||«      \  }}	}|j                  dd«      \  }
}t        t        |
«      «      }
|d   |dd j                  «       }}|d	   j                  «       s/||d   z   |dd j                  «       }}|d	   j                  «       sŒ/|d   |dd j                  «       }}|d	   j                  «       s/||d   z   |dd j                  «       }}|d	   j                  «       sŒ/t        t        |«      «      t        t        |«      «      }}t        | ||«      \  }}}|d
k(  r
||z  }||z  }t        ||||	|
||||«	      }|\  }}}}||z   }||z   }||f||ff}t        ||«      }|}|}�nœ|dv rqt        | ||«      \  }}}t        | ||«      \  }}}t        | ||«      \  }}}|dk(  r||z  }||z  }||z  }||z  }||z  }||z  }t        |||f||f||ff«      }|}|}�n'|dv rJ|› d�j                  dd«      \  }}| j                  |d|«      \  }}|dk(  r||z  }t        |||ff«      }|}nÙ|dv r3t        | ||«      \  }}}|dv r
||z  }||z  }t        |||ff«      }|}|}n¢|dv rQt        | ||«      \  }}}t        | ||«      \  }}}|dv r||z  }||z  }||z  }||z  }t        |||f||ff«      }|}|}nM|dv rI|› d�j                  dd«      \  }}| j                  d||«      \  }}|dk(  r||z  }t        |||ff«      }|}|j                  «       }|r�Œl|S )zBounding box for path node.ÚdrA   ú r   ÚMr   ÚaANéÿÿÿÿÚaÚcCÚcÚhHÚhÚlLmMtTÚlmtÚqQsSÚqsÚvVÚv)r   r   Úreplacer   r   ÚstripÚsplitr   r	   ÚfloatÚisdigitÚboolÚintÚ_bounding_box_elliptical_arcrC   )r   r    r!   Ú	path_dataÚletterr%   Ú
previous_xÚ
previous_yr4   r5   ÚrotationÚlargeÚsweepr(   r)   Úarc_bounding_boxr8   r9   r*   r+   r:   r;   r@   Ú_s                           r$   Úbounding_box_pathrh   D   sÑ  € à—‘˜˜bÓ!€Iô ò =ˆØ×%Ñ% f°°&°¸¨mÓ<‰	ð=ä˜)Ó$€Iä%€LØ€JØ€JØ€FÚ
Ø—O‘OÓ%ˆ	Ø�?‰?˜3 Ó" 1Ñ%¬Ñ5Ø$- ;¨a × 7Ñ 7¸¸QÓ ?ÑˆF�Ià�TŠ>ä % c¨9°iÓ @ÑˆB��IØ"+§/¡/°#°qÓ"9ÑˆH�iÜœu X›Ó/ˆHð  )¨™|¨Y°q°r¨]×-@Ñ-@Ó-B�9ˆEØ˜B‘i×'Ñ'Ô)Ø#(¨9°Q©<Ñ#7¸À1À2¸×9LÑ9LÓ9N�y�ð ˜B‘i×'Ñ'Õ)à(¨™|¨Y°q°r¨]×-@Ñ-@Ó-B�9ˆEØ˜B‘i×'Ñ'Ô)Ø#(¨9°Q©<Ñ#7¸À1À2¸×9LÑ9LÓ9N�y�ð ˜B‘i×'Ñ'Õ)ô  ¤ E£
Ó+¬T´#°e³*Ó-=�5ˆEä# C¨°IÓ>‰OˆAˆq�)ð ˜Š}Ø�Z‘�Ø�Z‘�ô  <Ø˜J¨¨B°¸%ÀÈÈ1ó NÐà$4Ñ!ˆB��E˜6Ø�e‘ˆBØ�f‘ˆBØ˜"�X  B˜xÐ'ˆFÜ.¨|¸VÓDˆLØˆJØŠJà�t‰^ä % c¨9°iÓ @ÑˆB��IÜ % c¨9°iÓ @ÑˆB��IÜ# C¨°IÓ>‰OˆAˆq�)ð ˜Š}Ø�jÑ �Ø�jÑ �Ø�jÑ �Ø�jÑ �Ø�Z‘�Ø�Z‘�ô /Ø  B˜x¨"¨b¨°A°q°6Ð:ó<ˆLàˆJØŠJà�t‰^à(˜k¨˜O×2Ñ2°3¸Ó:‰LˆAˆyØ—9‘9˜Q  9Ó-‰DˆAˆqð ˜Š}Ø�Z‘�ô /Ø  :˜Ð0ó2ˆLà‰Jà�xÑä# C¨°IÓ>‰OˆAˆq�)ð ˜‰Ø�Z‘�Ø�Z‘�ô /¨|¸qÀ!¸f¸YÓGˆLØˆJØ‰Jà�vÑä % c¨9°iÓ @ÑˆB��IÜ# C¨°IÓ>‰OˆAˆq�)ð ˜‰~Ø�jÑ �Ø�jÑ �Ø�Z‘�Ø�Z‘�ô /Ø  B˜x¨!¨Q¨Ð0ó2ˆLàˆJØ‰Jà�t‰^à(˜k¨˜O×2Ñ2°3¸Ó:‰LˆAˆyØ—9‘9˜Q  9Ó-‰DˆAˆqð ˜Š}Ø�Z‘�ô /Ø 
¨A˜Ð0ó2ˆLàˆJà—O‘OÓ%ˆ	ós ðv Ðr&   c                 ó   — t        |dd«      S )zBounding box for text node.Útext_bounding_boxN)Úgetattr)r   r    r!   s      r$   Úbounding_box_textrl   Ï   s   € ä�4Ð,¨dÓ3Ð3r&   c                 ó¢   — t         }|D ]C  }| j                  ||«      }t        |«      sŒ!|\  }}}}	||z   ||	z   }}
t        |||f|
|ff«      }ŒE |S )zBounding box for g node.)r   Úcalculate_bounding_boxr   rC   )r   r    r!   r%   ÚchildÚchild_bounding_boxÚminxÚminyr*   r+   ÚmaxxÚmaxys               r$   Úbounding_box_gru   Ô   su   € ä%€LØò <ˆØ ×7Ñ7¸¸yÓIÐÜ Ð!3Õ4Ø(:Ñ%ˆD�$˜˜vØ ™ t¨f¡}�$ˆDÜ.Ø  d˜|¨d°D¨\Ð:ó<‰Lð<ð Ðr&   c                 óæ   — ddl m}  || ||«      x}€t        S | j                  |j	                  d«      |j	                  d«      |«      \  }}t        | ||d«      }|d   |z   |d   |z   |d   |d   fS )	zBounding box for use node.r   )Úget_use_treer(   r)   Tr   r   r   )Údefsrw   r   r   r   r%   )r   r    r!   rw   Útreer(   r)   r"   s           r$   Úbounding_box_userz   á   s|   € å"á˜S $¨	Ó2Ð2ˆÐ;Ü!Ð!à�y‰y˜Ÿ™ #›¨¯©°«°yÓA‰ˆˆ1Ü˜3  i°Ó6ˆØ�1‰v˜‰z˜3˜q™6 A™: s¨1¡v¨s°1©vÐ5Ð5r&   c	                 ó¶  — t        |«      t        |«      }}d||fv r2t        || «      t        ||«      t        || z
  «      t        ||z
  «      fS t        |«      | |z
  z  dz  t        |«      ||z
  z  dz  z   }	t        |«       | |z
  z  dz  t        |«      ||z
  z  dz  z   }
|dz  |dz  z  |dz  |
dz  z  z
  |dz  |	dz  z  z
  }||dz  |
dz  z  |dz  |	dz  z  z   z  }dx}}|dk  r^||z  }|
dz  |	dz  |dz  z  z   }|dk  r2t        || «      t        ||«      t        || z
  «      t        ||z
  «      fS t	        |«      }||z  }n,||k(  rdndt	        |«      z  }||z  |
z  |z  }| |z  |	z  |z  }|t        |«      z  |t        |«      z  z
  | |z   dz  z   }|t        |«      z  |t        |«      z  z   ||z   dz  z   }|dt
        fv rH||z
  }t        d| «      }||z   }t        d|«      }||z
  }t        | d«      }||z   }t        |d«      }�nø|t
        dz  dt
        z  dz  fv rH||z
  }t        d| «      }||z   }t        d|«      }||z
  }t        | d«      }||z   }t        |d«      }�n™t        |t        |«      z  |z  «       }t
        t        |t        |«      z  |z  «      z
  }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z
  }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z
  }||kD  r||}}||}}||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z   }t        ||z
  ||z
  «      }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z   }t        ||z
  ||z
  «      }t        |t        |«      |z  z  «      }t        |t        |«      |z  z  «      t
        z   }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z   }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z   }||kD  r||}}||}}||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z
  }t        ||z
  ||z
  «      }||t        |«      z  t        |«      z  z   |t        |«      z  t        |«      z  z
  }t        ||z
  ||z
  «      }t        ||z
  | |z
  «      }t        ||z
  ||z
  «      }|s||}}d}||kD  r||}}d}|s
||kD  s||k  s|r||kD  s||k  st        || «      }|s
||kD  s||k  s|r||kD  s||k  st        || «      }|s
||kD  s||k  s|r||kD  s||k  st        ||«      }|s
||kD  s||k  s|r||kD  s||k  st        ||«      }||||z
  ||z
  fS )z/Bounding box of an elliptical arc in path node.r   r   rK   r   r   FT)
Úabsr<   r   r
   r   r   r   r   r   r=   )r8   r9   r4   r5   Úphird   re   r(   r)   Úx1primeÚy1primeÚradicantÚcxprimeÚcyprimeÚratioÚfactorr/   r0   rq   Útminxrs   Útmaxxrr   Útminyrt   ÚtmaxyÚtmp_yÚtmp_xÚangle1Úangle2Ú	other_arcs                                  r$   r^   r^   í   s\  € ä�‹W”c˜"“gˆ€BØˆR�ˆH�}Ü�1�b‹zœ3˜q "›:¤s¨1¨r©6£{´C¸¸B¹³KÐ?Ð?ä�#‹h˜"˜q™&Ñ! AÑ%¬¨C«°B¸±FÑ(;¸aÑ(?Ñ?€GÜ�3‹xˆi˜2 ™6Ñ" QÑ&¬¨S«°R¸!±VÑ)<¸qÑ)@Ñ@€Gð 	ˆa‰�"˜‘'Ñ˜B !™G g°¡lÑ2Ñ2°R¸1±W¸wÈ!¹|Ñ5KÑKð à��a‘˜' Q™,Ñ&¨¨q©°7¸a±<Ñ)?Ñ?Ñ?€HØÐ€Gˆgà�!‚|Ø�R‘ˆØ˜a‘< '¨Q¡,°¸!±Ñ";Ñ;ˆØ�aŠ<Ü�q˜"“:œs 1 b›z¬3¨q°2©v«;¼¸AÀ¹F»ÐCÐCÜ�(‹^ˆØ�R‰Z‰à š‘"¨A´°h³Ñ?ˆà˜2‘+ Ñ'¨"Ñ,ˆØ�'˜B‘, Ñ(¨2Ñ-ˆà	”3�s“8Ñ	˜g¬¨C«Ñ0Ñ	0°B¸±F¸a±<Ñ	?€BØ	”3�s“8Ñ	˜g¬¨C«Ñ0Ñ	0°B¸±F¸a±<Ñ	?€Bà
ˆq”"ˆg�~Ø�B‰wˆÜ�a˜"˜“ˆØ�B‰wˆÜ�a˜“ˆØ�B‰wˆÜ�r�c˜1“ˆØ�B‰wˆÜ�b˜!“ŠØ	”�a‘˜œR™ !™Ð$Ñ	$Ø�B‰wˆÜ�a˜"˜“ˆØ�B‰wˆÜ�a˜“ˆØ�B‰wˆÜ�r�c˜1“ˆØ�B‰wˆÜ�b˜!“Šä�bœ3˜s›8‘m bÑ(Ó)Ð)ˆÜ”T˜"œs 3›x™-¨"Ñ,Ó-Ñ-ˆØ�Bœ˜U›‘O¤c¨#£hÑ.Ñ.°´c¸%³j±Ä3ÀsÃ8Ñ1KÑKˆØ�Bœ˜U›‘O¤c¨#£hÑ.Ñ.°´c¸%³j±Ä3ÀsÃ8Ñ1KÑKˆØ�$Š;Ø˜t�$ˆDØ  %�5ˆEØ�Rœ#˜e›*‘_¤s¨3£xÑ/Ñ/°"´s¸5³z±/ÄCÈÃHÑ2LÑLˆÜ�d˜R‘i ¨¡Ó,ˆØ�Rœ#˜e›*‘_¤s¨3£xÑ/Ñ/°"´s¸5³z±/ÄCÈÃHÑ2LÑLˆÜ�d˜R‘i ¨¡Ó,ˆä�Rœ3˜s›8 b™=Ñ)Ó*ˆÜ�Rœ3˜s›8 b™=Ñ)Ó*¬RÑ/ˆØ�Bœ˜U›‘O¤c¨#£hÑ.Ñ.°´c¸%³j±Ä3ÀsÃ8Ñ1KÑKˆØ�Bœ˜U›‘O¤c¨#£hÑ.Ñ.°´c¸%³j±Ä3ÀsÃ8Ñ1KÑKˆØ�$Š;Ø˜t�$ˆDØ  %�5ˆEØ�Rœ#˜e›*‘_¤s¨3£xÑ/Ñ/°"´s¸5³z±/ÄCÈÃHÑ2LÑLˆÜ�e˜b‘j $¨¡)Ó,ˆØ�Rœ#˜e›*‘_¤s¨3£xÑ/Ñ/°"´s¸5³z±/ÄCÈÃHÑ2LÑLˆÜ�d˜R‘i ¨¡Ó,ˆä�2˜‘7˜B ™GÓ$€FÜ�1�r‘6˜1˜r™6Ó"€FáØ �ˆà€IØ�‚Ø �ˆØˆ	á˜F UšN¨f°uªnÙ ¨¢°&¸5².Ü�1�b‹zˆÙ˜F UšN¨f°uªnÙ ¨¢°&¸5².Ü�1�b‹zˆÙ˜F UšN¨f°uªnÙ ¨¢°&¸5².Ü�1�b‹zˆÙ˜F UšN¨f°uªnÙ ¨¢°&¸5².Ü�1�b‹zˆà��t˜d‘{ D¨4¡KÐ/Ð/r&   c                 ó   — | \  }}}}t        |«      rt         n||z   t        |«      rt         n||z   }}t        |Ž \  }}	t        |g|¢­Ž t        |g|	¢­Ž t	        |g|¢­Ž t	        |g|	¢­Ž f\  }}}}||||z
  ||z
  fS )z.Extend a bounding box to include given points.)r   r   Úzipr<   r=   )
r%   r@   rq   rr   r*   r+   rs   rt   Úx_listÚy_lists
             r$   rC   rC   Q  s£   € à ,Ñ€Dˆ$��vä�d”Œ‰ ¨¡Ü�d”Œ‰ ¨¡ð €Dô ˜&�\�N€FˆFäˆDÐ�6ÒœC Ð. vÒ.ÜˆDÐ�6ÒœC Ð. vÒ.ð0Ñ€Dˆ$��dð ��t˜d‘{ D¨4¡KÐ/Ð/r&   c                 ó4   — | xr t        | d   | d   z   «       S )u=   Check that a bounding box doesnâ€™t have infinite boundaries.r   r   )r   )r%   s    r$   r   r   ^  s"   € àÒH¤ l°1¡o¸ÀQ¹Ñ&GÓ HÐHÐHr&   )ÚrectÚcircleÚellipseÚlineÚpolylineÚpolygonÚpathr   ÚuseÚmarkerÚtextÚtspanÚtextPathN) Ú__doc__Úmathr   r   r   r   r   r   r	   r
   r   r   r™   r   Úutilsr   r   r   r%   r-   r2   r6   r>   rE   rh   rl   ru   rz   r^   rC   r   r   © r&   r$   ú<module>r£      sœ   ðÙ +ç J× J× Jå ß #à˜#˜q !�^Ð òòò(ò,òò5òHòV4ò

ò	6òa0òH
0òIð Ø!Ø#ØØ%Ø$ØØ	ØØØØØ!ñÑ r&   