
    Bh2                         S r SSKJrJrJrJrJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJr  \\SS4rS rS rS rS	 rS
 rS rS rS rS rS rS rS rS r\\\\\\\\\\\\\S.rg)z%Calculate bounding boxes of SVG tags.    )
atanatan2cosinfisinfpiradianssinsqrttan   )PATH_LETTERS)	normalizepointc                    UR                   [        ;  a  [        $ [        UR                      " XU5      n[        U5      (       d  [        $ U(       a  UR                   S:w  at  [	        U R                  UR                  S5      5      5      (       aF  U R                  UR                  SS5      U5      nUS   US-  -
  US   US-  -
  US   U-   US   U-   4nU$ )	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         M/var/www/html/env/lib/python3.13/site-packages/weasyprint/svg/bounding_box.pybounding_boxr%      s    xx++!!
txx
(I
>C %%!!$((c/c#--8J*K&L&Lzz$((>5"A9MF\A%%s1vq0@'@F\!3q6L#8: J    c                     U R                  UR                  S5      UR                  S5      U5      u  p4U R                  UR                  S5      UR                  S5      U5      u  pVX4XV4$ )zBounding box for rect node.xywidthheightr   r   )r   r    r!   r(   r)   r*   r+   s          r$   bounding_box_rectr-      sZ    99TXXc]DHHSM9=DAII488H-y:MEr&   c                     U R                  UR                  S5      UR                  S5      U5      u  p4U R                  UR                  S5      U5      nX5-
  XE-
  SU-  SU-  4$ )zBounding box for circle node.cxcyrr   )r   r   r   )r   r    r!   r/   r0   r1   s         r$   bounding_box_circler2   "   sY    YYtxx~txx~yAFB

488C=),A6261q5!a%''r&   c                     U R                  UR                  S5      UR                  S5      U5      u  p4U R                  UR                  S5      UR                  S5      U5      u  pVXS-
  Xd-
  SU-  SU-  4$ )zBounding box for ellipse node.rxryr/   r0   r   r,   )r   r    r!   r4   r5   r/   r0   s          r$   bounding_box_ellipser6   )   se    YYtxx~txx~yAFBYYtxx~txx~yAFB7BGQVQV++r&   c                 6   U R                  UR                  S5      UR                  S5      U5      u  p4U R                  UR                  S5      UR                  S5      U5      u  pV[        X55      [        XF5      p[        X55      U-
  [        XF5      U-
  pXxX4$ )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{    YYtxx~txx~yAFBYYtxx~txx~yAFBr;BqK!OS[1_6r&   c                     [         n/ n[        UR                  SS5      5      nU(       a*  [        XU5      u  pgnUR	                  Xg45        U(       a  M*  [        X45      $ )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   sZ    %LF!$((8R"89
"'	"Jqf 
 |44r&   c                    UR                  SS5      n[         H  nUR                  USU S35      nM     [        U5      n[        nSnSnSnU(       Gar  UR                  5       nUR                  SS5      S   [        ;   a  U S3R                  SS5      u  pCUS;   Gay  [        XU5      u  pnUR                  SS5      u  p[        [        U
5      5      n
US   USS R                  5       p;US	   R                  5       (       d3  XS   -   USS R                  5       p;US	   R                  5       (       d  M3  US   USS R                  5       p<US	   R                  5       (       d3  XS   -   USS R                  5       p<US	   R                  5       (       d  M3  [        [        U5      5      [        [        U5      5      p[        XU5      u  pnUS
:X  a  X-  nX-  n[        XgXXXU5	      nUu  nnnnUU-   nUU-   nUU4UU44n[        UU5      nUnUnGOUS;   ak  [        XU5      u  nnn[        XU5      u  nnn[        XU5      u  pnUS:X  a  UU-  nUU-  nUU-  nUU-  nX-  nX-  n[        UUU4UU4X445      nUnUnGO#US;   aH  U S3R                  SS5      u  pU R                  USU5      u  nnUS:X  a  X-  n[        X]U445      nUnOUS;   a0  [        XU5      u  pnUS;   a  X-  nX-  n[        X]U445      nUnUnOUS;   aM  [        XU5      u  nnn[        XU5      u  pnUS;   a  UU-  nUU-  nX-  nX-  n[        UUU4X445      nUnUnOLUS;   aF  U S3R                  SS5      u  pU R                  SX5      u  nnUS:X  a  X-  n[        XVU445      nUnUR                  5       nU(       a  GMr  U$ )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
OO%	??3"1%5$-;a 7 7Q ?FT> %ci @BI"+//#q"9HuX/H  )|Yqr]-@-@-B9Bi''))#(Q<#7129L9L9Ny Bi''))(|Yqr]-@-@-B9Bi''))#(Q<#7129L9L9Ny Bi''))  E
+T#e*-=5#CI>OA) }  <1 N$4!BE6eBfB"XBx'F.|VDLJJt^ %ci @BI %ci @BI#CI>OA) }j j j j  /Bx"bA6:<LJJt^(kO223:LA99Q9-DAq } /:02LJx#CI>OA)  /|!fYGLJJv %ci @BI#CI>OA) ~j j  /Bx!02LJJt^(kO223:LA99Q-DAq } /A02LJOO%	s )v r&   c                 $    UR                  S5      $ )zBounding box for text node.text_bounding_box)r   )r   r    r!   s      r$   bounding_box_textrk      s    88'((r&   c                     [         nU HB  nU R                  XB5      n[        U5      (       d  M&  Uu  pgpXh-   Xy-   p[        X6U4X445      nMD     U$ )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_grt      sc    %L 77I !344(:%Dt}$.d|d\:<L  r&   c                 L    SSK Jn  U" XU5      =nc  [        $ [        XUS5      $ )zBounding box for use node.r   )get_use_treeT)defsrv   r   r%   )r   r    r!   rv   trees        r$   bounding_box_usery      s,    "S	22;!!Cy$77r&   c	                    [        U5      [        U5      p2SX#4;   a.  [        Xp5      [        X5      [        Xp-
  5      [        X-
  5      4$ [        U5      X-
  -  S-  [        U5      X-
  -  S-  -   n	[        U5      * X-
  -  S-  [        U5      X-
  -  S-  -   n
US-  US-  -  US-  U
S-  -  -
  US-  U	S-  -  -
  nXS-  U
S-  -  US-  U	S-  -  -   -  nS=pUS:  aY  X#-  nU
S-  U	S-  US-  -  -   nUS:  a.  [        Xp5      [        X5      [        Xp-
  5      [        X-
  5      4$ [	        U5      nX-  nO+XV:X  a  SOS[	        U5      -  nX-  U
-  U-  nU* U-  U	-  U-  nU[        U5      -  U[        U5      -  -
  X-   S-  -   nU[        U5      -  U[        U5      -  -   X-   S-  -   nUS[
        4;   aH  UU-
  n[        SU* 5      nUU-   n[        SU5      nUU-
  n[        U* S5      nUU-   n[        US5      nGOU[
        S-  S[
        -  S-  4;   aH  UU-
  n[        SU* 5      nUU-   n[        SU5      nUU-
  n[        U* S5      nUU-   n[        US5      nGO[        U[        U5      -  U-  5      * n[
        [        U[        U5      -  U-  5      -
  nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -
  nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -
  nUU:  a  UUnnUUnnUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -   n[        UU-
  UU-
  5      nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -   n[        UU-
  UU-
  5      n[        U[        U5      U-  -  5      n[        U[        U5      U-  -  5      [
        -   nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -   nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -   nUU:  a  UUnnUUnnUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -
  n[        UU-
  UU-
  5      nUU[        U5      -  [        U5      -  -   U[        U5      -  [        U5      -  -
  n[        UU-
  UU-
  5      n[        UU-
  U U-
  5      n[        UU-
  UU-
  5      nU(       d  UUnnSnUU:  a  UUnnSnU(       d  UU:  d  UU:  d  U(       a  UU:  d  UU:  d  [        Xp5      nU(       d  UU:  d  UU:  d  U(       a  UU:  d  UU:  d  [        Xp5      nU(       d  UU:  d  UU:  d  U(       a  UU:  d  UU:  d  [        X5      nU(       d  UU:  d  UU:  d  U(       a  UU:  d  UU:  d  [        X5      nUUUU-
  UU-
  4$ )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   rp   tminxrr   tmaxxrq   tminyrs   tmaxytmp_ytmp_xangle1angle2	other_arcs                                  r$   r^   r^      s(   Wc"gRH}1z3q:s16{CK??#h"&!A%CBF(;a(??G3xi26"Q&SRV)<q)@@G 	a"'B!Ggl22R1Ww!|5KK a'Q,&q7a<)???HG!|a<'Q,!";;a<q:s1z3qv;AFCC(^Z"Ah?+'",'B,(2-	3s8	gC0	0BFa<	?B	3s8	gC0	0BFa<	?B
q"g~Bwa"BwaBwrc1Bwb!	aR!$	$Bwa"BwaBwrc1Bwb!b3s8mb())T"s3x-",--BUOc#h..c%j3s81KKBUOc#h..c%j3s81KK$;t$D %5ER#e*_s3x//"s5z/CH2LLdRi,R#e*_s3x//"s5z/CH2LLdRi,R3s8b=)*R3s8b=)*R/BUOc#h..c%j3s81KKBUOc#h..c%j3s81KK$;t$D %5ER#e*_s3x//"s5z/CH2LLebj$),R#e*_s3x//"s5z/CH2LLdRi,27BG$F1r61r6"FI	FUNfun&5.1zFUNfun&5.1zFUNfun&5.1zFUNfun&5.1ztd{D4K//r&   c                     U u  p#pE[        U5      (       a  [        * OX$-   [        U5      (       a  [        * OX5-   pv[        U6 u  p[        U/UQ76 [        U/U	Q76 [	        U/UQ76 [	        U/U	Q76 4u  p#pgX#Xb-
  Xs-
  4$ )z.Extend a bounding box to include given points.)r   r   zipr<   r=   )
r%   r@   rp   rq   r*   r+   rr   rs   x_listy_lists
             r$   rC   rC   O  s     ,Ddd  &\NFD6C.v.D6C.v.0D t{DK//r&   c                 F    U =(       a    [        U S   U S   -   5      (       + $ )u=   Check that a bounding box doesn’t have infinite boundaries.r   r   )r   )r%   s    r$   r   r   \  s"    Hl1o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   rk   rt   ry   r^   rC   r   r    r&   r$   <module>r      s    + J J J  ##q!^ (,5HV)

8a0H
0I !#%$	! r&   