
    ei                    8   d Z ddlmZ ddlmZmZm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j$                  d      ZdZej-                   ej.                   edd	      d
 edd       edd      d      e      Z G d de      Zd Zd Zd Zd Zy)z*xmlWriter.py -- Simple XML authoring class    )annotations)BinaryIOCallableTextIO)byteordstrjointobytestostrNz  zfontTools.ttx?	   )             i   i   )i  i  c                      e Zd Zedddf	 	 	 	 	 	 	 	 	 	 	 ddZd Zd Zd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                l   |j                         j                  dd      j                  dd      dk7  rt        d      |dk(  rt        j                  }|  t        |d      sKt        |t        t        j                  f      st        d      || _        t        |d      | _        d	| _        nd | _        || _        d
| _        	 | j                  j                  d       t         | _        | j#                  |      | _        |%| j#                  t        j(                        | _        n| j#                  |      | _        d| _        g | _        d| _        || _        d| _        | j7                  d       | j9                          y # t        $ r) | j                  j                  d       t$        | _        Y w xY w)N- _utf8z!Only UTF-8 encoding is supported.writez]fileOrPath must be a file path (str or PathLike) if it isn't an object with a `write` method.wbTF    r      z&<?xml version="1.0" encoding="UTF-8"?>)lowerreplace	Exceptionsysstdouthasattr
isinstancestrosPathLike	TypeErrorfilenameopenfile_closeStreamr   r	   totyper
   indentwhitelinesep
newlinestrindentlevelstack
needindentidlefuncidlecounter	_writerawnewline)self
fileOrPathr.   r4   encodingr0   s         Z/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/fontTools/misc/xmlWriter.py__init__zXMLWriter.__init__   sm    >>##C,44S"=G?@@Jz7+j3*<=s  'DMZ.DI $D DM"DI %D	  IIOOC !DK
  ;;{3"kk"**5DO"kk*5DO
 ?@  	 IIOOBDK	 s   &F /F32F3c                    | S N r8   s    r;   	__enter__zXMLWriter.__enter__O   s    r   c                $    | j                          y r>   )close)r8   exception_typeexception_value	tracebacks       r;   __exit__zXMLWriter.__exit__R   s    

r   c                    | j                   rGt        | j                  t        t        j
                  f      rJ | j                  j                          y y r>   )r,   r$   r+   r%   r&   r'   rC   r@   s    r;   rC   zXMLWriter.closeU   s;    !$))c2;;-?@@@IIOO r   c                <    | j                  t        |      |       y)zWrites text.indentNr6   escape)r8   stringrK   s      r;   r   zXMLWriter.writeZ   s    vf~f5r   c                2    | j                  d|z   dz          y)zWrites text in a CDATA section.z	<![CDATA[z]]>N)r6   r8   rN   s     r;   
writecdatazXMLWriter.writecdata^   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)r6   
escape8bit)r8   datarS   s      r;   	write8bitzXMLWriter.write8bitb   s    
 	z$'u5r   c                <    | j                  t        |      d       y)z Writes text without indentation.FrJ   NrL   rP   s     r;   write_noindentzXMLWriter.write_noindenti   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)r3   r+   r   r1   r.   r-   rS   )r8   rU   rK   rS   ss        r;   r6   zXMLWriter._writerawm   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   r0   r3   r5   r4   )r8   r5   s     r;   r7   zXMLWriter.newlinew   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 -->)rM   splitr6   r7   )r8   rU   lineslines       r;   commentzXMLWriter.comment   sj    d|

4 wq)*!"I 	+DLLNNN7T>*	+ 	vr   c                Z     | j                   |i |}d||d}| j                  |       y )N<z/>)stringifyattrsr6   r8   _TAG_argskwargsattrdatarU   s         r;   	simpletagzXMLWriter.simpletag   s/    &4&&77!8,tr   c                     | j                   |i |}d||d}| j                  |       | j                  j                  |       | j	                          y )Nrc   >)rd   r6   r2   appendrK   re   s         r;   begintagzXMLWriter.begintag   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>)r2   dedentr6   )r8   rf   rU   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hexStrr6   r7   )
r8   rU   
linelengthhexlinelength	chunksizeihexliner`   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   r1   r@   s    r;   rK   zXMLWriter.indent   s    ++a/r   c                N    | j                   dkD  sJ | j                   dz
  | _         y )Nr   r   r   r@   s    r;   rq   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   rw   z="")sorteditemsry   r$   bytesr%   
escapeattr)r8   rg   rh   
attributesrU   attrvalues          r;   rd   zXMLWriter.stringifyattrs   s    O8/Jt9>!>aJ% 	AKD%eeS\2E
j.?@@D	A r   )r9   z*str | os.PathLike[str] | BinaryIO | TextIOr.   r%   r4   zCallable[[], None] | Noner:   r%   r0   zstr | bytesreturnNone)r   r   )T)F)TF)__name__
__module____qualname__INDENTr<   rA   rG   rC   r   rQ   rV   rX   r6   r7   ra   rj   rn   rr   r   rK   rq   rd   r?   r   r;   r   r      s     ".2"&0>0 0 ,	0
 0  0 
0d
6565+
00r   r   c                v   t        | d      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd	      } | j                  t              }|| k7  rJd
}t	        |       }t        |       |kD  rt	        | d|       dd dz   }t        j                  d|t               |S )zQEscape characters not allowed in `XML 1.0 <https://www.w3.org/TR/xml/#NT-Char>`_.r   &z&amp;rc   z&lt;rl   z&gt;z&#13;
   Nr   rp   z...zEIllegal XML character(s) found; replacing offending string %r with %r)	r
   r   	translateILLEGAL_XML_CHARSreprry   TTX_LOGwarningREPLACEMENT)rU   newDatamaxLenpreviews       r;   rM   rM      s    wD<<W%D<<V$D<<V$D<<g&Dnn./G$t*t9v4=)!B/%7GS	

 Nr   c                @    t        |       } | j                  dd      } | S )Nr   z&quot;)rM   r   )rU   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 )Nr      z<&>z&#;)ordr   )cns     r;   
escapecharzescape8bit.<locals>.escapechar   s4    F>c>aunH$q'>C''r   zlatin-1)r   mapdecode)rU   r   s     r;   rT   rT      s$    ( 3z4;;y#9:;;r   c                |    t         j                  }d}| D ]$  }t        |      }|||dz	  dz     z   ||dz     z   }& |S )Nr         )rN   	hexdigitsr   )rZ   hrr   r~   s        r;   rz   rz      sU    A
A /AJ16S.!!Aa#gJ./ Hr   ) __doc__
__future__r   typingr   r   r   fontTools.misc.textToolsr   r   r	   r
   r!   r&   rN   logging	itertoolsr   	getLoggerr   r   dictfromkeyschainrx   r   objectr   rM   r   rT   rz   r?   r   r;   <module>r      s    0 " - - E E 
 	   	
'

O
,MMIOOdDdDff 	 b bJ,
<r   