
    Q?h>                         S r SrSSKrSSK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JrJrJrJrJrJrJrJr  S rS rS	 rS
 rS rSS jrSS jrS r  " S S\\5      r!g)z.this code is derived from that used by svglib.)SvgPath    N)
acosceilcopysigncosdegreesfabshypotradianssinsqrt   )	Groupmmultrotate	translatetransformPointPathFILL_EVEN_ODD
_CLOSEPATHUserNodec                    [         R                  " SU5       Vs/ s H  o3(       d  M  [        U5      PM     nn/ n[        S[	        U5      U5       H0  nUS:  a  U S;   a
  U S:X  a  SOSn UR                  XXfU-    /5        M2     U$ s  snf )a'  Split `value`, a list of numbers as a string, to a list of float numbers.

Also optionally insert a `l` or `L` operation depending on the operation
and the length of values.
Example: with op='m' and value='10,20 30,40,' the returned value will be
         ['m', [10.0, 20.0], 'l', [30.0, 40.0]]
(-?\d*\.?\d*(?:[eE][+-]?\d+)?)r   >   Mmr   lL)refindallfloatrangelenextend)opmin_numvalueseqfloatsresis          L/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/svgpath.pysplit_floatsr,      s     %'JJ/PRW$X`$XS\_jeCj$XF`
C1c&k7+q5R:%c	sB

BqW-./ , J as
   
BBc           
         SnSnSR                  X"X#X2U/5      S-   n/ n[        R                  " XAR                  5       5       H=  nUR	                  XR                  5        Vs/ s H  n[        U5      PM     sn/5        M?     U$ s  snf )Nr   z([1|0])z[\s,]*)joinr   finditerstripr#   groupsr    )r$   r&   float_reflag_rea_seq_rer)   r'   nums           r+   split_arc_valuesr6      s    0HG~~Hw( 	H C{{8[[]3

Bzz|<|s|<=> 4J =s   #Bc                 n   0 SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSS.EnUR                  5       n/ n[        R                  " SU R                  5       [        R                  S9nSnU H  nUR                  5       S:X  a  M  Xb;   a=  US:X  a  Xe:X  a  SnOUS:X  a  Xe:X  a  SnOUnX   S:X  a  UR                  U/ /5        MY  M[  UR                  5       S:X  a  UR                  [        XV5      5        OUR                  [        XQU   U5      5        US   nM     U$ )a  Normalise SVG path.

This basically introduces operator codes for multi-argument
parameters. Also, it fixes sequences of consecutive M or m
operators to MLLL... and mlll... operators. It adds an empty
list as argument for Z and z only in order to make the resul-
ting list easier to iterate over.

E.g. "M 10 20, M 20 20, L 30 40, 40 40, Z"
  -> ['M', [10, 20], 'L', [20, 20], 'L', [30, 40], 'L', [40, 40], 'Z', []]
A   aQ   qT   tSsr   r   r   r   Hr   VhvC   r   )cZzz([achlmqstvz]))flagsN )	keysr   splitr0   Ir#   lowerr6   r,   )attropsop_keysresultr1   r$   items          r+   normalise_svg_pathrX   #   s   QQQQQ #Q(+Q03Q 	Q Q Q !$Q ),Q 14Q 	Q	 Q	 Q	 &'QQ	C hhjG FXX&

BDDAF	B::<2? s{tzw!|r2h'  xxzS .r89l22w=>B' * M    c                     U nU S   SUS   U S   -
  -  -   U S   SUS   U S   -
  -  -   4nUS   SUS   U S   -
  -  -   US   SUS   U S   -
  -  -   4nUnX4XV4$ )zE
Convert a quadratic Bezier curve through q0, q1, q2 to a cubic one.
r   gUUUUUU?r   gUUUUUU? )q0q1q2c0c1c2c3s          r+   convert_quadratic_to_cubic_pathrc   T   s     
B
Q%%2a52a5=)
)2a55BqEBqEM3J+J	KB
Q%%2a52a5=)
)2a55BqEBqEM3J+J	KB	B2>rY   c                     [        U 6 [        U6 -  nUS:X  a  gU S   US   -  U S   US   -  -   U-  nUS:  a  SnOUS:  a  SnU S   US   -  U S   US   -  -
  n[        [        [        U5      U5      5      $ )Nr   r   )r
   r   r   r   )urF   drI   rB   s        r+   vector_anglerh   a   s    q	E1IAAv	
1!qtad{	"a'A2v	
Q	!qtadQqTk!A8DGQ'((rY   c	                 n   [        U5      n[        U5      nU(       aB  [        U5      n	[        U	5      n
[        U	5      nSX-
  -  nSX-
  -  nX-  X-  -
  nX-  X-  -   nOSX-
  -  nSX-
  -  nX-  Xf-  -  X-  Xw-  -  -   nUS:  a1  [	        U5      nUU-  nUU-  nX-  Xf-  -  X-  Xw-  -  -   nSU-  S-
  nOUS:w  a  SU-  S-
  nSUs=:  a  S:  a  O  OSn[	        U5      nXE:X  a  U* nUU-  U-  U-  nUU-  U-  * U-  nU(       a'  WU-  W
U-  -
  SX-   -  -   nU
U-  UU-  -   SX-   -  -   nOUSX-   -  -   nUSX-   -  -   n[        SUU-
  U-  UU-
  U-  45      n[        UU-
  U-  UU-
  U-  4U* U-
  U-  U* U-
  U-  45      S-  nUS:X  a  US:  a  US-  nOUS:X  a  US:  a  US-  nUUXgU* U* 4$ )z~
See http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes F.6.5
note that we reduce phi to zero outside this routine
      ?r   r   g|۽)r   r   ih  )r	   r   r   r   r   rh   )x1y1x2y2fAfSrxryphiphi_radsin_phicos_phitxtyx1dy1drrrcxdcydcxcytheta1dthetas                           r+   end_point_to_center_parametersr   m   sY   
 
bB	bB #,g,g,BG_BG_lW\)lW\)RWoRWo, 		RW	RW 55A1u!W
b
bI!CI$99EAI	
aEAI~A~QA	xBr6C<2
CFSL/B
C s]Ws]*SBG_<s]Ws]*SBG_<3"'?"3"'?" &C#I#3cCi25E"FGF
)r	C#I+,$*	cTCZ2-. 	F 
Qw6A:#	qVaZ#r2F7VG++rY   c                 V   [        U5      S::  a  SnUnO[        [        U5      S-  5      nXV-  nUS:X  a  / $ [        U5      nUS-  n	[        SS[        U	5      -
  -  [	        U	5      -  5      n
US:  a  U
* n
/ n[        U5      nX-   n[        U5      n[	        U5      n[        U5       H|  nUnUnUUU-  -   n[        U5      n[	        U5      nUR                  XU-  -   XU-  -
  XUU
U-  -
  -  -   XUU
U-  -   -  -
  XXU-  -   -  -   XXU-  -
  -  -
  XU-  -   XU-  -
  45        M~     U$ )NZ   r   r   rj   gUUUUUU?)absr   r   r   r   r!   append)r   r   rq   rr   	start_angextentnfrag
frag_anglefrag_radhalf_radkappa
point_listr   	start_radr`   s1r*   r_   s0s                      r+   bezier_arc_from_centrer      sg   
6{b
S[2%&^
Q	z"H#~HS]*+c(m;<EA~JYF!I	VB	VB5\Q\)[[2R<Bw,R%"*_55R%"*_55R"*_55R"*_55Bw,Bw,( 	)  rY   c	           
         X:X  a  X:X  a  / $ U(       a  [        [        U* 5      [        U * U* 5      5      n	[        XU45      u  p[	        SSXXVX#5      u  pp#p[        XX#X5      n[        [        X5      [        U5      5      n	/ nU HR  u  ppxnnnnUR                  [        XU45      [        XU45      -   [        U	UU45      -   [        U	UU45      -   5        MT     U$ [	        XXxXVX#5      u  pp#p[        XX#X5      $ )Nr   )r   r   r   r   r   r   r   )rk   rl   rq   rr   rs   ro   rp   rm   rn   mxtx2ty2r   r   r   r   bpr)   x3y3x4y4s                         r+   bezier_arc_from_end_pointsr      s    
RX 	
 63$<B3!45!"2h/,Jq#BB-
)	 $BBIF9R$fSk2.0*BBBBJJr8,~br(/KKrB8,-/=b2r(/KL /1
 
,JBBB-
)	 &bbiHHrY   c                   <   ^  \ rS rSrSrSS\4U 4S jjrS rSrU =r	$ )r   i  zPath, from an svg path stringr   Nc                 f  > UR                  SS5      nUR                  SS5      n[        T)U ]  " S%S S UUUS.UD6  U(       d  g [        U5      nU R                  n	/ n
/ nSnS n[        S[        U5      S5       GHL  nXUS-    u  nnUS;   aA  US:  a;  U R                  S   [        :w  a$  U
R                  [        U R                  5      5        US	:X  a  U R                  " U6   U	S
S  nGOUS:X  a  U R                  " U6   GOUS:X  a\  [        U	5      S:  a7  US;   a  UnOU	S
S  nUS   US   -   US   US   -   nnU R                  UU5        OU R                  " U6   U	S
S  nGOXUS:X  a*  U	S
   US   -   U	S   US   -   nnU R                  UU5        GO(US:X  a  U R                  US   U	S   5        GOUS:X  a  U R                  U	S
   US   5        GOUS:X  a   U R                  U	S
   US   -   U	S   5        GOUS:X  a   U R                  U	S
   U	S   US   -   5        GOUS:X  a  U R                  " U6   GOUS:X  a\  Uu  nnnn[        U	5      S:  d  US;  a  U	S
S  S-  u  nnnnO
U	SS  u  nnnnUUU-
  -   UUU-
  -   nnU R                  UUUUUU5        GO#US:X  a;  U	S
S  u  nnUu  nnnnnnU R                  UU-   UU-   UU-   UU-   UU-   UU-   5        GOUS:X  ah  Uu  nnnn[        U	5      S:  d  US;  a  U	S
S  S-  u  nnnnO
U	SS  u  nnnnUUU-
  -   UUU-
  -   nnU R                  UUUU-   UU-   UU-   UU-   5        GOtUS:X  aO  U	S
S  u  nnUu  nnnnUU4n[        UU4UU4UU45      u  u  nnu  nnu  nnu  nnU R                  UUUUUU5        GOUS:X  an  Ub  Uu  nnOU	S
S  u  nnU	S
S  u  nnUUU-
  -   UUU-
  -   nnUU4nUu  nn[        UU4UU4UU45      u  u  nnu  nnu  nnu  nnU R                  UUUUUU5        GOUS:X  af  U	S
S  u  nnUu  nnnnUU-   UU-   UU-   UU-   4u  nnnnUU4n[        UU4UU4UU45      u  u  nnu  nnu  nnu  nnU R                  UUUUUU5        GO?US:X  aw  Ub  Uu  nnOU	S
S  u  nnU	S
S  u  nnUu  nnUU-   UU-   nnUUU-
  -   UUU-
  -   nnUU4n[        UU4UU4UU45      u  u  nnu  nnu  nnu  nnU R                  UUUUUU5        OUS;   a  Uu  nnn n!n"nnU	S
S  u  nnUS :X  a
  UU-  nUU-  n[        U5      S!::  d  [        U5      S!::  a  U R                  UU5        Oi[        UUUUU U!U"UU5	      n#U# H"  u    n$nnnnnnU R                  UUUUUU5        M$     O-US;   a  U R!                  5         O["        R%                  S"U5        US#;  a  S nUnGMO     U R                  S   [        :w  a$  U
R                  [        U R                  5      5        U(       d  U(       a  U R'                  5       n%U(       a1  U%S   U%S   -   n&[        S[        U	5      S5       H  nU&X   -
  X'   M     U(       a1  U%S$   U%S   -   n&[        S[        U	5      S5       H  nU&X   -
  X'   M     U
(       a  U R(                  b  [+        5       n'U'R,                  R/                  [0        R2                  " U R,                  5      5        [5        U
5       H#  n(U'R                  R7                  U([        5        M%     U'U l        S U l        g S U l        g )&Nvswapr   hswap)points	operators
isClipPath	autoclosefillModerM   r?   )r   r   re   r   rN   r   r   )rJ   rK   r   r   rC   rD   rE   rF   rG   rA   r<   >   rG   rA   rI   rB   rI   rB   r;   r>   r=   r@   )r8   r:   r:   g|=zSuspicious self operator: %s)r;   r=   r>   r@      r[   )popsuper__init__rX   r   r!   r"   r   r   r   moveTolineTocurveTorc   r   r   	closePathloggerdebug	getBounds	fillColorr   __dict__updatecopydeepcopyreversedinsert_SvgPath__closed_path)*selfrB   r   r   r   kwr   r   normPathr   unclosed_subpath_pointerssubpath_startlastoplast_quadratic_cpr*   r$   numsstarting_pointxnynrm   rn   xpypx0y0xiyirk   rl   rq   rr   rs   ro   rp   r   _br   closed_pathpointer	__class__s*                                            r+   r   SvgPath.__init__  sX   wq!wq! 	1#d#-"+!)		1 .0		1
 &%a($&! q#h-+A!A#HBZAEdnnR.@J.N)00T^^1DE SyT" &rssT" sv;!#+)6)/+A.a8.:KdSTg:UBKKB'KK& &rssd1g-vbzDG/CBB# sDGVBZ0sF2JQ0 sF2Ja0&*=sF2Jr
T!W(<= sd#s!%BBv;?f4H&H%+BC[1_NBB%+BC[NBBrBwrBwBRRR4 sB)-&BBBR"Wb2grBwRb"r'Rs!%BBv;?f4H&H%+BC[1_NBB%+BC[NBBrBwrBwBRR"Wb2grBwRH sB!%BB%'H!3RHr2hRQ 7R(2rHRhr2RRR4s$0.FB#BC[FBBrBwrBwB%'H!B3RHr2hRQ 7R(2rHRhr2RRR4 sB!%BB!#b"r'27BG!CBB%'H!3RHr2hRQ 7R(2rHRhr2RRR4s$0.FB#BC[FBBBb"r'BrBwrBwB%'H!3RHr2hRQ 7R(2rHRhr2RRR4 z!.2+BRRB9"HB"HBr7e#s2w%'7KKB'3BBCRQSUWXB8:41b"b"b"RRR< 9; z!  ;R@--$(!FQ ,T >>"+%,,S-@AE AaD1IqVQ/A !FIFI 0aD1IqVQ/A !FIFI 0 %)C &K  ''dmm(DE#$=>%%,,WjA ?!,D!DN!%DrY   c                     [        5       nU R                  R                  5       Ul        U?U R                  (       a8  [	        5       nUR                  U R                  5        UR                  U5        U$ U$ )N)r   r   r   r   r   add)r   pgs      r+   provideNodeSvgPath.provideNode  sZ    F]]'')
#AEE$$$%EE!HHHrY   )__closed_pathr   )
__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes____classcell__)r   s   @r+   r   r     s    '%&$ t&l
 
rY   r   )r   )r   r   )"r   __all__r   r   mathr   r   r   r   r   r	   r
   r   r   r   shapesr   r   r   r   r   r   r   r   r   r,   r6   rX   rc   rh   r   r   r   r   r[   rY   r+   <module>r      s_    4  T T T n n n 
/b
)L,\%NI>Bd8 BrY   