3
‰dG  ã               @   s:   d dl Z d dlmZmZ dgZddiZG dd„ deƒZdS )é    N)Ú	quoteattrÚescapeÚ	XMLWriterúz&#13;c               @   sn   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dS )r   Né   c       
      C   sZ   |pd}t j|ƒ\}}}}	|	|ƒ | _}|r:|jd| ƒ g | _|| _|pLi | _d| _d S )Nzutf-8z#<?xml version="1.0" encoding="%s"?>T)ÚcodecsÚlookupÚstreamÚwriteÚelement_stackÚnmÚextra_nsÚclosed)
Úselfr	   Znamespace_managerÚencodingÚdeclr   ÚencoderÚdecoderZstream_readerZstream_writer© r   úF/tmp/pip-build-7vycvbft/rdflib/rdflib/plugins/serializers/xmlwriter.pyÚ__init__   s    
zXMLWriter.__init__c             C   s   dt | jƒ S )Nz  )Úlenr   )r   r   r   r   Z__get_indent   s    zXMLWriter.__get_indentc             C   s   | j sd| _ | jjdƒ d S )NTú>)r   r	   r
   )r   r   r   r   Z__close_start_tag   s    zXMLWriter.__close_start_tagc             C   sP   | j ƒ  | jj}|dƒ || jƒ |d| j|ƒ ƒ | jj|ƒ d| _d| _d S )NÚ
z<%sF)	Ú_XMLWriter__close_start_tagr	   r
   ÚindentÚqnamer   Úappendr   Úparent)r   Úurir
   r   r   r   Úpush"   s    
zXMLWriter.pushc             C   sl   | j jƒ }|r||kst‚| jj}| js8d| _|dƒ n*| jrP|dƒ || jƒ |d| j|ƒ ƒ d| _d S )NTz/>r   z</%s>)	r   ÚpopÚAssertionErrorr	   r
   r   r   r   r   )r   r   Útopr
   r   r   r   r!   ,   s    


zXMLWriter.popc             C   sB   | j |ƒ x |jƒ D ]\}}| j||ƒ qW | j|ƒ | jƒ  dS )z3Utility method for adding a complete simple elementN)r    ÚitemsÚ	attributeÚtextr!   )r   r   ÚcontentÚ
attributesÚkÚvr   r   r   Úelement;   s
    

zXMLWriter.elementc             C   sš   |s| j jƒ }| jj}|dƒ x<|D ]4\}}|rB|d||f ƒ q$|| jkr$|d| ƒ q$W x8| jjƒ D ]*\}}|r†|d||f ƒ qh|d| ƒ qhW d S )Nr   z  xmlns:%s="%s"
z  xmlns="%s"
)r   Ú
namespacesr	   r
   r   r$   )r   r,   r
   ÚprefixÚ	namespacer   r   r   r,   C   s    

zXMLWriter.namespacesc             C   s&   | j j}|d| j|ƒt|ƒf ƒ d S )Nz %s=%s)r	   r
   r   r   )r   r   Úvaluer
   r   r   r   r%   V   s    zXMLWriter.attributec             C   s\   | j ƒ  d|krFd|krFd|krF| jjdƒ | jj|ƒ | jjdƒ n| jjt|tƒƒ d S )Nú<r   z]]>z	<![CDATA[)r   r	   r
   r   ÚESCAPE_ENTITIES)r   r&   r   r   r   r&   Z   s    zXMLWriter.textc             C   s^   xP| j jƒ D ]B\}}|j|ƒr|dkr>dj||t|ƒd… ƒS |t|ƒd… S qW | j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   r   c   s    
zXMLWriter.qname)Nr   N)N)N)Ú__name__Ú
__module__Ú__qualname__r   Z_XMLWriter__get_indentÚpropertyr   r   r    r!   r+   r,   r%   r&   r   r   r   r   r   r      s    



	)r   Úxml.sax.saxutilsr   r   Ú__all__r1   Úobjectr   r   r   r   r   Ú<module>   s   