a
    [¨XhêC  ã                   @   sÆ   d 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m	Z	m
Z
 ddlZddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ dd„ Zddd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z4Insert anchors, links, bookmarks and inputs in PDFs.é    N)Úmd5)Úbasename)ÚunquoteÚurlsplité   )Ú
Attachment)ÚLOGGER)ÚffiÚgobjectÚpango)Úget_font_description)ÚURLFetchingErrorc                 C   sB  | \}}|D ]ì\}}	}
}|j |
dd… Ž \}}|j |
dd… Ž \}}|dv rt ddt ||||g¡t ddi¡dœ¡|_|rŽt |	¡|jd	< |d
kr¨t |	¡|jd< nt ddt |	¡dœ¡|jd< | |j¡ d|vræt ¡ |d< |d  |jj¡ q|D ]>}|\}}}|  ||¡\}}| |t |jd||dg¡g¡ qþdS )z%Include hyperlinks in given PDF page.Nr   )ÚinternalZexternalú/Annotz/LinkÚWr   )ÚTypeÚSubtypeÚRectZBSÚContentsr   ÚDestú/Actionz/URI)r   ÚSÚURIÚAÚAnnotsú/XYZ)	Útransform_pointÚpydyfÚ
DictionaryÚArrayZlink_annotationÚStringÚ
add_objectÚappendÚ	reference)Zlinks_and_anchorsÚmatrixÚpdfÚpageÚnamesÚmarkÚlinksÚanchorsÚ	link_typeZlink_targetÚ	rectangleZboxÚx1Úy1Zx2Úy2ÚanchorÚanchor_nameÚxÚy© r4   ú[/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/pdf/anchors.pyÚ	add_links   s<    ü
ý
ÿr6   c                 C   sX  t |ƒ}g }|D ]ä\}\}}}}	}
t | j| d||df¡}t t |¡|dœ¡}|  |¡ t| |	|d\}}||d< |
dkr|d  d9  < n||7 }|r¸|d j|d< |j|d d	< |rØ|d j|d
< |d j|d< |durê|j|d< | 	|¡ q|du rP|rPt ||d j|d jdœ¡}|  |¡ |D ]}|j|d< q2|j| j
d< ||fS )z!Include bookmark outlines in PDF.r   r   )ZTitler   )ÚparentÚCountÚclosedéÿÿÿÿZPrevZNextÚFirstÚLastNÚParent)r8   r;   r<   ZOutlines)Úlenr   r   Zpage_referencesr   r    r!   Úadd_outlinesr#   r"   Úcatalog)r%   Z	bookmarksr7   ÚcountZoutlinesÚtitler&   r2   r3   ÚchildrenÚstateZdestinationÚoutlineZchildren_outlinesZchildren_countZoutlines_dictionaryr4   r4   r5   r?   7   sF    
ÿ
ÿ

ý
r?   c           ,      C   sè  | rt |  ¡ ƒsdS d|vr(t ¡ |d< d|jvrPt t ¡ |jddœ¡|jd< |d  ¡ d }t 	t
 |¡tj¡}dd	„ |  ¡ D ƒ}	t t¡}
t t¡} t|	ƒD ]>\}\}}}}g |j|dd
… Ž ¢|j|d
d… Ž ¢R }|j d¡}|j dd¡}d| ¡ › d|› }|j d|¡}|d d }| ¡ }| |d ¡ t ddt |¡|jdt |¡dœ¡}|dv rÎ|dkrô||
| vrÖt ddt |¡dt ¡ t ¡ dœ¡ |
| |< }| |¡ |jd d  |j¡ |
| | }|d d }d }nd!}|d
 |d  }|d" |d#  }|j|jd$d%t dd||f¡d&œd'}| ¡  | ¡  | |d ¡ | d(|¡ ||d  d
 }||d  d
 }| ||¡ |  |¡ | !¡  | "¡  | |¡ | d(|¡ d)|jv }|dkrät#|d* ƒnd+}t ||ji¡} d|d,< t d- $|j%¡¡|d.< |r&d/|› nd|d0< t d1| i¡|d2< t d3t |¡i¡|d4< | |¡ |dkr°|j|d5< |rŠd/|› |d6< |d*  |j¡ |d7  t |¡¡ nt |¡|d8< |d0 |d6< nÚ|j&d9krøt'|ƒ}!t
 (|||!¡}"| )|"¡\}"}#d:|"_*| |"j+|¡ g }$g }%|D ]V}&t |&j dd;¡¡}'t |&j,pDd;¡}(|$ t |'|(g¡¡ d<|&jv r|% |'¡ qd=|d,< t d- $|j%¡¡|d.< t |$¡|d7< d>|jv rÆd?|d@< t |%¡|d6< n$dA|d@< |%rÜ|%dB nt d;¡|d6< | |¡ n°|dCks|j&dDkrÀd})|j dEd;¡ -¡ dFkr2|)dG7 })t dHdI„ | |  ¡ D ƒ¡}*d|d,< t d- $|j%¡¡|d.< t |j dd;¡¡|d6< dJ|d@< t dKdLt |j dM¡¡|*|)dNœ¡|dO< | |¡ nèt'|ƒ}!t
 (|||!¡}"| )|"¡\}"}#d:|"_*| |"j+|¡ dP|d,< t d- $|j%¡¡|d.< t |j dd;¡¡|d6< |j&dQkrZdR|d@< t |j,pPd;¡|d6< n&|dSkrndT|d@< n|dUkr€dV|d@< | dWd;¡ }+ .¡ rž|+|dX< | |¡ |d  |j¡ |jd d  |j¡ || vr¢|| | |< q¢dS )YzInclude form inputs in PDF.Nr   ZAcroFormÚtrue)ÚFieldsZDRZNeedAppearancesr   r   c                 S   s,   g | ]$\}}|D ]\}}}||||f‘qqS r4   r4   )Ú.0ÚformÚinputsÚelementÚstyler,   r4   r4   r5   Ú
<listcomp>p   s   þzadd_forms.<locals>.<listcomp>r   ÚtypeÚvalueZYeszunknown-ú-ÚnameÚ	font_sizeg      è?Úcolorr   z/Widgeté   )r   r   r   ÚPÚFÚT)ÚradioZcheckboxrX   z/Btni À  z/Off)ÚFTÚFfrW   ÚVÚKidsÚOptrG   g      à?ÚlÚ4é   é   ú/XObjectú/Form)Z	Resourcesr   r   ÚBBox)ÚextraZZaDbÚcheckedr\   ÚonrY   ó    ZDAú/ÚASÚNÚAPÚCAZMKr=   r[   r]   rW   ÚselectTÚ Úselectedz/ChÚmultiplei    rZ   i   r:   ZsubmitÚbuttonÚmethodÚposté   c                 s   s   | ]}|j V  qd S )N)r#   )rH   Úfieldr4   r4   r5   Ú	<genexpr>ì   ó    zadd_forms.<locals>.<genexpr>i   r   z/SubmitFormÚaction)r   r   rV   rG   ZFlagsr   z/TxÚtextareaé   Úpasswordi    Úfilei   Z	maxlengthZMaxLen)/ÚanyÚvaluesr   r   r@   r   r#   Úsplitr	   Úgcr   Zpango_font_map_create_contextr
   Zg_object_unrefÚitemsÚcollectionsÚdefaultdictÚdictÚ	enumerater   ÚattribÚgetÚdecodeÚcloneZ	set_colorr    r!   r"   Z
push_stateZ
begin_textZset_font_sizeZmove_text_toZshow_text_stringZend_textZ	pop_stater>   ÚjoinÚstreamÚtagr   Zpango_font_map_load_fontZadd_fontZused_in_formsÚhashÚtextÚlowerÚisdigit),Zformsr$   r%   r&   Ú	resourcesrŒ   Zfont_mapZpage_referenceÚcontextZinputs_with_formsZradio_groupsÚirI   rK   rL   r,   Z
input_typeZinput_valueÚdefault_nameZ
input_namerR   Zfield_streamrv   ÚgroupÚ	characterÚwidthÚheightZchecked_streamr2   r3   rf   ÚkeyZ
appearanceZfont_descriptionÚfontÚ_ÚoptionsZselected_valuesÚoptionrO   r   ÚflagsÚfieldsÚ
max_lengthr4   r4   r5   Ú	add_forms_   sF   
ýþþ

ÿþú

ú
ü






ÿþûÿ



r¢   c                 C   s  | D ]þ\}}}	}
|dkrq||vr@t ||jd}t|||ƒ||< || }|du rRqg |j|	dd… Ž ¢|j|	dd… Ž ¢R }	t g ddt |	¡dœ|¡}| |¡ t dt |	¡d	t 	¡ |j
t d
|j
i¡ddœ¡}| |¡ d|vròt ¡ |d< |d  |j
¡ qdS )zInclude annotations in PDF.Ú
attachment)ÚurlÚurl_fetcherNr   rb   rc   )r   r   rd   r   z/FileAttachmentrk   z/N)r   r   r   rW   ZFSrl   rj   r   )r   r¥   Úwrite_pdf_attachmentr   r   ÚStreamr   r!   r   r    r#   r"   )r)   r$   Údocumentr%   r&   Zannot_filesÚcompressr+   Zannot_targetr,   rœ   r£   Z
annot_filerŒ   Zannotr4   r4   r5   Úadd_annotations  sN    	ÿÿÿþýü
ù	
rª   c                    s  d}d}d}z„|j j\}‰ }}tˆ tƒr0ˆ  ¡ ‰ tˆ tƒrDt ˆ ¡‰ t‡ fdd„dƒD ]}|t|ƒ7 }||7 }qVW d  ƒ n1 s„0    Y  W n@ t	yÐ } z(t
 d|¡ t
jd|d W Y d}~dS d}~0 0 t|d	d
 ¡ |_|jrò|j}	n*|rt|ƒjrttt|ƒjƒƒ}	nd}	tj|	d	dd }
|
s8d}
t |j d¡¡}t |j d¡¡}t dd|
 dd¡› t d|j› d|||dœ¡dœ¡}tj|g||d}|  |¡ t dt |	jdd¡t |	¡t d|ji¡t |j pìd¡dœ¡}|  |¡ |S )z&Write an attachment to the PDF stream.Nr   rx   c                      s
   ˆ   d¡S )Nr{   )Úreadr4   ©Úsourcer4   r5   Ú<lambda>W  rx   z&write_pdf_attachment.<locals>.<lambda>zFailed to load attachment: %szError while loading attachment:)Úexc_infoF)Úusedforsecurityzattachment.bin)Ústrictzapplication/octet-streamzD:%Y%m%d%H%M%SZz/EmbeddedFileri   z#2fú<ú>)ZCheckSumÚSizeZCreationDateZModDate)r   r   ZParams)r©   z	/FilespecÚignore)ÚerrorsrV   ro   )r   rV   ZUFZEFZDesc)!r­   Ú
isinstanceÚstrÚencodeÚbytesÚioÚBytesIOÚiterr>   r   r   ÚerrorÚdebugr   Ú	hexdigestrQ   r   Úpathr   r   Ú	mimetypesÚ
guess_typer   r    ÚcreatedÚstrftimeÚmodifiedr   Úreplacer§   r!   r#   Údescription)r%   r£   r©   r¤   Zuncompressed_lengthrŒ   rœ   ÚdataÚ	exceptionÚfilenameZ	mime_typeZcreationÚmodZ
file_extraZfile_streamZpdf_attachmentr4   r¬   r5   r¦   J  s`    


,üý

û
r¦   c                 c   sÖ   t ƒ }g }t| ƒD ]T\}}| g ¡ |j ¡ D ]6\}\}}}}||vr.|d  |||f¡ | |¡ q.q| D ]d}g }	|jD ]D}
|
\}}}}|dkr´||vr¨t d|¡ q¾|	 |
¡ qz|	 |
¡ qz|	| 	d¡fV  qldS )aþ  Resolve internal hyperlinks.

    Links to a missing anchor are removed with a warning.

    If multiple anchors have the same name, the first one is used.

    :returns:
        A generator yielding lists (one per page) like :attr:`Page.links`,
        except that ``target`` for internal hyperlinks is
        ``(page_number, x, y)`` instead of an anchor name.
        The page number is a 0-based index into the :attr:`pages` list,
        and ``x, y`` are in CSS pixels from the top-left of the page.

    r:   r   z(No anchor #%s for internal URI referencer   N)
Úsetr†   r"   r*   r‚   Úaddr)   r   r¾   Úpop)Zpagesr*   Zpaged_anchorsr”   r&   r1   Zpoint_xZpoint_yrœ   Ú
page_linksÚlinkr+   r4   r4   r5   Úresolve_links†  s*    

þrÒ   )N)Ú__doc__rƒ   r»   rÂ   Úhashlibr   Úos.pathr   Úurllib.parser   r   r   ro   r   Úloggerr   Ztext.ffir	   r
   r   Z
text.fontsr   Úurlsr   r6   r?   r¢   rª   r¦   rÒ   r4   r4   r4   r5   Ú<module>   s&   $
( :2<