
    Xwg$W                    B   U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dl	Z	d dl
Z	d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlZ ej<                  e      Z  ejB                  d      Z" G d d      Z#dddwdZ$dxdZ%d Z&dddZ'e#dxd       Z(dxdZ)edz  Z*de+d<   dez  Z,de+d<   dddddddd d d!d!d"d"d#d#d$Z-d%e+d&<   d dd#d"d!d ddd'd(	Z.d%e+d)<   dZ/de+d*<   e#	 	 	 dy	 	 	 	 	 	 	 dzd+       Z0e#d,        Z1e#d-        Z2	 	 	 	 	 	 d{d.Z3e#d/        Z4d0 Z5d1 Z6eeeeed2Z7efd3Z8 ejB                  d4ejr                  ejt                  z        Z;i d5 ed6d7d8      d9 ed:d;d<      d= ed>d?d@      dA edBdCdD      dE edFdFdF      dG ed d@d@      dH edId@dJ      dK ed>d@d@      dL edMdNdO      dP edQdQdR      dS ed@dTdU      dV ed d d       dW ed@dCdX      dY ed d d@      dZ ed[d\d]      d^ ed_d`d`      da edbdcdd      i de ed6d7d8      df edgdgdg      dh edFdFdF      di ed d d       dj edkdldm      dn edgdgdg      do edId@d       dp edqdrds      dt ed@dIdu      dv edwdxdy      dz ed@d?dR      d{ edRd|d}      d~ ed d@d@      d ed d d      d ed dd      d edcdd      d eddd      i d ed dwd       d eddd      d eddd      d edd d      d eddd      d ed@dd       d eddd      d edd d       d eddd      d eddd      d eddd      d eddd      d eddd      d ed dd      d edd d      d ed@d|d      d ed dd@      i d edrdrdr      d edrdrdr      d edsdd@      d eddd      d ed@dBd>      d eddd      d ed@d d@      d edRdRdR      d ed?d?d@      d ed@dDd       d edd_d      d eddd      d edFdFdF      d ed dd       d edd@d      d eddd      d ed:d;d<      i d edgdgdg      d ed>d@d>      d ed@drdʫ      d ed6d7d8      d edFdFdF      d ed6d7d8      d edXddϫ      d edd dҫ      d edgdgdԫ      d ed d d       d ed@d@d>      d ed>dd      d edddB      d ed@d>dQ      d eddd       d ed@dBdX      d edddث      i d ed>dd      d edd@d@      d edBdBdq      d eddd      d eddd      d eddd      d ed@dd      d ed@dmd      d eddd      d eddddB      d eddd      d eddd      d eddUdb      d ed@d@d      d ed d@d       d eddXd      d edBd>dث      i d ed@d d@      d edd d       d eddXd      d ed d dX      d ed dd      d eddd      d ed}dd      d edd	d      d
 ed dBd      d eddd      d eddd      d ed6d7d8      d ed d d       d eddd      d edQd@dB      d ed@dTd      d ed@dTd      i d ed@dbdī      d ed d d      d eddQdث      d eddd       d edd d!      d" ed@d_d       d# ed@d$d       d% eddd&      d' edd(d      d) ed*d+d*      d, ed-dd      d. eddd      d/ ed@d0d1      d2 ed@dd3      d4 edXdd5      d6 ed@d7d8      d9 ed:dmd:      i d; edddث      d< edd d      d= ed@d d       d> eddd      d? ed@drd      dA edd$dB      dC edBddD      dE edFdGdH      dI ed6d7d8      dJ edKddL      dM ed@dQd      dN edmdOdP      dQ ed7d7d7      dR eddddC      dS edTdUdX      dV eddd      dW eddd      i dX ed@dBdB      dY ed d@dI      dZ ed[ddʫ      d\ edqdd      d] ed dd      d^ eddd      d_ ed`d`d`      da ed6d7d8      db edgdgdg      dc ed6d7d8      dd edFdFdF      de ed@dfdg      dh ediddj      dk eddd      dl edQdbd      dm ed@d@d@      dn edQdQdQ       edgdgdg       ed d d        ed d d        ed@d@d        eddXd      doZ<dp Z=dq Z>dr Z?ds Z@dt ZA G du dveB      ZCy(|      )annotationsN)copy)Any)get_display)ColortoColor)	TA_CENTER
TA_JUSTIFYTA_LEFTTA_RIGHT)cminch)
pdfmetrics)UnicodeCIDFontzS^.*?rgb[a]?[(]([0-9]+).*?([0-9]+).*?([0-9]+)(?:.*?(?:[01]\.(?:[0-9]+)))?[)].*?[ ]*$c                      e Zd ZdZddZd Zy)Memoizeda  
    A kwargs-aware memoizer, better than the one in python :).

    Don't pass in too large kwargs, since this turns them into a tuple of
    tuples. Also, avoid mutable types (as usual for memoizers)

    What this does is to create a dictionnary of {(*parameters):return value},
    and uses it as a cache for subsequent calls to the same method.
    It is especially useful for functions that don't rely on external variables
    and that are called often. It's a perfect match for our getSize etc...
    c                    i | _         || _        | j                  j                  | _        | j                  j                  | _        y N)cachefunc__doc____name__)selfr   s     E/var/www/horilla/myenv/lib/python3.12/site-packages/xhtml2pdf/util.py__init__zMemoized.__init__:   s2    
	yy((		**    c                    t        |j                               }||f}	 || j                  vr! | j                  |i |}|| j                  |<   | j                  |   S # t        $ r  | j                  |i |cY S w xY wr   )tupleitemsr   r   	TypeError)r   argskwargs	args_pluskeyress         r   __call__zMemoized.__call__@   s     &,,.)	Y	.$**$dii00"%

3::c?" 	.499d-f--	.s   =A A;:A;N)returnNone)r   
__module____qualname__r   r   r&    r   r   r   r   -   s    
+.r   r   T)
cast_tuplec               `    |rt         t        fnt         f}t        | |      rt        |       S | gS r   )listr   
isinstance)valuer,   clss      r   toListr2   O   s+    -7T5MdWC$UC04;=ug=r   c                    |}|D ]I  \  }}|}|g }nt        |t              s|g}||v s%|j                  d||          t        | | ||        K y)a&  
    Allows to apply one function to set of keys cheching if key is in container,
    also trasform ccs key to report lab keys.

    extras = Are extra params for func, it will be call like func(*[param1, param2])

    obj = frag
    keys = [(reportlab, css), ... ]
    container = cssAttr
    Nr   )r/   r.   insertsetattr)objkeys	containerr   extrascpextrasreportlab_keycsss           r   transform_attrsr=   T   sg     H" 7s>FFD)XF)MM!Ys^,Cf67r   c                    |D ]D  }t        ||      rt        ||      nd}|t        |t              r	||v r||   }t	        | ||       F y)zs
    Allows copy a list of attributes from object2 to object1.
    Useful for copy ccs attributes to fragment.
    N)hasattrgetattrr/   dictr5   )obj1obj2attrsattrr0   s        r   
copy_attrsrF   l   sS    
  #'.tT':d#=Zd3JEdE"	#r   F)do_copyc               F    |D ]  }|rt        |      }t        | ||        y)z2Allows set the same value to a list of attributes.N)r   r5   )r6   rD   r0   rG   rE   s        r   	set_valuerI   x   s)     "KET5!"r   c                   | yt        | t              r| S t        |       j                         j	                         } | dv r|S | t
        v r	t
        |    S | j                  d      r5t        |       dk(  r'd| d   z   | d   z   | d   z   | d   z   | d   z   | d   z   } nQt        j                  |       r;d t        j                  |       j                         D        \  }}}d|d	|d	|d	} n	 t        | |      S )
z[
    Convert to color value.
    This returns a Color object instance from a text bit.
    N>   nonetransparent#            c              3  2   K   | ]  }t        |        y wr   )int).0xs     r   	<genexpr>zgetColor.<locals>.<genexpr>   s     Aa3q6A   02x)r/   r   strstriplowerCOLOR_BY_NAME
startswithlenrgb_researchgroupsr   )r0   defaultrgbs        r   getColorrf      s    }%J$$&E''U##UqeAhq)E!H4uQx?%(JUSTXU	u	A6==#7#>#>#@A1aAc71S'!C) 	5'""r   c                D    | rt        |       j                         dvr| S |S )N)rK   hiddenrY   r[   r0   rb   s     r   getBorderStylerk      s$    #e*""$,>>Nr   g      $@floatMMgUUUUUU?DPI96g      ?g      ?g      ?g      ?g      ?g      ?       @)1zxx-smallzx-small2small3medium4large5zx-large6zxx-large7z	xxx-largezdict[str, float]ABSOLUTE_SIZE_TABLEg      ?)	largersmallerz+4z+3z+2z+1z-1z-2z-3RELATIVE_SIZE_TABLEMIN_FONT_SIZEc                *   	 | }| |S t        | t              r| S t        | t              rt        |       S t        | t        t        f      rdj                  |       } t        |       j                         j                         j                  dd      } | j                  d      r#t        | dd j                               t        z  S | j                  d      r#t        | dd j                               t        z  S | j                  d      r#t        | dd j                               t        z  S | j                  d	      rt        | dd j                               S | j                  d
      rt        | dd j                               dz  S | j                  d      r#t        | dd j                               t        z  S | dv ry|rd| j                  d      rt        | dd j                               |z  S | j                  d      rt        | dd j                               |z  S | j                  d      r"t        | dd j                               |dz  z  S | j                  d      r"|t        | dd j                               z  dz  S | dv r|S | t        v r6|rt!        t"        |t        |    z        S t!        t"        |t        |    z        S | t$        v r6|rt!        t"        |t$        |    z        S t!        t"        |t$        |    z        S t!        t"        |t        |       z        S 	 t        |       } t!        d|       S # t&        $ r t(        j+                  d|        |cY S w xY w# t,        $ r t(        j+                  d|d       |cY S w xY w)a  
    Converts strings to standard sizes.
    That is the function taking a string of CSS size ('12pt', '1cm' and so on)
    and converts it into a float in a standard unit (in our case, points).

    >>> getSize('12pt')
    12.0
    >>> getSize('1cm')
    28.346456692913385
    N ,.r   mminptpcg      (@px)rK   0z0.0auto        rememexro   %g      Y@>   normalinheritzgetSize: Not a float %rr   zgetSize %r %rT)exc_info)r/   rl   rS   r   r.   joinrY   rZ   r[   replaceendswithr   rm   r   rn   r}   maxr~   rz   
ValueErrorlogwarning	Exception)r0   relativebaserb   originals        r   getSizer      sE   ";=OeU#LeS!<eeT]+GGENEE
  "((*223<>>$s))+,r11>>$s))+,r11>>$s))+,t33>>$s))+,,>>$s))+,t33>>$ s))+,u4400~~e$U3BZ--/08;;~~d#U3BZ--/08;;~~d#U3BZ--/0HsNCC~~c" 5s)9)9);#<<EE--++}d5H5O.OPP=(5H5O*OPP++}d5H5O.OPP=(5H5O*OPP}hu&=>>	%LE 1e}  	KK159N	  OXx$Gs   M+ M+ M+ BM+ 3M+ ;3M+ /,M+ /M+ 3M+  M+ 2M+ 8/M+ (2M+ 2M+ M+ #M+ 8M+ #M+ 6M+ M+ -M 8M+ !M(%M+ 'M((M+ +$NNc                    |\  }}| dk  r|| z   } |dk  r||z   }|(|&|dk  r|| z
  |z   }|dk  r||z
  |z   }| ||z
  |z
  ||fS | ||z
  fS )z
    As a stupid programmer I like to use the upper left
    corner of the document as the 0,0 coords therefore
    we need to do some fancy calculations.
    r   r+   )rU   ywhpagesizeaxays          r   	getCoordsr     s     FB1uF1uF}6Q
A6Q
A26A:1$$rAv;r   c                    t        |       j                         } t        |       dk7  rd}t        |      d | D        \  }}}}t	        |||||      S )z
    Parse sizes by corners in the form:
    <X-Left> <Y-Upper> <Width> <Height>
    The last to values with negative values are interpreted as offsets form
    the right and lower border.
    rN   zbox not defined right wayc              3  2   K   | ]  }t        |        y wr   r   rT   poss     r   rV   zgetBox.<locals>.<genexpr>7  s     .3'#,.rW   rY   splitr^   RuntimeErrorr   )boxr   msgrU   r   r   r   s          r   getBoxr   +  sT     c(..
C
3x1})3.#.JAq!QQ1a**r   c                   | j                  dg       }t        |      dk(  r6t        |d         t        |d         t        |d         t        |d         fS t        | j                  dd            }t        | j                  dd            }t        | j                  d	d            }t        | j                  d
d            }d| v rCt        | d         }d| v rt        | d         }|||z   z
  }nd	| v rt        | d	         }|||z   z
  }d| v rCt        | d         }	d| v rt        | d         }|||	z   z
  }nd
| v rt        | d
         }|||	z   z
  }|t        | j                  dd            z  }|t        | j                  dd            z  }|t        | j                  dd            z  }|t        | j                  dd            z  }|||z   z
  }	|||z   z
  }|||	|fS )zk
    Calculate dimensions of a frame.

    Returns left, top, width and height of the frame in points.
    z-pdf-frame-boxrN   r   rO   rP   rQ   topleftbottomrightheightwidthz
margin-topzmargin-leftzmargin-bottomzmargin-right)getr^   r   )
data
page_widthpage_heightr   r   r   r   r   r   r   s
             r   getFrameDimensionsr   ;  s    ((#R
(C
3x1}AQ'#a&/73q6?SS
$((5!$
%C488FA&'DTXXh*+FDHHWa()E4h(D=$u+&C C&L1FT(^,F&1C$W&T>4<(D$,/E_DM*E/D7488L!,--CGDHH]A.//D
gdhh233F	WTXXna011E$,'EC&L)FeV##r   c                    t        |       j                         } t        |       dk7  rd}t        |      d | D        \  }}t	        ||dd|      S )zPair of coordinates.rP   zposition not defined right wayc              3  2   K   | ]  }t        |        y wr   r   r   s     r   rV   zgetPos.<locals>.<genexpr>k  s     -SGCL-rW   Nr   )positionr   r   rU   r   s        r   getPosr   d  sS     8}""$H
8}.3-H-DAqQ4x00r   c                8    t        |       j                         dv S )zIs it a boolean?.)r   yesrp   trueri   ss    r   getBoolr   o  s    q6<<>666r   c                v    t        j                  t              5  t        |       cd d d        S # 1 sw Y   y xY wr   )
contextlibsuppressr   rl   r   s    r   getFloatr   t  s,    			Y	' Qx  s   /8)r   centermiddler   justifyc                \    t         j                  t        |       j                         |      S r   )
ALIGNMENTSr   rY   r[   rj   s     r   getAlignr     s     >>#e***,g66r   z2^data:(?P<mime>[a-z]+/[a-z]+);base64,(?P<data>.*)$activeborder         activecaption
   $   j   	alicebluegx!?gy=?rO   antiquewhiteg/R(__?g<E~}?g!r?appworkspace   aqua
aquamarineg{H?gฌ?azure
background:   n      beigeg]P?g]3f?bisquegJzZ?gRz?blackblanchedalmondg Q?blue
bluevioletg)TPQ?g}͑?gec]\?browngr?g<?	burlywoodgH]?gk?gCo?
buttonfacebuttonhighlight   buttonshadow
buttontext	cadetblueg?g
(?g?captiontext
chartreuse	chocolategI}YZ?g([Z?gx!?coralg?cornflowerblueg.py?g	F?gQ<?cornsilkcrimsongv?gx!?cyandarkblueg%c\qq?darkcyandarkgoldenrodgT g?g#~?darkgrayg̒ 55?	darkgreendarkgrey	darkkhakig%?gRb?g<H?darkmagentadarkolivegreengF]kSU?g噗?
darkorangeg2d?
darkorchidg333333?gz?g?darkred
darksalmong46<=?g4?g?darkseagreeng׃I?g9̗?darkslateblueg[;Q?g%W@?darkslategrayg
(?darkslategreydarkturquoisegO)?gkGq::?
darkvioletgb[>?g!\zz?deeppinkgOsr?deepskyblueg?dimgraydimgrey
dodgerblueg[;Q?	firebrickg3UV?g =E?floralwhiteforestgreenfuchsia	gainsboro
ghostwhitegold	goldenrodgip[[?gj?grayg3ۃ?graytextgreengreenyellowgb?grey	highlighthighlighttexthoneydewhotpinkgٕ?inactiveborderinactivecaptioninactivecaptiontext	indianredgT:?indigog.M?gkzPP?infobackground   infotextivorykhakig P?lavenderlavenderblush	lawngreeng1w-!?gf?lemonchiffon	lightblueg	y?
lightcoral	lightcyang\T?lightgoldenrodyellow	lightgray
lightgreeng*?	lightgrey	lightpinkgͪ?g88?lightsalmonlightseagreeng]QJVU?lightskybluelightslategraygC?g	^?lightslategreylightsteelblueg~?lightyellowlime	limegreenlinenmagentamaroonmediumaquamarineg?
mediumbluemediumorchidg WW?mediumpurplegPl?g x|{?mediumseagreeng(Bvv?g~qJ[\?mediumslateblueg(?gù?mediumspringgreeng:TS?mediumturquoisemediumvioletredg?g<?gpx?menumenutextmidnightbluegz?	mintcream	mistyroseg/[<<?moccasingO=බ?navajowhitenavyoldlacegJo	?olive	olivedrabgAGZ?g2d?orange	orangeredg)TPQ?orchidg<H?palegoldenrodg8G?	palegreengͮ{+?g?paleturquoiseg.!?palevioletred
papayawhipg<f2?gp{?	peachpuffgf67?perugZ?pinkgA)Z?g3xy?plumg÷n?
powderbluepurplered	rosybrown	royalbluegkzPP?saddlebrowng9]?salmongJzZ?
sandybrowngx'?g%?gX9?	scrollbarseagreengT:?g?seashellsiennag<$?g
?silverskyblue	slatebluegps?gٕ?	slategray	slategreysnowspringgreen	steelblueg2d?tantealthistlethreeddarkshadow@   
threedfacethreedhighlightthreedlightshadowthreedshadowtomatogbg
?g*SA?	turquoisegj?gù?violetwheatwhite
whitesmoke)windowwindowframe
windowtextyellowyellowgreenc                 N   g } g }t        t        j                  j                  j                        }|j                         }|D ]2  }|j                  |       | j                  |j                                4 t        t        |             D ci c]  }| |   ||    c}S c c}w r   )
r   	reportlabpdfbase_cidfontdatadefaultUnicodeEncodingsr7   appendr[   ranger^   )lower_font_listupper_font_list	font_dictfontsfontis         r   get_default_asian_fontr  =  s    OOY&&33KKLINNE -t$tzz|,- =B#oBV<WXqOA 22XXXs   B"c                    t        t        j                  j                  j                        }|j                         }| |v rt        j                  t        |              y y r   )	r   r  r  r  r  r7   r   registerFontr   )fontnamer  r  s      r   set_asian_fontsr  J  sJ    Y&&33KKLINNE5x 89 r   c                D    t         j                  j                  }| |v r| S y r   )	xhtml2pdfrb   DEFAULT_LANGUAGE_LIST)nameasian_language_lists     r   detect_languager  Q  s%    #++AA""r   c                ^    t        |      dv r t        j                  |       }t        |      S y )N)arabichebrewpersianurdupashtosindhi)r  arabic_reshaperreshaper   )textlanguagears      r   arabic_formatr  X  s5     x  %  $$T*2r   c                `    t        | d      r"| j                  d      }t        ||      }|r|S y y )Nr  )r?   __getattribute__r  )context	frag_textr  detect_language_results       r   frag_text_language_checkr  i  s8    w
#++J7!.y(!C!))r   c                      e Zd Zy)ImageWarningN)r   r)   r*   r+   r   r   r  r  s  s    r   r  )r0   r   r,   boolr'   r.   r   )r   Nr   )r0   zstr | float | list | tupler   z
int | Nonerb   rl   r'   rl   )r   rl   r   rl   r'   z!tuple[float, float, float, float])D
__future__r   r   loggingrer   typingr   r  r  reportlab.pdfbase._cidfontdatabidi.algorithmr   reportlab.lib.colorsr   r   reportlab.lib.enumsr	   r
   r   r   reportlab.lib.unitsr   r   reportlab.pdfbaser   reportlab.pdfbase.cidfontsr   xhtml2pdf.defaultr  	getLoggerr   r   compiler_   r   r2   r=   rF   rI   rf   rk   rm   __annotations__rn   rz   r}   r~   r   r   r   r   r   r   r   r   r   MDOTALL_rx_dataurir\   r  r  r  r  r  r   r  r+   r   r   <module>r     sB   #   	     % & / H H ( ( 5 g!	Z
. .D .2 >
70	# -2 " 
# 
#6 IE D u   
						) % & 







) % 
 u  
 	K%K K 	K
 K 
K\ 
 
* 
+ 
+&$&$*/&$&&$R 
1 
17
 
 $ 7 bjj8"$$:JpE#sC(pU2r3'p x1-p E(Hh7	p
 E#sC(p E!QNp %!X.p U8Q"p %C%p U8Xx0p eAx*p U1a^p eAx2p E!QNp %(H5p  U8Xx0!p" x84#p$ %S#&%p& uS#s+'p( E#sC()p* %1a.+p, x84-p. 5c3'/p0 %!Q'1p2 x843p4 U1h)5p6 eHh97p8 a8,9p: uXx2;p< E!QN=p> aH%?p@ a8,ApB U8Wh7CpD h(3EpF q(A&GpH h(3IpJ x84KpL 51h/MpN eHh9OpP %7A&QpR %Xs+SpT uXq!$UpV %(H5WpX E(Hh7YpZ U8Xx8[p\ U8Xx8]p^ U8Xx8_p` U1h1apb %!X.cpd a8,epf 5GQ'gph uXx2ipj uXx2kpl %(A.mpn x84opp 5Hh/qpr 58X6spt uQ1~upv x84wpx %(A.ypz E!Xq!{p| x73}p~ E(Hh/p@ c3$ApB U1h"CpD 51h/EpF E(Hh/GpH r2s#IpJ U3S)KpL h8,MpN uQ(+OpP eCc*QpR uS#s+SpT 5c3/UpV x84WpX eHa*YpZ eCc*[p\ aA]p^ U1a"_p` U8Xw/apb h(3cpd U1h1epf x1-gph E!Xx0ipj x84kpl %(H5mpn xA&opp E(Hh?qpr x84spt %(H5upv x84wpx q(H-ypz 5Hh/{p| U7Hh7}p~ E(Hh7p@ eHh4ApB eHh4CpD eHh9EpF 5Ax(GpH E!QNIpJ x84KpL U8Xx0MpN uQ1~OpP eHa#QpR c8X6SpT %1h'UpV E(Hh7WpX E(Hh7YpZ eHh9[p\ uXx:]p^ q(H5_p` uXx5apb uXx:cpd E#sC epf aAgph E(Hh7ipj xH-kpl q(H-mpn a8,opp 5Hh/qpr E!Q!spt uXx2upv U8Xq)wpx x84ypz eAx#{p| q(A&}p~ eHh1p@ U8Xx8ApB x84CpD U8Xx8EpF U8Xx8GpH %8X.IpJ q(G,KpL E(Hh/MpN E!Xx(OpP E(Hh/QpR %(H5SpT eHa*UpV 
5Aq>WpX x84YpZ x84[p\ 58W5]p^ eHh1_p` %(H5apb sC%cpd h(3epf a8,gph eHh1ipj eHh1kpl uXx2mpn x84opp x84qpr x84spt E!Xx(upv 5Ax(wpx w(3ypz 
58W-{p| E!Xx(}p~ uXw1p@ b"b)ApB %S#&CpD uS#s+EpF sC-GpH E#sC(IpJ eAx*KpL w(3MpN eHh1OpP U8Xx0QpR U1a^SpT %(H5UpV Cc"Aq>1a.Aq!n8X6_pf
Y:"	9 	r   