
    ]Mh                     r    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dS )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dS )	XMLWriterNutf_8
c                 d   |                                                     dd                              dd          dk    rt          d          |dk    rt          j        }t          |d          s$|| _        t          |d          | _        d| _	        nd | _        || _        d	| _	        	 | j        
                    d
           t          | _        n6# t          $ r) | j        
                    d           t          | _        Y nw xY w|                     |          | _        |%|                     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)self
fileOrPathr    r'   encodingr#   s         X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/misc/xmlWriter.py__init__zXMLWriter.__init__   s    >>##C,,44S"==GG?@@@Jz7++ 	&&DMZ..DI $D DM"DI %D	  IOOC   !DKK 	  	  	 IOOBDKKK	   ;;{33"kk"*55DOO"kk*55DO
 ?@@@s   ,&C 0DDc                     | S N r+   s    r.   	__enter__zXMLWriter.__enter__9   s    r   c                 .    |                                   d S r1   )close)r+   exception_typeexception_value	tracebacks       r.   __exit__zXMLWriter.__exit__<   s    

r   c                 J    | j         r| j                                         d S d S r1   )r   r   r6   r3   s    r.   r6   zXMLWriter.close?   s/     	IOO	 	r   Tc                 N    |                      t          |          |           dS )zWrites text.indentNr)   escape)r+   stringr>   s      r.   r   zXMLWriter.writeC   s$    vf~~f55555r   c                 <    |                      d|z   dz              dS )zWrites text in a CDATA section.z	<![CDATA[z]]>N)r)   r+   rA   s     r.   
writecdatazXMLWriter.writecdataG   s$    {V+e344444r   Fc                 N    |                      t          |          |           dS )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55555r   c                 N    |                      t          |          d           dS )z Writes text without indentation.Fr=   Nr?   rC   s     r.   write_noindentzXMLWriter.write_noindentR   s$    vf~~e44444r   c                    |r5| j         r.| j                            | j        | j        z             d| _         |                     |d          }|r|                                }| j                            |           dS )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   s}     	 do 	 IOOD,t/??@@@DOKKwK// 			A	r   c                     | j                             | j                   d| _        | j        }|dz  s| j        |                                  |dz   | _        d S )Nr   d   )r   r   r#   r&   r(   r'   )r+   r(   s     r.   r*   zXMLWriter.newline`   sZ    	(((&S  	T]%>MMOOO&?r   c                 &   t          |          }|                    d          }|                     d|d         z              |dd          D ].}|                                  |                     d|z              /|                     d           d S )Nr
   z<!-- r   r   z     z -->)r@   splitr)   r*   )r+   rH   lineslines       r.   commentzXMLWriter.commenth   s    d||

4  wq)***!""I 	+ 	+DLLNNNNN7T>****vr   c                 Z     | j         |i |}d||d}|                     |           d S )N<z/>)stringifyattrsr)   r+   _TAG_argskwargsattrdatarH   s         r.   	simpletagzXMLWriter.simpletagq   sC    &4&777!E888,tr   c                      | j         |i |}d||d}|                     |           | j                            |           |                                  d S )NrV   >)rW   r)   r%   appendr>   rX   s         r.   begintagzXMLWriter.begintagv   sd    &4&777 5(((+t
%   r   c                     | j         r| j         d         |k    s
J d            | j         d= |                                  d|z  }|                     |           d S )Nznonmatching endtagz</%s>)r%   dedentr)   )r+   rY   rH   s      r.   endtagzXMLWriter.endtag}   s`    zKdjn5557K555JrNtr   c                 :   d}|dz  }d}t          dt          |          |          D ]r}t          ||||z                      }d}d}t          d||          D ]}	||z   ||	|	|z            z   }d}|                     |           |                                  sd S )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0 	 	AT!a*n"4566GDE1mY77  e|ga!i-.?&@@NN4   LLNNNN	 	r   c                 $    | j         dz   | _         d S )Nr   r$   r3   s    r.   r>   zXMLWriter.indent   s    +a/r   c                 >    | j         dk    sJ | j         dz
  | _         d S )Nr   r   rw   r3   s    r.   rd   zXMLWriter.dedent   s,    !####+a/r   c                 6   |r&|rJ t          |                                          }n"|rt          |          dk    sJ |d         }ndS d}|D ]I\  }}t          |t          t
          f          st          |          }|d|dt          |          dz   }J|S )Nr   r   r   rj   z="")sorteditemsrl   
isinstancebytesstr
escapeattr)r+   rZ   r[   
attributesrH   attrvalues          r.   rW   zXMLWriter.stringifyattrs   s     	OOO//JJ 	t99>>>>aJJ2% 	A 	AKD%eeS\22 #E

4j.?.?.?.?@@DD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      sE        + + + +Z      6 6 6 65 5 56 6 6 65 5 5   + + +    
      0 0 00 0 0    r   r   c                     t          | d          } |                     dd          } |                     dd          } |                     dd          } |                     dd	          } | S )
Nr	   &z&amp;rV   z&lt;r_   z&gt;z&#13;)r   r   rH   s    r.   r@   r@      sb    wD<<W%%D<<V$$D<<V$$D<<g&&DKr   c                 P    t          |           } |                     dd          } | S )Nrz   z&quot;)r@   r   r   s    r.   r   r      s%    $<<D<<X&&DKr   c                 h    d }t          t          ||                     d                              S )zInput is Unicode string.c                 v    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   sH    FF>>>>c>>>>>aunnH$q''>C''r   zlatin-1)r   mapdecode)rH   r   s     r.   rG   rG      s7    ( ( ( 3z4;;y#9#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      sT    A
A / /AJJ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 0 E E E E E E E E E E E E 



 				 	\ \ \ \ \ \ \ \~    
< 
< 
<    r   