
    ,g2                         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         s/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/svg/bounding_box.pybounding_boxr%      s    xx++!!
txx
(dI
>C %!!$((c/c#--8J*K&Lzz$((>5"A9MF\A%%s1vq0@'@F\!3q6L#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    99TXXc]DHHSM9=DAqII488H-y:ME6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_    YYtxx~txx~yAFB

488C=),A6261q5!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    YYtxx~txx~yAFBYYtxx~txx~yAFB7BGQVQ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    YYtxx~txx~yAFBYYtxx~txx~yAFBr2;BqABK!OSR[1_6E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!$((8R"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
OO%	??3"1%5$-;a 7 7Q ?FIT> %c9i @BI"+//#q"9HiuX/H  )|Yqr]-@-@-B9EBi'')#(9Q<#7129L9L9Ny Bi'')(|Yqr]-@-@-B9EBi'')#(9Q<#7129L9L9Ny Bi'')  E
+T#e*-=5E#CI>OAq) }ZZ  <JB%1 N$4!BE6eBfB"XBx'F.|VDLJJt^ %c9i @BI %c9i @BI#CI>OAq) }j j j j ZZ /Bx"bAq6:<LJJt^(kO223:LAy99Q9-DAq }Z /:02LJx#CI>OAq) ZZ /|q!fYGLJJv %c9i @BI#CI>OAq) ~j j ZZ /Bx!Q02LJJt^(kO223:LAy99Q9-DAq }Z /
A02LJOO%	s v r&   c                 $    |j                  d      S )zBounding box for text node.text_bounding_box)r   )r   r    r!   s      r$   bounding_box_textrk      s    88'((r&   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_grt      su    %L < 77yI !34(:%D$vtf}$D.d|dD\:<L< r&   c                 N    ddl m}  || ||      x}t        S t        | ||d      S )zBounding box for use node.r   )get_use_treeT)defsrv   r   r%   )r   r    r!   rv   trees        r$   bounding_box_usery      s0    "S$	22;!!Cy$77r&   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      }nt        |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   rp   tminxrr   tmaxxrq   tminyrs   tmaxytmp_ytmp_xangle1angle2	other_arcs                                  r$   r^   r^      s\   Wc"gBRH}1bz3q":s1r6{CBK??#h"q&!A%CBF(;a(??G3xi26"Q&SR!V)<q)@@G 	a"'B!Ggl22R1Ww!|5KK a'Q,&q7a<)???HGg!|Ra<'Q,!";;a<q":s1bz3q2v;AFCC(^RZ"Ah?2+'",'B,(2-	3s8	gC0	0BFa<	?B	3s8	gC0	0BFa<	?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.1bzFUNfun&5.1bzFUNfun&5.1bzFUNfun&5.1bztd{D4K//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@   rp   rq   r*   r+   rr   rs   x_listy_lists
             r$   rC   rC   O  s     ,D$vdd D &\NFFD6C.v.D6C.v.0D$d td{D4K//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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&   