
    <`                     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_8c                 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         8lib/python3.11/site-packages/fontTools/misc/xmlWriter.py__init__zXMLWriter.__init__   s   ^^c"%%--c"55??	6	7	773
:	W	%	% 4=J%%4944=494 9??34;;	   9??24;;; [[--$[[,,4??[[,,4?$$*$/$-$..9:::,,.....s   ,&C 0DDc                     | S N r*   s    r-   	__enter__zXMLWriter.__enter__4   s    	+r   c                 .    |                                   d S r0   )close)r*   exception_typeexception_value	tracebacks       r-   __exit__zXMLWriter.__exit__7   s    **,,,,,r   c                 J    | j         r| j                                         d S d S r0   )r   r   r5   r2   s    r-   r5   zXMLWriter.close:   s/    	 9?? r   Tc                 N    |                      t          |          |           dS )zWrites text.indentNr(   escape)r*   stringr=   s      r-   r   zXMLWriter.write>   s$    .../////r   c                 <    |                      d|z   dz              dS )zWrites text in a CDATA section.z	<![CDATA[z]]>N)r(   r*   r@   s     r-   
writecdatazXMLWriter.writecdataB   s$    ..v%-.....r   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*   datarE   s      r-   	write8bitzXMLWriter.write8bitF   s(    
 ..D!!./////r   c                 N    |                      t          |          d           dS )z Writes text without indentation.Fr<   Nr>   rB   s     r-   write_noindentzXMLWriter.write_noindentM   s$    ........r   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   rE   )r*   rG   r=   rE   ss        r-   r(   zXMLWriter._writerawQ   s}      9??4#d&667774?
kk$k))! wwyy1)//!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}8==??? 1_$r   c                 &   t          |          }|                    d          }|                     d|d         z              |dd          D ].}|                                  |                     d|z              /|                     d           d S )N
z<!-- r   r   z     z -->)r?   splitr(   r)   )r*   rG   lineslines       r-   commentzXMLWriter.commentc   s    	$
**T

%..58#$$$ABBi " "d<<>>>>>'D.!!!!..r   c                 Z     | j         |i |}d||d}|                     |           d S )N<z/>)stringifyattrsr(   r*   _TAG_argskwargsattrdatarG   s         r-   	simpletagzXMLWriter.simpletagl   sC     T $1&11((eXXX	&$..r   c                      | j         |i |}d||d}|                     |           | j                            |           |                                  d S )NrV   >)rW   r(   r$   appendr=   rX   s         r-   begintagzXMLWriter.begintagq   sd     T $1&11((UHHH	%$..*E++-----r   c                     | j         r| j         d         |k    s
J d            | j         d= |                                  d|z  }|                     |           d S )Nznonmatching endtagz</%s>)r$   dedentr(   )r*   rY   rG   s      r-   endtagzXMLWriter.endtagx   s`    	E
2%///1E///
jn++---	5$..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*   rG   
linelengthhexlinelength	chunksizeihexlinerS   whitejs
             r-   dumphexzXMLWriter.dumphex   s    *q.-)CIIz**  aD1Z<())7
45!]I..  q%<'!AiK-00DEE>>$<<>>>> r   c                 $    | j         dz   | _         d S )Nr   r#   r2   s    r-   r=   zXMLWriter.indent   s    %)$r   c                 >    | j         dk    sJ | j         dz
  | _         d S )Nr   r   rw   r2   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[   
attributesrG   attrvalues          r-   rW   zXMLWriter.stringifyattrs   s     ???v||~~&&:: 
d))q....Q::
"	$ 8 8kdE
UUCL
)
) JJE
$tttZ%6%6%6%67
744	+r   )T)F)TF)__name__
__module____qualname__INDENTr.   r3   r9   r5   r   rC   rH   rJ   r(   r)   rT   r]   ra   re   ru   r=   rd   rW   r1   r   r-   r   r      sA       ,2TG% % % %N      0 0 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   rG   s    r-   r?   r?      sb    dGS'""S&!!S&!!T7##r   c                 P    t          |           } |                     dd          } | S )Nrz   z&quot;)r?   r   r   s    r-   r   r      s%    tS(##r   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!1^^^^^^^^^
8
a.3
r   zlatin-1)r   mapdecode)rG   r   s     r-   rF   rF      s7       	JI 6 677888r   c                     t           j        }d}| D ].}t          |          }|||dz	  dz           z   ||dz           z   }/|S )Nr         )r@   	hexdigitsr   )rL   hrr   rq   s        r-   rm   rm      sT    
 ) )Qajj!!Q!VsN
aCj(!!	r   )__doc__fontTools.misc.py23r   r   r   r   r   r    r@   r   objectr   r?   r   rF   rm   r1   r   r-   <module>r      s    0 0 @ @ @ @ @ @ @ @ @ @ @ @ 



 				 	W W W W W W W Wt    
9 9 9
 
 
 
 
r   