o
    ÒmÆ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ÚdecoderZstream_readerZstream_writer© r$   ú^/home/kim/smarthome/.venv/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%   Z__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%   Z__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!   r-   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/>r.   z</%s>)r   Úpopr   r   r    r3   r0   r1   )r!   r-   Útopr   r$   r$   r%   r5   >   s   



zXMLWriter.popÚcontentÚ
attributesúDict[URIRef, str]c                 C  s>   |   |¡ | ¡ D ]
\}}|  ||¡ q	|  |¡ |  ¡  dS )z3Utility method for adding a complete simple elementN)r4   ÚitemsÚ	attributeÚtextr5   )r!   r-   r7   r8   Ú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 )Nr.   z  xmlns:%s="%s"
z  xmlns="%s"
)r   r@   r   r   r   r:   )r!   r@   r   ÚprefixÚ	namespacer$   r$   r%   r@   W   s   

€üzXMLWriter.namespacesÚvaluec                 C  s&   | j j}|d|  |¡t|ƒf ƒ d S )Nz %s=%s)r   r   r1   r   )r!   r-   rD   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[)r/   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   Zqname_strict)r!   r-   ÚpreÚnsr$   r$   r%   r1   w   s   
üzXMLWriter.qname)Nr   N)
r   r   r   r   r   r   r   r   r   r   )r'   r(   )r'   r+   )r-   r(   r'   r+   )N)r-   r   r'   r+   )r-   r(   r7   r(   r8   r9   r'   r+   )r@   rA   r'   r+   )r-   r(   rD   r(   r'   r+   )r<   r(   r'   r+   )r-   r(   r'   r(   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   Z_XMLWriter__get_indentÚpropertyr0   r/   r4   r5   r?   r@   r;   r<   r1   r$   r$   r$   r%   r      s"    ú



ÿ

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