)Ej0vddlmZmZmZmZmZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlZddlmZddlmZddlZejeZdZ ej!ed ed gZ"ed ed gZ#ej!e#Z$ej!d Z%d Z&d'e&(Z&ej!e&Z)ej!ededgZ*Gdde+Z,Gdde+Z-Gdde.Z/Gdde Z0dZ1ddZ2dS))bytechrbyteord bytesjointobytestostr)eexec) PSOperatorsps_StandardEncodingps_array ps_booleanps_dict ps_integer ps_literalps_markps_name ps_operator ps_procedure ps_procmarkps_real ps_stringN)Callable) whitespaces ()<>[]{}%[s]*s [^][(){}<>/%s%[^ ]*sf \( ( ( [^()]* \ [()] ) | ( [^()]* \( [^()]* \) ) )* [^()]* \) s<[s 0-9A-Fa-f]*>ceZdZdS) PSTokenErrorN__name__ __module__ __qualname__rFC:\PYTHON\MyICR_Suite\python\Lib\site-packages\fontTools/misc/psLib.pyrr7DrrceZdZdS)PSErrorNrr"rr#r&r&;r$rr&ceZdZd dZd dZdZeeej e j e j e j fdZ ej fdZd Zd Zd S) PSTokenizerrasciict|}||_t||_d|_d|_||_dS)NrF)rbuflenposclosedencoding)selfr+r/s r#__init__zPSTokenizer.__init__@s:clls88   rc|jrtd||dkr|j}nt|j|z|j}|j|j|}||_|S)zRead at most 'n' bytes from the buffer, or less if the read hits EOF before obtaining 'n' bytes. If 'n' is negative or omitted, read all data until EOF is reached. zI/O operation on closed fileNr)r. ValueErrorr,minr-r+)r0nnewposrs r#readzPSTokenizer.readIsi ; =;<< < 9AXFFAtx00F HTX& 'rc.|js d|_|`|`dSdS)NT)r.r+r-r0s r#closezPSTokenizer.closeXs*{ #DK$((( # #rc||j|jkrdS|j}|j}t t ||} | |vr| dvrd} | } n6| dkr/d} |||\} } ||| } n| dkrDd} |||}|td|z|\} } ||| } n| d krDd } |||}|td |z|\} } ||| } nmtd |z| d krd} |||dz}nd} |||}|td |z|\} } ||| } ||| z|_t| |j } | | fS)N)NNs{}[] do_special% do_comment( do_stringzbad string at character %d< do_hexstringzbad hexstring at character %dzbad token at character %d/ do_literalr r/) skipwhiter-r,r+rrspanrrr/)r0r, ps_special stringmatchhexstringmatch commentmatchendmatchr-r+char tokentypetoken_nextposms r# getnexttokenzPSTokenizer.getnexttoken]s  8tx  :hhws3x(()) :  w( ( )\#s3388:: 7CK(' KS))9&'Cc'IJJJVVXX 7CK(* "N3,,9&'F'LMMMVVXX 7CK("#>#DEEEt||( HS#'** HS#&&y"#>#DEEEJAwG $EU#edm444%rcj||j|j\}}||_dSN)r+r-rJ)r0 whitematchrSrTs r#rIzPSTokenizer.skipwhites2Z$(3388:: 7rc|jdz|_|j|jd|_tj|jd\|_}t |j|_d|_dS)Nr iq)r-r+dirtybufrdecryptr,)r0Rs r# starteexeczPSTokenizer.starteexecsV8a<, mDM599 !tx==rcFt|dsdS|j|_|`dS)Nr\)hasattrr\r+r;s r# stopeexeczPSTokenizer.stopeexecs+tZ((  F= MMMrN)rr))r2)rr r!r1r9r<r,rKstringREmatch hexstringRE commentRE endofthingRErV skipwhiteRErIr_rbr"rr#r(r(?s!!!!    ### N"(_#5 5 5 5 n$/#4rr(ceZdZddZdZdZefdZdZdZ dZ e e e eefd Zd Zd Zd Zd ZdZdZdZdZdZdS) PSInterpreterr)ci}i}||_||g|_g|_d|_t |_|dS)Nr)r/ dictstackstack proclevelrprocmarkfillsystemdict)r0r/ systemdictuserdicts r#r1zPSInterpreter.__init__sP   $h/ #   rcZ|jd}tx|d<x|d<|_td|j|d<t d|d<t d|d<t t|d<ti|d <| ||j dS) Nr[mark]r truefalseStandardEncoding FontDirectory) rlrrur do_makearrayr r r r suckoperators __class__)r0rqs r#rpzPSInterpreter.fillsystemdicts^A& ;B99D 3D*V,ty%c4+<== 3']] 6(mm 7)12E)F)F %&&-bkk ?# :t~66666rc t|D]R}t||}t|tr+|dddkr|dd}t ||||<S|jD]}|||dS)Nps_)dirgetattr isinstancerr __bases__r|)r0rqklassnameattr baseclasss r#r|zPSInterpreter.suckoperatorssJJ ; ;D4&&D$)) ;d2A2h%.?.?ABBx#.tT#:#: 4  6 6I   z9 5 5 5 5 6 6rc t||jx}|_|j}|j}|j} |\}}|sn3|r|||} | |} n ||} | || C|d|_dS#|jntd|jj |jj dz |jj |jj |jj |jj dzxYw)Nr z/ps error: - - - - - - - %s >>> %s - - - - - - -2) r(r/ tokenizerrVdo_token handle_objectr<logdebugr+r-) r0datarrrVrrrQrRhandlerobjects r# interpretzPSInterpreter.interprets9%0t}%E%EE DN - =*   *#/<>> 5-%gdI66G$WU^^FF%Xe__F%!M&))) * OO   !DNNN ~) $ N&t~'9B'>AS'STN&t~'9DN|j}|jD] }||dSrX)rr)r0procritems r#rzPSInterpreter.call_procedures8* J  D M$      rc|j}tt|dz ddD]}|||vr|||cStdt |z)Nr r2z name error: )rlranger,r&str)r0rrlis r#rzPSInterpreter.resolve_namesqN s9~~)2r22 * *Ay|## |D))))$ns4yy0111rc ||}||S#ttf$r ||}||cYS#ttf$rd|vru|d} ||d|} |||dzd| }||cYcYS#ttf$r||cYcYcYSwxYw||cYcYSwxYwwxYw)N#r )r4 OverflowErrorfind) r0rRintfloatrrrnumhashposbases r#rzPSInterpreter.do_tokens\ ##e**C&:c?? "%M* $ $ $ $eEllws||### . * * *%<<#jjooG/"s5'?33!c%! "6== *z#.....' 6...&wu~~-------. #75>>))))) * $s[ C  A C *C-*B& C"C &C CC C  CC CC cdSrXr"r0rRs r#r@zPSInterpreter.do_comments rc0t|ddS)Nr )rrs r#rFzPSInterpreter.do_literal!s%)$$$rc0t|ddS)Nr r2)rrs r#rBzPSInterpreter.do_string$sqt%%%rc d|dd}t|dzr|dz}g}tdt|dD]=}|t t |||dzd>d|}t|S)NrGr r20r)joinsplitr,rappendchrrr)r0rRhexStrcleanstrrs r#rDzPSInterpreter.do_hexstring'sqt**,,-- v;;? "c\Fq#f++q)) = =A OOCF1q1u9$5r : :;; < < < <778$$"""rc~|dkr|jdz|_|jS|dkrkg} |}||jkrn||6|jdz |_|t |S|dkr|jS|dkrtdStd)N{r }rtrvzhuh?) rnropoprreverserrurr)r0rRr topobjects r#r>zPSInterpreter.do_special1s C<<!^a/DN= c\\D ' HHJJ  -- I&&&  ' "^a/DN LLNNN%% % c\\9  c\\3<< v&& &rc:|j|dSrX)rmrrs r#rzPSInterpreter.pushFs &!!!!!rc|j}|std|d}|r0|j|vr'tdt|d|j|d=|S)Nzstack underflowr2ztypecheck, expected z, found )rmr&rrepr)r0typesrmrs r#rzPSInterpreter.popIsv  -+,, ,r  {%''g:>u++++v{{S "I rcg} |}||jkrn||6||t |dSrX)rrurrrr )r0arrayrs r#r{zPSInterpreter.do_makearrayVsm $ IDI%% LL # # #  $   (5//"""""rc|`|`dS)zRemove circular references.N)rmrlr;s r#r<zPSInterpreter.close`s J NNNrNr))rr r!r1rpr|rrrrrrrrrrrr@rFrBrDr>rrr{r<r"rr#rjrjs9777666'.B      222 ####>   %%%&&&###'''*"""   ###rrjct|j}|tkr4i}|jD]\}}t |||<n|t krtdgt |jz}tt |jD]}t |j|||< |jdkrt|}n|j}|S)Nr) rrdictitems unpack_itemlistr,rtuple)rtpnewitemkeyrrs r#rrfs dj  B Tzz***,, . .JC&u--GCLL . t&3tz??*s4:'' 4 4A$TZ]33GAJJ 9 ' 'GnnG* Nrr)cbtjd|}|r*|d}|}nd}t |}|d|||jddj}||vr ||}nkt| }t|dkr| d| ||d}| t|S)Ns /FontName\s+/([^ \t\n\r]+)\s+defr rHsC/Helvetica 4 dict dup /Encoding StandardEncoding put definefont poprrz Helvetica)researchgroupdecoderjrrlrrkeysr,removesortr<r)rr/rUfontName interpreterfontdirrawfont fontNamess r#suckfontrws( 6==A771::??$$222KN$#A&7=G7(#(( y>>A     [ ) ) ))A,' w  rr)3fontTools.misc.textToolsrrrrrfontTools.miscr psOperatorsr r r r rrrrrrrrrrrcollections.abcrstringrlogging getLoggerrrrKcompilerh endofthingPatrgrf stringPatrrrcre Exceptionrr&rr(rjrrr"rr#rsPPPPPPPPPPPPPP   $$$$$$g!!  bjD*e#<==>>  ?J>?? rz-(( BJ| $ $    HHY__&& ' ' 2:i bjE:#GHHII      9        i   ddddd&dddN}}}}}K}}}@"      r