L i dZddlmZmZmZmZddlZddlZddlZddl Z ddl Z dZ e jdZ dZej!e j"eddded d ed d d eZGddeZdZdZdZdZy)z*xmlWriter.py -- Simple XML authoring class)byteordstrjointobytestostrNz z fontTools.ttx? )  ii)iiceZdZedddfdZdZdZdZddZd Z dd Z d Z dd Z d Z dZdZdZdZdZdZdZdZy) XMLWriterNutf_8 c|jjddjdddk7r td|dk(rtj}t |ds ||_t|d|_d|_ nd|_||_d |_ |jjd t|_ |j||_|%|jt j"|_n|j||_d |_g|_d |_||_d |_|j1d |j3y#t$r)|jjdt|_ YwxYw)N-_utf8z!Only UTF-8 encoding is supported.writewbTFrz&)lowerreplace Exceptionsysstdouthasattrfilenameopenfile _closeStreamrrtotype TypeErrorr indentwhiteoslinesep newlinestr indentlevelstack needindentidlefunc idlecounter _writerawnewline)self fileOrPathr&r-encodingr)s ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/misc/xmlWriter.py__init__zXMLWriter.__init__sE >>  # #C , 4 4S" = G?@ @  Jz7+&DMZ.DI $D  DM"DI %D   IIOOC !DK  ;;{3  "kk"**5DO"kk*5DO    ?@  IIOOB DK s&E/FFc|SNr1s r4 __enter__zXMLWriter.__enter__Gs rc$|jyr7)close)r1exception_typeexception_value tracebacks r4__exit__zXMLWriter.__exit__Js  rcR|jr|jjyyr7)r#r"r<r9s r4r<zXMLWriter.closeMs    IIOO  rc<|jt||y)z Writes text.indentNr/escape)r1stringrDs r4rzXMLWriter.writeQs vf~f5rc2|jd|zdzy)zWrites text in a CDATA section.z N)r/r1rGs r4 writecdatazXMLWriter.writecdataUs {V+e34rc<|jt||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)r1datarLs r4 write8bitzXMLWriter.write8bitYs z$'u5rc<|jt|dy)z Writes text without indentation.FrCNrErIs r4write_noindentzXMLWriter.write_noindent`s vf~e4rc|rE|jr9|jj|j|jzd|_|j |d}|r|j }|jj|y)z Writes bytes, possibly indented.rr)r3N)r,r"rr*r&r$rL)r1rNrDrLss r4r/zXMLWriter._writerawdsc doo IIOOD,,t/?/?? @DO KKwK /  A rc|jj|jd|_|j}|dzs|j |j |dz|_y)Nrd)r"rr)r,r.r-)r1r.s r4r0zXMLWriter.newlinensN (&& S T]]%> MMO&?rct|}|jd}|jd|dz|ddD]&}|j|jd|z(|jdy)Nrz)rFsplitr/r0)r1rNlineslines r4commentzXMLWriter.commentvsjd| 4  wq)*!"I +D LLN NN7T> * + vrcZ|j|i|}d||d}|j|y)N)stringifyattrsr/r1_TAG_argskwargsattrdatarNs r4 simpletagzXMLWriter.simpletags/&4&&77!8, trc|j|i|}d||d}|j||jj||j y)Nr\>)r]r/r+appendrDr^s r4begintagzXMLWriter.begintagsJ&4&&77 (+ t %  rc|jr|jd|k(sJd|jd=|jd|z}|j|y)Nznonmatching endtagz)r+dedentr/)r1r_rNs r4endtagzXMLWriter.endtagsMzzdjjn5K7KK5 JJrN  trcd}|dz}d}tdt||D]Z}t||||z}d}d}td||D]} ||z|| | |zz}d}|j||j \y)Nrr )rangelenhexStrr/r0) r1rN linelength hexlinelength chunksizeihexlinerYwhitejs r4dumphexzXMLWriter.dumphexs "Q  q#d)Z0 AT!a*n56GDE1mY7 e|ga!i-&@@  NN4 LLN rc,|jdz|_y)Nrr*r9s r4rDzXMLWriter.indents++a/rcN|jdkDsJ|jdz |_y)Nrrr}r9s r4rjzXMLWriter.dedents)!###++a/rc|r|rJt|j}n|rt|dk(sJ|d}nyd}|D];\}}t|tt fs t |}|d|dt |dz}=|S)Nrrrrpz="")sorteditemsrr isinstancebytesstr escapeattr)r1r`ra attributesrNattrvalues r4r]zXMLWriter.stringifyattrss O8 /J t9> !>aJ% AKD%eeS\2E j.?@@D A r)T)F)TF)__name__ __module__ __qualname__INDENTr5r:r@r<rrJrOrQr/r0rZrcrgrkr{rDrjr]r8rr4rrsk +Z6565+  00rrcvt|d}|jdd}|jdd}|jdd}|jdd }|jt}||k7rJd }t |}t ||kDrt |d |d d dz}t jd|t|S)zQEscape characters not allowed in `XML 1.0 `_.r&z&r\z<rez> z Nrriz...zEIllegal XML character(s) found; replacing offending string %r with %r) rr translateILLEGAL_XML_CHARSreprrrTTX_LOGwarning REPLACEMENT)rNnewDatamaxLenpreviews r4rFrFs w D <<W %D <<V $D <<V $D <<g &Dnn./G$t* t9v 4=)!B/%7G V   Nrc@t|}|jdd}|S)Nrz")rFr)rNs r4rrs $z&#;)ordr)cns r4 escapecharzescape8bit..escapechars4 F >c>aunH$q'>C' 'rzlatin-1)rmapdecode)rNrs r4rMrMs$( 3z4;;y#9: ;;rc|tj}d}|D]$}t|}|||dz dzz||dzz}&|S)Nr)rG hexdigitsr)rShrrrws r4rsrssUA A / AJ 16S.! !Aa#gJ ./ Hr)__doc__fontTools.misc.textToolsrrrrrr'rGlogging itertoolsr getLoggerrrdictfromkeyschainrqrobjectrrFrrMrsr8rr4rs0EE   '  O , MMIOO dD dD ff  \\~, < r