L iQdZddlZddlmZddlmZddlmZmZm Z m Z ddl m Z m Z mZddlmZddlZddlZdZd ZdZ dd lmZd ZGd d eZGddeZd6dZd7dZdZ dZ!d6dZ"d6dZ#dZ$dZ%dZ&d6dZ'dZ(ejRdejTZ+dZ,dZ-dZ.ejRd Z/d!Z0d"Z1d#Z2d$Z3ejRd%Z4d&Z5d'Z6d(Z7e8e Z9e9jud)e8e Z;e;jyd*d+ggd,Z=d-Z>gd.Z?d/Z@d0ZAd1ZBd2d3gZCd4d5gZDy#e$rddlZYwxYw#e$rdZYwxYw)8afontTools.t1Lib.py -- Tools for PostScript Type 1 fonts. Functions for reading and writing raw Type 1 data: read(path) reads any Type 1 font file, returns the raw data and a type indicator: 'LWFN', 'PFB' or 'OTHER', depending on the format of the file pointed to by 'path'. Raises an error when the file does not contain valid Type 1 data. write(path, data, kind='OTHER', dohex=False) writes raw Type 1 data to the file pointed to by 'path'. 'kind' can be one of 'LWFN', 'PFB' or 'OTHER'; it defaults to 'OTHER'. 'dohex' is a flag which determines whether the eexec encrypted part should be written as hexadecimal or binary, but only if kind is 'OTHER'. N)eexec)getMacCreatorAndType)bytechrbyteord bytesjointobytes)_type1_pre_eexec_order_type1_fontinfo_order_type1_post_eexec_order)StandardEncodingjvrz1.0b3)Resc eZdZy)T1ErrorN)__name__ __module__ __qualname__^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/t1Lib/__init__.pyrr0srrcReZdZdZd dZddZdZdZdZdZ d Z d Z d Z dd Z y)T1FontztType 1 font class. Uses a minimal interpeter that supports just about enough PS to parse Type 1 fonts. Nc|t|\|_}||_y|dk(rt||_||_y|dk(rt||_||_y|dk(rt ||_||_yt |)NLWFNPFBOTHER)readdatareadLWFNreadPFB readOther ValueErrorencoding)selfpathr$kind_s r__init__zT1Font.__init__;s <:LDIq! V^ DI! U] DI ! W_!$DI! T" "rc<t||j||yN)writegetData)r%r&typedohexs rsaveAsz T1Font.saveAsHs dDLLND%0rc\t|ds|j|_|jS)Nr)hasattr createDatarr%s rr-zT1Font.getDataKs$tV$)DIyyrc |dS)aReturn a generic GlyphSet, which is a dict-like object mapping glyph names to glyph objects. The returned glyph objects have a .draw() method that supports the Pen protocol, and will have an attribute named 'width', but only *after* the .draw() method has been called. In the case of Type 1, the GlyphSet is simply the CharStrings dict. CharStringsrr4s r getGlyphSetzT1Font.getGlyphSetPsM""rcXt|ds|j|j|S)Nfont)r2parser9)r%keys r __getitem__zT1Font.__getitem__[s#tV$ JJLyy~rc4ddlm}ddlm}|j|j|j |_|j d}|j djdd}|dk\sJ|j dd}|jD]7\}}tj|d \}}|j||d| ||<9tt|D]7} tj|| d \}}|j||d| || <9|`y) Nr)psLib) psCharStringsr6PrivatelenIVSubrs)subrs)fontTools.miscr>r?suckfontrr$r9getitemsrdecrypt T1CharStringrangelen) r%r>r? charStringsrArE glyphName charStringRis rr:z T1Font.parse`s(0NN499dmm< ii .  )$((!4zz )$W-%0%6%6%8  !Iz!MM*d;MJ%2%?%?56"%&@&K "  s5z" SA!MM%(D9MJ$11*UV2DE1RE!H S Irc d|j}d}i}g}|j|jd|d|jdtjd|jd|dgd}|dz }|d z }t D]}|t ||vz }|j|j|d |jD]\}}|r|||<|d k(r|d }d}tD]} |t | |vz }|j|jd |d |jD]&\} } |j|j| | (|jd |tvr|||<d}|j|j|||jd|j|} |jtd| gtdD]"} |j|jd$|jgdt|d} | S)NFz%!FontType1-1.1: FontNamez %t1Font: ()z%%BeginResource: font r dict dup beginFontInfoz /FontInfo send defTendscurrentfile eexec @0000000000000000000000000000000000000000000000000000000000000000)s cleartomarks %%EndResources%%EOF )r9extend_tobytes fontToolsversionfont_dictionary_keysintappendrIFontInfo_dictionary_keys _make_linesr encode_eexecrrL)r%sf eexec_began eexec_dictlinessizer;valuefisubkeysubvalue eexec_portionr(rs rr3zT1Font.createDatass9 YY    1"Z.1ABC 9+<+<*=Q?@ 6r*~6FGH      ' #C Cr N "D # T]]dV?#;<=((* ;JC"' 3j  ^6.FC" --D. T]]Zv_+MNO(* E$FHLL!1!1&(!CDE Z(//"' 3"  T--c59:) ;*  V))*5  Y 5}EFGq 2A LLx0 1 2 AB% rcrg}d\}}}d}t}t|jd}|D]8\} } | dk(r|d} d} tD]} | t | | vz } |j d|j |j | d| jD]\} }|s |tk(r| }n|s |tvr| }n |s |tvr| }| d k(r|}| d k(r%|j |j t_| d k(r|D]}|j|Dcgc]}|j}}|j d t|d jdt|D]\}}t!j"t%t&d||gd\}}|j t%|j d|dt|d|d||j d|g|j d|j du|j)|j+| || dk(r|j d|j |j t|dd|djD]\}}|jt!j"t%t&d||jgd\}}|j t%|j d|dt|d|d||j d|g|j d|j)|j+| | ;|j)gdt%|d}t!j"t%t,|gd\}}|Scc}w)N)NNNrBc|ddk7S)Nrr@r)items rz%T1Font.encode_eexec..s$q'YBVr)r;r@rVs dup /PrivaterXrA OtherSubrsrCz/Subrs z arrayasciirDdup  defsputr6sdup /CharStrings/send put)rZs%dup /FontName get exch definefont popsmarkscurrentfile closefile r]q) std_subrssortedrIPrivate_dictionary_keysrcrdr_RD_value ND_values PD_values hintotherscompilebytecoderMencode enumeraterencryptrchar_IVr^rfeexec_IV)r%rjrkRD_keyND_keyNP_keyrArE sortedItemsr;rmprrlrorpsubr_binrRencrypted_subrrQ glyph_namechar_binencrypted_charrqencrypted_eexecs rrgzT1Font.encode_eexecs"2Z--/5VW %G ;JCi *5.FC" --D. _- T]]dV?+CDE(* &I$FH!h(&:!'#I(=!'#I(=!'( (- T]]:%>?7*(0/H$,,./CK Lx!2!2 L L ws5zl&%A%H%H%QR+4U+;KAx05 )76E?H*E F1-NA"LL )(, .21#Qs>7J6K1VHTU,V)*)7(, &l(C %&!"   V, V, T%5%5fh%GHM&IN % 01 MMSM)B%C$DO"TU-7},E,K,K,M(J$$&(- !76E?H4E4E"FG)%NALL! $ &' |1S5H4I6(RS$T!"!/ $ &l ;     Z( T--c59:OG ;R    "%. "]]9h 5N+OQVWw!Ms"N4c |dk(r|jd|d|dgS|dvr|jd|d|rdnddgS|d k(r|tk(r|jd|d gSg}|jd |jd td D]4}||}|dk7s|j|jd|d|d6|jd|St |t r|jd|d|dgSt |t r|jd|d|rdnddgSt |tr/|jd|ddjd|DdgSt |tr/|jd|ddjd|DdgS|jd|d|dgS)NrTr{z /z def) isFixedPitch ForceBold RndStemUprytruefalseEncodingz StandardEncoding defs/Encoding 256 arrays'0 1 255 {1 index exch /.notdef put} forz.notdefrxz putrzz (z) defz [c32K|]}t|ywr+str.0vs r z%T1Font._make_lines.."s5Lc!f5Lz] defz {c32K|]}t|ywr+rrs rrz%T1Font._make_lines..$s6M!s1v6Mrz} def) r_r rdrL isinstancerboollistjointuple)r%r;rmrkrRnames rrfzT1Font._make_lines s * MMAcU"UG4"89: : < <MMAcU!eF+I"NOP P J (( #.C&DEFF 34 GHsLA 8Dy( T]]T!BtfD3I%JKL V$ eS !MMAcU"UG5"9:; ; t $MMAcU!eF+I"NOP P t $MMAcU"SXX5Le5L-L,MU"STU U u %MMAcU#chh6Mu6M.M-Nf"UVW WMMAcU!E7$"789 9rc0t||j|Sr+)rr$)r%serrorss rr_zT1Font._tobytes(sq$--00r)rwNF)strict)rrr__doc__r)r0r-r7r<r:r3rgrfr_rrrrr4s< !1 # &3j`D:<1rrctjj|\}}|j}t |\}}|dk(rt ||dfS|dk(rt ||dfSt|dfS)z,reads any Type 1 font file, returns raw datarz.pfbrr)osr&splitextlowerrr r!r")r& onlyHeaderr(extcreatortyps rrr/st WW  d #FAs ))+C'-LGS f}j)611 f}tZ(%//''rct||j} tj|d} |dk(r t ||n|dk(r t ||n t|||d}|rts tj|yyy#tj$rYlwxYw#tj$rYywxYw#|r7ts0 tj|w#tj$rYwwxYwwwxYw)Nrrrr) assertType1upperrremoveerror writeLWFNwritePFB writeOtherDEBUG)r&rr'r/errs rr,r,<s :: dD ! U] T4 tT5 ) u  $3 88   88   u  $88  3sRB 3B;1B" BB"B87B8; C6CC6C1.C60C11C6iPcpddlm}||} g}|jdgD]}t|jd}t|jddk7r t d|dvr(|r|dk(rn}|j |jddm|d vrnX|d k(r5t|d 5}|j |jddd|dk(rt d t|z|jt|}t||S#1swYxYw#|jwxYw) z)reads an LWFN font file, returns raw datar)ResourceReaderPOSTrzcorrupt LWFN filerrWrWN)rVrBrbbad chunk code: ) fontTools.misc.macResrrHrrrrdopenrreprcloserr)r&rrreaderrrescodefs rr r Zs$4 D !F::fb) ?C388A;'Dsxx{#q(122v~$!) CHHQRL)$%*KK)**04:=>>! ?$   T?D K**  s$BD#( D'D#D D##D5cg}t|d5} |jdtdk7r tdt |jd}|dvrMt |jd}|j|}t ||k(sJ|j|n|dk(rntdt|z|rnd d d t|}t||S#1swY!xYw) z'reads a PFB font file, returns raw datarrzcorrupt PFB filerrBrVrN) rrrrr stringToLongrMrdrrr)r&rrrrchunklenchunks rr!r!ys D dD QvvayGCL(011166!9%Dv~'q 2x(5zX--- E"04:=>> T?D K%s B6C%%C.c6t|d5}|j}dddtt|}g}|D]A\}}|r)t |ddr|j t |1|j |Ct|S#1swYrxYw)z'reads any (font) file, returns raw datarNrB)rrrfindEncryptedChunksisHexrd deHexStringr)r&rrchunks isEncryptedrs rr"r"s dD Qvvx  &F D$ U 5r+ KK E* + KK   T?s BBc>tj|dddtj|d} tj|d}t |}|D]d\}}|rd}nd}|stj t |dz|dtdz z}|jd|d |tdz d}|dz}|rUftj t d dz}|jd|d tj|y#tj|wxYw) NjustrrrWirrr) rFSpCreateResFile FSOpenResFile UseResFilerResourcer LWFNCHUNKSIZE AddResource CloseResFile) r&rresRefresIDrrrrrs rrrs vvq1   tQ 'F! v$T*"( " Kll74=4#7%@S-RSBS:T#TUr2ma/12   "ll71:,- r*   s3D$AD96DDc ~t|}t|d5}|D]f\}}|rd}nd}|jtdt|z|jt t ||j|h|jtdtdzdddy#1swYyxYw)NwbrWrrrV)rrr,r longToStringrM)r&rrrrrrs rrrs  &F dD  +Q"(  K GGGCL74=0 1 GGLU, - GGEN   wqz)* + + +s BB33B<c Jt|}t|d5}tdz}|D]h\}}|rd}nd}|dk(rF|rD|s|jt j |d||jd||d}|r@X|j|j dddy#1swYyxYw)NrrWr )rr HEXLINELENGTHr,r hexString) r&rr/rr hexlinelenrrrs rrrs  &F dD  Q"a' "(  KqyUGGEOOE+:,>?@GGEN!*+.E     s"B?B;BB"currentfile eexecs(0[ ]*){512})flagsscurrentfile closefiles%-- eexec start s%-- eexec end s [0-9A-Fa-f]*$c0tj|duSr+)_ishexREmatch)texts rrrs >>$ t ++rcbt|}g}|D]\}}|rt|ddr t|}tj|d\}}|dd}|t t  dz dt k7r(|t t  dz dt k7r td|dt t  dz dz}|jt|ztz|t t dz dtk(r'|j|dt t dz |j|t|S) NrBr|rrWzinvalid end of eexec partr) rrrrrJrMEEXECINTERNALENDrrdEEXECBEGINMARKEREEXECENDMARKER EEXECBEGINr)rrrr decryptedrQs r decryptType1rs1  &F D$# U U2AY#E* ==6LIq!!" I3/0014r:>NNs#344q82>BRR9::!">S)9%:$:Q$>?%GI KK(94~E Fc*o%)B/:= E"8S_$4q$89: E"##$ T?rc Bg} |jt}|dkrn|ttzdz}tj ||}| t d|j }|||dz}t|ddr t|}tj|d\}}|jt}|dkr t d|jd|d|f|jd|d|ttzdzf||d}|jd|f|S)Nrrzcan't find end of eexec partrWrBr|) findrrMEEXECENDsearchrstartrrrrJrrd) rreBeginendMatcheEnd cypherText plainTextrQ eEndLocals rrrs( F :& A: #j/)A-??40  89 9~~&4!8, BQ $Z0J}}Z7 1NN#34 q=89 9 q$w-() q*%Ly37G3H'H1'LMNODE{% & MM1d) MrcZtjt|jSr+)rrrsplit) hexstrings rrrs   Yy'89 ::rs/FontType\s+1\s+defcdD]}|dt||k(sn tdtj|s td|j ddkr td|S)N)s%!PS-AdobeFonts %!FontType1znot a PostScript fontznot a Type 1 fontrrznot an encrypted Type 1 font)rMr _fontType1RErr)rheads rrr&sr3/  #d)  $ /-..   t $)** yy%&*455 Krcdd}tdD]}|t|d|dzzz|dzz z }!|S)NrrBr[)rLr)longrrRs rrr7sD A 1X: Wddq1uo.1q58 99: Hrct|dk7r tdd}tdD]}|t|||dzzz }|S)NrBzstring must be 4 bytes longrr[)rMr#rLr)rlrRs rrr>sQ 1v{677 A 1X& WQqT]q1u %%& Hr FontMatrixFSType Copyright)rCrvUniqueID BlueValues OtherBlues FamilyBluesFamilyOtherBlues BlueScale BlueShiftBlueFuzzStdHWStdVW StemSnapH StemSnapVr LanguageGrouppasswordrA MinFeaturerz/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869 systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup /strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def)s    ! s  s   s   sccccs )string currentfileexch readstringpop)def)noaccessr2)put)r3r4r)rF)Err`rFrfontTools.misc.macCreatorTyperfontTools.misc.textToolsrrrrfontTools.misc.psOperatorsr r r $fontTools.encodings.StandardEncodingr rre __author__ __version__rCarbonr ImportErrorhaveMacSupport Exceptionrobjectrrr,rrr r!r"rrrrrMrrrrrrrrrrrrrrrbrrer^rrr}rrrrrrrrrBs$ >II B     N i u1Vu1v (4  >0 $!0 +("  2::+244 8+'# 2::& ',02; rzz12  "  23L) 568P      A * + * + A Ns)D** D63D95D66D99EE