
    jke                     j    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e
      Zd Zd Zd	 Zd
 Zy)z*xmlWriter.py -- Simple XML authoring class    )byteordstrjointobytestostrNz  c                       e Zd ZedddfdZd Zd Zd ZddZd	 Z	dd
Z
d ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)	XMLWriterNutf_8
c                    |j                         j                  dd      j                  dd      dk7  rt        d      |dk(  rt        j                  }t        |d      s || _        t        |d      | _        d| _	        nd | _        || _        d	| _	        	 | j                  j                  d
       t        | _        | j                  |      | _        |%| j                  t         j"                        | _        n| j                  |      | _        d| _        g | _        d| _        || _        d| _        | j1                  d       | j3                          y # t        $ r) | j                  j                  d       t        | _        Y w xY w)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)self
fileOrPathr    r'   encodingr#   s         :/usr/lib/python3/dist-packages/fontTools/misc/xmlWriter.py__init__zXMLWriter.__init__   sE    >>##C,44S"=G?@@Jz7+&DMZ.DI $D DM"DI %D	  IIOOC !DK
  ;;{3"kk"**5DO"kk*5DO
 ?@  	 IIOOBDK	 s   &E /FFc                     | S N r+   s    r.   	__enter__zXMLWriter.__enter__9   s    r   c                 $    | j                          y r1   )close)r+   exception_typeexception_value	tracebacks       r.   __exit__zXMLWriter.__exit__<   s    

r   c                 R    | j                   r| j                  j                          y y r1   )r   r   r6   r3   s    r.   r6   zXMLWriter.close?   s    IIOO r   c                 <    | j                  t        |      |       y)zWrites text.indentNr)   escape)r+   stringr>   s      r.   r   zXMLWriter.writeC   s    vf~f5r   c                 2    | j                  d|z   dz          y)zWrites text in a CDATA section.z	<![CDATA[z]]>N)r)   r+   rA   s     r.   
writecdatazXMLWriter.writecdataG   s    {V+e34r   c                 <    | j                  t        |      |       y)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+   datarF   s      r.   	write8bitzXMLWriter.write8bitK   s    
 	z$'u5r   c                 <    | j                  t        |      d       y)z Writes text without indentation.Fr=   Nr?   rC   s     r.   write_noindentzXMLWriter.write_noindentR   s    vf~e4r   c                    |rE| j                   r9| j                  j                  | j                  | j                  z         d| _         | j                  |d      }|r|j                         }| j                  j                  |       y)z Writes bytes, possibly indented.r   r	   )r-   N)r&   r   r   r$   r    r   rF   )r+   rH   r>   rF   ss        r.   r)   zXMLWriter._writerawV   sc    dooIIOOD,,t/?/??@DOKKwK/	A		r   c                     | j                   j                  | j                         d| _        | j                  }|dz  s| j
                  | j                          |dz   | _        y )Nr   d   )r   r   r#   r&   r(   r'   )r+   r(   s     r.   r*   zXMLWriter.newline`   sN    		(&&S T]]%>MMO&?r   c                     t        |      }|j                  d      }| j                  d|d   z          |dd  D ]&  }| j                          | j                  d|z          ( | j                  d       y )Nr
   z<!-- r   r   z     z -->)r@   splitr)   r*   )r+   rH   lineslines       r.   commentzXMLWriter.commenth   sj    d|

4 wq)*!"I 	+DLLNNN7T>*	+ 	vr   c                 Z     | j                   |i |}d||d}| j                  |       y )N<z/>)stringifyattrsr)   r+   _TAG_argskwargsattrdatarH   s         r.   	simpletagzXMLWriter.simpletagq   s/    &4&&77!8,tr   c                      | j                   |i |}d||d}| j                  |       | j                  j                  |       | j	                          y )NrV   >)rW   r)   r%   appendr>   rX   s         r.   begintagzXMLWriter.begintagv   sJ    &4&&77 (+t

% r   c                     | j                   r| j                   d   |k(  sJ d       | j                   d= | j                          d|z  }| j                  |       y )Nznonmatching endtagz</%s>)r%   dedentr)   )r+   rY   rH   s      r.   endtagzXMLWriter.endtag}   sM    zzdjjn5K7KK5JJrNtr   c                     d}|dz  }d}t        dt        |      |      D ]Z  }t        ||||z          }d}d}t        d||      D ]  }	||z   ||	|	|z    z   }d} | j                  |       | j	                          \ y )N         r   r    )rangelenhexStrr)   r*   )
r+   rH   
linelengthhexlinelength	chunksizeihexlinerS   whitejs
             r.   dumphexzXMLWriter.dumphex   s    
"Q	q#d)Z0 	AT!a*n56GDE1mY7 e|ga!i-&@@ NN4 LLN	r   c                 ,    | j                   dz   | _         y )Nr   r$   r3   s    r.   r>   zXMLWriter.indent   s    ++a/r   c                 N    | j                   dkD  sJ | j                   dz
  | _         y )Nr   r   rw   r3   s    r.   rd   zXMLWriter.dedent   s)    !###++a/r   c                     |r|rJ t        |j                               }n|rt        |      dk(  sJ |d   }nyd}|D ];  \  }}t        |t        t
        f      st        |      }|d|dt        |      dz   }= |S )Nr   r   r   rj   z="")sorteditemsrl   
isinstancebytesstr
escapeattr)r+   rZ   r[   
attributesrH   attrvalues          r.   rW   zXMLWriter.stringifyattrs   s    O8/Jt9>!>aJ% 	AKD%eeS\2E
j.?@@D	A r   )T)F)TF)__name__
__module____qualname__INDENTr/   r4   r:   r6   r   rD   rI   rK   r)   r*   rT   r]   ra   re   ru   r>   rd   rW   r2   r   r.   r   r      sk     +Z6565+
00r   r   c                     t        | d      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd	      } | S )
Nr	   &z&amp;rV   z&lt;r_   z&gt;z&#13;)r   r   rH   s    r.   r@   r@      sS    wD<<W%D<<V$D<<V$D<<g&DKr   c                 @    t        |       } | j                  dd      } | S )Nrz   z&quot;)r@   r   r   s    r.   r   r      s     $<D<<X&DKr   c                 P    d }t        t        || j                  d                  S )zInput is Unicode string.c                 b    t        |       }d|cxk  rdk  r	n n| dvr| S dt        |      z   dz   S )N       z<&>z&#;)ordrepr)cns     r.   
escapecharzescape8bit.<locals>.escapechar   s4    F>c>aunH$q'>C''r   zlatin-1)r   mapdecode)rH   r   s     r.   rG   rG      s$    ( 3z4;;y#9:;;r   c                 |    t         j                  }d}| D ]$  }t        |      }|||dz	  dz     z   ||dz     z   }& |S )Nr         )rA   	hexdigitsr   )rM   hrr   rq   s        r.   rm   rm      sU    A
A /AJ16S.!!Aa#gJ./ Hr   )__doc__fontTools.misc.textToolsr   r   r   r   r   r!   rA   r   objectr   r@   r   rG   rm   r2   r   r.   <module>r      s?    0 E E 
 	 	\ \~
<r   