
    ,siG>                     l   d Z ddlZddlZddlZddlmZ ddl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 dd
lmZ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#dZ$ ejJ                  dejL                        Z' e
d      Z(de(de(fdZ)de*dej                  fdZ+e)fdeddde*deegef   de	e,e*      f
dZ-d e*d!e*dedge	e,e*      f   fd"Z.e)fd e*d!e*deegef   dedge	e,e      f   fd#Z/d e*d!e*dedge	e0eef      f   fd$Z1e)fd e*d!e*dee*gef   dedge	e   f   fd%Z2 G d& dee      Z3y)'z~
Anything related to Extensible Metadata Platform (XMP) metadata.

https://en.wikipedia.org/wiki/Extensible_Metadata_Platform
    N)Iterator)AnyCallableOptionalTypeVarUnion)DocumentparseString)Element)
ExpatError   )XmpInformationProtocol)
StreamTypedeprecate_with_replacementdeprecation_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/zhttp://www.aiim.org/pdfa/ns/id/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                     | S N )r   s    U/var/www/python-projects/worksol/worksolenv/lib/python3.12/site-packages/pypdf/xmp.py	_identityr   O   s    L    c           	      0   t         j                  |       }|t        d|        t        |j	                  d            }t        |j	                  d      xs d      }t        |j	                  d      xs d      }t        |j	                  d      xs d      }t        |j	                  d      xs d      }t        j                  |j	                  d	      xs d      }|j                  t
        j                        }||z
  d
z  }	t        |      }
t        |	      }|j	                  d      xs d}t        j                  ||||||
|      }|dk7  rDd |j                  d      D        \  }}|dz  }|dk  r|dz  }|t        j                  ||      z   }|S )NzInvalid date format: yearmonth1dayhour0minutesecondi@B tzdZc              3   2   K   | ]  }t        |        y wr   )int).0xs     r   	<genexpr>z"_converter_date.<locals>.<genexpr>f   s     !AQ#a&!As   :r   )hoursminutes)iso8601match
ValueErrorr*   groupdecimalDecimalto_integralROUND_FLOORdatetimesplit	timedelta)r   matchesr   r    r"   r#   r%   r&   seconds_decmilliseconds_decsecondsmillisecondsr'   dt	tzd_hourstzd_minutess                   r   _converter_daterE   S   su   mmE"G0899w}}V$%Dg&-#.E
gmmE")c
*Cw}}V$+,Dx(/C0F__W]]84;<F$$W%8%89K,	9+G'(L
--

%#C			4T67L	QB
cz!A#))C.!A	;R	q=2K($$9kJJIr   elementselfXmpInformation	list_type	converterc                     | j                  t        |      }g }t        |      rN|D ]G  }|j                  t        d      D ],  }|j                  |      } ||      }|j	                  |       . I |S y )Nli)getElementsByTagNameNSRDF_NAMESPACElen	_get_textappend)	rF   rG   rI   rJ   
containersretval	containeritemr   s	            r   _generic_getrV   n   s{     //yIJF
:# 	%I!88M %t,!%(e$%	%
 r   	namespacenamec                 D     dddt         t        t              f fd}|S )NrG   rH   r   c                 d   | j                   j                  i       j                        }|r|S g }| j                  d      D ]F  }t        || d      x}|j	                  |       %| j                  |      }|j                  |       H | j                   j                  i       }||<   |S )N BagrI   cachegetget_elementrV   extendrP   rQ   
setdefault)	rG   cachedrS   rF   bagsr   ns_cacherX   rW   s	          r   r`   z_getter_bag.<locals>.get   s    	2.2248M''It< 	%G$WdeDDQd#w/e$	% ::((B7r   )r   liststrrW   rX   r`   s   `` r   _getter_bagrj   }   s'    " xS	':  Jr   c                 H     dddt         t        t              f fd}|S )NrG   rH   r   c                    | j                   j                  
i       j                  	      }|r|S g }| j                  d
	      D ]o  }t        || d      x}|j	                  |       &t        || d      x}|j	                  |       H | j                  |            }|j                  |       q | j                   j                  
i       }||	<   |S )Nr[   Seq)rI   rJ   r\   r]   r^   )rG   rd   rS   rF   seqsre   r   rf   rJ   rX   rW   s           r   r`   z_getter_seq.<locals>.get   s    	2.2248M''It< 	%G$WdeyYYfd#&wFF$S d#!$.."9:e$	% ::((B7r   )r   rg   r   rW   rX   rJ   r`   s   ``` r   _getter_seqrp      s'    " xS	': 0 Jr   c                 P     dddt         t        t        t        f      f fd}|S )NrG   rH   r   c                    | j                   j                  
i       j                  	      }|r|S i }| j                  d
	      D ]  }|j                  t        d      }t        |      rH|D ]B  }|j                  t        d      D ]'  }| j                  |      }|||j                  d      <   ) D l| j                  |      |d<    | j                   j                  
i       }||	<   |S )Nr[   AltrL   zxml:langz	x-default)	r_   r`   ra   rM   rN   rO   rP   getAttributerc   )rG   rd   rS   rF   altsaltrU   r   rf   rX   rW   s            r   r`   z_getter_langalt.<locals>.get   s    	2.2248M''It< 	>G11-GD4y FC # : :=$ O F $t 4@Et00<=FF
 '+nnW&={#	> ::((B7r   )r   dictr   ri   s   `` r   _getter_langaltrx      s+    " xS#X'? $ Jr   c                 :     dddt         t           f fd}|S )NrG   rH   r   c                 `   | j                   j                  i       j                        }|r|S d }| j                  d      D ]:  }|j                  |j                  k(  r|j
                  }n| j                  |      } n | |      }| j                   j                  i       }||<   |S Nr[   )r_   r`   ra   nodeTypeATTRIBUTE_NODE	nodeValuerP   rc   )rG   rd   r   rF   rf   rJ   rX   rW   s        r   r`   z_getter_single.<locals>.get   s    	2.2248M''It< 	G7#9#99))w/	 e$E::((B7r   )r   r   ro   s   ``` r   _getter_singler      s"    " x} " Jr   c            	          e Zd ZdZdeddfdZ	 d*dededee	f   ddfdZ
ded	ed
edee   fdZded	edee   fdZdedef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 ee3d'            Z4	  e ee3d(            Z5	 ede6eef   fd)       Z7y)+rH   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                     || _         	 | j                   j                         }t        |      }|j                  t        d      d   | _        i | _	        y # t        t        f$ r}t        d|       d }~ww xY w)Nz#XML in XmpInformation was invalid: RDFr   )
r   get_datar
   AttributeErrorr   r   rM   rN   rdf_rootr_   )rG   r   datadoc_rootes        r   __init__zXmpInformation.__init__   s    	J;;'')D!,T!2H %-$C$C5%

% &(
 
+ 	J!DQCHII	Js   %A A6#A11A6encryption_keyc                 p    t        ddd       |t        dd       | j                  j                  |       y )NzXmpInformation.write_to_streamzPdfWriter.xmp_metadataz6.0.0z/the encryption_key parameter of write_to_streamz5.0.0)r   r   r   write_to_stream)rG   r   r   s      r   r   zXmpInformation.write_to_stream   s>     	#,$	

 %&A7 	##F+r   	about_urirW   rX   c              #      K   | j                   j                  t        d      D ]N  }|j                  t        d      |k(  s|j	                  ||      }|| |j                  ||      E d {    P y 7 wNDescriptionabout)r   rM   rN   getAttributeNSgetAttributeNodeNS)rG   r   rW   rX   descattrs         r   ra   zXmpInformation.get_element  sv     MM88V 	HD""=':iG..y$?#J66y$GGG	H
 Hs   =A7 -A7-A5.A7c              #     K   | j                   j                  t        d      D ]  }|j                  t        d      |k(  st	        |j
                  j                        D ]4  }|j
                  j                  |      }|s!|j                  |k(  s1| 6 |j                  D ]  }|j                  |k(  s|   y wr   )
r   rM   rN   r   range
attributeslengthrU   namespaceURI
childNodes)rG   r   rW   r   ir   childs          r   get_nodes_in_namespacez%XmpInformation.get_nodes_in_namespace  s     MM88V 	$D""=':iGt556 #A??//2D 1 1Y >"
# "__ $E))Y6#$	$s   =B> ?B> B>$B>5	B>rF   c                 ~    d}|j                   D ]+  }|j                  |j                  k(  s||j                  z  }- |S r{   )r   r|   	TEXT_NODEr   )rG   rF   textr   s       r   rP   zXmpInformation._get_text  sA    '' 	#E~~0

"	# r   contributorcoveragecreatordatedescriptionformat
identifierlanguage	publisherrelationrightssourcesubjecttitletypeKeywords
PDFVersionProducer
CreateDate
ModifyDateMetadataDateCreatorTool
DocumentID
InstanceIDpartconformancec           
         t        | d      si | _        | j                  dt              D ]  }|j                  }	 |j                  d      }|dk(  rn/|d| t        t        ||dz   |dz    d	            z   ||dz   d z   }F|j                  |j                  k(  r|j                  }n| j                  |      }|| j                  |<    | 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[   u   ↂr/   Nr         )base)hasattrr   r   PDFX_NAMESPACE	localNamefindchrr*   r|   r}   r~   rP   )rG   nodekeyidxr   s        r   custom_propertiesz XmpInformation.custom_properties  s     t12&(D#33BG 5nn((8,CbyDS	c#cAga"8rBCDcAgi.)   ==D$7$77 NNE NN40E/4'',!5" &&&r   r   )8__name__
__module____qualname____doc__r   r   r   r   rh   bytesr   r   r   ra   r   
XmlElementrP   propertyrj   DC_NAMESPACEdc_contributorr   dc_coveragerp   
dc_creatorrE   dc_daterx   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_create_datexmp_modify_datexmp_metadata_datexmp_creator_toolXMPMM_NAMESPACExmpmm_document_idxmpmm_instance_idPDFAID_NAMESPACEpdfaid_partpdfaid_conformancerw   r   r   r   r   rH   rH      s   
(} 
( 
( MQ, ,27c58H2I,	,HS HS H HQT H	$ 	$ 	$QT 	$   k,FGN >,
CDK>+lI>?J {<IJG olMJKN h?@I(^L,GHM,;|Z@AKKKkBCL0;|Z@AK x@AI" h?@IM+lI>?J- g>?HC{<89GJN=*EFLDn]LIJN7N=*EFL@}lODO }lODO !}noF  }m LMG !NOQ !NO >*:FCDKW!.1A="QRP'4S> ' 'r   )4r   r:   r6   recollections.abcr   typingr   r   r   r   r   xml.dom.minidomr	   r
   r   r   xml.parsers.expatr   
_protocolsr   _utilsr   r   r   errorsr   genericr   r   rN   r   r   r   r   r   r   compileVERBOSEr2   r   r   rh   rE   rg   rV   rj   rp   rw   rx   r   rH   r   r   r   <module>r      s     	 $  2 1 ( . V V   -=1..3( 1 5 
"** JJ!( CLQ 1 3 8#4#4 8 hq#3@CPXZ]Y^`cYcPdd3i (49"556, BK*2C5#:*> (49"556< (4S>"::;2 BK*2C5#:*> (3-/0.J'+Y J'r   