a
    còf¤7  ã                	   @   s¬  d Z ddlZddlZddlZddlmZmZmZmZ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mZmZ dd	lmZ dd
lmZmZ dZdZdZdZdZ dZ!e "dej#¡Z$edƒZ%e%e%dœdd„Z&e'ejdœdd„Z(e'e'edge
e	e'  f dœdd„Z)e&fe'e'eegef edge
e	e  f dœdd„Z*e'e'edge
eeef  f dœdd „Z+e&fe'e'ee'gef edge
e f dœd!d"„Z,G d#d„ deƒZ-dS )$z~
Anything related to Extensible Metadata Platform (XMP) metadata.

https://en.wikipedia.org/wiki/Extensible_Metadata_Platform
é    N)ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚTypeVarÚUnion)ÚDocumentÚparseString)ÚElement)Ú
ExpatErroré   )Ú
StreamTypeÚdeprecate_no_replacement)ÚPdfReadError)ÚContentStreamÚ	PdfObjectz+http://www.w3.org/1999/02/22-rdf-syntax-ns#z http://purl.org/dc/elements/1.1/zhttp://ns.adobe.com/xap/1.0/zhttp://ns.adobe.com/pdf/1.3/zhttp://ns.adobe.com/xap/1.0/mm/zhttp://ns.adobe.com/pdfx/1.3/a{  
        (?P<year>[0-9]{4})
        (-
            (?P<month>[0-9]{2})
            (-
                (?P<day>[0-9]+)
                (T
                    (?P<hour>[0-9]{2}):
                    (?P<minute>[0-9]{2})
                    (:(?P<second>[0-9]{2}(.[0-9]+)?))?
                    (?P<tzd>Z|[-+][0-9]{2}:[0-9]{2})
                )?
            )?
        )?
        ÚK)ÚvalueÚreturnc                 C   s   | S ©N© )r   r   r   úF/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pypdf/xmp.pyÚ	_identityM   s    r   c              	   C   s(  t  | ¡}|d u r td| › �ƒ‚t| d¡ƒ}t| d¡p<dƒ}t| d¡pNdƒ}t| d¡p`dƒ}t| d¡prdƒ}t | d	¡p†d¡}| tj¡}|| d
 }	t|ƒ}
t|	ƒ}| d¡p¾d}t	 	||||||
|¡}|dk�r$dd„ | 
d¡D ƒ\}}|d9 }|dk �r|d9 }|t	j||d� }|S )NzInvalid date format: ÚyearÚmonthÚ1ÚdayÚhourÚ0ÚminuteÚsecondi@B ÚtzdÚZc                 s   s   | ]}t |ƒV  qd S r   )Úint)Ú.0Úxr   r   r   Ú	<genexpr>d   ó    z"_converter_date.<locals>.<genexpr>ú:éÿÿÿÿr   )ÚhoursÚminutes)Úiso8601ÚmatchÚ
ValueErrorr%   ÚgroupÚdecimalÚDecimalÚto_integralÚROUND_FLOORÚdatetimeÚsplitÚ	timedelta)r   Úmatchesr   r   r   r   r!   r"   Zseconds_decZmilliseconds_decÚsecondsZmillisecondsr#   ÚdtZ	tzd_hoursZtzd_minutesr   r   r   Ú_converter_dateQ   s,    


r<   ÚXmpInformation)Ú	namespaceÚnamer   c                    s"   dt tt  dœ‡ ‡fdd„}|S )Nr=   ©Úselfr   c           	         s’   | j  ˆi ¡ ˆ ¡}|r|S g }|  dˆˆ ¡D ]H}| td¡}t|ƒr.|D ]*}| td¡D ]}|  |¡}| |¡ qZqJq.| j  ˆi ¡}||ˆ < |S )NÚ ZBagÚli©	ÚcacheÚgetÚget_elementÚgetElementsByTagNameNSÚRDF_NAMESPACEÚlenÚ	_get_textÚappendÚ
setdefault)	rA   ÚcachedÚretvalÚelementZbagsZbagÚitemr   Úns_cache©r?   r>   r   r   rF   o   s    
z_getter_bag.<locals>.get)r   r   Ústr©r>   r?   rF   r   rS   r   Ú_getter_bagl   s    rV   )r>   r?   Ú	converterr   c                    s$   dt tt  dœ‡ ‡‡fdd„}|S )Nr=   r@   c           	         s´   | j  ˆi ¡ ˆ¡}|r|S g }|  dˆˆ¡D ]j}| td¡}t|ƒr€|D ]2}| td¡D ] }|  |¡}ˆ |ƒ}| |¡ qZqJq.ˆ |  |¡ƒ}| |¡ q.| j  ˆi ¡}||ˆ< |S )NrB   ZSeqrC   rD   )	rA   rN   rO   rP   ZseqsÚseqrQ   r   rR   ©rW   r?   r>   r   r   rF   …   s"    
z_getter_seq.<locals>.get)r   r   r   ©r>   r?   rW   rF   r   rY   r   Ú_getter_seq‚   s     r[   c                    s&   dt tttf  dœ‡ ‡fdd„}|S )Nr=   r@   c           	         s¦   | j  ˆi ¡ ˆ ¡}|r|S i }|  dˆˆ ¡D ]\}| td¡}t|ƒr||D ].}| td¡D ]}|  |¡}||| d¡< qZqJq.|  |¡|d< q.| j  ˆi ¡}||ˆ < |S )NrB   ZAltrC   zxml:langz	x-default)	rE   rF   rG   rH   rI   rJ   rK   ÚgetAttributerM   )	rA   rN   rO   rP   ZaltsZaltrQ   r   rR   rS   r   r   rF   Ÿ   s    
z_getter_langalt.<locals>.get)r   r   r   rU   r   rS   r   Ú_getter_langaltœ   s    "r]   c                    s    dt t dœ‡ ‡‡fdd„}|S )Nr=   r@   c                    s€   | j  ˆi ¡ ˆ¡}|r|S d }|  dˆˆ¡D ]&}|j|jkrF|j}n
|  |¡} qVq.|d urfˆ |ƒ}| j  ˆi ¡}||ˆ< |S ©NrB   )rE   rF   rG   ÚnodeTypeÚATTRIBUTE_NODEÚ	nodeValuerK   rM   )rA   rN   r   rP   rR   rY   r   r   rF   ·   s    
z_getter_single.<locals>.get)r   r   rZ   r   rY   r   Ú_getter_single´   s    rb   c                   @   sî  e Zd ZdZeddœdd„Zd-eedee	f ddœdd„Z
eeeee d	œd
d„Zeeee dœdd„Zeedœdd„ZeeedƒƒZeeedƒƒZeeedƒƒZeeedeƒƒZeeedƒƒZeeedƒƒZeeedƒƒZeeedƒƒZeeedƒƒZ eeedƒƒZ!eeedƒƒZ"eeedƒƒZ#eeedƒƒZ$eeedƒƒZ%eeed ƒƒZ&eee'd!ƒƒZ(eee'd"ƒƒZ)eee'd#ƒƒZ*eee+d$eƒƒZ,eee+d%eƒƒZ-eee+d&eƒƒZ.eee+d'ƒƒZ/eee0d(ƒƒZ1eee0d)ƒƒZ2ee3eef d*œd+d,„ƒZ4dS ).r=   zÔ
    An object that represents Extensible Metadata Platform (XMP) metadata.
    Usually accessed by :py:attr:`xmp_metadata()<pypdf.PdfReader.xmp_metadata>`.

    Raises:
      PdfReadError: if XML is invalid
    N)Ústreamr   c              
   C   sl   || _ z| j  ¡ }t|ƒ}W n2 tyN } ztd|› �ƒ‚W Y d }~n
d }~0 0 | td¡d | _i | _d S )Nz#XML in XmpInformation was invalid: ZRDFr   )	rc   Úget_datar   r   r   rH   rI   Úrdf_rootrE   )rA   rc   ÚdataZdoc_rootÚer   r   r   Ú__init__Ô   s    
$ÿþzXmpInformation.__init__)rc   Úencryption_keyr   c                 C   s"   |d urt ddƒ | j |¡ d S )Nz/the encryption_key parameter of write_to_streamz5.0.0)r   rc   Úwrite_to_stream)rA   rc   ri   r   r   r   rj   à   s
    ÿzXmpInformation.write_to_stream)Ú	about_urir>   r?   r   c                 c   sT   | j  td¡D ]@}| td¡|kr| ||¡}|d ur<|V  | ||¡E d H  qd S ©NÚDescriptionZabout)re   rH   rI   ÚgetAttributeNSZgetAttributeNodeNS)rA   rk   r>   r?   ÚdescÚattrr   r   r   rG   é   s    zXmpInformation.get_element)rk   r>   r   c                 c   sr   | j  td¡D ]^}| td¡|krt|jjƒD ] }|j |¡}|j|kr.|V  q.|j	D ]}|j|krV|V  qVqd S rl   )
re   rH   rI   rn   ÚrangeÚ
attributesÚlengthrQ   ZnamespaceURIÚ
childNodes)rA   rk   r>   ro   Úirp   Úchildr   r   r   Úget_nodes_in_namespaceñ   s    


z%XmpInformation.get_nodes_in_namespace)rP   r   c                 C   s*   d}|j D ]}|j|jkr
||j7 }q
|S r^   )rt   r_   Z	TEXT_NODErf   )rA   rP   Útextrv   r   r   r   rK   ü   s
    
zXmpInformation._get_textZcontributorZcoverageZcreatorÚdateÚdescriptionÚformatÚ
identifierÚlanguageZ	publisherZrelationZrightsÚsourceÚsubjectÚtitleÚtypeZKeywordsZ
PDFVersionZProducerZ
CreateDateZ
ModifyDateZMetadataDateZCreatorToolZ
DocumentIDZ
InstanceID)r   c                 C   s¨   t | dƒs¢i | _|  dt¡D ]„}|j}| d¡}|dkr:qx|d|… tt||d |d … dd	�ƒ ||d d…  }q&|j|j	krŒ|j
}n
|  |¡}|| j|< q| jS )
zÍ
        Retrieve custom metadata properties defined in the undocumented pdfx
        metadata schema.

        Returns:
            A dictionary of key/value items for custom metadata properties.
        Ú_custom_propertiesrB   u   â†‚r+   Nr   é   é   )Úbase)Úhasattrr‚   rw   ÚPDFX_NAMESPACEZ	localNameÚfindÚchrr%   r_   r`   ra   rK   )rA   ÚnodeÚkeyÚidxr   r   r   r   Úcustom_propertiesl  s$    	


ÿþÿ
z XmpInformation.custom_properties)N)5Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rh   r   r	   rT   Úbytesrj   r   r   rG   rw   Ú
XmlElementrK   ÚpropertyrV   ÚDC_NAMESPACEZdc_contributorrb   Zdc_coverager[   Z
dc_creatorr<   Zdc_dater]   Zdc_descriptionZ	dc_formatZdc_identifierZdc_languageZdc_publisherZdc_relationZ	dc_rightsZ	dc_sourceZ
dc_subjectZdc_titleZdc_typeÚPDF_NAMESPACEZpdf_keywordsZpdf_pdfversionZpdf_producerÚXMP_NAMESPACEZxmp_create_dateZxmp_modify_dateZxmp_metadata_dateZxmp_creator_toolÚXMPMM_NAMESPACEZxmpmm_document_idZxmpmm_instance_idr   r�   r   r   r   r   r=   Ë   sT    ÿþ	
ÿ	
ÿ	
ÿ	).r‘   r6   r2   ÚreÚtypingr   r   r   r   r   r   r   r	   Zxml.dom.minidomr
   r   r   r“   Zxml.parsers.expatr   Ú_utilsr   r   Úerrorsr   Zgenericr   r   rI   r•   r—   r–   r˜   r‡   ÚcompileÚVERBOSEr.   r   r   rT   r<   rV   r[   r]   rb   r=   r   r   r   r   Ú<module>   sP   (
ðþÿþþÿþ