o
     Zh7                     @   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%de%de%fddZ&de'dejfddZ(de'de'dedge
e	e'  f fddZ)e&fde'de'deegef dedge
e	e  f fdd Z*de'de'dedge
eeef  f fd!d"Z+e&fde'de'dee'gef dedge
e f f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   @/var/www/html/lang_env/lib/python3.10/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p'd}t|dp0d}t|dp9d}t|d	pCd}|tj}|| d
 }	t|}
t|	}|dp_d}t		||||||
|}|dkrd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   s    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;   	namespacenameXmpInformationc                    s$   dddt tt  f fdd}|S )Nselfr>   r   c           	         s   | j i  }|r|S g }| d D ]$}|td}t|r;|D ]}|tdD ]}| |}|| q-q%q| j i }|| < |S )N ZBagli	cachegetget_elementgetElementsByTagNameNSRDF_NAMESPACElen	_get_textappend
setdefault)	r?   cachedretvalelementZbagsZbagitemr   ns_cacher=   r<   r   r   rD   o   s    
z_getter_bag.<locals>.get)r   r   strr<   r=   rD   r   rQ   r   _getter_bagl   s    rT   	converterc                    s&   dddt tt  f fdd}|S )Nr?   r>   r   c           	         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@   ZSeqrA   rB   )	r?   rL   rM   rN   ZseqsseqrO   r   rP   rU   r=   r<   r   r   rD      s&   
z_getter_seq.<locals>.get)r   r   r   r<   r=   rU   rD   r   rW   r   _getter_seq   s   "rY   c                    s(   dddt tttf  f fdd}|S )Nr?   r>   r   c           	         s   | j i  }|r|S i }| d D ].}|td}t|r>|D ]}|tdD ]}| |}|||d< q-q%q| ||d< q| j i }|| < |S )Nr@   ZAltrA   zxml:langz	x-default)	rC   rD   rE   rF   rG   rH   rI   ZgetAttributerK   )	r?   rL   rM   rN   ZaltsZaltrO   r   rP   rQ   r   r   rD      s"   
z_getter_langalt.<locals>.get)r   r   r   rS   r   rQ   r   _getter_langalt   s   $rZ   c                    s"   dddt t f fdd}|S )Nr?   r>   r   c                    s|   | j i }|r|S d }| dD ]}|j|jkr#|j}n| |} |d ur1 |}| j i }||< |S Nr@   )rC   rD   rE   nodeTypeATTRIBUTE_NODE	nodeValuerI   rK   )r?   rL   r   rN   rP   rW   r   r   rD      s   
z_getter_single.<locals>.get)r   r   rX   r   rW   r   _getter_single   s   r_   c                	   @   s2  e Zd ZdZdeddfddZ	d.dededee	f ddfdd	Z
d
edededee fddZd
ededee fddZdedef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*Z1	 eee0d+Z2	 ede3eef f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

    streamr   Nc              
   C   s`   || _ z| j  }t|}W n ty! } ztd| d }~ww |tdd | _i | _d S )Nz#XML in XmpInformation was invalid: ZRDFr   )	r`   get_datar   r   r   rF   rG   rdf_rootrC   )r?   r`   dataZdoc_rooter   r   r   __init__   s   

zXmpInformation.__init__encryption_keyc                 C   s"   |d ur	t dd | j| d S )Nz/the encryption_key parameter of write_to_streamz5.0.0)r   r`   write_to_stream)r?   r`   rf   r   r   r   rg      s
   zXmpInformation.write_to_stream	about_urir<   r=   c                 c   sV    | j tdD ] }|td|kr(|||}|d ur|V  |||E d H  qd S NDescriptionZabout)rb   rF   rG   getAttributeNSZgetAttributeNodeNS)r?   rh   r<   r=   descattrr   r   r   rE      s   zXmpInformation.get_elementc                 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 ri   )
rb   rF   rG   rk   range
attributeslengthrO   ZnamespaceURI
childNodes)r?   rh   r<   rl   irm   childr   r   r   get_nodes_in_namespace   s   


z%XmpInformation.get_nodes_in_namespacerN   c                 C   s*   d}|j D ]}|j|jkr||j7 }q|S r[   )rq   r\   Z	TEXT_NODErc   )r?   rN   textrs   r   r   r   rI      s   

zXmpInformation._get_textZcontributorZcoverageZcreatordatedescriptionformat
identifierlanguageZ	publisherZrelationZrightssourcesubjecttitletypeKeywordsZ
PDFVersionZProducerZ
CreateDateZ
ModifyDateZMetadataDateZCreatorToolZ
DocumentIDZ
InstanceIDc                 C   s   t | dsRi | _| dtD ]C}|j}	 |d}|dkrn|d| tt||d |d  d	d
 ||d d  }q|j|j	krG|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_propertiesr@   Tu   ↂr*   Nr         )base)hasattrr   rt   PDFX_NAMESPACEZ	localNamefindchrr%   r\   r]   r^   rI   )r?   nodekeyidxr   r   r   r   custom_propertiesm  s(   





z XmpInformation.custom_propertiesr   )5__name__
__module____qualname____doc__r   re   r   r	   rR   bytesrg   r   r   rE   rt   
XmlElementrI   propertyrT   DC_NAMESPACEZdc_contributorr_   Zdc_coveragerY   Z
dc_creatorr;   Zdc_daterZ   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>      s    	
	


).r   r5   r1   retypingr   r   r   r   r   r   r   r	   Zxml.dom.minidomr
   r   r   r   Zxml.parsers.expatr   Z_utilsr   r   errorsr   Zgenericr   r   rG   r   r   r   r   r   compileVERBOSEr-   r   r   rR   r;   rT   rY   rZ   r_   r>   r   r   r   r   <module>   sv    (




