
    h                        S r SSKJrJrJrJr  SSKrSSKrSSKrSSK	r	SSK
r
Sr\	R                  " S5      rSr\R!                  \
R"                  " \" SS5      S\" S	S
5      \" SS5      S5      \5      r " S S\5      rS rS rS rS rg)z*xmlWriter.py -- Simple XML authoring class    )byteordstrjointobytestostrNz  zfontTools.ttx?	   )             i   i   )i  i  c                       \ rS rSr\SSS4S jrS rS rS rSS	 jr	S
 r
SS jrS rSS jrS rS rS rS rS rS rS rS rS rSrg)	XMLWriter   Nutf_8
c                    UR                  5       R                  SS5      R                  SS5      S:w  a  [        S5      eUS:X  a  [        R                  n[        US5      (       d  Xl        [        US5      U l        SU l	        OS U l        Xl        S	U l	         U R                  R                  S
5        [        U l        U R                  U5      U l        Uc%  U R                  [         R"                  5      U l        OU R                  U5      U l        SU l        / U l        SU l        X0l        SU l        U R1                  S5        U R3                  5         g ! [         a)    U R                  R                  S5        [        U l         Nf = f)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         R/var/www/fran/franai/venv/lib/python3.13/site-packages/fontTools/misc/xmlWriter.py__init__XMLWriter.__init__   sB    >>##C,44S"=G?@@Jz7++&MZ.DI $D DM"I %D	  IIOOC !DK
  ;;{3"kk"**5DO"kk*5DO
 ?@  	 IIOOBDK	 s   &E 0FFc                     U $ N r2   s    r5   	__enter__XMLWriter.__enter__G   s    r   c                 $    U R                  5         g r9   )close)r2   exception_typeexception_value	tracebacks       r5   __exit__XMLWriter.__exit__J   s    

r   c                 \    U R                   (       a  U R                  R                  5         g g r9   )r$   r#   r?   r;   s    r5   r?   XMLWriter.closeM   s    IIOO r   c                 6    U R                  [        U5      US9  g)zWrites text.indentNr0   escape)r2   stringrI   s      r5   r   XMLWriter.writeQ   s    vf~f5r   c                 2    U R                  SU-   S-   5        g)zWrites text in a CDATA section.z	<![CDATA[z]]>N)r0   r2   rL   s     r5   
writecdataXMLWriter.writecdataU   s    {V+e34r   c                 6    U R                  [        U5      US9  g)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)r0   
escape8bit)r2   datarS   s      r5   	write8bitXMLWriter.write8bitY   s    
 	z$'u5r   c                 6    U R                  [        U5      SS9  g)z Writes text without indentation.FrH   NrJ   rO   s     r5   write_noindentXMLWriter.write_noindent`   s    vf~e4r   c                 *   U(       aJ  U R                   (       a9  U R                  R                  U R                  U R                  -  5        SU l         U R                  USS9nU(       a  UR                  5       nU R                  R                  U5        g)z Writes bytes, possibly indented.r   r   )r4   N)r-   r#   r   r+   r'   r%   rS   )r2   rU   rI   rS   ss        r5   r0   XMLWriter._writerawd   sc    dooIIOOD,,t/?/??@DOKKwK/	A		r   c                     U R                   R                  U R                  5        SU l        U R                  nUS-  (       d  U R
                  b  U R                  5         US-   U l        g )Nr   d   )r#   r   r*   r-   r/   r.   )r2   r/   s     r5   r1   XMLWriter.newlinen   sN    		(&&S T]]%>MMO&?r   c                     [        U5      nUR                  S5      nU R                  SUS   -   5        USS   H'  nU R                  5         U R                  SU-   5        M)     U R                  S5        g )Nr   z<!-- r   r   z     z -->)rK   splitr0   r1   )r2   rU   lineslines       r5   commentXMLWriter.commentv   se    d|

4 wq)*!"IDLLNNN7T>*  	vr   c                 ^    U R                   " U0 UD6nSU< U< S3nU R                  U5        g )N<z/>)stringifyattrsr0   r2   _TAG_argskwargsattrdatarU   s         r5   	simpletagXMLWriter.simpletag   s-    &&77!8,tr   c                     U R                   " U0 UD6nSU< U< S3nU R                  U5        U R                  R                  U5        U R	                  5         g )Nrh   >)ri   r0   r,   appendrI   rj   s         r5   begintagXMLWriter.begintag   sH    &&77 (+t

% r   c                     U R                   (       a  U R                   S   U:X  d   S5       eU R                   S	 U R                  5         SU-  nU R                  U5        g )Nznonmatching endtagz</%s>)r,   dedentr0   )r2   rk   rU   s      r5   endtagXMLWriter.endtag   sM    zzdjjn5K7KK5JJrNtr   c                     SnUS-  nSn[        S[        U5      U5       HW  n[        XXR-    5      nSnSn[        SX45       H  n	Xx-   XiX-    -   nSnM     U R                  U5        U R	                  5         MY     g )N         r   r    )rangelenhexStrr0   r1   )
r2   rU   
linelengthhexlinelength	chunksizeihexlinerd   whitejs
             r5   dumphexXMLWriter.dumphex   s    
"Q	q#d)Z0ATan56GDE1m7|g!-&@@ 8 NN4 LLN 1r   c                 ,    U R                   S-   U l         g )Nr   r+   r;   s    r5   rI   XMLWriter.indent   s    ++a/r   c                 P    U R                   S:  d   eU R                   S-
  U l         g )Nr   r   r   r;   s    r5   rx   XMLWriter.dedent   s)    !###++a/r   c                 ,   U(       a#  U(       a   e[        UR                  5       5      nOU(       a  [        U5      S:X  d   eUS   nOgSnU HB  u  pV[        U[        [
        45      (       d  [        U5      nUSU< S[        U5      < S3-   nMD     U$ )Nr   r   r   r   z="")sorteditemsr   
isinstancebytesstr
escapeattr)r2   rl   rm   
attributesrU   attrvalues          r5   ri   XMLWriter.stringifyattrs   s    O8/Jt9>!>aJ%KDeeS\22E
j.?@@D & r   )r$   r#   r!   r/   r.   r+   r'   r-   r*   r,   r%   )T)F)TF)__name__
__module____qualname____firstlineno__INDENTr6   r<   rC   r?   r   rP   rV   rY   r0   r1   re   ro   rt   ry   r   rI   rx   ri   __static_attributes__r:   r   r5   r   r      sk     +Z6565+
00r   r   c                 x   [        U S5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  SS	5      n U R                  [        5      nX:w  aK  S
n[	        U 5      n[        U 5      U:  a  [	        U SU 5      SS S-   n[        R                  SU[        5        U$ )zQEscape characters not allowed in `XML 1.0 <https://www.w3.org/TR/xml/#NT-Char>`_.r   &z&amp;rh   z&lt;rr   z&gt;z&#13;
   Nr   rw   z...zEIllegal XML character(s) found; replacing offending string %r with %r)	r   r   	translateILLEGAL_XML_CHARSreprr   TTX_LOGwarningREPLACEMENT)rU   newDatamaxLenpreviews       r5   rK   rK      s    wD<<W%D<<V$D<<V$D<<g&Dnn./Gt*t9v4=)!B/%7GV	

 Nr   c                 @    [        U 5      n U R                  SS5      n U $ )Nr   z&quot;)rK   r   )rU   s    r5   r   r      s     $<D<<X&DKr   c                 N    S n[        [        XR                  S5      5      5      $ )zInput is Unicode string.c                 j    [        U 5      nSUs=::  a  S::  a  O  OU S;  a  U $ S[        U5      -   S-   $ )Nr      z<&>z&#;)ordr   )cns     r5   
escapecharescape8bit.<locals>.escapechar   s4    F>c>aunH$q'>C''r   zlatin-1)r   mapdecode)rU   r   s     r5   rT   rT      s"    ( 3z;;y#9:;;r   c                 |    [         R                  nSnU  H#  n[        U5      nX!US-	  S-     -   XS-     -   nM%     U$ )Nr         )rL   	hexdigitsr   )r\   hrr   r   s        r5   r   r      sL    A
AAJ16S.!!A#gJ.  Hr   )__doc__fontTools.misc.textToolsr   r   r   r   r   r(   rL   logging	itertoolsr   	getLoggerr   r   dictfromkeyschainr   r   objectr   rK   r   rT   r   r:   r   r5   <module>r      s    0 E E 
 	   	


O
,MMOOdDdDff 	 \ \~,
<r   