o
    
 ¢iô  ã                   @  sˆ   d dl mZ d dlZd dl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 er4d dlmZmZ dgZdd	iZG d
d„ dƒZdS )é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚDictÚIterableÚListÚOptionalÚTuple)ÚescapeÚ	quoteattr)ÚURIRef)Ú	NamespaceÚNamespaceManagerÚ	XMLWriterúz&#13;c                   @  sŒ   e Zd ZdZ			d-d.dd„Zd/dd„ZeeƒZd0dd„Zd1dd„Z	d2d3dd„Z
i fd4dd „Zd2d5d#d$„Zd6d&d'„Zd7d)d*„Zd8d+d,„ZdS )9r   z,A simple XML writer that writes to a stream.Né   Ústreamú	IO[bytes]Únamespace_managerr   ÚencodingúOptional[str]ÚdeclÚintÚextra_nsúOptional[Dict[str, Namespace]]c           
      C  sZ   |pd}t  |¡\}}}}	|	|ƒ | _}|r| d| ¡ g | _|| _|p&i | _d| _d S )Nzutf-8z#<?xml version="1.0" encoding="%s"?>T)ÚcodecsÚlookupr   ÚwriteÚelement_stackÚnmr   Úclosed)
Úselfr   r   r   r   r   ÚencoderÚdecoderÚstream_readerÚstream_writer© r&   úX/home/ubuntu/.local/lib/python3.10/site-packages/rdflib/plugins/serializers/xmlwriter.pyÚ__init__   s   

zXMLWriter.__init__ÚreturnÚstrc                 C  s   dt | jƒ S )Nz  )Úlenr   ©r!   r&   r&   r'   Ú__get_indent*   s   zXMLWriter.__get_indentÚNonec                 C  s    | j sd| _ | j d¡ d S d S )NTú>)r    r   r   r,   r&   r&   r'   Ú__close_start_tag/   s   þzXMLWriter.__close_start_tagÚuric                 C  sP   |   ¡  | jj}|dƒ || jƒ |d|  |¡ ƒ | j |¡ d| _d| _d S )NÚ
z<%sF)	Ú_XMLWriter__close_start_tagr   r   ÚindentÚqnamer   Úappendr    Úparent)r!   r1   r   r&   r&   r'   Úpush4   s   

zXMLWriter.pushc                 C  sl   | j  ¡ }|r||ksJ ‚| jj}| jsd| _|dƒ n| jr(|dƒ || jƒ |d|  |¡ ƒ d| _d S )NTz/>r2   z</%s>)r   Úpopr   r   r    r7   r4   r5   )r!   r1   Útopr   r&   r&   r'   r9   >   s   



zXMLWriter.popÚcontentÚ
attributesúDict[URIRef, str]c                 C  s>   |   |¡ | ¡ D ]
\}}|  ||¡ q	|  |¡ |  ¡  dS )z3Utility method for adding a complete simple elementN)r8   ÚitemsÚ	attributeÚtextr9   )r!   r1   r;   r<   ÚkÚvr&   r&   r'   ÚelementM   s
   

zXMLWriter.elementÚ
namespacesúIterable[Tuple[str, str]]c                 C  s’   |s| j  ¡ }| jj}|dƒ |D ]\}}|r |d||f ƒ q|| jvr+|d| ƒ q| j ¡ D ]\}}|r@|d||f ƒ q1|d| ƒ q1d S )Nr2   z  xmlns:%s="%s"
z  xmlns="%s"
)r   rD   r   r   r   r>   )r!   rD   r   ÚprefixÚ	namespacer&   r&   r'   rD   W   s   

€üzXMLWriter.namespacesÚvaluec                 C  s&   | j j}|d|  |¡t|ƒf ƒ d S )Nz %s=%s)r   r   r5   r   )r!   r1   rH   r   r&   r&   r'   r?   j   s   zXMLWriter.attributer@   c                 C  s^   |   ¡  d|v r$d|v r$d|vr$| j d¡ | j |¡ | j d¡ d S | j t|tƒ¡ d S )Nú<r/   z]]>z	<![CDATA[)r3   r   r   r
   ÚESCAPE_ENTITIES)r!   r@   r&   r&   r'   r@   n   s   zXMLWriter.textc                 C  sd   | j  ¡ D ]&\}}| |¡r+|dkr!d ||t|ƒd… g¡  S |t|ƒd…   S q| j |¡S )zZCompute qname for a uri using our extra namespaces,
        or the given namespace managerÚ ú:N)r   r>   Ú
startswithÚjoinr+   r   Úqname_strict)r!   r1   ÚpreÚnsr&   r&   r'   r5   w   s   
üzXMLWriter.qname)Nr   N)
r   r   r   r   r   r   r   r   r   r   )r)   r*   )r)   r.   )r1   r*   r)   r.   )N)r1   r   r)   r.   )r1   r*   r;   r*   r<   r=   r)   r.   )rD   rE   r)   r.   )r1   r*   rH   r*   r)   r.   )r@   r*   r)   r.   )r1   r*   r)   r*   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   Ú_XMLWriter__get_indentÚpropertyr4   r3   r8   r9   rC   rD   r?   r@   r5   r&   r&   r&   r'   r      s"    ú



ÿ


	)Ú
__future__r   r   Útypingr   r   r   r   r   r   r	   Úxml.sax.saxutilsr
   r   Úrdflib.termr   Úrdflib.namespacer   r   Ú__all__rJ   r   r&   r&   r&   r'   Ú<module>   s    $