
    i                        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rd dlmZmZ dgZdd	iZ G d
 d      Zy)    )annotationsN)IOTYPE_CHECKINGDictIterableListOptionalTuple)escape	quoteattr)URIRef)	NamespaceNamespaceManager	XMLWriterz&#13;c                      e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZ ee      ZddZddZdddZ	i f	 	 	 	 	 	 	 ddZ
dddZdd	Zdd
ZddZy)r   Nc                    |xs d}t        j                  |      \  }}}}	 |	|      x| _        }|r|j                  d|z         g | _        || _        |xs i | _        d| _        y )Nzutf-8z#<?xml version="1.0" encoding="%s"?>T)codecslookupstreamwriteelement_stacknmextra_nsclosed)
selfr   namespace_managerencodingdeclr   encoderdecoderstream_readerstream_writers
             SC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/serializers/xmlwriter.py__init__zXMLWriter.__init__   sn     &w9?x9P6-  -V44fLL>IJ(*# B    c                2    dt        | j                        z  S )Nz  )lenr   r   s    r$   __get_indentzXMLWriter.__get_indent(   s    c$,,---r&   c                b    | j                   s#d| _         | j                  j                  d       y y )NT>)r   r   r   r)   s    r$   __close_start_tagzXMLWriter.__close_start_tag-   s'    {{DKKKc" r&   c                
   | j                          | j                  j                  } |d        || j                          |d| j	                  |      z         | j
                  j                  |       d| _        d| _        y )N
z<%sF)	_XMLWriter__close_start_tagr   r   indentqnamer   appendr   parent)r   urir   s      r$   pushzXMLWriter.push2   sg     !!ddkkedjjo%&!!#&r&   c                J   | j                   j                         }|r||k(  sJ | j                  j                  }| j                  sd| _         |d       d| _        y | j
                  r |d        || j                          |d| j                  |      z         d| _        y )NTz/>r/   z</%s>)r   popr   r   r   r4   r1   r2   )r   r5   topr   s       r$   r8   zXMLWriter.pop<   s      $$&#::!!{{DK$K 	 {{ddkk"'DJJsO+,r&   c                    | j                  |       |j                         D ]  \  }}| j                  ||        | j                  |       | j	                          y)z3Utility method for adding a complete simple elementN)r6   items	attributetextr8   )r   r5   content
attributeskvs         r$   elementzXMLWriter.elementK   sI     			#$$&DAqNN1a  '		'
r&   c                b   |s| j                   j                         }| j                  j                  } |d       |D ]1  \  }}|r |d|d|d       || j                  vs' |d|z         3 | j                  j                         D ]"  \  }}|r |d|d|d        |d|z         $ y )Nr/   z  xmlns:z="z"
z  xmlns="%s"
)r   
namespacesr   r   r   r;   )r   rD   r   prefix	namespaces        r$   rD   zXMLWriter.namespacesU   s    ++-J!!d!+FIVY?@t}},&23 ", "&!4!4!6FIVY?@&23	 "7r&   c                |    | j                   j                  } |d| j                  |      dt        |             y )N =)r   r   r2   r   )r   r5   valuer   s       r$   r<   zXMLWriter.attributeh   s+    !!$**S/9U+;<=r&   c                2   | j                          d|v rZd|v rVd|vrR| j                  j                  d       | j                  j                  |       | j                  j                  d       y | j                  j                  t        |t                     y )N<r,   z]]>z	<![CDATA[)r0   r   r   r   ESCAPE_ENTITIES)r   r=   s     r$   r=   zXMLWriter.textl   sq     $;3$;5+<KKk*KKd#KKe$KKfT?;<r&   c                
   | j                   j                         D ]L  \  }}|j                  |      s|dk7  r!dj                  ||t	        |      d g      c S |t	        |      d c S  | j
                  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   r5   prenss       r$   r2   zXMLWriter.qnameu   sw     }}**,GC~~b!"988S#c"gi.$9::s2wy>) - ww##C((r&   )N   N)
r   z	IO[bytes]r   r   r   Optional[str]r   intr   zOptional[Dict[str, Namespace]])returnstr)rY   None)r5   rZ   rY   r[   )N)r5   rW   rY   r[   )r5   rZ   r>   rZ   r?   zDict[URIRef, str]rY   r[   )rD   zIterable[Tuple[str, str]]rY   r[   )r5   rZ   rJ   rZ   rY   r[   )r=   rZ   rY   r[   )r5   rZ   rY   rZ   )__name__
__module____qualname__r%   _XMLWriter__get_indentpropertyr1   r0   r6   r8   rB   rD   r<   r=   r2    r&   r$   r   r      s    
 #'37 ,  	
  1*. l#F#
  GI!$2C	4&>=)r&   )
__future__r   r   typingr   r   r   r   r   r	   r
   xml.sax.saxutilsr   r   rdflib.termr   rdflib.namespacer   r   __all__rM   r   ra   r&   r$   <module>rh      s>    "  K K K . < -/n) n)r&   