
    kf>                         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!dS )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                     d t          j        d|          D             }g }t          dt          |          |          D ]8}|dk    r| dv r
| dk    rdnd} |                    | ||||z            g           9|S )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]]
    c                 0    g | ]}|t          |          S  float).0seqs     Z/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/svgpath.py
<listcomp>z split_floats.<locals>.<listcomp>   s$    ```S\_`eCjj```    (-?\d*\.?\d*(?:[eE][+-]?\d+)?)r   >   Mmr$   lL)refindallrangelenextend)opmin_numvaluefloatsresis         r   split_floatsr2      s     a`BJ/PRW$X$X```F
C1c&kk7++ 0 0q55R:%%c		sB

BqW}-.////Jr!   c           	      
   d}d}d                     |||||||g          dz   }g }t          j        ||                                          D ]5}|                    | d |                                D             g           6|S )Nr"   z([1|0])z[\s,]*c                 ,    g | ]}t          |          S r   r   )r   nums     r   r    z$split_arc_values.<locals>.<listcomp>    s    <<<s<<<r!   )joinr'   finditerstripr+   groups)r,   r.   float_reflag_rea_seq_rer0   r   s          r   split_arc_valuesr=      s    0HG~~(Hgw(  	H C{8U[[]]33 ? ?

B<<szz||<<<=>>>>Jr!   c                    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}|                                 }g }t          j        d|                                 t          j                  }d}|D ]}|                                dk    r||v rD|dk    r	||k    rd}n|dk    r	||k    rd}n|}||         dk    r|                    |g g           c|                                dk    r$|                    t          ||                     n*|                    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'   splitr8   Ir+   lowerr=   r2   )attropsop_keysresultr9   r,   items          r   normalise_svg_pathr_   #   s   QQQQQ #Q(+Q03Q 	Q Q Q !$Q ),Q 14Q 	Q	 Q	 Q	 &'QQ	  C hhjjG FX&

BDAAAF	B  ::<<27?? s{{trzz2w!||r2h'''xxzzS  .r4889999l2s2w==>>>BBMr!   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?r   )q0q1q2c0c1c2c3s          r   convert_quadratic_to_cubic_pathrh   T   s     
B
Q%%2a52a5=)
)2a55BqEBqEM3J+J	KB
Q%%2a52a5=)
)2a55BqEBqEM3J+J	KB	Br2r>r!   c                 @   t          |  t          | z  }|dk    rdS | d         |d         z  | d         |d         z  z   |z  }|dk     rd}n|dk    rd}| d         |d         z  | d         |d         z  z
  }t          t          t          |          |                    S )Nr   r   )r
   r   r   r   )urM   drP   rI   s        r   vector_anglerm   a   s    q	E1IAAvvq	
1!qtad{	"a'A2vv	
Q	!qtadQqTk!A8DGGQ''(((r!   c	                    t          |          }t          |          }|rTt          |          }	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k    r9t	          |          }||z  }||z  }||z  ||z  z  ||z  ||z  z  z   }d|z  dz
  }n|dk    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k    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   rm   )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1uu!WW
b
b#Ib!C#Ib$99EAI	
aEAI~~~~A~~~~~QA	RxxBr6C<2
CFSL/B
C  #s]Ws]*SBG_<s]Ws]*SBG_<3"r'?"3"r'?" &C#I#3cCi25E"FGGF
)r	C#I+,$*	cTCZ2-.  	F 
Qww6A::#	qVaZZ#r2rF7VG++r!   Z   c                    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	          |          }|                    | ||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 )Nr   r   r   ro   gUUUUUU?)absr   r   r   r   r)   append)r   r   rv   rw   	start_angextentnfrag
frag_anglefrag_radhalf_radkappa
point_listr   	start_radre   s1r1   rd   s0s                      r   bezier_arc_from_centrer      s   
6{{b

S[[2%&&e^
Q	z""H#~HS]]*+c(mm;<<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,( 	) 	) 	) 	) r!   c	           
         | |k    r||k    rg S |rt          t          |           t          |  |                     }	t          |	||f          \  }
}t	          dd|
|||||          \  }}}}}}t          ||||||          }t          t          | |          t          |                    }	g }|D ]i\  } }}}}}}}|                    t          |	| |f          t          |	||f          z   t          |	||f          z   t          |	||f          z              j|S t	          | |||||||          \  }}}}}}t          ||||||          S )Nr   )r   r   r   r   r   r   r   )rp   rq   rv   rw   rx   rt   ru   rr   rs   mxtx2ty2r   r   r   r   bpr0   x3y3x4y4s                         r   bezier_arc_from_end_pointsr      s   
bR2XX 	
 I 63$<<B3!4!455!"r2h//S,Jq#sBB-
 -
)BB	6 $BBIvFF9R$$fSkk22.0 	 	*BBBBJJrB8,,~b2r(/K/KKrB8,,-/=b2r(/K/KL    
,JBBB-
 -
)BB	6 &b"b"iHHHr!   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                 (   |                     dd          }|                     dd          } t                      j        d%d d |||d| |sd S t          |          }| j        }	g }
g }d}d }t          dt          |          d          D ]}|||dz            \  }}|dv rC|dk    r=| j        d         t          k    r'|
	                    t          | j                             |d	k    r | j
        |  |	d
d          }n|dk    r | j        |  n|dk    rst          |	          dk    rJ|dv r|}n
|	d
d          }|d         |d         z   |d         |d         z   }}| 
                    ||           n
 | j
        |  |	d
d          }n|dk    r:|	d
         |d         z   |	d         |d         z   }}|                     ||           n|dk    r$|                     |d         |	d                    n|dk    r$|                     |	d
         |d                    n||dk    r-|                     |	d
         |d         z   |	d                    nI|dk    r-|                     |	d
         |	d         |d         z              n|dk    r | j        |  n|dk    rl|\  }}}}t          |	          dk     s|dvr|	d
d          dz  \  }}}}n|	dd          \  }}}}|||z
  z   |||z
  z   }}|                     ||||||           n|dk    rD|	d
d          \  }}|\  }}}}}}|                     ||z   ||z   ||z   ||z   ||z   ||z              nH|dk    rx|\  }}}}t          |	          dk     s|dvr|	d
d          dz  \  }}}}n|	dd          \  }}}}|||z
  z   |||z
  z   }}|                     ||||z   ||z   ||z   ||z              n|dk    r\|	d
d          \  }}|\  }}}}||f}t          ||f||f||f          \  \  }}\  }}\  }}\  }}|                     ||||||           nh|dk    r||\  }}n|	d
d          \  }}|	d
d          \  }}|||z
  z   |||z
  z   }}||f}|\  }}t          ||f||f||f          \  \  }}\  }}\  }}\  }}|                     ||||||           n|dk    rs|	d
d          \  }}|\  }}}}||z   ||z   ||z   ||z   f\  }}}}||f}t          ||f||f||f          \  \  }}\  }}\  }}\  }}|                     ||||||           nj|dk    r||\  }}n|	d
d          \  }}|	d
d          \  }}|\  }}||z   ||z   }}|||z
  z   |||z
  z   }}||f}t          ||f||f||f          \  \  }}\  }}\  }}\  }}|                     ||||||           n|dv r|\  }}} }!}"}}|	d
d          \  }}|d k    r
||z  }||z  }t          |          d!k    st          |          d!k    r|                     ||           ntt          ||||| |!|"||	  	        }#|#D ]%\  }$}$}}}}}}|                     ||||||           &n4|dv r|                                  nt"                              d"|           |d#vrd }|}| j        d         t          k    r'|
	                    t          | j                             |s|r|                                 }%|r@|%d         |%d         z   }&t          dt          |	          d          D ]}|&|	|         z
  |	|<   |r@|%d$         |%d         z   }&t          dt          |	          d          D ]}|&|	|         z
  |	|<   |
r| j        t+                      }'|'j                            t1          j        | j                             t5          |
          D ]"}(|'j                            |(t                     #|'| _        d | _        d S d | _        d S )&Nvswapr   hswap)points	operators
isClipPath	autoclosefillModerT   rF   )r$   r#   rj   r#   rU   r&   r$   )rQ   rR   r   r%   rJ   rK   rL   rM   rN   rH   rC   >   rN   rH   rP   rI   rP   rI   rB   rE   rD   rG   )r?   rA   rA   g|=zSuspicious self operator: %s)rB   rD   rE   rG      r   )popsuper__init__r_   r   r)   r*   r   r   r   moveTolineTocurveTorh   r   r   	closePathloggerdebug	getBounds	fillColorr   __dict__updatecopydeepcopyreversedinsert_SvgPath__closed_path)*selfrI   r   r   r   kwr   r   normPathr   unclosed_subpath_pointerssubpath_startlastoplast_quadratic_cpr1   r,   numsstarting_pointxnynrr   rs   xpypx0y0xiyirp   rq   rv   rw   rx   rt   ru   r   _br$   closed_pathpointer	__class__s*                                            r   r   zSvgPath.__init__  s(
   wq!!wq!! 	1#d#-"+!)		1 	1 .0		1 	1 	1
 &&%a(($&! q#h--++ H	 H	A!A#HBZAEEdnR.@J.N.N)00T^1D1DEEE SyyT"" &rsssT""" sv;;!##++)6)/+A.a8.:KdSTg:UBKKB''''DK&& &rsssd1g-vbzDG/CBB#### sDGVBZ0000sF2JQ0000 sF2Ja0&*====sF2Jr
T!W(<==== sd###s!%BBv;;??f4H&H&H%+BCC[1_NBB%+BCC[NBBrBwrBwBRRR4444 sB)-&BBBR"Wb2grBwRb"r'RRRRs!%BBv;;??f4H&H&H%+BCC[1_NBB%+BCC[NBBrBwrBwBRR"Wb2grBwRHHHH sB!%BB%'H!3RHr2hRQQ 7R(2rHRhr2RRR4444s$0.FB#BCC[FBBrBwrBwB%'H!B3RHr2hRQQ 7R(2rHRhr2RRR4444 sB!%BB!#b"r'27BG!CBB%'H!3RHr2hRQQ 7R(2rHRhr2RRR4444s$0.FB#BCC[FBBBb"r'BrBwrBwB%'H!3RHr2hRQQ 7R(2rHRhr2RRR4444 z!!.2+BRRB99"HB"HBr77e##s2ww%'7'7KKB''''3BBCRQSUWXXB8: = =41b"b"b"RRR<<<<= z!!     ;R@@@---$(!FF>"++%,,S-@-@AAA 		.E 		.  A .aD1IqVQ// . .A !F1IF1II .aD1IqVQ// . .A !F1IF1II$ 	&)C &&K ''dm(D(DEEE#$=>> B B%,,WjAAAA!,D!DNNN!%Dr!   c                     t                      }| j                                        |_        |`| j        r?t	                      }|                    | j                   |                    |           |S |S )N)r   r   r   r   r   add)r   pgs      r   provideNodezSvgPath.provideNode  sh    FF]''))
# 	AEE$$%%%EE!HHHHHr!   )__name__
__module____qualname____doc__r   r   r   __classcell__)r   s   @r   r   r     s`        ''%&$ t& t& t& t& t& t&l
 
 
 
 
 
 
r!   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   r2   r=   r_   rh   rm   r   r   r   r   r   r!   r   <module>r      sw   4 4  T T T T T T T T T T T T T T T T T T T T T T T T n n n n n n n n n n n n n n n n n n n n n n   
 
 
/ / /b  
) 
) 
)L, L, L, L,\% % % %NI I I>B B B B Bd8 B B B B Br!   