U
    ºmœdž  ã                   @   sl   d Z ddlmZmZmZmZ ddlZddlZddlZdZ	G dd„ de
ƒZdd„ Zd	d
„ Zdd„ Zdd„ ZdS )z*xmlWriter.py -- Simple XML authoring classé    )ÚbyteordÚstrjoinÚtobytesÚtostrNz  c                   @   s¬   e Zd Zedddfdd„Zdd„ Zdd	„ Zd
d„ Zd*dd„Zdd„ Z	d+dd„Z
dd„ Zd,dd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS )-Ú	XMLWriterNÚutf_8Ú
c                 C   s
  |  ¡  dd¡ dd¡dkr$tdƒ‚|dkr2tj}t|dƒsV|| _t|dƒ| _d| _	nd | _|| _d	| _	z| j 
d
¡ t| _W n& tk
r¤   | j 
d¡ t| _Y nX |  |¡| _|d krÊ|  tj¡| _n|  |¡| _d| _g | _d| _|| _d| _|  d¡ |  ¡  d S )Nú-Ú Ú_Úutf8z!Only UTF-8 encoding is supported.ÚwriteÚwbTFó    r   é   z&<?xml version="1.0" encoding="UTF-8"?>)ÚlowerÚreplaceÚ	ExceptionÚsysÚstdoutÚhasattrÚfilenameÚopenÚfileÚ_closeStreamr   r   ÚtotypeÚ	TypeErrorr   ÚindentwhiteÚosÚlinesepÚ
newlinestrÚindentlevelÚstackÚ
needindentÚidlefuncÚidlecounterÚ	_writerawÚnewline)ÚselfZ
fileOrPathr   r$   Úencodingr    © r*   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/misc/xmlWriter.pyÚ__init__   s8    


zXMLWriter.__init__c                 C   s   | S ©Nr*   ©r(   r*   r*   r+   Ú	__enter__9   s    zXMLWriter.__enter__c                 C   s   |   ¡  d S r-   )Úclose)r(   Zexception_typeZexception_valueÚ	tracebackr*   r*   r+   Ú__exit__<   s    zXMLWriter.__exit__c                 C   s   | j r| j ¡  d S r-   )r   r   r0   r.   r*   r*   r+   r0   ?   s    zXMLWriter.closeTc                 C   s   | j t|ƒ|d� dS )zWrites text.©ÚindentN©r&   Úescape)r(   Ústringr4   r*   r*   r+   r   C   s    zXMLWriter.writec                 C   s   |   d| d ¡ dS )zWrites text in a CDATA section.z	<![CDATA[z]]>N)r&   ©r(   r7   r*   r*   r+   Ú
writecdataG   s    zXMLWriter.writecdataFc                 C   s   | j t|ƒ|d� dS )z¸Writes a bytes() sequence into the XML, escaping
        non-ASCII bytes.  When this is read in xmlReader,
        the original bytes can be recovered by encoding to
        'latin-1'.)ÚstripN)r&   Ú
escape8bit)r(   Údatar:   r*   r*   r+   Ú	write8bitK   s    zXMLWriter.write8bitc                 C   s   | j t|ƒdd� dS )z Writes text without indentation.Fr3   Nr5   r8   r*   r*   r+   Úwrite_noindentR   s    zXMLWriter.write_noindentc                 C   sN   |r$| j r$| j | j| j ¡ d| _ | j|dd�}|r>| ¡ }| j |¡ dS )z Writes bytes, possibly indented.r   r   )r)   N)r#   r   r   r!   r   r   r:   )r(   r<   r4   r:   Úsr*   r*   r+   r&   V   s    
zXMLWriter._writerawc                 C   sB   | j  | j¡ d| _| j}|d s4| jd k	r4|  ¡  |d | _d S )Nr   éd   )r   r   r    r#   r%   r$   )r(   r%   r*   r*   r+   r'   `   s    zXMLWriter.newlinec                 C   sZ   t |ƒ}| d¡}|  d|d  ¡ |dd … D ]}|  ¡  |  d| ¡ q0|  d¡ d S )Nr   z<!-- r   r   z     z -->)r6   Úsplitr&   r'   )r(   r<   ÚlinesÚliner*   r*   r+   Úcommenth   s    
zXMLWriter.commentc                 O   s&   | j ||Ž}d||f }|  |¡ d S )Nz<%s%s/>)Ústringifyattrsr&   ©r(   Ú_TAG_ÚargsÚkwargsZattrdatar<   r*   r*   r+   Ú	simpletagq   s    zXMLWriter.simpletagc                 O   s:   | j ||Ž}d||f }|  |¡ | j |¡ |  ¡  d S )Nz<%s%s>)rE   r&   r"   Úappendr4   rF   r*   r*   r+   Úbegintagv   s
    
zXMLWriter.begintagc                 C   sB   | j r| j d |kstdƒ‚| j d= |  ¡  d| }|  |¡ d S )Néÿÿÿÿznonmatching endtagz</%s>)r"   ÚAssertionErrorÚdedentr&   )r(   rG   r<   r*   r*   r+   Úendtag}   s
    zXMLWriter.endtagc           
      C   s†   d}|d }d}t dt|ƒ|ƒD ]`}t|||| … ƒ}d}d}t d||ƒD ] }	|| ||	|	| …  }d}qL|  |¡ |  ¡  q d S )Né   é   é   r   r
   ú )ÚrangeÚlenÚhexStrr&   r'   )
r(   r<   Z
linelengthZhexlinelengthÚ	chunksizeÚiZhexlinerC   ÚwhiteÚjr*   r*   r+   Údumphex„   s    
zXMLWriter.dumphexc                 C   s   | j d | _ d S )Nr   )r!   r.   r*   r*   r+   r4   ’   s    zXMLWriter.indentc                 C   s   | j dkst‚| j d | _ d S )Nr   r   )r!   rN   r.   r*   r*   r+   rO   •   s    zXMLWriter.dedentc                 O   s|   |r|rt ‚t| ¡ ƒ}n"|r8t|ƒdks.t ‚|d }ndS d}|D ]2\}}t|ttfƒsbt|ƒ}|d|t|ƒf  }qD|S )Nr   r   r
   z %s="%s")rN   ÚsortedÚitemsrV   Ú
isinstanceÚbytesÚstrÚ
escapeattr)r(   rH   rI   Ú
attributesr<   ÚattrÚvaluer*   r*   r+   rE   ™   s    
zXMLWriter.stringifyattrs)T)F)TF)Ú__name__Ú
__module__Ú__qualname__ÚINDENTr,   r/   r2   r0   r   r9   r=   r>   r&   r'   rD   rJ   rL   rP   r\   r4   rO   rE   r*   r*   r*   r+   r      s,   ú
-



	r   c                 C   s>   t | dƒ} |  dd¡} |  dd¡} |  dd¡} |  dd	¡} | S )
Nr   ú&z&amp;ú<z&lt;ú>z&gt;úz&#13;)r   r   ©r<   r*   r*   r+   r6   ª   s    
r6   c                 C   s   t | ƒ} |  dd¡} | S )Nú"z&quot;)r6   r   rn   r*   r*   r+   rb   ³   s    rb   c                 C   s   dd„ }t t||  d¡ƒƒS )zInput is Unicode string.c                 S   s@   t | ƒ}d|  krdkr,n n| dkr,| S dt|ƒ d S d S )Né    é   z<&>z&#ú;)ÚordÚrepr)ÚcÚnr*   r*   r+   Ú
escapechar¼   s     zescape8bit.<locals>.escapecharzlatin-1)r   ÚmapÚdecode)r<   rw   r*   r*   r+   r;   ¹   s    r;   c                 C   s@   t j}d}| D ],}t|ƒ}|||d? d@   ||d@   }q|S )Nr
   é   é   )r7   Ú	hexdigitsr   )r?   ÚhÚrru   rY   r*   r*   r+   rW   Æ   s    "rW   )Ú__doc__ZfontTools.misc.textToolsr   r   r   r   r   r   r7   ri   Úobjectr   r6   rb   r;   rW   r*   r*   r*   r+   Ú<module>   s     	