o
    >e$W                     @  s  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eZ e!dZ"G dd dZ#dddddZ$dddZ%dd Z&ddddZ'e#dd d!Z(dd"d#Z)ed$ Z*d%e+d&< d'e Z,d%e+d(< d)d)d)d*d*d+d+d,d,d-d-d.d.d/d/d0Z-d1e+d2< d,d*d/d.d-d,d*d)d3d4	Z.d1e+d5< d+Z/d%e+d6< e#	 		7ddd<d=Z0e#d>d? Z1e#d@dA Z2ddEdFZ3e#dGdH Z4dIdJ Z5dKdL Z6eeeeedMZ7efdNdOZ8e!dPej9ej:B Z;i dQedRdSdTdUedVdWdXdYedZd[d\d]ed^d_d`daedbdbdbdced d\d\ddeded\dfdgedZd\d\dhedidjdkdledmdmdndoed\dpdqdred d d dsed\d_dtdued d d\dvedwdxdydzed{d|d|d}ed~ddi dedRdSdTdeddddedbdbdbded d d deddddeddddeded\d dedddded\deddedddded\d[dndednddded d\d\ded d dded dddeddddedddi ded dd deddddeddddedd ddedddded\dd deddddedd d deddddeddddeddddeddddedddded ddÃdedd dƃded\ddȃded dd\i deddddeddddeddd\dedddуded\d^dZdedddуded\d d\dedndndnded[d[d\ded\d`d dedd{dڃdeddd܃dedbdbdbded dd dedd\ddeddd܃dedVdWdXi deddddedZd\dZded\dddedRdSdTdedbdbdbdedRdSdTdedtdddedd ddedddded d d ded\d\dZdedZdddeddd^ded\dZdmdeddd ded\d^dtdedddi dedZdd܃dedd\d\d ed^d^ddedddƃdedΐdd΃dedddƃded\ddded\ddd	eddАd
deddd^deddddeddddeddqd~ded\d\dded d\d deddtdded^dZdi ded\d d\dedd d deddtd
ded d dtdedddƃdedȐddd edd!d"d#ed$d%dd&ed d^d'd(edddd)ed*d+d,d-edRdSdTd.ed d d d/ed0d0dd1edmd\d^d2ed\dpd3d4ed\dpd5i d6ed\d~dd7ed d d܃d8ed9dmdd:eddd d;edd<d=d>ed\d{d d?ed\d@d dAedِddBdCeddDd
dEedFdGdFdHedIdddJedddȃdKed\dLdMdNed\dِdOdPedtd,dQdRed\dSdTdUedVddVi dWeddddXedd d܃dYed\d d dZedddd[ed\dd3d]edd@d^d_ed^dܐd`daedbdcdddeedRdSdTdfedgddhdied\dmddjeddkdldmedSdSdSdneddd_doedpdqdtdreddd΃dseddd΃i dted\d^d^dued d\dedvedwdddxeddddyed dd܃dzedddd{ed|d|d|d}edRdSdTd~eddddedRdSdTdedbdbdbded\dddeddddeddddedmd~d!ded\d\d\dedmdmdmeddded d d ed d d ed\d\d ed'dtddZ<dd Z=dd Z>dd Z?dd Z@dd ZAG dd deBZCdS (      )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                   @  s"   e Zd ZdZd	ddZdd ZdS )
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...
    returnNonec                 C  s$   i | _ || _| jj| _| jj| _d S N)cachefunc__doc____name__)selfr    r   O/var/www/html/humari/django-venv/lib/python3.10/site-packages/xhtml2pdf/util.py__init__:   s   
zMemoized.__init__c                 O  sh   t | }||f}z|| jvr| j|i |}|| j|< | j| W S  ty3   | j|i | Y S w r   )tupleitemsr   r   	TypeError)r   argskwargs	args_pluskeyresr   r   r   __call__@   s   

zMemoized.__call__N)r   r   )r   
__module____qualname__r   r   r$   r   r   r   r   r   -   s    
r   T)
cast_tuplevaluer   r'   boolr   listc                C  s*   |rt tfnt f}t| |rt | S | gS r   )r*   r   
isinstance)r(   r'   clsr   r   r   toListO   s   r-   c                 C  s`   |}|D ])\}}|}|du rg }nt |ts|g}||v r-|d||  t| |||  qdS )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cssr   r   r   transform_attrsT   s   
r7   c                 C  sT   |D ]%}t ||rt||nd}|du r!t|tr!||v r!|| }t| || qdS )zs
    Allows copy a list of attributes from object2 to object1.
    Useful for copy ccs attributes to fragment.
    N)hasattrgetattrr+   dictr/   )obj1obj2attrsattrr(   r   r   r   
copy_attrsl   s   r?   F)do_copyc                C  s&   |D ]}|r
t |}t| || qdS )z2Allows set the same value to a list of attributes.N)r   r/   )r0   r=   r(   r@   r>   r   r   r   	set_valuex   s
   rA   c                 C  s   | du rdS t | tr| S t|   } | dv r|S | tv r#t|  S | drIt| dkrId| d  | d  | d  | d  | d  | d  } n"t	| rjdd	 t	| 
 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                 s      | ]}t |V  qd S r   )int).0xr   r   r   	<genexpr>       zgetColor.<locals>.<genexpr>02x)r+   r   strstriplowerCOLOR_BY_NAME
startswithlenrgb_researchgroupsr   )r(   defaultrgbr   r   r   getColor   s    
6

r]   c                 C  s   | rt |  dvr| S |S )N)rB   hiddenrP   rR   r(   rY   r   r   r   getBorderStyle   s   ra   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_SIZE        str | float | list | tuplebase
int | NonerY   c              	   C  s  z\| }| du r|W S t | tr| W S t | trt| W S t | ttfr)d| } t|   	dd} | 
drGt| dd  t W S | 
drYt| dd  t W S | 
drkt| dd  t W S | 
d	r{t| dd  W S | 
d
rt| dd  d W S | 
drt| dd  t W S | dv rW dS |r>| 
drt| dd  | W S | 
drt| dd  | W S | 
drt| dd  |d  W S | 
dr|t| dd   d W S | dv r|W S | tv r|rtt|t|   W S tt|t|   W S | tv r4|r*tt|t|   W S tt|t|   W S tt|t|  W S zt| } W n tyW   td|  | Y W S w td| W S  tyr   tjd||dd | Y S 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)rB   0z0.0autoru   rememexre   %g      Y@>   normalinheritzgetSize: Not a float %rr   zgetSize %r %rT)exc_info)r+   rb   rJ   r   r*   joinrP   rQ   rR   replaceendswithr   rc   r   rd   rs   maxrt   rp   
ValueErrorlogwarning	Exception)r(   relativerw   rY   originalr   r   r   getSize   sp   
















r   c                 C  s   |\}}| dk r||  } |dk r|| }|dur:|dur:|dkr&||  | }|dkr0|| | }| || | ||fS | || 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   Nr   )rL   ywhpagesizeaxayr   r   r   	getCoords  s   r   c                 C  sJ   t |  } t| dkrd}t|d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.
    rE   zbox not defined right wayc                 s  rI   r   r   rK   posr   r   r   rM   7  rN   zgetBox.<locals>.<genexpr>rP   splitrU   RuntimeErrorr   )boxr   msgrL   r   r   r   r   r   r   getBox+  s   r   
page_widthpage_height!tuple[float, float, float, float]c           
      C  s  |  dg }t|dkr"t|d t|d t|d t|d fS t|  dd}t|  dd}t|  d	d}t|  d
d}d| v rmt| d }d| v r]t| d }|||  }nd	| v rmt| d	 }|||  }d| v rt| d }	d| v rt| d }|||	  }nd
| v rt| d
 }|||	  }|t|  dd7 }|t|  dd7 }|t|  dd7 }|t|  dd7 }|||  }	|||  }|||	|fS )zk
    Calculate dimensions of a frame.

    Returns left, top, width and height of the frame in points.
    z-pdf-frame-boxrE   r   rF   rG   rH   topleftbottomrightheightwidthz
margin-topzmargin-leftzmargin-bottomzmargin-right)getrU   r   )
datar   r   r   r   r   r   r   r   r   r   r   r   getFrameDimensions;  s<   ,r   c                 C  sF   t |  } t| dkrd}t|dd | D \}}t||dd|S )zPair of coordinates.rG   zposition not defined right wayc                 s  rI   r   r   r   r   r   r   rM   k  rN   zgetPos.<locals>.<genexpr>Nr   )positionr   r   rL   r   r   r   r   getPosd  s   r   c                 C  s   t |  dv S )zIs it a boolean?.)r   yesrf   truer_   sr   r   r   getBoolo  s   r   c                 C  s6   t t t| W  d    S 1 sw   Y  d S r   )
contextlibsuppressr   rb   r   r   r   r   getFloatt  s   $r   )r   centermiddler   justifyc                 C  s   t t|  |S r   )
ALIGNMENTSr   rP   rR   r`   r   r   r   getAlign  s   r   z2^data:(?P<mime>[a-z]+/[a-z]+);base64,(?P<data>.*)$activeborder         activecaption
   $   j   	alicebluegx!?gy=?rF   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                    s\   g  g t tjjj} |  }|D ]}|  |  q fddtt	 D S )Nc                   s   i | ]	} | | qS r   r   )rK   ilower_font_listupper_font_listr   r   
<dictcomp>G  s    z*get_default_asian_font.<locals>.<dictcomp>)
r   	reportlabpdfbase_cidfontdatadefaultUnicodeEncodingsr1   appendrR   rangerU   )	font_dictfontsfontr   r  r   get_default_asian_font=  s   
r  c                 C  s4   t tjjj}| }| |v rtt|  d S d S r   )	r   r  r  r  r  r1   r   registerFontr   )fontnamer  r  r   r   r   set_asian_fontsJ  s
   r  c                 C  s   t jj}| |v r
| S d S r   )	xhtml2pdfrY   DEFAULT_LANGUAGE_LIST)nameasian_language_listr   r   r   detect_languageQ  s   r  c                 C  s"   t |dv rt| }t|S d S )N)arabichebrewpersianurdupashtosindhi)r  arabic_reshaperreshaper   )textlanguagearr   r   r   arabic_formatX  s   
r  c                 C  s.   t | dr| d}t||}|r|S d S d S )Nr  )r8   __getattribute__r  )context	frag_textr  detect_language_resultr   r   r   frag_text_language_checki  s   


r  c                   @  s   e Zd ZdS )ImageWarningN)r   r%   r&   r   r   r   r   r  s  s    r  )r(   r   r'   r)   r   r*   r   )r   Nru   )r(   rv   rw   rx   rY   rb   r   rb   )r   rb   r   rb   r   r   )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   compilerV   r   r-   r7   r?   rA   r]   ra   rc   __annotations__rd   rp   rs   rt   r   r   r   r   r   r   r   r   r   MDOTALL_rx_dataurirS   r  r  r  r  r  r   r  r   r   r   r   <module>   s  
	"N

)

		
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
                                               !  "  #  $  %  &  '  (  )  *  +  
,


 
 4
