
    Kwg1                         d Z ddlmZmZ ddlmZmZmZ ddlm	Z	m
Z
mZmZ ddlmZ  G d de      Zd	 Zd
 Zd ZddZ e       j-                   e              dde	dddddfdZy))setFontpathNumTruncprocessGlyphtext2PathDescription	text2PathRenderPMError    )getFont
unicode2T1)open_and_readisBytesrl_exec   )_baseGFontName_PATH_OP_ARG_COUNT_PATH_OP_NAMES
definePath)exc_infoc                       e Zd Zy)r   N)__name__
__module____qualname__     O/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/utils.pyr   r      s    r   r   c                    t        t        t        t               d d             \  }}ddlm} |j                  dk\  rdd l}|j                  j                  |j                  j                  |j                        d      }t        d|d|j                  |             dD ]&  }t        d|d	t        t        ||                   ( d
t        |       dt        |      d|d|d	}|dz  }t!        |t#        t$                     y )N   r   )	rl_configfontsz!!!!! z: )T1SearchPathTTFSearchPathz!!!!! rl_config.z = z&raise RenderPMError("Error in setFont(,z$) missing the T1 files?\nOriginally z")z
 from None)r   )listmapstrr   	reportlabr   verboseospathjoindirname__file__printlistdirreprgetattrr   dictr   )fontNamefontSizes1s2r   r'   _codes           r   
_errorDumpr7      s    #c(*Ra.)*FB#!GGLL););<WE"**Q-011 	NAqgi6J1KLM	Nimnviwx|  ~F  yG  HJ  KM  NDLDDM23r   c                    	 | j                  ||       y # t        $ r}|j                  d   j                  d      st	        ||       ddlm} 	 t        |      } |||j                  j                         |j                  j                  t               n#  t	        ||       Y nxY w| j                  ||       Y d }~y d }~ww xY w)Nr   zCan't find font!)
makeT1Font)r   
ValueErrorargsendswithr7   _rl_renderPMr9   r	   face
findT1Fileencodingvectorr   )gsr1   r2   er9   fs         r   r   r      s    &


8H% 
&vvay!!"45x)+	*!Ax 1 1 3AJJ4E4EmT	*x)


8H%%
&s-    	C0C ABC B&$C  Cc                 L    t        |       | k(  rt        |       S t        | d      S )N   )intround)ns    r   r   r   -   s!    
1vqyQ-1:r   Nc           	         	
 ddl m}m}   }|dk(  r
|dk7  rdnd n||v r| nt        d|d       ft	         fd	|D              z   D ]r    dk(  r7	 dd l	dd l
 G 	
fd
d      ddt        ddddd ffd	}t        |      c S  dk(  sE	 dd l
}ddddt        ddddd ffd	}t        |t              c S  fd}t        ||||      S # t        $ r Y w xY w# t        $ r Y w xY w)Nr   )	textPathsrenderPMBackendbackend	rlPyCairofreetype	_renderPMz
textPaths=z7 should be one of 'backend', 'freetype' or '_renderPM')c              3   .   K   | ]  }|k7  s	|  y wNr   ).0r5   tps     r   	<genexpr>z(__makeTextPathsCode__.<locals>.<genexpr>;   s     0a!R%0s   
c                       e Zd ZW  j                  W  j                  z  W  j
                  z  Zd Z fdZdde	dfdZ
y))__makeTextPathsCode__.<locals>.FTTextPathc                     i | _         y rR   )faces)selfs    r   __init__z2__makeTextPathsCode__.<locals>.FTTextPath.__init__E   s	    !#DJr   c                    || j                   vrt        |      }|st        d|d      |j                  r(|j                  j
                  }j                  |      }n3t        |j                  dd       }|s|j                  j                         }j                  |      }||f| j                   |<   | j                   |   S )Nzfont z has not been registeredpfbFileName)
rY   r	   r:   _dynamicFontr>   	_ttf_dataBytesIOr/   r?   Face)rZ   r1   fontpath_or_streamr>   rO   ios        r   r   z1__makeTextPathsCode__.<locals>.FTTextPath.setFontH   s    tzz1&x0#",uXL@X-Y"ZZ,,-1YY-@-@N .0ZZ-GN-4TYY}T-RN#1151E1E1G'}}^<04T{

8,::h//r   r     c                 F   | j                  |      \  }}||j                  z  |z  |z  g g }	j                  |j                  dd      }
|
rfdfdnfdfdfd}fd}fd	}fd
}|dz  z  }| j                  }|D ]n  }|dk(  rd|z  |j                  ||       |j                  j                  j                  | ||||       |j                  j                  j                  z   p r d       S )Ntruncater   c                 &    t        | z   z        S rR   r   x__dx__scales    r   <lambda>zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>e       UAfH5E(F r   c                 &    t        | z   z        S rR   ri   y__dy__rm   s    r   rn   zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>f   ro   r   c                     | z   z  S rR   r   rj   s    r   rn   zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>h       q6z(: r   c                     | z   z  S rR   r   rq   s    r   rn   zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>i   ru   r   c                 p    r d        d | j                          | j                        f       y )N	closePathmoveTork   rr   )actxPP_appendxptypts     r   move_tozE__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.move_tok   s,    h~6 (3qss8CH!=>r   c                 \     d | j                          | j                        f       y )NlineTor{   )r|   r}   r   r   r   s     r   line_tozE__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.line_too   s"     (3qss8CH!=>r   c           	      R   	r	d   dd n| j                   | j                  f\  }} | j                         } | j                        } |j                         } |j                        } 
d|||z
  dz  dz  z   |||z
  dz  dz  z   |||z
  dz  z   |||z
  dz  z   ||f       y)zusing the cubic equivalentNcurveTor      r{   )r|   br}   x0y0x1y1x2y2r~   r   r   r   s            r   conic_tozF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.conic_tor   s    ./"bc
acc133Z2 X X X X )BB	1},<R"R%A=MbRTUWRWYZQZl[]_abd_dfg^g[ghjkm!nor   c                      d | j                          | j                         |j                          |j                         |j                          |j                        f       y )Nr   r{   )r|   r   cr}   r   r   r   s       r   cubic_tozF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.cubic_to{   sT     )CHSXc!##hs133xPSTUTWTWPXY\]^]`]`Ya!bcr   g333333?
)r   r   r   r   rx   )r   units_per_EMappendpopftLFlags	load_charglyphoutline	decomposemetricshoriAdvance)rZ   textrk   rr   r1   r2   kwdsr>   rb   Srg   r   r   r   r   
lineHeightr   r   r~   r   rl   rs   rm   r   r   s                     @@@@@@@r   
_text2Pathz4__makeTextPathsCode__.<locals>.FTTextPath._text2Path[   s0   !%h!7JD$$T%6%66EuWFuWFAA xxH#xx
15HFF::??pd "*#e!3J#}}H! Id7%&F"j0F$q(3

**44T7T[fn  zB4  C!'$***<*<*H*H!HI (>2Hr   N)r   r   r   FT_LOAD_DEFAULTFT_LOAD_NO_SCALEFT_LOAD_NO_BITMAPr   r[   r   r   r   )rO   rd   s   r   
FTTextPathrW   C   s@    #33h6O6OORZRlRll$0& ./!nW[ .r   r   re   startr   c	                    t        |      }	|	j                  r|	j                  st        d|z        g j                  }
|dk(  s%t        | ||      }|dk(  r||z
  }n|dk(  r||dz  z
  }|        }|	j                  r* |
|j                  | ||||||             |
j(                  S t        |       r	 | j                  d      } t        | |	g|	j                  z         }t        |      dz
  }t        |      D ]v  \  }\  }}t!        |t"              r|j                  |j$                        } |
|j                  ||||j&                  |||             ||k7  sb||j                  ||      z  }x |
j(                  S # t        $ ra}|j                  d	d
 \  }}t        |j                  dd
 |j                  d
   d| t        |dz
  d      | d| || d| ||dz    fz    d}~ww xY w)zfreetype text2PathDescription(text, x=0, y=0, fontName='fontname',
                                    fontSize=1000, font = 'fontName',
                                    anchor='start', truncate=1, pathReverse=0, gs=None)
                =text2PathDescription doesn't support multi byte fonts like %rr   endmiddle       @N)rk   rr   r1   r2   rg   pathReverseutf8r      r   
   r   --><--r   )r	   
_multiByter^   r:   extendstringWidthr   r   decodeUnicodeDecodeErrorr;   maxr
   substitutionFontslen	enumerate
isinstancebytesencNamer1   __self__)r   rk   rr   r1   r2   anchorrg   r   rB   rb   P_extendtextLenrC   ijFTnm1rD   tr   s                      r   r   z3__makeTextPathsCode__.<locals>.text2PathDescription   sQ    x(??4+<+<$%dgo%opp99w)$(CGu}gI)
N:#B$$R]]4!aS[fn  |G]  H  I  ((( t}S#';;v#6D $D$0F0F)FGBb'!)C%.r] <	6Aq%a.AHHQYY4G q1q!**V^iq  J  "K  Lc6q(!;;A	<
  (((  2 S"#&&1+CAa"4qvvbqzYZY_Y_`aYbcghklmnplpqrhstucvw{|}~  xA  BF  GH  IJ  KM  IM  BN  DO  CQ  8Q  #S  SSs   4E= =	G'AG""G')r   r   c           
         g }g }g j                   }| r(t        |       dk(  r| d   d   dk(  rd| d   dd  z   f| z   } | xs ddz   D ]  }|d   }|r|dv r|d   dk(  re|d= |r=|dd d	   |dd d	   c|dd d	<   |dd d	<   |j                          |j                          |j                  dd
       |j                  d       d}|rt	        t        t        |            }|D ];  }	|t        t        j                  |	         z   }
 ||	ft        |||
       z          |
}= g }g }|j                  |       |j                  |dd          |j                  S )Nr   r   r   )moveToClosedr   ))r   )rz   r   r   r   r   rz   ry   )r   r   reverseinsertr"   r#   r   r   r   indextupler   r   )Grg   r   Or~   R_appendgopr   or   s              r   r   z+__makeTextPathsCode__.<locals>.processGlyph   s   99QqtAw'8*1Q4835a7A'r;. $A1BR#CCQ4/ !!*23ADqD'!ADqD'!$Q$!$Q$ !		 !		HHQx0HH[1#c,q.A)BQ!" "A !$6~7K7KA7N$O OA$aT51Q=%89 !A" HHRLHHQqrUO)$*  (((r   c	                 2   t        |      }	|	j                  r|	j                  st        d|z        g j                  }
|dk(  s%t        | ||      }|dk(  r||z
  }n|dk(  r||dz  z
  }|ddlm}  |d	d	      }t        |||       |	j                  r5|j                  | ||      D ]  } |
 |||
              |
j*                  S t        |       r	 | j                  d      } |	}t        | |	g|	j                   z         }t#        |      d	z
  }t%        |      D ]  \  }\  }}||k7  rt        ||j&                  |       |}|j                  |||      D ]  } |
 |||
              ||k7  sV||j                  |j                  |j(                        |      z  } |
j*                  S # t        $ ra}|j                  dd \  }}t        |j                  dd |j                  d   d| t        |dz
  d      | d| || d| ||dz    fz    d}~ww xY w)z_renderPM text2PathDescription(text, x=0, y=0, fontName='fontname',
                                    fontSize=1000, font = 'fontName',
                                    anchor='start', truncate=1, pathReverse=0, gs=None)
                r   r   r   r   r   Nr   )gstater   )rg   r   r   r   r   r   r   r   r   )r	   r   r^   r:   r   r   r=   r   r   _stringPathr   r   r   r;   r   r
   r   r   r   r1   r   r   )r   rk   rr   r1   r2   r   rg   r   rB   rb   r   r   r   r   rC   r   r   fcr   r   rD   r   r   s                         r   r   z3__makeTextPathsCode__.<locals>.text2PathDescription   s|    x(??4+<+<$%dgo%opp99w)$(CGu}gI)
N:3!B8H-$$^^D15 \ ak!Z[\(  (((# t}S#';;v#6D B#D$0F0F)FGBb'!)C%.r] N	6Aqb5#Bqzz(;!"B!#!A!6 `A$\!XR]%^_`c6qxx		/BH!MMAN  (((  2 S"#&&1+CAa"4qvvbqzYZY_Y_`aYbcghklmnplpqrhstucvw{|}~  xA  BF  GH  IJ  KM  IM  BN  DO  CQ  8Q  #S  SSs   F, ,	H5AHH)r   r   r   c                       t        d      )NzThis installation of reportLab has neither PYCAIRO or RENDERPM extras installed.
It cannot create paths from text.
Could not create text2PathDescription for using backends from )RuntimeError)r;   r   TPs     r   r5   z __makeTextPathsCode__.<locals>._   s"     $??Af H I Ir   )r   r   r   r   )r   r   )reportlab.rl_configrK   rL   r:   r   rO   ImportErrorrd   r   r0   r=   r   )rT   _TPrK   rL   r   r=   r5   r   r   rO   rd   r   s   `      @@@@@r   __makeTextPathsCode__r   2   sG   >	~2y)*K7Z[	c	:i]2ijkk
0301	1B FRz> F FP ./!nW[/6PQVZ")F -AZXX_#): ./!nW[/6PQVZ))T -A|dkllAFRD	I 1qQQE  d  s$   CC*	C'&C'*	C65C6re   r   c	                 d    |	j                  dt              }
t         |
| ||||||||	      fi |	S )Nr   )rk   rr   r1   r2   r   rg   r   rB   )r   r   r   )r   rk   rr   r1   r2   r   rg   r   rB   r   t2pds              r   r   r     sI    88*+?@Dd4!a%VXR]bdf nhln nr   )N)rO   rP   )__all__reportlab.pdfbase.pdfmetricsr	   r
   reportlab.lib.utilsr   r   r   shapesr   r   r   r   sysr   	Exceptionr   r7   r   r   r   globalsupdater   r   r   r   <module>r      sq   
 = ? ? R R 	I 	4&
PRd 	  &( )1~dnr   