L i' dZddlmZmZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZmZddlmZddlZdd gZej*d ZGd d eZd ZdZddZedk(r*ddlZej<eej>ddyy)zCFF to CFF2 converter.)TTFontnewTable)makeOutputFileName)T2WidthExtractor) TopDictIndex FDArrayIndexFontDict buildOrdertopDictOperatorsprivateDictOperatorstopDictOperators2privateDictOperators2)BytesIONconvertCFFToCFF2mainzfontTools.cffLibceZdZdZdZy)_NominalWidthUsedErrorc|Nselfothers `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/cffLib/CFFToCFF2.py__add__z_NominalWidthUsedError.__add__ c|rrrs r__radd__z_NominalWidthUsedError.__radd__rrN)__name__ __module__ __qualname__rrrrrrrs rrc4 |jd}t|dr |jnd}|j}|j}|r%|Dcgc]}t |j dgc}n:t|dr-t|j dr|j jgng}|jD]&}|j|\} } | j(|g|zD]U} | D]N} | j} t| x}} | jd} | jd}g| t||dPWd}t!}|jD]}|j|\} } | j} | || n$t|drt |j dgng}t#|||d} |j%| | sr| ddk(s{| j'|r|j1d |_|j4j6}t9d|}|jD]}|j;|||_|d}t|dr |j }nd}t=t>}||_ ||_!t|dstEx}|_d|_#|j|_||j_$|j}|jJr||jL_$n||_$tO}|jQd |j;|||_t=tR}|FtTD]@} | d }!|!|vs |!|jVvr |jV|!=t||!s5tY||!Bn|j}t=tR}|D]}|jQd t[|jVjD]7}!|!|j@vs|jV|!=t||!s,tY||!9|j }tTD]W} | d }!|!|vs |!t[|jVjvr |jV|!=t||!sLtY||!Yt\D]F} | d }!|!dk(r|!|vs|!|jVvr |jV|!=t||!s;tY||!Ht_}"|ja|"|d |"jcd|j|"|d ycc}w#t$rYwxYw#t$rYwxYw#t $rt| d k\r| d d vrd }| j'd}t)|t*sJ|| j'd}|d k(r |j,n |j.}||z }|d k(r|n|}||j}|| ddt| d k\r| d d vrt| d k\sJ| | j'dYPwxYw)aConverts this object from CFF format to CFF2 format. This conversion is done 'in-place'. The conversion cannot be reversed. This assumes a decompiled CFF table. (i.e. that the object has been filled via :meth:`decompile` and e.g. not loaded from XML.)rFDArrayNSubrsPrivatereturnendcharF)callsubr callgsubrTr+charset)isCFF2)2 topDictIndexhasattrr$ CharStrings GlobalSubrsgetattrr&r%keysgetItemAndSelector decompileprogramlenindex ValueErrorminrrexecutepop isinstanceint localBias globalBiasremove_unused_subroutinesmajorotFont getGlyphOrderrappendr r ordercff2GetGlyphOrderrstringsfdArraycharStringsAreIndexedcharStringsIndexr setCFF2rr rawDictdelattrlistr rcompileseek)#cffrEtopDictrK charStrings globalSubrsfd localSubrs glyphNamecsfdIndexsubrssubrr8ijremoveUnusedSubrsnominalWidthXErrorthisLocalSubrs extractor subrNumberopbiassubrSet subrProgramrI topDictDataitem privateDictopOrderfontDictprivateOpOrderentrykeyfiles# r_convertCFFToCFF2rs!s+q!G!()!>'//4{C0 S1 2 2("&Ah )   g goo%OOC(w$%&6 9DKKfTK*IIaLMM$tM,c =(    >&  g,!# 6O(O$(!$[[^ !*c2>J>2[[^.0J.>y**IDXDXd" ,.*,<.+%j199 ) g,!# 6O(Ow<1$ -g -$ KKN# sCTTT/5T? T,+T,/ T<;T<?B-X-&XXcn|dj}|d=t||tdx}|d<||_y)NzCFF CFF2)rTrsr)fontrTtables rrrs< v,  C V c4 #F++EDLEIrc@|ddl}|jdd}ddl}|jdd}|j ddd |j d d d dd|j dddd|j d}|j dddd|j dddd|j |}ddlm}||jrd n|jrd!nd"#ddl }|j}|jj|s |jd$j!||j"st%|d%d&'n |j"} t'||j(d(} t+| t,j/d)| | j1| y)*z%Convert CFF OTF font to CFF2 OTF fontNrr*zfonttools cffLib.CFFToCFF2zUpgrade a CFF font to CFF2.) descriptioninputz INPUT.ttfzInput OTF file with CFF table.)metavarhelpz-oz--outputz OUTPUT.ttfz3Output instance OTF file (default: INPUT-CFF2.ttf).)r{defaultr|z--no-recalc-timestamprecalc_timestamp store_falsez:Don't set the output font's timestamp to the current time.)destactionr|F)requiredz-vz --verbose store_truezRun more verbosely.)rr|z-qz--quietzTurn verbosity off.) configLoggerDEBUGERRORINFO)levelzNo such file '{}'Tz-CFF2) overWritesuffix)recalcTimestamp recalcBBoxesz Saving %s)sysargvargparseArgumentParser add_argumentadd_mutually_exclusive_group parse_args fontToolsrverbosequietosrzpathisfileerrorformatoutputrrr~rloginfosave) argsrrparser loggingGroupoptionsrrinfileoutfilervs rrrs |xx|  $ $$1%F +K   B    I  666FL k,5J i 3H%G&!//w'--wV ]]F 77>>& ! (//78~~ 6T'B ^^ &'*B*BQV WDTHH IIgr__main__r*r) __doc__fontTools.ttLibrrfontTools.misc.cliToolsrfontTools.misc.psCharStringsrfontTools.cffLibrrr r r r r riorlogging__all__ getLoggerr Exceptionrrsrrr rexitrrrrrs,69    v &g*+Y-D@F z CHHT#((12,  r