
    Kwg>                         d Z dZddlZddl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mZmZmZmZmZmZmZmZ d Zd Zd	 Zd
 Zd ZddZddZd Z  G d dee      Z!y)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                     t        j                  d|      D cg c]  }|st        |       }}g }t        dt	        |      |      D ]-  }|dkD  r| dv r	| dk(  rdnd} |j                  | ||||z    g       / |S c c}w )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          Q/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/svgpath.pysplit_floatsr,      s     %'JJ/PRW$X`S\_eCj`F`
C1c&k7+ 0q5R:%c	sB

BqW-./0 J as
   A:A:c           
         d}d}dj                  |||||||g      dz   }g }t        j                  ||j                               D ]:  }|j	                  | |j                         D cg c]  }t        |       c}g       < |S c c}w )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~~(Hgw( 	H C{{8U[[]3 ?

Bszz|<s<=>?J =s   'Bc                 b   i ddddddddddd	dd
ddddddddddddddddddddddddd}|j                         }g }t        j                  d| j                         t        j                        }d}|D ]  }|j                         dk(  r||v r9|dk(  r||k(  rd}n|dk(  r||k(  rd}n|}||   dk(  s@|j                  |g g       T|j                         dk(  r|j                  t        ||             n|j                  t        |||   |             |d   } |S )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7? s{trz2w!|r2h'xxzS .r489l2s2w=>B'* M    c                     | }| d   d|d   | d   z
  z  z   | d   d|d   | d   z
  z  z   f}|d   d|d   | d   z
  z  z   |d   d|d   | d   z
  z  z   f}|}||||fS )zM
    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r2r>rY   c                     t        |  t        | z  }|dk(  ry| d   |d   z  | d   |d   z  z   |z  }|dk  rd}n|dkD  rd}| d   |d   z  | d   |d   z  z
  }t        t        t        |      |            S )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	                 t   t        |      }t        |      }|rHt        |      }	t        |	      }
t        |	      }d| |z
  z  }d||z
  z  }||z  |
|z  z
  }|
|z  ||z  z   }nd| |z
  z  }d||z
  z  }||z  ||z  z  ||z  ||z  z  z   }|dkD  r5t	        |      }||z  }||z  }||z  ||z  z  ||z  ||z  z  z   }d|z  dz
  }n|dk7  rd|z  dz
  }d|cxk  rdk  rn nd}t	        |      }||k(  r| }||z  |z  |z  }||z  |z   |z  }|r)|z  
|z  z
  d| |z   z  z   }|
|z  ||z  z   d||z   z  z   }n|d| |z   z  z   }|d||z   z  z   }t        d||z
  |z  ||z
  |z  f      }t        ||z
  |z  ||z
  |z  f| |z
  |z  | |z
  |z  f      dz  }|dk(  r|dkD  r|dz  }n|dk(  r
|dk  r|dz  }||||| | fS )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   s   
 
bB	bB #,g,g,BG_BG_lWr\)lWr\)R"WoR"Wo, 	c	R"Wc	R"W 55A1u!W
b
b#Ib!C#Ib$99EAI	
aEAI~A~QA	RxBr6C<2
CFSL/B
C s]Ws]*SBG_<s]Ws]*SBG_<3"r'?"3"r'?" &C#I#3cCi25E"FGF
)r	C#I+,$*	cTCZ2-. 	F 
Qw6A:#	qVaZ#r2rF7VG++rY   c                 d   t        |      dk  rd}|}nt        t        |      dz        }||z  }|dk(  rg S t        |      }|dz  }	t        ddt        |	      z
  z  t	        |	      z        }
|dk  r|
 }
g }t        |      }||z   }t        |      }t	        |      }t        |      D ]  }|}|}|||z  z   }t        |      }t	        |      }|j                  | ||z  z   |||z  z
  | |||
|z  z
  z  z   ||||
|z  z   z  z
  | |||
|z  z   z  z   ||||
|z  z
  z  z
  | ||z  z   |||z  z
  f        |S )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      s   
6{b
S[2%&e^
Q	z"H#~HS]*+c(m;<EA~JYF!I	VB	VB5\ )Q\)[[2R<rBw,rR%"*_55rR%"*_55rR%"*_55rR%"*_55rBw,rBw,( 	)) rY   c	           
      "   | |k(  r||k(  rg S |rt        t        |       t        |  |             }	t        |	||f      \  }
}t	        dd|
|||||      \  }}}}}}t        ||||||      }t        t        | |      t        |            }	g }|D ]U  \  } }}}}}}}|j                  t        |	| |f      t        |	||f      z   t        |	||f      z   t        |	||f      z          W |S t	        | |||||||      \  }}}}}}t        ||||||      S )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]   
bR2X 	
 63$<B3!45!"r2h/S,Jq#sBB-
)BB	6 $BBIvF9R$fSk2.0 	*BBBBJJrB8,~b2r(/KKrB8,-/=b2r(/KL	
 
,JBBB-
)BB	6 &b"b"iHHrY   c                   0     e Zd ZdZddef fd	Zd Z xZS )r   zPath, from an svg path stringr   Nc                    |j                  dd      }|j                  dd      }t        )|   d%d d |||d| |sy t        |      }| j                  }	g }
g }d}d }t        dt        |      d      D ]"  }|||dz    \  }}|dv r?|dkD  r:| j                  d   t        k7  r$|
j                  t        | j                               |d	k(  r | j                  |  |	d
d  }n|dk(  r | j                  |  n|dk(  rYt        |	      dk\  r5|dv r|}n|	d
d  }|d   |d   z   |d   |d   z   }}| j                  ||       n | j                  |  |	d
d  }n:|dk(  r*|	d
   |d   z   |	d   |d   z   }}| j                  ||       n|dk(  r| j                  |d   |	d          n|dk(  r| j                  |	d
   |d          n|dk(  r | j                  |	d
   |d   z   |	d          n|dk(  r | j                  |	d
   |	d   |d   z          n|dk(  r | j                  |  nm|dk(  rY|\  }}}}t        |	      dk  s|dvr|	d
d  dz  \  }}}}n
|	dd  \  }}}}|||z
  z   |||z
  z   }}| j                  ||||||       n|dk(  r;|	d
d  \  }}|\  }}}}}}| j                  ||z   ||z   ||z   ||z   ||z   ||z          n|dk(  re|\  }}}}t        |	      dk  s|dvr|	d
d  dz  \  }}}}n
|	dd  \  }}}}|||z
  z   |||z
  z   }}| j                  ||||z   ||z   ||z   ||z          ne|dk(  rO|	d
d  \  }}|\  }}}}||f}t        ||f||f||f      \  \  }}\  }}\  }}\  }}| j                  ||||||       n|dk(  rm||\  }}n|	d
d  \  }}|	d
d  \  }}|||z
  z   |||z
  z   }}||f}|\  }}t        ||f||f||f      \  \  }}\  }}\  }}\  }}| j                  ||||||       n|dk(  rf|	d
d  \  }}|\  }}}}||z   ||z   ||z   ||z   f\  }}}}||f}t        ||f||f||f      \  \  }}\  }}\  }}\  }}| j                  ||||||       n4|dk(  rv||\  }}n|	d
d  \  }}|	d
d  \  }}|\  }}||z   ||z   }}|||z
  z   |||z
  z   }}||f}t        ||f||f||f      \  \  }}\  }}\  }}\  }}| j                  ||||||       n|dv r|\  }}} }!}"}}|	d
d  \  }}|d k(  r
||z  }||z  }t        |      d!k  st        |      d!k  r| j                  ||       net        ||||| |!|"||	      }#|#D ]!  \  }$}$}}}}}}| j                  ||||||       # n+|dv r| j!                          nt"        j%                  d"|       |d#vrd }|}% | j                  d   t        k7  r$|
j                  t        | j                               |s|rv| j'                         }%|r1|%d   |%d   z   }&t        dt        |	      d      D ]  }|&|	|   z
  |	|<    |r1|%d$   |%d   z   }&t        dt        |	      d      D ]  }|&|	|   z
  |	|<    |
r| j(                  t+               }'|'j,                  j/                  t1        j2                  | j,                               t5        |
      D ]"  }(|'j                  j7                  |(t               $ |'| _        d | _        y d | _        y )&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   zSvgPath.__init__  s   wq!wq! 	1#d#-"+!)		1 .0		1
 &%a($&! q#h-+ 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'DKK& &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<= z!  ;R@--$(!FQH	T >>"+%,,S-@AE AaD1IqVQ/ .A !F1IF1I.aD1IqVQ/ .A !F1IF1I. %)C &K  ''dmm(DE#$=> B%%,,WjAB!,D!DN!%DrY   c                     t               }| j                  j                         |_        |`| j                  r8t	               }|j                  | j                         |j                  |       |S |S )N)r   r   r   r   r   add)r   pgs      r+   provideNodezSvgPath.provideNode  sZ    F]]'')
#AEE$$$%EE!HHHrY   )__name__
__module____qualname____doc__r   r   r   __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   