U
    dG5                     @   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                   @   s   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()<PyPDF3.PdfFileReader.getXmpMetadata>`
    c                 C   s0   || _ t| j  }|tdd | _i | _d S )NZRDFr   )streamr   ZgetDatagetElementsByTagNameNSRDF_NAMESPACErdfRootcache)selfr   ZdocRoot r   ./tmp/pip-unpacked-wheel-eeeohlmn/PyPDF3/xmp.py__init__<   s    zXmpInformation.__init__c                 C   s   | j || d S N)r   writeToStream)r   r   Zencryption_keyr   r   r   r   B   s    zXmpInformation.writeToStreamc                 c   sZ   | j tdD ]F}|td|kr|||}|d kr<|V  |||D ]
}|V  qHqd S NDescriptionZabout)r   r	   r
   getAttributeNSZgetAttributeNodeNS)r   aboutUri	namespacenamedescattrelementr   r   r   
getElementE   s    zXmpInformation.getElementc                 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 r   )
r   r	   r
   r   range
attributeslengthitemZ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!   nodeTypeZ	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p8d}t|dpJd}t|dp\d}t|dppd}|tj}|| d	 }	|d
pd}
t|||||||	}|
dkrdd |
	dD \}}|d9 }|dk r|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matchr7   groupdecimalDecimalto_integralROUND_FLOORdatetimesplit	timedelta)r+   mr-   r.   r0   r1   r3   r4   secondsZmillisecondsr5   dtZ	tzd_hoursZtzd_minutesr   r   r   _converter_datec   s$    
zXmpInformation._converter_datec                    s    fdd}|S )Nc           	         s   | j i }|r|S g }| dD ]P}|td}t|r.|D ]2}|tdD ] }| |} |}|| qZqJq.| j i }||< |S )Nr&   ZBagli	r   getr   r	   r
   lenr*   append
setdefault)	r   cachedretvalr   ZbagsZbagr    r+   ns_cache	converterr   r   r   r   rO   y   s    
z'XmpInformation._getter_bag.<locals>.getr   r   r   rW   rO   r   rV   r   _getter_bagx   s    zXmpInformation._getter_bagc                    s    fdd}|S )Nc           	         s   | j i }|r|S g }| dD ]j}|td}t|r|D ]2}|tdD ] }| |} |}|| qZqJq. | |}|| q.| j i }||< |S )Nr&   ZSeqrM   rN   )	r   rS   rT   r   Zseqsseqr    r+   rU   rV   r   r   rO      s"    
z'XmpInformation._getter_seq.<locals>.getr   rX   r   rV   r   _getter_seq   s    zXmpInformation._getter_seqc                    s    fdd}|S )Nc           	         s   | j i }|r|S i }| dD ]h}|td}t|r|D ]6}|tdD ]$}| |} |}|||d< qZqJq. | ||d< q.| j i }||< |S )Nr&   ZAltrM   zxml:langz	x-default)	r   rO   r   r	   r
   rP   r*   getAttributerR   )	r   rS   rT   r   ZaltsZaltr    r+   rU   rV   r   r   rO      s     
z+XmpInformation._getter_langalt.<locals>.getr   rX   r   rV   r   _getter_langalt   s    zXmpInformation._getter_langaltc                    s    fdd}|S )Nc                    s   | j i }|r|S d }| dD ]&}|j|jkrF|j}n
| |} qVq.|d krf |}| j i }||< |S r%   )r   rO   r   r'   ATTRIBUTE_NODE	nodeValuer*   rR   )r   rS   r+   r   rU   rV   r   r   rO      s    
z*XmpInformation._getter_single.<locals>.getr   rX   r   rV   r   _getter_single   s    zXmpInformation._getter_singleZcontributorZcoverageZcreatordatedescriptionformat
identifierlanguageZ	publisherZrelationZrightssourcesubjecttitletypeZKeywordsZ
PDFVersionZProducerZ
CreateDateZ
ModifyDateZMetadataDateZCreatorToolZ
DocumentIDZ
InstanceIDc                 C   s   t | dsi | _| dtD ]}|j}|td}|dkr>q||d | tt||d |d  dd ||d d   }q&|j	|j
kr|j}n
| |}|| j|< q| jS )	N_custom_propertiesr&   u   ↂr<   r         )base)hasattrrj   r$   PDFX_NAMESPACEZ	localNamefindr   chrr7   r'   r^   r_   r*   )r   nodekeyidxr+   r   r   r   custom_propertiesM  s    
>
z XmpInformation.custom_propertiesN)/__name__
__module____qualname____doc__r   r   r   r$   r*   r,   rL   staticmethodZ_test_converter_daterY   r[   r]   r`   propertyDC_NAMESPACEZdc_contributorZdc_coverageZ
dc_creatorZdc_dateZ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_createDateZxmp_modifyDateZxmp_metadataDateZxmp_creatorToolXMPMM_NAMESPACEZxmpmm_documentIdZxmpmm_instanceIdru   r   r   r   r   r   6   sP   	r   )rerF   rB   Zgenericr   xml.domr   Zxml.dom.minidomr   utilsr   r
   r|   r~   r}   r   ro   compileVERBOSEr?   r   r   r   r   r   <module>   s    