o
    œœ<WG5  ã                   @   s‚   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 ddl	m
Z
 dZdZd	Zd
ZdZdZe  de j¡ZG dd„ deƒZdS )é    Né   )Ú	PdfObject)ÚgetDOMImplementation)ÚparseString)Úu_z+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})
                )?
            )?
        )?
        c                   @   s0  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ee
ƒZdd„ Zdd„ Zdd„ Zdd„ Zeeede	ƒƒZ	 eeede	ƒƒZ	 eeede	ƒƒZ	 eeede
ƒƒZ	 eeede	ƒƒZ	 eeede	ƒƒZ	 eeede	ƒƒZ	 eeede	ƒƒZ	 eeed e	ƒƒZ	 eeed!e	ƒƒZ	 eeed"e	ƒƒZ	 eeed#e	ƒƒZ	 eeed$e	ƒƒZ	 eeed%e	ƒƒZ 	 eeed&e	ƒƒZ!	 eee"d'e	ƒƒZ#	 eee"d(e	ƒƒZ$	 eee"d)e	ƒƒZ%	 eee&d*e
ƒƒZ'	 eee&d+e
ƒƒZ(	 eee&d,e
ƒƒZ)	 eee&d-e	ƒƒZ*	 eee+d.e	ƒƒZ,	 eee+d/e	ƒƒZ-	 d0d1„ Z.ee.ƒZ.d2S )3ÚXmpInformationz�
    An object that represents Adobe XMP metadata.
    Usually accessed by :meth:`getXmpMetadata()<PyPDF2.PdfFileReader.getXmpMetadata>`
    c                 C   s0   || _ t| j  ¡ ƒ}| td¡d | _i | _d S )NÚRDFr   )Ústreamr   ÚgetDataÚgetElementsByTagNameNSÚRDF_NAMESPACEÚrdfRootÚcache)Úselfr	   ÚdocRoot© r   ú</var/www/html/env/lib/python3.10/site-packages/PyPDF2/xmp.pyÚ__init__<   s   
zXmpInformation.__init__c                 C   s   | j  ||¡ d S ©N)r	   ÚwriteToStream)r   r	   Úencryption_keyr   r   r   r   B   s   zXmpInformation.writeToStreamc                 c   s\   � | j  td¡D ]#}| td¡|kr+| ||¡}|d kr|V  | ||¡D ]}|V  q%qd S ©NÚDescriptionÚabout)r   r   r   ÚgetAttributeNSÚgetAttributeNodeNS)r   ÚaboutUriÚ	namespaceÚnameÚdescÚattrÚelementr   r   r   Ú
getElementE   s   €€úzXmpInformation.getElementc                 c   st   � | j  td¡D ]/}| td¡|kr7t|jjƒD ]}|j |¡}|j|kr(|V  q|j	D ]
}|j|kr6|V  q,qd S r   )
r   r   r   r   ÚrangeÚ
attributesÚlengthÚitemÚnamespaceURIÚ
childNodes)r   r   r   r   Úir    Úchildr   r   r   ÚgetNodesInNamespaceN   s   €
€

€øz"XmpInformation.getNodesInNamespacec                 C   s*   d}|j D ]}|j|jkr||j7 }q|S ©NÚ )r(   ÚnodeTypeÚ	TEXT_NODEÚdata)r   r!   Útextr*   r   r   r   Ú_getTextY   s   

€zXmpInformation._getTextc                 C   s   | S r   r   )Úvaluer   r   r   Ú_converter_string`   s   z XmpInformation._converter_stringc              	   C   sþ   t  | ¡}t| d¡ƒ}t| d¡pdƒ}t| d¡pdƒ}t| d¡p%dƒ}t| d¡p.dƒ}t | d¡p8d¡}| tj¡}|| d	 }	| d
¡pLd}
t |||||||	¡}|
dkr}dd„ |
 	d¡D ƒ\}}|d9 }|dk rt|d9 }|tj
||d� }|S )NÚyearÚmonthÚ1ÚdayÚhourÚ0ÚminuteÚsecondi@B ÚtzdÚZc                 S   s   g | ]}t |ƒ‘qS r   )Úint)Ú.0Úxr   r   r   Ú
<listcomp>p   s    z2XmpInformation._converter_date.<locals>.<listcomp>ú:éÿÿÿÿr   )ÚhoursÚminutes)Úiso8601Úmatchr?   ÚgroupÚdecimalÚDecimalÚto_integralÚROUND_FLOORÚdatetimeÚsplitÚ	timedelta)r3   Úmr5   r6   r8   r9   r;   r<   ÚsecondsÚmillisecondsr=   ÚdtÚ	tzd_hoursÚtzd_minutesr   r   r   Ú_converter_datec   s$   
zXmpInformation._converter_datec                    ó   ‡ ‡‡fdd„}|S )Nc           	         sš   | j  ˆi ¡ ˆ¡}|r|S g }|  dˆˆ¡D ](}| td¡}t|ƒr?|D ]}| td¡D ]}|  |¡}ˆ |ƒ}| |¡ q-q%q| j  ˆi ¡}||ˆ< |S )Nr-   ÚBagÚli©	r   Úgetr"   r   r   Úlenr2   ÚappendÚ
setdefault)	r   ÚcachedÚretvalr!   ÚbagsÚbagr&   r3   Úns_cache©Ú	converterr   r   r   r   r\   y   s"   
ý€z'XmpInformation._getter_bag.<locals>.getr   ©r   r   rf   r\   r   re   r   Ú_getter_bagx   ó   zXmpInformation._getter_bagc                    rX   )Nc           	         s´   | j  ˆi ¡ ˆ¡}|r|S g }|  dˆˆ¡D ]5}| td¡}t|ƒr@|D ]}| td¡D ]}|  |¡}ˆ |ƒ}| |¡ q-q%qˆ |  |¡ƒ}| |¡ q| j  ˆi ¡}||ˆ< |S )Nr-   ÚSeqrZ   r[   )	r   r`   ra   r!   ÚseqsÚseqr&   r3   rd   re   r   r   r\   Œ   s&   
ýÿz'XmpInformation._getter_seq.<locals>.getr   rg   r   re   r   Ú_getter_seq‹   s   zXmpInformation._getter_seqc                    rX   )Nc           	         s²   | j  ˆi ¡ ˆ¡}|r|S i }|  dˆˆ¡D ]4}| td¡}t|ƒrB|D ]}| td¡D ]}|  |¡}ˆ |ƒ}||| d¡< q-q%qˆ |  |¡ƒ|d< q| j  ˆi ¡}||ˆ< |S )Nr-   ÚAltrZ   zxml:langz	x-default)	r   r\   r"   r   r   r]   r2   ÚgetAttributer_   )	r   r`   ra   r!   ÚaltsÚaltr&   r3   rd   re   r   r   r\   ¢   s$   
ýÿz+XmpInformation._getter_langalt.<locals>.getr   rg   r   re   r   Ú_getter_langalt¡   s   zXmpInformation._getter_langaltc                    rX   )Nc                    s|   | j  ˆi ¡ ˆ¡}|r|S d }|  dˆˆ¡D ]}|j|jkr#|j}n|  |¡} |d kr1ˆ |ƒ}| j  ˆi ¡}||ˆ< |S r,   )r   r\   r"   r.   ÚATTRIBUTE_NODEÚ	nodeValuer2   r_   )r   r`   r3   r!   rd   re   r   r   r\   ·   s   
z*XmpInformation._getter_single.<locals>.getr   rg   r   re   r   Ú_getter_single¶   ri   zXmpInformation._getter_singleÚcontributorÚcoverageÚcreatorÚdateÚdescriptionÚformatÚ
identifierÚlanguageÚ	publisherÚrelationÚrightsÚsourceÚsubjectÚtitleÚtypeÚKeywordsÚ
PDFVersionÚProducerÚ
CreateDateÚ
ModifyDateÚMetadataDateÚCreatorToolÚ
DocumentIDÚ
InstanceIDc                 C   s®   t | dƒsTi | _|  dt¡D ]E}|j}	 | tdƒ¡}|dkr n|d |… tt||d |d … dd	�ƒ ||d d …  }q|j	|j
krI|j}n|  |¡}|| j|< q| jS )
NÚ_custom_propertiesr-   Tu   â†‚rD   r   é   é   )Úbase)ÚhasattrrŽ   r+   ÚPDFX_NAMESPACEÚ	localNameÚfindr   Úchrr?   r.   rs   rt   r2   )r   ÚnodeÚkeyÚidxr3   r   r   r   Úcustom_propertiesM  s   
<û
z XmpInformation.custom_propertiesN)/Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r+   r2   r4   rW   ÚstaticmethodÚ_test_converter_daterh   rm   rr   ru   ÚpropertyÚDC_NAMESPACEÚdc_contributorÚdc_coverageÚ
dc_creatorÚdc_dateÚdc_descriptionÚ	dc_formatÚdc_identifierÚdc_languageÚdc_publisherÚdc_relationÚ	dc_rightsÚ	dc_sourceÚ
dc_subjectÚdc_titleÚdc_typeÚPDF_NAMESPACEÚpdf_keywordsÚpdf_pdfversionÚpdf_producerÚXMP_NAMESPACEÚxmp_createDateÚxmp_modifyDateÚxmp_metadataDateÚxmp_creatorToolÚXMPMM_NAMESPACEÚxmpmm_documentIdÚxmpmm_instanceIdrš   r   r   r   r   r   6   s‚    	r   )ÚrerN   rJ   Úgenericr   Úxml.domr   Úxml.dom.minidomr   Úutilsr   r   r¢   r¶   r²   r»   r“   ÚcompileÚVERBOSErG   r   r   r   r   r   Ú<module>   s"    ò