B
    ±ªt\   ã               @   s0   d dl Z d dlZddlmZ G dd„ deƒZdS )é    Né   )ÚStringIOc               @   sÜ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zg fdd„Z	g fdd„Z
dd„ Zg fdd„Zg fdd„Zg fdd„Zg fdd„Zg fdd„Zdd„ Zg fdd„Zg fd d!„Zg fd"d#„Zg fd$d%„Zd&d'„ Zd(d)„ Zd*S )+Ú	XMLwriterz#
    Simple XML writer class.

    c             C   s   d | _ t d¡| _d| _d S )Nz["&<>
]F)ÚfhÚreÚcompileÚescapesÚinternal_fh)Úself© r   ú3lib/python3.7/site-packages/xlsxwriter/xmlwriter.pyÚ__init__   s    zXMLwriter.__init__c             C   s   || _ d| _d S )NF)r   r	   )r
   Z
filehandler   r   r   Ú_set_filehandle   s    zXMLwriter._set_filehandlec             C   s2   t |tƒrd| _|| _nd| _t |dd¡| _d S )NFTÚwzutf-8)Ú
isinstancer   r	   r   ÚcodecsÚopen)r
   Úfilenamer   r   r   Ú_set_xml_writer"   s
    
zXMLwriter._set_xml_writerc             C   s   | j r| j ¡  d S )N)r	   r   Úclose)r
   r   r   r   Ú
_xml_close+   s    zXMLwriter._xml_closec             C   s   | j  d¡ d S )Nz8<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
)r   Úwrite)r
   r   r   r   Ú_xml_declaration0   s    zXMLwriter._xml_declarationc             C   s@   x*|D ]"\}}|   |¡}|d||f 7 }qW | j d| ¡ d S )Nz %s="%s"z<%s>)Ú_escape_attributesr   r   )r
   ÚtagÚ
attributesÚkeyÚvaluer   r   r   Ú_xml_start_tag5   s    
zXMLwriter._xml_start_tagc             C   s6   x |D ]\}}|d||f 7 }qW | j  d| ¡ d S )Nz %s="%s"z<%s>)r   r   )r
   r   r   r   r   r   r   r   Ú_xml_start_tag_unencoded=   s    z"XMLwriter._xml_start_tag_unencodedc             C   s   | j  d| ¡ d S )Nz</%s>)r   r   )r
   r   r   r   r   Ú_xml_end_tagF   s    zXMLwriter._xml_end_tagc             C   s@   x*|D ]"\}}|   |¡}|d||f 7 }qW | j d| ¡ d S )Nz %s="%s"z<%s/>)r   r   r   )r
   r   r   r   r   r   r   r   Ú_xml_empty_tagJ   s    
zXMLwriter._xml_empty_tagc             C   s6   x |D ]\}}|d||f 7 }qW | j  d| ¡ d S )Nz %s="%s"z<%s/>)r   r   )r
   r   r   r   r   r   r   r   Ú_xml_empty_tag_unencodedR   s    z"XMLwriter._xml_empty_tag_unencodedc             C   sT   |}x*|D ]"\}}|   |¡}|d||f 7 }q
W |  |¡}| j d|||f ¡ d S )Nz %s="%s"z<%s>%s</%s>)r   Ú_escape_datar   r   )r
   r   Údatar   Zend_tagr   r   r   r   r   Ú_xml_data_element[   s    

zXMLwriter._xml_data_elementc             C   sH   d}x*|D ]"\}}|   |¡}|d||f 7 }q
W | j d||f ¡ d S )NÚ z %s="%s"z<c%s t="s"><v>%d</v></c>)r   r   r   )r
   Úindexr   Úattrr   r   r   r   r   Ú_xml_string_elementf   s
    
zXMLwriter._xml_string_elementc             C   sR   d}x*|D ]"\}}|   |¡}|d||f 7 }q
W |  |¡}| j d||f ¡ d S )Nr&   z %s="%s"z<si><t%s>%s</t></si>)r   r#   r   r   )r
   Ústringr   r(   r   r   r   r   r   Ú_xml_si_elementp   s    

zXMLwriter._xml_si_elementc             C   s   | j  d| ¡ d S )Nz<si>%s</si>)r   r   )r
   r*   r   r   r   Ú_xml_rich_si_element|   s    zXMLwriter._xml_rich_si_elementc             C   sH   d}x*|D ]"\}}|   |¡}|d||f 7 }q
W | j d||f ¡ d S )Nr&   z %s="%s"z<c%s><v>%.16g</v></c>)r   r   r   )r
   Znumberr   r(   r   r   r   r   r   Ú_xml_number_element   s
    
zXMLwriter._xml_number_elementc             C   sV   d}x*|D ]"\}}|   |¡}|d||f 7 }q
W | j d||  |¡|  |¡f ¡ d S )Nr&   z %s="%s"z<c%s><f>%s</f><v>%s</v></c>)r   r   r   r#   )r
   ZformulaÚresultr   r(   r   r   r   r   r   Ú_xml_formula_element‹   s    

zXMLwriter._xml_formula_elementc             C   s`   d}d}|rd}x*|D ]"\}}|   |¡}|d||f 7 }qW |  |¡}| j d|||f ¡ d S )Nr&   z xml:space="preserve"z %s="%s"z+<c%s t="inlineStr"><is><t%s>%s</t></is></c>)r   r#   r   r   )r
   r*   Zpreserver   r(   Zt_attrr   r   r   r   r   Ú_xml_inline_string—   s    

zXMLwriter._xml_inline_stringc             C   sH   d}x*|D ]"\}}|   |¡}|d||f 7 }q
W | j d||f ¡ d S )Nr&   z %s="%s"z"<c%s t="inlineStr"><is>%s</is></c>)r   r   r   )r
   r*   r   r(   r   r   r   r   r   Ú_xml_rich_inline_string©   s    
z!XMLwriter._xml_rich_inline_stringc             C   st   y| j  |¡s|S W n tk
r(   |S X t dd|¡}t dd|¡}t dd|¡}t dd|¡}t d	d
|¡}|S )Nz[&]z&amp;z["]z&quot;z[<]z&lt;z[>]z&gt;z[
]z&#xA;)r   ÚsearchÚ	TypeErrorr   Úsub)r
   Z	attributer   r   r   r   ´   s    zXMLwriter._escape_attributesc             C   sX   y| j  |¡s|S W n tk
r(   |S X t dd|¡}t dd|¡}t dd|¡}|S )Nz[&]z&amp;z[<]z&lt;z[>]z&gt;)r   r2   r3   r   r4   )r
   r$   r   r   r   r#   Ä   s    zXMLwriter._escape_dataN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r    r!   r"   r%   r)   r+   r,   r-   r/   r0   r1   r   r#   r   r   r   r   r      s*   			

r   )r   r   Zcompatibilityr   Úobjectr   r   r   r   r   Ú<module>   s   