L i,dZddlmZmZddlmZddlmZddlm Z m Z m Z m Z m Z mZddlmZddlmZdd lmZdd lmZdd lZd d gZej2dZdZdddZddZedk(r*dd lZej@eejBdd y y )zCFF2 to CFF converter.)TTFontnewTable)makeOutputFileName)T2StackUseExtractor) TopDictIndex buildOrder buildDefaultstopDictOperatorsprivateDictOperatorsFDSelect)desubroutinizeCharString)specializeProgram)optimizeWidths) defaultdictNconvertCFF2ToCFFmainzfontTools.cffLibc Z d|_td}|jD]}d|_|j |||_|d}t |dr t dtt}||_ |jjD]-}||vs|j|=t ||s"t||/|j}|j}t |ds/tx} |_dgt!|j"z| _t't(} tt(} |D]} | j+d| j,} | | _ | D](}|| jvs|| vs| || j|<*| jjD]-}|| vs| j|=t | |s"t| |/|j/D]-}|j1|j2j d/|j4g|D cgc]} t7| j,d gc} zD]$}|D]}|j2j d &t9t:}|d j<}|jD]7}|j?|\}}|dk(rd}||j ||d9|jAD]0\}}tC|\}}||j,}||_"||_#2|jD]m}|j?|\}}|dk(rd}||j,}||d}||jDk7sE|j2jId||jFz o|jD]}|j?|\}}|d}||j,}tKt7|d g|j4| }|jM|}|d kDsdtO|tQ|j2|_|jStU|jVDcic]'\}}||rdtY|j[dznd)}}}t]t!|jVDcgc]#}|rdtY|j[dznd%c}|_+|j"jADcic] \}}||| c}}|_d|_/ycc} wcc}}wcc}wcc}}w)amConverts this object from CFF2 format to CFF format. This conversion is done 'in-place'. The conversion cannot be reversed. The CFF2 font cannot be variable. (TODO Accept those and convert to the default instance?) This assumes a decompiled CFF2 table. (i.e. that the object has been filled via :meth:`decompile` and e.g. not loaded from XML.)r NrVarStorez5Variable CFF2 font cannot be converted to CFF format.r FendcharSubrsreturnhmtx)private0cidz.notdef)AdobeIdentityr)0majorr topDictIndexcff2GetGlyphOrderappendhasattr ValueErrorrr orderrawDictkeysdelattr CharStringsFDArrayr len charStringsgidArrayr r setCFF2Privatevalues decompileprogram GlobalSubrsgetattrrlistmetricsgetItemAndSelectoritemsr defaultWidthX nominalWidthXinsertrexecuterrremove_unused_subroutines enumeratecharsetstrzfillrangeROS)cffotFont topDictDataitemtopDictopOrderkeyr-fdArrayfdSelectdefaultsr&fd privateDictcssubrSetswidthsr7 glyphNamefdIndex widthList bestDefault bestNominalrwidth extractorstackUsennamemappingvs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/cffLib/CFF2ToCFF.py_convertCFF2ToCFFras"CIt$K  !!%4 !#C!nGw #PQQ)*GGM##%& g $w$% & %%KooG 7J '&.j07#C#k&=&=">>12H + ,E . 5jj !  9C+---#/+3C= ##C( 9&&++- .C%'',;,K-  . .  "%  )$%__%3:)-/ GR()( (B JJ  h ' (( FVn$$G %%'6 !44Y? G d?Gwwy1!45 6 %lln,#1)#< ['"** + + , !%%'@ !44Y? G d?G'"** "1% G)) ) JJ  a)>)>!> ?@!%%' 7 !44Y? G ?G'"**' GWb )3??G $$R( b= $R (*2::6BJ 7"!!#!1 At !us1v||A&:G >C3wCW=X891A Q)3GO)4(?(?(E(E(G$T1 qK+GKw)`s"T,T)(T"6T'T)updatePostTablecd|vr td|dj}t|||d=tdx}|d<||_|r"d|vr|d}|jdk(rd|_yyyy)NCFF2z)Input font does not contain a CFF2 table.zCFF postg@g@)r%rErar formatType)fontrbrEtableres r`rrs TDEE v,  Cc4  V #F++EDLEI6T>F| ??c !!DO "*c@|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 CFF2 OTF font to CFF OTF fontNrr zfonttools cffLib.CFF2ToCFFz(Convert a non-variable CFF2 font to CFF.) descriptioninputz INPUT.ttfzInput OTF file with CFF table.)metavarhelpz-oz--outputz OUTPUT.ttfz3Output instance OTF file (default: INPUT-CFF2.ttf).)rmdefaultrnz--no-recalc-timestamprecalc_timestamp store_falsez:Don't set the output font's timestamp to the current time.)destactionrnF)requiredz-vz --verbose store_truezRun more verbosely.)rsrnz-qz--quietzTurn verbosity off.) configLoggerDEBUGERRORINFO)levelzNo such file '{}'Tz-CFF) overWritesuffix)recalcTimestamp recalcBBoxesz Saving %s)sysargvargparseArgumentParser add_argumentadd_mutually_exclusive_group parse_args fontToolsrvverbosequietosrlpathisfileerrorformatoutputrrrprloginfosave) argsrrparser loggingGroupoptionsrvrinfileoutfilergs r`rrs |xx|  $ $$>%F +K   B    I  666FL k,5J i 3H%G&!//w'--wV ]]F 77>>& ! (//78~~ 6T&A ^^ &'*B*BQV WDTHH IIgri__main__)N)"__doc__fontTools.ttLibrrfontTools.misc.cliToolsrfontTools.misc.psCharStringsrfontTools.cffLibrrr r r r transformsr specializerrrYr collectionsrlogging__all__ getLoggerrrarr__name__rexitrrir`rs,6<1*!# v &g*+u+p/3 " @F z CHHT#((12,  ri