L i ddlmZddlmZddlmZddlmZm Z ddl m Z ddl mZddlmZddlmZmZdd lmZdd lZdd lZGd d eZGd deZGddeZGddeZej:dZdZdZ dZ!dZ"dZ#Gdde$Z%dWdZ&dXdZ'dZ(dWdZ)dWdZ*dWd Z+dWd!Z,dWd"Z-dWd#Z.dWd$Z/ej`fd%Z1dWd&Z2d'Z3d(Z4d)Z5d*Z6Gd+d,e7Z8Gd-d.e8Z9Gd/d0e8Z:Gd1d2e8Z;dWd3Zd6Z?d7Z@Gd8d9e7ZAdWd:ZBejfd;ZDejfd<ZFejfd=ZGejfd>ZHd?ZIdWd@ZJdWdAZKdWdBZLdWdCZMdWdDZNdWdEZOdWdFZPdGZQdHZRdIZSdJZTdKZUdLZVdMZWdNZXdOZYdPZZdWdQZ[GdRdSe7Z\dWdTZ]dXdUZ^e_dVk(rdd l`Z`e`je^y y )Y)ttLib) cmap_classes)otTables) ValueRecordvalueRecordFormatDict)builder)contextmanager)newTable)LOOKUP_DEBUG_ENV_VARLOOKUP_DEBUG_INFO_KEY)setitemNc eZdZy) MtiLibErrorN__name__ __module__ __qualname___/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/mtiLib/__init__.pyrrrrc eZdZy)ReferenceNotFoundErrorNrrrrrrrrrc eZdZy)FeatureNotFoundErrorNrrrrrrrrrc eZdZy)LookupNotFoundErrorNrrrrrr rrrzfontTools.mtiLibc|dddvr,tjjt|dddS|dddk(rdt|ddzS|j ddks Jd|z|sJd |S) N)zU zu z# z glyph%.5d rzSpace found in glyph name: %szGlyph name is empty)rTTFont_makeGlyphNameintfind)ss r makeGlyphr''s!u ||**3qub>:: 2A$S12Z'' 66#;??;a??? ###1 Hrc>|Dcgc] }t|c}Scc}wN)r')lgs r makeGlyphsr,1s"# $QIaL $$ $sc`| ||}|St|}|S#t$r t|wxYwr))KeyErrorrr$symmappingidxs r mapLookupr35sK +#,C J#h J  +%c* * +s-cz t|}|S#t$r" ||}Y|S#t$r t|wxYwwxYwr))r$ ValueErrorr.rr/s r mapFeaturer6BsY,#h J , ,#,C J ,&s+ + ,,s  :!6:c |||}|y#t$r6} ||jfd||Yd}~y #t$rYwxYwd}~wwxYw)Nc|Sr)r)ref collectionkeysetters rzsetReference..Vsz3 <r)raddDeferredMappingAttributeError)mapperr1r0r<r:r;mappedes ``` r setReferencerCOsy W% :sF# "  "**z"DeferredMapping.addDeferredMappingcs8 >T!WEUEUV %%vsA&67rc|jD]T\}}}tjd|t|j ||}||tjd|Vg|_y#t $r|wxYw)Nz,Applying deferred mapping for symbol '%s' %sz Set to %s)rGrLrMrNrr.)rIr<r0rBrAs rapplyDeferredMappingsz%DeferredMapping.applyDeferredMappingsgs"44 +NFC II>T!WEUEU  c 6N IIk6 * +"$   s A,, A8N)rrrrJr>rQrrrrErE_s$8 $rrEc tj}g}|jd5|D]}t|dkr |j dt|dkr |\}}}}t j d||tj} d| _|rtt||t| dnd| _ t|} dgt| zx| _} t| D]\} } tt|| t | | t| j| _|Dcgc]}|j$|k(s|}}|r|dj&}nxtj(}|d dt|z zz|_tj&|_|j ||j&}d|_g|_d|_|d k(r | |_tj,}|d dt|z zz|_| |_|j,j |t|j,|_ ddd|D]3}t3|j&j,d |j&_5t3|d |_t|j(|_|Scc}w#1swYuxYw)Nz script tablez#Adding script %s language-system %sReqFeatureIndexirr!defaultc|jSr)) LangSysTagrecs rr=z!parseScriptList..s rr;c|jSr)) ScriptTagrZs rr=z!parseScriptList..s  r)ot ScriptListbetweenlenrOrLrMLangSys LookupOrderrCr6setattrrUstripSplitComma FeatureIndex enumerater FeatureCountr^Script ScriptRecordDefaultLangSys LangSysRecord LangSysCountrYsorted ScriptCount)lines featureMaprIrecordsline scriptTag langSysTagdefaultFeaturefeatureslangSyssymstheListir0r&script scriptRec langSysRecs rparseScriptListrus ==?DG ~ &.@- @Dd)a- Bd)a->B ;Iz>8 II;Y SjjlG"&G "% +1'"8,D./S3t9_ *>&?#[- @.@` &, MM ' '-G'  # w,EFD4,,-D K9F5.@.@s+4J6CJ6"J17J1;DJ61J66J?c ^tj}g|_|jd5|D];}|\}}}|&||vs Jd|zt |j||< t |t |jk(sJd|t |jfz tj}||_tj|_|jj||j} d| _ t|} dgt | zx| _ } t| D]\} } tt|| t | | t | j| _> dddt |j|_|S#t $rYwxYw#1swY4xYw)Nz feature tablezDuplicate feature name: %s%d %d)r_ FeatureList FeatureRecordrarbr$r5 FeatureTagFeaturerO FeatureParamsrfLookupListIndexrhrCr3r LookupCountri)rq lookupMaprrrIrtname featureTaglookups featureRecfeaturerzr{r|r0s rparseFeatureListrs >> DD  '? ?D(, %D*g%:-R/Kd/RR-#&t'9'9#: 4  4yC(:(:$;;W**+H>; ))+J$.J !!#J     % %j 1 ((G$(G !"7+D15T0B BG #g#D/ M3Y 3!L M"%g&=&=">G / ??4D../D K  ??s15F##AF#C F# F F#F  F##F,c.d}d}gd}|jdj|vrt|}dddddj|dj}|r;|djdvs J|d|djd k(r||z}|djd k(r|t |ddzz}|djd k(r|d z}t |d}|jdj|vr||fS) Nr) righttoleftignorebaseglyphsignoreligatures ignoremarksmarkattachmenttypemarkfiltertyperrS)rrrr)yesnorrrr )peekslowernextgetr$)rqflags filtersetallFlagsrtflags rparseLookupFlagsrs+ EIH ++-  "h .E{! &%!  #d1gmmo  7==?m3 zparsePair..\s,. ./AAKK&&() ). s02c32K|]}t|ywr)r$rxs rrzparsePair..ks$?SV$?)+r_PairPos ValueFormat1 ValueFormat2rsplitrFormatrbrrrr,r$rrre makeCoveragesetkeysCoveragePairSetglyphsPairValueRecordro getGlyphID SecondGlyphValue1Value2rOPairValueCount PairSetCountendswithpeek ClassDef1 ClassDef2 parseClassDef Class1Count Class2Countrange Class1Record Class2Recordr)rqrrrItyprrtsidewhatmaskglyph1glyph2valuerec2vrvalues1pairsetrsvalues2pairrr2rr|rec1jclass1class2s r parsePairr$s  :: '4 '>7==?1%++-D,, 2d 2,73t9;'--/77R@D(.q1D'Qq 2NFFQLEV#!#vVF^+*5-)Gvv&&>&)Dv~!!T)!!W!!T)!!Wr4( 42t* 4( Be $) %*%S%7>  mm** )FVnGjjlG02 2Gg- T__E %!&/))+#) %aj ,0,=,=gaj4 t$  %&))@)@%AG " LL   ( )  -d Kc g  4L kkmA''(@A**,q/"BS)A%B$BCIIKCR\\*bll+JCS>) ))*5$eDIcNkkmA''(@A*3&. 3<. *$*9>d>N>N8OP1R__.P%% ,D '4 '>7==?1%++-D,, 2d 2,73t9;'--/77R@D(.q1D$?T!AY$? !FFE$$V,99&ADv~!!T)![[!!T)![[r4( 42t* 4( Be $ % %% D)) )$*;*;T[[I ((  1 14;;?   %S)A)A)F)F)H%I4P  K # qCQ Ts !Y*Y c|jdjdj}|dvr'|jd5t ||cdddSt ||S#1swYxYw)Nrr)zfirstclass definition beginzsecondclass definition begin)rrruntilr)rqrrrs r parseKernsetrsv ++-  "1 % + + -C  [[ K  *UD) * * UD !!  * *s  A**A3ct|dksJ|}d|_t|d\|_|_t|dkDr"|ddk7rd|_t |d|_|S)NrrrrT)rbr intSplitComma XCoordinate YCoordinater$ AnchorPoint)dataranchors r makeAnchorrsj t9>> WFFM-:47-C*F* 4y1}aB  a\ Mrc^i}|D]}t|dvsJ|dtjfdtjfd|d\}}t |d}||vrddg||<||| J||ft |dd||||<t j||jS)N)rVrSrr)entryexitr) rbr_ EntryAnchor ExitAnchorr'rrbuildCursivePosSubtabler)rqrrrsrtr2rglyphs r parseCursiversG :4yF"(D("( &  q' U$q'"  "D\GENu~c"*8UCL8*(ab59s :  & &w0G0G0I JJrcg}|jD]I}||\}}|j}||_t||j||j |K|Sr))rMarkRecordClassClassre MarkAnchorrO)r coveragerrsrrrrecords rmakeMarkRecordsrs_GU v""$  f-v  Nrc`g}i}|jD]N}t|||<|j}dg|z}t||j||j |P|j D]9\\}} } |||}t||j}||  J|| f| || <;|Sr))rrbBaseRecordClassre BaseAnchorrOitemsgetattr) r rr classCountrsr2rranchorsrrs rmakeBaseRecordsr&sG C\E ""$&:% g.v  #'**, U$&!,,/u~%5u~5%  Nrcpdgt|jz}t|jDcic]\}}|| }}}|jD]\\}} } } } |||} | ot j x} |||<| | _t| Dcgc]}t jc}| _| jD] }dg|z|_ | j | k(sJ|| j | f| j| dz j}||  J|| | f| || <|Scc}}wcc}wNr) rbrrhr"r_LigatureAttachComponentCountrComponentRecordLigatureAnchor)r rrr$rsr|r+r2rrcompIdx compCountrrcompRecr%s rmakeLigatureRecordsr0s\fs8??++G%hoo6 7DAq1a4 7C 76:jjl 2*w FU$ >+-+<+<+> >FWSZ($-F !DI)DT%Uqb&8&8&:%UF "!11 =*.*)<& =$$ 1   ! ! 4  1 ((15DDu~%>w'>>%! " N' 8&Vs D-D3c |j}d|_i}i}||jf||jf||jfd}d}|D]}|d} | dvsJt |d} || \} } | dk(rdnd} t d|dd| zD}t |d| z}t|d| zd| }| dk(r| ||f}}n | |f|z|}}|| vsJ||| |<t||}tt|j||j}|j}t|||}t||j |t||j"t%|t||j&|t||j(||dz|_|sdn"dtd |j-Dz|_tt|jDcgc]}|d c}||j0}|j3}|j4d k(rt7||||j.}nt9||||j.}t||j:|t||j<t%|t||j>|t||j@||Scc}w) Nr)markbaseligaturerr4rc32K|]}t|ywr)rrr|s rrz'parseMarkToSomething..s@!s1v@rrVr2c3,K|] \}}|dywrr)rkrs rrz'parseMarkToSomething..s4WdaQqT4WsLigature)!TyperMarkAnchorClassBaseAnchorClassr'rr$rrrrrMarkCoverageClassMarkArrayClassrre MarkRecord MarkCountrb MarkCoverage MarkArray ClassCountr"r$BaseCoverageClassBaseArrayClassBaser0r& BaseRecord BaseCount BaseCoverage BaseArray)rqrrrImarkDatabaseDataDatamaxKlassrtrrr  anchorClass extraItemsextrasrrr;r markCoverage markArray markRecordsr8 baseCoverage baseArray baseRecordss rparseMarkToSomethingrXs 668DDKHH1,,-1,,-q001 D H(1g2222$q'" Ik+Q @tAJ'?@@DZ()DZ!12K@ &=C %.61FC$##S x'($ HMMO 4dA>Drrfc,eZdZdZdZej Zy)MarkToMarkHelperMark1Mark2N)rrrr\rFr_ MarkMarkPosr:rrrriri,s D D >>Drric,eZdZdZdZej Zy)MarkToLigatureHelperr\r9N)rrrr\rFr_ MarkLigPosr:rrrrnrn2s D D ==Drrnc,t||tSr))rXrfrqrrs rparseMarkToBaserr8 t-=-? @@rc,t||tSr))rXrirqs rparseMarkToMarkru<rsrc,t||tSr))rXrnrqs rparseMarkToLigaturerw@s t-A-C DDrcn|r-|jdDcgc]}|jc}SgScc}wN,)rstrip)rtr&s rrfrfDs+37tzz# /!AGGI /?R? /s2cd|r(|jdDcgc] }t|c}SgScc}wry)rr$)rtr|s rr r Hs)04DJJsO ,qCF ,<"< ,s-ceZdZdZy) ContextHelpercr|jdrd}d}nd}d}|jdrd}d}d}nd}d}d}||z}||_||_||_||_||_||_|d z|_|dk(rd } d } d } d } d} d}d}d}d}d}nN|dk(rd} d} d} d} d} d}d}d}d}d}n*|dk(rd} d} d} d} d} d}d}d }d!}d"}n Jd#|z|r$| |_ | |_ ||_ ||_ ||_ n#| |_ | |_ | |_ ||_ ||_ |dk(r1|d$z|_|d%z|_|d&z|_|d'z|_d(|_y|dk(rR|d)z|_|d*z|_|d+z|_|d,z|_d-|_|rd.nd/|_|rdnd|_|rd0nd1|_yy)2NSubstSubPosChainrrVrTr LookupRecordc|jSr)rrs rr=z(ContextHelper.__init__..i rc|jSr)rrs rr=z(ContextHelper.__init__..j ajjrcy)Nr)rrs rr=z(ContextHelper.__init__..krcy)N)NNNrrs rr=z(ContextHelper.__init__..lrrc|jfSr))Inputrs rr=z(ContextHelper.__init__..o !''rcH|j|j|jfSr) Backtrackr LookAheadrs rr=z(ContextHelper.__init__..pq{{AGGQ[[&Irc6|\|_d|D\|_y)Nc38K|]}t|dzywrrbrs rrz>ContextHelper.__init__..SetRuleData..t"9!3q6A:"9)r GlyphCountrds r SetRuleDataz+ContextHelper.__init__..SetRuleDatar "9q"9rc|\|_|_|_t|dt|ddzt|dc|_|_|_yNrrrrrrrbBacktrackGlyphCountInputGlyphCountLookAheadGlyphCountrs rChainSetRuleDataz0ContextHelper.__init__..ChainSetRuleDatavP673agq{ 1YAaD A s1Q4y )%)rrc|jSr)rrs rr=z(ContextHelper.__init__..rrc|jSr)rrs rr=z(ContextHelper.__init__..rrc|jfSr)ClassDefrs rr=z(ContextHelper.__init__..s QZZMrcH|j|j|jfSr)BacktrackClassDef InputClassDefLookAheadClassDefrs rr=z(ContextHelper.__init__..s"####*rc|\|_yr)rrs rSetContextDataz.ContextHelper.__init__..SetContextDatas ! rc.|\|_|_|_yr)rrs rSetChainContextDataz3ContextHelper.__init__..SetChainContextDatasNOK$aoq7Jrc|jfSr))rrs rr=z(ContextHelper.__init__..rrcH|j|j|jfSr)rrs rr=z(ContextHelper.__init__..rrc6|\|_d|D\|_y)Nc38K|]}t|dzywrrrs rrz>ContextHelper.__init__..SetRuleData..rr)rrrs rrz+ContextHelper.__init__..SetRuleDatarrc|\|_|_|_t|dt|ddzt|dc|_|_|_yrrrs rrz0ContextHelper.__init__..ChainSetRuleDatarrc |jdSNrrrs rr=z(ContextHelper.__init__..sArc |jdSr) InputCoveragers rr=z(ContextHelper.__init__..saooa&8rc|jSr)rrs rr=z(ContextHelper.__init__..rrcN|j|jz|jzSr))BacktrackCoveragerLookAheadCoveragers rr=z(ContextHelper.__init__..s$##aoo58K8KKrc6|\|_d|D\|_y)Nc32K|]}t|ywr)rrs rrz>ContextHelper.__init__..SetRuleData..s"5a3q6"5r)rrrs rrz+ContextHelper.__init__..SetRuleDatas ! "51"5rcf|\|_|_|_d|D\|_|_|_y)Nc32K|]}t|ywr)rrs rrzCContextHelper.__init__..ChainSetRuleData..s'SV'r)rrrrrrrs rrz0ContextHelper.__init__..ChainSetRuleDatas7NOK$aoq7J (Q' )%)rzunknown format: %sRule RuleCountRuleSet RuleSetCountc||vr|gSgSr)rrrrs rr=z(ContextHelper.__init__..sf1#"r ClassRuleClassRuleCountClassSet ClassSetCountc^|r|j||S|dk(r t|StSr)intersect_classrrs rr=z(ContextHelper.__init__..s<!!&!,&'!Vc&k25rrrrr)r startswithTypr:rChainTypInputIdxDataLenrr ContextDatarRuleDatarrrrr Intersectr ClassDefIndexr)rI klassNamerrr:rrrrr ChainCoveragerChainContextDatarrr ChainRuleDatarrs rrJzContextHelper.__init__NsV   g &CDCD    (EHGEHG3;        >1 Q;+H0M+K; !N"& +HIM : :q[+H0M1K    " P,HIM : :q[.H8MK# !N"& +HM 6 ( 4*V3 31 )DM/D "5D )DM/D $DM*D "0D $DM*D  Q; 6)DI% 3DN#i/DL (> 9D LDN q[ ;.DI%(88DN#j0DL (? :D DN 05O*DM&+D $)wDJrNrdrrrr~r~MsJ7rr~c &tt|}g}|D]y}|}t|}t|dk(sJ|t |d}|dkDsJ||dz |_t t||dt|d|j|{|S)Nrrrr) r#r_rfrbr$ SequenceIndexrCr3rerO)r"rrrlstitemr[r2s rparseLookupRecordsrs B "E Cgt$4yA~#t#~$q'lQww!GY 47GSBST 3 Jrc:|sy|}t||_|Sr))dictr)rrrrIs r makeClassDefrs  7D)_DN Krci}|jd5|D],}t|d}||vsJ|t|d||<. dddt|||S#1swYxYw)Nzclass definitionrr)rar'r$r)rqrrrrtrs rrrs|I ) *, ,Dd1g&E ) 05 0)"47|Ie  ,,  4 // ,,s 2AA%c|syt|tr t|}|}tt||j|_|S)Nr\) isinstancerrorr)rrrrs rrrs= &#wHS[doo>HO Orcg}|jd5|D]}|jt|d! dddt|||S#1swYxYw)Nzcoverage definitionr)rarOr'r)rqrrrrts r parseCoveragers^ F , -. .D MM)DG, - .. e ,,..s %AAc Ni}|D]S\}}|j|jdgjtfdt |D|fUg}|D] }||vr|jdg} ||D]\}}t t j} j| |t| jdzt|t| j|| j| t t j} t| j| t| jt| |j| t|j|t|jt|y)Nrc3PK|]\}}||jk(rdnddyw)rrNr)rr|r&rs rrz!bucketizeRules..s)O11!qzz/Qq23Os#&r^) setdefaultrrOrrhr#r_rrrer:rbrrrr) rIrrules bucketKeysbucketsseqrecsrulesets firstGlyph thisRulesrulerulesets ` rbucketizeRulesrslG T3qzz?1-r299 O #O OQU V  H ! W $ OOD !   , #IC&72qvv&(D MM$ $ D!&&7*CI 6 D!..$ /   T "  #)'"aii(*+c)n5 !" D!))X& D!..#h-0rc  tt|}|jdjdj }|dk(rTd|_t jd||j t||j g}|D]}|dj dk(s J|dt|djzkr-|jdt|djzkr-td|ddjzD}t|djzdj|} |j|| ftfd|D} t!| ||_t%|||j"j&|S|j)drd |_t jd||j t||j dgjz} |jdj)d r|j+ddtd  j }ddtj,fidtj.fdtj0fd tj2fd d j|\} } | | J| t5||| | | <|jdj)d r̉j7|| g}|D]}|dj j9ds J|dt|djzkr-|jdt|djzkr-td|ddjzD}t|djzdj|} |j|| ftfd|Dtfd| j:j<j?D} t!| ||_t%||tAtCdz|S|j)drd|_t jd||j t||j tdtAjD}|jdj)dr|j+ddtd j }ddtj"fidtjDfdtjFfd tjHfdd j|\} } || jtK||| |jdj)drωjM||tO|}t|dk(sJ|d}|dj dk(s J|dt|ddj|} tQ|jRdzt| tQ|j| |SJ|)NrrrzParsing %s format %srTc3DK|]}tt|ywr))r,rfr6s rrzparseContext..7sX1 ?1#56Xs c3HK|]\}}|jdywrNrrrrrs rrzparseContext..;s"Dd#ajj/!,D"rrr) backtrackrT lookahead)rrVrc32K|]}t|ywr))r r6s rrzparseContext..WsJQ a(Jrc3HK|]\}}|jdywrrrs rrzparseContext..Zs"E)#t3qzz?1-Erc32K|]\}}|vs |ywr)r)rr+r firstClassess rrzparseContext..[s! !QQ,EVA s rrVc3 K|]}gywr)rr6s rrzparseContext..ds7"7s coverage definition begin)rinputrr^)*r#r_rrrrrLrMr~rbrrOrrrrrrrrrrrrrrrrrrrr"rrrrrrrlistrer:)rqrr:rrIrrrtrr firstGlyphsrr2r coveragesrrs @@r parseContextr+s 72t  D ++-  "1 % + + -C g~  ($ < $ , &D7==?g- 6tAw 6-d)a!))m+ Bd)a!))m+XQQYY@WXXC%d1qyy=?&;Q^^YWD LL#t %  &DeDD $[$7 tQt}}';';<~ K} g   ($ < $ ,FQYY& kkmA''(@A**,q/"BS)A%B$BCIIKCBKK(#$R%9%9!:B,,-"#R%9%9!: ii  JCS>) .3 .)*5$eDIcNkkmA''(@A y) &D7==?--g6 ?Q ?6d)a!))m+ Bd)a!))m+J$q1qyy=2IJJC%d1qyy=?&;Q^^YWD LL#t %  &EuEE  #AJJ/99??A  %[$7 tQuS->-B'CD: K9 j !  ($ < $ ,7eAII&677 kkmA''(CD**,q/"ES)D%E$EFLLNCBKK(#$R%9%9!:!1!12"#R%9%9!: ii  JC cN ! !-t5"I JkkmA''(CD dI&U 5zQQxAw}}*,5d1g5,!$qr(ANNIFaffw&D 2annd+ K # qrc t||d|S)N ContextSubstrrrqrrs rparseContextSubstrs t^y IIrc t||d|S)N ContextPosrrrs rparseContextPosrs t\Y GGrc t||d|S)NChainContextSubstrrrs rparseChainedSubstrs t%8I NNrc t||d|S)NChainContextPosrrrs rparseChainedPosrs t%6) LLrctj}d|_ggf}|jdj dr|j ddt d j}dtjfdtjfd|\}}||jt||||jdj dr|d|_t |j|_ |d|_ t |j|_ i}|D]-} t | dk(sJ| t| } | d|| d</tt!|j#||_|j$j&D cgc]} ||  c} |_t |j(|_|Scc} w)Nrrr )rrrr)r_ReverseChainSingleSubstrrrrrbrrrrOrrrr,rrrrr Substituter) rqrrrIrrr2rr1rtr8s rparseReverseChainedSubstr"s % % 'DDKRI ++-  # #$? @jjl1oA%@!A ABHHJR112R112   U #mE4uEF ++-  # #$? @'q\D"4#9#9:D&q\D"4#9#9:DG#4yA~#t#~$7Q#!W\\^!4d;DM+/==+?+?@awqz@DO$//*DO KAs G c |jd}|\}}}tjd||tj}t |\|_} | | |_dtfdtfdtfdtfdtfdtfd tfd dtfdt fdt"fdt$fdt&fdt(fdt*fd t,fd t.fd d ||\|_} |j3d5g} |j5r|j3d5|j5rG| |||} |j0| j0k(sJ| j7| |j5rGddd|j9ddvr t;||j5rddd|jd |_t?|j<|_ |j@dk(ry|S#1swYxYw#1swYYxYw)NlookupzParsing lookup type %s %srrrVrSr)singlemultiple alternater4contextchainedreversechained) r'rkernsetcursivez mark to basezmark to ligaturez mark to markr*r+GSUBGPOSz lookup end) % subtablez subtable endr)!expectrLrMr_Lookupr LookupFlagMarkFilteringSetrrrrrrr"rrrrrrrwrurr LookupTyperrrOrrSubTablerb SubTableCount) rqtableTagrrrt_rrr$rparseLookupSubTable subtablessubtables r parseLookupr@s << !DLAtSII)35 YY[F#3E#: Fy"+*+M*^,M*,-,- ":; .) N<(<(0!"$7 80?+?+  .*+.*+.*F*. \ "  jjl;< /jjl25$ JH!,,0C0CCCC$$X.jjl / {{}Q#AAU jjl  LLFOv/F q  M / /  s%5$HAG618H6G? ;HH c tj|}tt |dvsJtj d|t t |}d|_d fdfd fdfdd }|jD]\}}t||d|j|jd j}||vr0tj d |jt|f||\}}|d k(r|j*t j|_ g|j_|j\} } } t|||} 1| vs Jd | zt!|jj| <nJt#| t!|jjk(sJd| t!|jfz|jjj%| n&t ||J|t|||||j|jr.t!|jj|j_j)t*j,j/t0rxd|vrt3d|d<i|d_|dj4j7t8ij7|i} j;D]\} } d| dg| t=| < j)||_|S)Nr0z Parsing %sr`ct|Sr))r)rqrrs rr=zparseGSUBGPOS..s/%<rrct|Sr))r)rqrrrs rr=zparseGSUBGPOS..s*5)ZHr) LookupListN)zscript table beginzfeature table beginr$r Skipping %sr$zDuplicate lookup name: %srDebgrT) r getTableClassrErLrMr#r_VersionrrerrrrEr5r@rbr$rOrrQosenvironrr r r rr r"strtable)rqrr; containerrIfieldsattrparserrr<rr$rMrrrs @@r parseGSUBGPOSrRs-##H-/I!I "J ' '' 'IIlH% 72x "DDL  <  H ' F " fdD!" **, "jjl1o##% f  IImUZZ\ 2 K c{ f (?&"$--/)+&JAtQ $ BF$9,P.ID.PP,"%doo&<&<"= $4yC(>(>$?? $LB? OO " " ) )& 14&. 4 4. D$u .1 **, "2 &)$//*@*@&A#'') ::>>. /T!'/V $&V !V jj!6;Hb)  !* 1 4 f&($^c&k" 4 ((*IO rct||dS)Nr1rRrqrs r parseGSUBrV! f --rct||dS)Nr2rTrUs r parseGPOSrY%rWrc$i}|jd5|D]:}t|d}||vsJ||ddDcgc] }t|c}||<< dddtj||j Scc}w#1swY2xYw)Nzattachment listrr)rar'r$rbuildAttachListr)rqrpointsrtrr|s rparseAttachListr])s F ( )7 7Dd1g&E& - -&-1!"X6SV6F5M 77   vt'>'>'@ AA7 77s&BB BBBcni}|jd5|D]^}t|d}||vsJ|t|d}|ddDcgc] }t|}}|t|k(sJ||||<` dddt j |i|j Scc}w#1swY3xYw)Ncaretsrrr)rar'r$rbrbuildLigCaretListr)rqrr_rtrnumr| thisCaretss rparseCaretListrc3s F x ' 'Dd1g&E& - -&d1g,C*.qr(3Q#a&3J3#j/) /4 /)&F5M  ''  T-D-D-F GG4 ''s4B+B&B+&B++B4c.tj}d|_dt|j z|_dg|j z|_t|jD]'\}}tt|||j |<)|Sr() r_MarkGlyphSetsDefMarkSetTableFormatrr MarkSetCountrror"rr)setsrrIr8rs rmakeMarkFilteringSetsri@s   DDC ,,DFT...DMtzz|$61'A5 a6 Krci}|jd5|D]P}t|dk(sJ|t|d}t|d}||vrg||<||j |R dddt ||S#1swYxYw)Nzset definitionrrr)rarbr'r$rOri)rqrrhrtrsts rparseMarkFilteringSetsrlJs D ' (# #Dt9> '4 '>d1g&ET!WB~R HOOE " ## !t ,,##s AA??Bc|tjd}tjdt j }ddfdt fdtfddfd tfd }|jD]\}}t||d|j|jd j}||vr"tjd |t|W||\}}t||J|t||||||j|jd nd|_||_|S)NGDEFz Parsing GDEF GlyphClassDefc:t||tjSNr)rr_rorUs rr=zparseGDEF.._s eTAQAQ Rr AttachList LigCaretListMarkAttachClassDefc:t||tjSrq)rr_rtrUs rr=zparseGDEF..es eTAVAV Wrre)rzattachment list beginz carets beginz&mark attachment class definition beginzmarkfilter set definition beginrrFrBi)rrHrLrMr_rnr]rcrlrrerrrr#rerIrM)rqrrNrIrOrPrQrs r parseGDEFrvXs>+##F+-IIIn 779D  R# #/!@'8 W3 -?@V+W F " fdD!" **, "jjl1o##% f  IImS ) K c{ ftT"*0D0*dF5$/0 **, ""&!6!6!>:JDLIO rcJtjd}tjdg}|j |j dt |zdDcgc]}t||c}\}}}}t||} || _ || _ || _ i| _ t|} | ddk7r3| d| jt| dd<t|} | ddk7r3|j| |j d|_||_|Scc}w) Ncmapz Parsing cmapzcmap subtable %d) platformID encodingIDformatlanguagerz end subtablerr )rrHrLrMrr4rb parseCmapIdrry platEncIDr|rxrr$rO tableVersiontables) rqrrNrfieldplatIdencIdfmtlangrMrts r parseCmaprys%+##F+-IIIn F **, " '#f+56L$  u %$  sDS!#&! E{1g'+/7EJJs47B' (;D1g'  e **, " II !$ s#D cHt|}||dk(sJt|dS)Nrr)rr$)rqrrts rr}r}s+ ;D DG   tAw<rctjd|j}d}|djddk(r|djd}n>dj |djdddk(r|djd}|/t ||j d}||}n||k(s J||f|Jd  ttttd |||S) Nz Parsing tablerFontDamerr!rVzFont Chef TablerSz7Don't know what table to parse and data doesn't specify)r1r2rnrx) rLrMrrjoinrljustrVrYrvr)rqrr;rttags r parseTablersIIo ;;=D C Aw}}qZ'1gmmoa  $q'--/"1% &*; ;1gmmoa   U iil  Hs? 3XsO 3? A@A       t  rcneZdZdZdZdZdZdZdZdZ dZ d Z e d Z e d Zd Zd Zy) Tokenizerct|} |j|_t||_d|_d|_g|_d|_y#d|_Y8xYw)NrTr)iterrfilenamerqrtlinenostoppersbuffer)rIfrqs rrJzTokenizer.__init__sRQ !FFDM%[      ! DMs A Ac|Sr)rrHs r__iter__zTokenizer.__iter__s rc|xjdz c_t|jx}|_|j dDcgc]}|j }}t |dk(r|ds|d=|rE|ds@tjd|j|jfz|r|ds |d=|r|ds |Scc}w)Nr rz!trailing tab found on line %d: %s) rrrqrtrr{rbrLwarning)rIrtr&s r _next_linezTokenizer._next_lines q  ++ty#'::d#34a 44 t9>$q'Q R KK;t{{DII>VV WtBxHtBx 5sB=c^ |j}|r|dr|dddk7s|ddk(r|S-)Nr%r3)rrIrts r_next_nonemptyzTokenizer._next_nonemptys>??$DQT!WQZ3%6$q'\:Q rcd|jr|j}d|_|S|jSr))rrrIrets r_next_bufferedzTokenizer._next_buffereds- ;;++CDKJ&&( (rc~|j}|dj|jvr ||_t|Sr)rrrr StopIterationrs r__next__zTokenizer.__next__s8""$ 7==?dmm +DK  rc"|jSr))rrHs rrzTokenizer.nexts}}rc|js |j|_|jdj|jvry|jS#t$rYywxYwr)rrrrrrHs rrzTokenizer.peeks^{{ "113  ;;q>   !T]] 2{{ !  sA A%$A%c.|j}||SdS)N)rT)rrs rrzTokenizer.peekssiikos050rc#K|dz}|dz}|j||jj|d|jd=|j|dzyw)Nz beginz endr)expectendswithrrOr4)rIrstartends rrazTokenizer.betweensWhFl E" S! MM"  C&L!sAAc#Kt|tur|f}|jj|d|jt | d=ywr))rNrrextendrb)rItagss rrzTokenizer.untilsB :U "7D T" MM3t9*, 'sAAcht|}|dj}||k(sJd|d|d|S)Nrz Expected '', got '')rrrIr&rtrs rr4zTokenizer.expect s5Dz1gmmoax=a==x rct|}|dj}|j|sJd|d|d|S)Nrz Expected '*rr)rrrrs rrzTokenizer.expectendswiths9Dz1gmmo||AEa EE rN)rrrrJrrrrrrrrr rarr4rrrrrrsa  )1""(( rrc4t|}t|||S)a=Convert a Monotype font layout file to an OpenType layout object A font object must be passed, but this may be a "dummy" font; it is only used for sorting glyph sets when making coverage tables and to hold the OpenType layout table while it is being built. Args: f: A file object. font (TTFont): A font object. tableTag (string): If provided, asserts that the file contains data for the given OpenType table. Returns: An object representing the table. (e.g. ``table_G_S_U_B_``) r;)rr)rrr;rqs rbuildrs aLE eTH 55rcddl}ddlm}ddlm}||j dd}|ddl}|jdtj}|jdd d d d |jddddd |jdd tdd|j|}|3|jr tj|j}n|}|j D]}t"j%d|t'|dd5}t)|||j*}dddj-|} |j/} | j1| |ddlm} |j*} | j7|j8} | j;| | j=| j?| || jA| | j=y#1swYxYw)zConvert a FontDame OTL file to TTX XML Writes XML output to stdout. Args: args: Command line arguments (``--font``, ``--table``, input files). rN) configLogger)MockFontrzfonttools mtiLib) descriptionz--fontz-fFILErzDInput TTF files (used for glyph classes and sorting coverage tables))metavardesthelpz--tablez-tTABLEr;z7Table to fill (sniffed from input file if not provided)inputs+zInput FontDame .txt files)rrNnargsrz Processing %srtz utf-8-sig)encodingr) xmlWriter)!sys fontToolsrfontTools.misc.testToolsrargvargparseArgumentParsermain__doc__ add_argumentrL parse_argsrrr"rrLrMopenrr;compile __class__ decompilefontTools.miscr XMLWriterstdoutbegintagnewlinetoXMLendtag)argsrrrrrrQrrMblob decompiledrrwriters rrr+s&1 |xx|N  $ $LL%F     S     F  &s#rs681L+%$X  )  [  1  0 g*+ %   $ $d$,9xBB1343 I]@"99 K "05p88"z z : AAE@= K7FK7\ )+ &([[0&([[&([[-1:QhJHOM42j@F..B H -B2 8``F6(GT z CHHTVr