o
    i                  
   @   s   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dl	Z	ddl
Z
dZe	dZdZee
eddded	d
eddde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  zfontTools.ttx?	   )             i   i   )i  i  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rtj}t|ds+|| _t|d| _d| _	n	d | _|| _d	| _	z| j
d
 t| _W n tyQ   | j
d t| _Y nw | || _|d u rd| 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&    r0   g/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/fontTools/misc/xmlWriter.py__init__   s:   



zXMLWriter.__init__c                 C   s   | S Nr0   r.   r0   r0   r1   	__enter__G   s   zXMLWriter.__enter__c                 C   s   |    d S r3   )close)r.   Zexception_typeZexception_value	tracebackr0   r0   r1   __exit__J   s   zXMLWriter.__exit__c                 C   s   | j r
| j  d S d S r3   )r    r   r6   r4   r0   r0   r1   r6   M   s   zXMLWriter.closeTc                 C      | j t||d dS )zWrites text.indentNr,   escape)r.   stringr;   r0   r0   r1   r   Q      zXMLWriter.writec                 C   s   |  d| d  dS )zWrites text in a CDATA section.z	<![CDATA[z]]>N)r,   r.   r>   r0   r0   r1   
writecdataU   r?   zXMLWriter.writecdataFc                 C   r9   )zWrites 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.   datarB   r0   r0   r1   	write8bitY   s   zXMLWriter.write8bitc                 C   s   | j t|dd dS )z Writes text without indentation.Fr:   Nr<   r@   r0   r0   r1   write_noindent`   r?   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!   rB   )r.   rD   r;   rB   sr0   r0   r1   r,   d   s   
zXMLWriter._writerawc                 C   sB   | j | j d| _| j}|d s| jd ur|   |d | _d S )Nr   d   )r   r   r&   r)   r+   r*   )r.   r+   r0   r0   r1   r-   n   s   zXMLWriter.newlinec                 C   sZ   t |}|d}| d|d   |dd  D ]}|   | d|  q| d d S )Nr   z<!-- r   r   z     z -->)r=   splitr,   r-   )r.   rD   linesliner0   r0   r1   commentv   s   
zXMLWriter.commentc                 O   s*   | j |i |}d||f }| | d S )Nz<%s%s/>)stringifyattrsr,   r.   _TAG_argskwargsZattrdatarD   r0   r0   r1   	simpletag   s   zXMLWriter.simpletagc                 O   s>   | j |i |}d||f }| | | j| |   d S )Nz<%s%s>)rM   r,   r(   appendr;   rN   r0   r0   r1   begintag   s
   
zXMLWriter.begintagc                 C   sB   | j r
| j d |ksJ d| j d= |   d| }| | d S )Nznonmatching endtagz</%s>)r(   dedentr,   )r.   rO   rD   r0   r0   r1   endtag   s
   zXMLWriter.endtagc           
      C   s   d}|d }d}t dt||D ]0}t||||  }d}d}t d||D ]}	|| ||	|	|   }d}q&| | |   qd S )N         r   r    )rangelenhexStrr,   r-   )
r.   rD   Z
linelengthZhexlinelength	chunksizeiZhexlinerK   whitejr0   r0   r1   dumphex   s   

zXMLWriter.dumphexc                 C   s   | j d | _ d S )Nr   r'   r4   r0   r0   r1   r;      s   zXMLWriter.indentc                 C   s   | j dksJ | j d | _ d S )Nr   r   rd   r4   r0   r0   r1   rV      s   zXMLWriter.dedentc                 O   s|   |r|rJ t | }n|rt|dksJ |d }ndS d}|D ]\}}t|ttfs1t|}|d|t|f  }q"|S )Nr   r   r   z %s="%s")sorteditemsr]   
isinstancebytesstr
escapeattr)r.   rP   rQ   
attributesrD   attrvaluer0   r0   r1   rM      s   
zXMLWriter.stringifyattrs)T)F)TF)__name__
__module____qualname__INDENTr2   r5   r8   r6   r   rA   rE   rF   r,   r-   rL   rR   rT   rW   rc   r;   rV   rM   r0   r0   r0   r1   r      s.    
-



	r   c                 C   s   t | d} | dd} | dd} | dd} | dd	} | t}|| krGd
}t| }t| |kr@t| d| dd d }td|t |S )zQEscape characters not allowed in `XML 1.0 <https://www.w3.org/TR/xml/#NT-Char>`_.r   &z&amp;<z&lt;>z&gt;z&#13;
   Nr   rU   z...zEIllegal XML character(s) found; replacing offending string %r with %r)	r   r   	translateILLEGAL_XML_CHARSreprr]   TTX_LOGwarningREPLACEMENT)rD   ZnewDatamaxLenpreviewr0   r0   r1   r=      s"   

r=   c                 C   s   t | } | dd} | S )N"z&quot;)r=   r   )rD   r0   r0   r1   rj      s   rj   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vr| S dt| d S )Nr      z<&>z&#;)ordry   )cnr0   r0   r1   
escapechar   s    zescape8bit.<locals>.escapecharzlatin-1)r   mapdecode)rD   r   r0   r0   r1   rC      s   rC   c                 C   s@   t j}d}| D ]}t|}|||d? d@   ||d@   }q|S )Nr         )r>   	hexdigitsr   )rG   hrr   r`   r0   r0   r1   r^      s   "r^   )__doc__ZfontTools.misc.textToolsr   r   r   r   r   r$   r>   logging	itertoolsrq   	getLoggerrz   r|   dictfromkeyschainr\   rx   objectr   r=   rj   rC   r^   r0   r0   r0   r1   <module>   s4    
  