
    ,gC                         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 ZddZd Zd Zd Zd Zy)z4Insert anchors, links, bookmarks and inputs in PDFs.    N)md5)basename)unquoteurlsplit   )
Attachment)LOGGER)ffigobjectpango)get_font_description)URLFetchingErrorc                    | \  }}|D ]e  \  }}	}
} |j                   |
dd  \  }} |j                   |
dd  \  }}|dv s8t        j                  ddt        j                  ||||g      t        j                  ddi      d      |_        |r"t        j
                  |	      |j                  d	<   |d
k(  r#t        j
                  |	      |j                  d<   n9t        j                  ddt        j
                  |	      d      |j                  d<   |j                  |j                         d|vrt        j                         |d<   |d   j                  |j                  j                         h |D ]R  }|\  }}}|j                  ||      \  }}|j                  |t        j                  |j                  d||dg      g       T y)z%Include hyperlinks in given PDF page.Nr   )internalexternal/Annotz/LinkWr   )TypeSubtypeRectBSContentsr   Dest/Actionz/URI)r   SURIAAnnots/XYZ)	transform_pointpydyf
DictionaryArraylink_annotationString
add_objectappend	reference)links_and_anchorsmatrixpdfpagenamesmarklinksanchors	link_typelink_target	rectangleboxx1y1x2y2anchoranchor_namexys                       n/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/pdf/anchors.py	add_linksr>      s   &NE727 A.	;	3'''2A7B'''127B00"'"2"2 "RR$45&&Qx0	4 #C 27,,{2K##J/J&.3ll;.G##F++0+;+;% <<4= ,##C(
 NN3../t#!&XN!!#"5"5"?"?@/A2  J"Q%%a+1dnnfaA%FGI 	JJ    c                 4   t        |      }g }|D ]  \  }\  }}}}	}
t        j                  | j                  |   d||df      }t        j                  t        j
                  |      |d      }| j                  |       t        | |	|      \  }}||d<   |
dk(  r|dxx   dz  cc<   n||z  }|r$|d   j                  |d<   |j                  |d   d	<   |r$|d   j                  |d
<   |d   j                  |d<   ||j                  |d<   |j                  |        |u|rst        j                  ||d   j                  |d   j                  d      }| j                  |       |D ]  }|j                  |d<    |j                  | j                  d<   ||fS )z!Include bookmark outlines in PDF.r   r   )Titler   )parentCountclosedPrevNextFirstLastParent)rC   rH   rI   Outlines)lenr!   r#   page_referencesr"   r%   r&   add_outlinesr(   r'   catalog)r+   	bookmarksrB   countoutlinestitler,   r;   r<   childrenstatedestinationoutlinechildren_outlineschildren_countoutlines_dictionarys                   r=   rN   rN   7   s   	NEH09 !,|aXukk3#6#6t#<faA"NO""\\%(+$? @w,8'-+)>)HG"^#E&rl44GFO#*#4#4HRL 03==GG/3==GFO & 0 0GH )!, ~(#..a[**RL**0
 
 	*+ 	>G 3 = =GH	>"5"?"?JU?r?   c                 r   | rt        | j                               syd|vrt        j                         |d<   d|j                  vrBt        j
                  t        j                         |j                  dd      |j                  d<   |d   j                         d   }t        j                  t        j                  |      t        j                        }| j                         D 	
cg c]  \  }	}
|
D ]  \  }}}|	|||f  }}}}
}	}t        j                   t"              }t        j                   t"              } t%        |      D ]  \  }\  }	}}}g  |j&                  |dd   |j&                  |dd  }|j(                  j+                  d	      }|j(                  j+                  d
d      }d|j-                          d| }|j(                  j+                  d|      }|d   dz  }|j/                         }|j1                  |d          t        j
                  ddt        j                  |      |j                  dt        j2                  |      d      }|dv r-|dk(  r|||	   vrt        j
                  ddt        j2                  |      dt        j                         t        j                         d      x||	   |<   }|j5                  |       |j                  d   d   j7                  |j                         ||	   |   }|d   dz  }d}nd}|d   |d   z
  }|d    |d!   z
  }|j/                  |j                  d"d#t        j                  dd||f      d$%      }|j9                          |j;                          |j1                  |d          |j=                  d&|       ||dz  z
  dz  }||dz  z
  dz  }|j?                  ||       |jA                  |       |jC                          |jE                          |j5                  |       |j=                  d&|       d'|j(                  v }|dk(  rtG        d(         nd)} t        j
                  | |j                  i      }!d|d*<   t        j2                  d+jI                  |jJ                              |d,<   |rd-|  nd|d.<   t        j
                  d/|!i      |d0<   t        j
                  d1t        j2                  |      i      |d2<   |j5                  |       |dk(  r`j                  |d3<   |rd-|  |d4<   |d(   j7                  |j                         |d5   j7                  t        j2                  |             nht        j2                  |      |d6<   |d.   |d4<   nF|jL                  d7k(  rtO        |      }"t        jP                  |||"      }#|jS                  |#      \  }#}$d8|#_*        |j=                  |#jV                  |       g }%g }&|D ]  }'t        j2                  |'j(                  j+                  d
d9            }(t        j2                  |'jX                  xs d9      })|%j7                  t        j                  |(|)g             d:|'j(                  v s|&j7                  |(        d;|d*<   t        j2                  d+jI                  |jJ                              |d,<   t        j                  |%      |d5<   d<|j(                  v rd=|d><   t        j                  |&      |d4<   n$d?|d><   |&r|&d@   nt        j2                  d9      |d4<   |j5                  |       n|dAk(  s|jL                  dBk(  r+d}*|	j(                  j+                  dCd9      j[                         dDk7  r|*dEz  }*t        j                  dF | |	   j                         D              }+d|d*<   t        j2                  d+jI                  |jJ                              |d,<   t        j2                  |	j(                  j+                  d
d9            |d4<   dG|d><   t        j
                  dHdIt        j2                  |	j(                  j+                  dJ            |+|*dK      |dL<   |j5                  |       nItO        |      }"t        jP                  |||"      }#|jS                  |#      \  }#}$d8|#_*        |j=                  |#jV                  |       dM|d*<   t        j2                  d+jI                  |jJ                              |d,<   t        j2                  |j(                  j+                  d
d9            |d4<   |jL                  dNk(  r,dO|d><   t        j2                  |jX                  xs d9      |d4<   n|dPk(  rdQ|d><   n
|dRk(  rdS|d><   |j+                  dTd9      x},j]                         r|,|dU<   |j5                  |       |d   j7                  |j                         |j                  d   d   j7                  |j                         || vs|| |	   |<    yc c}}}}
}	w )VzInclude form inputs in PDF.Nr   AcroFormtrue)FieldsDRNeedAppearancesr   r   r   typevalueYeszunknown--name	font_sizeg      ?colorr   z/Widget   )r   r   r   PFT)radiocheckboxrl   z/Btni   z/Off)FTFfrk   VKidsOptr^   g      ?l4      /XObject/Form)	Resourcesr   r   BBox)extraZaDbcheckedrq   onrn       DA/ASNAPCAMKrJ   rp   rr   rk   selectT selectedz/Chmultiplei    ro   i   rE   submitbuttonmethodpost   c              3   4   K   | ]  }|j                     y wN)r(   ).0fields     r=   	<genexpr>zadd_forms.<locals>.<genexpr>   s     !Te%//!Ts   i   r   z/SubmitFormaction)r   r   rj   r^   Flagsr   z/Txtextarea   passwordi    filei   	maxlengthMaxLen)/anyvaluesr!   r#   rO   r"   r(   splitr
   gcr   pango_font_map_create_contextr   g_object_unrefitemscollectionsdefaultdictdict	enumerater    attribgetdecodeclone	set_colorr%   r&   r'   
push_state
begin_textset_font_sizemove_text_toshow_text_stringend_text	pop_staterL   joinstreamtagr   pango_font_map_load_fontadd_fontused_in_formshashtextlowerisdigit)-formsr*   r+   r,   	resourcesr   font_mappage_referencecontextforminputselementstyler3   inputs_with_formsradio_groupsi
input_typeinput_valuedefault_name
input_namerf   field_streamr   group	characterwidthheightchecked_streamr;   r<   r}   key
appearancefont_descriptionfont_optionsselected_valuesoptionrb   r   flagsfields
max_lengths-                                                r=   	add_formsr   _   sN	   ELLN+tX$"'"2"2kkm%%%4
 #J
 *%++-a0Nff++H5 G
 "KKM D&)/ &GUI 
wy)) 
 **40L##D)E09:K0L ],,,D'5)5#V##Yr]35#V##Yqr]35	 ^^''/
nn((%8!."7"7"9!:!A3?^^''=
+&-	||~uW~.   KK	*j)"
  ..W$\$%77=B=M=M$?"\\*5# %${{}O > L&z2U NN5)KK
+H5<<U__M$T*:6!+.4			 aL9Q</Eq\IaL0F#\\&00""Q5&$9:	1\ N %%'%%'$$U7^4((;T))Q.A)d**a/A''1-++I6##%$$&NN>*&&vy97>>1G(2g(=#eFm$4C))30H0H*IJJ E$K,,tyy1D1D'EFE$K'.AcU)FE$K**C+<=E$K**D%,,y2I+JKE$KNN5!W$"'//h#$SEE#Jf$$U__5e##ELL$=>"\\*5c
"4[c
[[H$3E:11'#35Dood+GD!!%D&&tyy)<G O! 2V]]%6%6w%CD||FKK$526u{{E4=9:.#**512  E$K,,tyy1D1D'EFE$K ;;w/E%LW^^++d"[[9c
+d+:OB'b) c
 NN5!8#w{{h'> E{{x,224>%[[!TuT{?Q?Q?S!TUF E$K,,tyy1D1D'EFE$Kdkkoogr&BCE#J'E$K))!"\\$++//(";< + E#J NN5!  4E:11'#35Dood+GD!!%D&&tyy)<E$K,,tyy1D1D'EFE$Kgnn&8&8"&EFE#J{{j(+d"\\',,*<"=c
z)+dv%+d%kk+r::
CCE",hNN5!Xeoo.J)00AU"&+E$K
#{],s   +h0c                    | D ]\  \  }}}	}
|dk7  r||vr't        ||j                        }t        |||      ||<   ||   }|Bg  |j                  |	dd   |j                  |	dd  }	t	        j
                  g ddt	        j                  |	      d|      }|j                  |       t	        j                  dt	        j                  |	      d	t	        j                         |j                  t	        j                  d
|j                  i      dd      }|j                  |       d|vrt	        j                         |d<   |d   j                  |j                         _ y)zInclude annotations in PDF.
attachment)urlurl_fetcherNr   rw   rx   )r   r   rz   r   z/FileAttachmentr   z/N)r   r   r   rk   FSr   r   r   )r   r   write_pdf_attachmentr    r!   Streamr#   r&   r"   r%   r(   r'   )r/   r*   documentr+   r,   annot_filescompressr1   annot_targetr3   r   r   
annot_filer   annots                  r=   add_annotationsr     sz    27 &/-	<A${* $ h.B.BDJ(<Z)+K% .
5#V##Yr]35#V##Yqr]35	 bKK	*#
 	
 	v  KK	*(&&""C)9)9#:;"
  	u4"[[]DNXeoo.M&/r?   c                    d}d}d}	 |j                   5 \  }}}t        t              rj                         t        t              rt        j                        t        fdd      D ]  }|t        |      z  }||z  } 	 ddd       t        |d	      j                         |_        |j                  r|j                  }	nA|r=t!        |      j"                  r(t%        t'        t!        |      j"                              }	nd
}	t)        j*                  |	d      d   }
|
sd}
t-        j.                  |j0                  j3                  d            }t-        j.                  |j4                  j3                  d            }t-        j6                  dd|
j9                  dd       t-        j6                  d|j                   d|||d      d      }t-        j:                  |g||      }| j=                  |       t-        j6                  dt-        j.                  |	j                  d            t-        j.                  |	      t-        j6                  d|j>                  i      t-        j.                  |j@                  xs d      d      }| j=                  |       |S # 1 sw Y   xY w# t        $ r7}t        j                  d|       t        j                  d|       Y d}~yd}~ww xY w)z&Write an attachment to the PDF stream.Nr   r?   c                  &     j                  d      S )Nr   )read)sources   r=   <lambda>z&write_pdf_attachment.<locals>.<lambda>W  s    V[[%6 r?   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/EmbeddedFiler   z#2f<>)CheckSumSizeCreationDateModDate)r   r   Params)r   z	/Filespecignore)errorsrj   r   )r   rj   UFEFDesc)!r   
isinstancestrencodebytesioBytesIOiterrL   r   r	   errordebugr   	hexdigestre   r   pathr   r   	mimetypes
guess_typer!   r%   createdstrftimemodifiedr"   replacer   r&   r(   description)r+   r   r   r   uncompressed_lengthr   r   data	exceptionfilename	mime_typecreationmod
file_extrafile_streampdf_attachmentr   s                   @r=   r   r   J  s    CF 	"51fc1&#&&%(F+6< #s4y0#$	 7AACJN ??	###GHSM$6$678#$$Xe<Q?I.	||J..778IJKH
,,z**334EF
GC!!y((e456""JNN+1-'$	$
 	# 	J ,,xhGKNN;%%\\(///:;ll8$[%:%:;<Z339r:' N NN>"c	 	  4i@6Ks/   J1 A2J$J1 $J.)J1 1	K1:-K,,K1c              #     K   t               }g }t        |       D ]j  \  }}|j                  g        |j                  j	                         D ]7  \  }\  }}}}||vs|d   j                  |||f       |j                  |       9 l | D ]t  }g }	|j                  D ]L  }
|
\  }}}}|dk(  r-||vrt        j                  d|       *|	j                  |
       <|	j                  |
       N |	|j                  d      f v yw)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.

    rE   r   z(No anchor #%s for internal URI referencer   N)
setr   r'   r0   r   addr/   r	   r	  pop)pagesr0   paged_anchorsr   r,   r:   point_xpoint_yr   
page_linkslinkr1   s               r=   resolve_linksr(    s#     eGMU# )4R 59\\5G5G5I 	)1K1'7Aq')b!((+w)HIK(	))  /
JJ 	(D+/(I{AqJ&g-LLB#% %%d+ !!$'	( -++A.../s   ADB&Dr   )__doc__r   r  r  hashlibr   os.pathr   urllib.parser   r   r!   r   r   loggerr	   text.ffir
   r   r   
text.fontsr   urlsr   r>   rN   r   r   r   r(   r?   r=   <module>r2     sT    :  	    *    * * - #!JH%Pu,r//d9x%/r?   