L izdZddlZddlmZddlmZddlmZddlZddl m Z m Z ddl m Z ddlmZdd lmZdd lmZdd lmZdd lmZmZmZdd lmZmZmZddlmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(m)Z)ddl*m+Z,m-Z.m/Z0m1Z2ddl3m4Z4m5Z5ddl6Z6ddl7Z7ddl8Z8ddl9Z9ddlm:Z:ddl;mZ>m?Z?m@Z@ed?e[Z`Gd@dAe%ZaGdBdCeaZbGdDdEeaZcGdFdGeaZdGdHdIe&ZedJZfGdKdLe)dMZgGdNdOe%ZhGdPdQe%ZiGdRdSe&ZjGdTdUe&ZkGdVdWe&ZlGdXdYe&ZmGdZd[e&ZnGd\d]e%ZoGd^d_e%ZpGd`dae%ZqGdbdce%ZrGdddeeZsGdfdge)dMZtGdhdie)dMZuGdjdkeZvGdldmeZwGdndoeZxGdpdqe)dMZydrdsdtdudvdwdxdydzd{d|d}d~dddZzdZ{dZ|dZ}dZ~dZdZe|e}e~deeddZdZdZedZy)zfontTools.ttLib.tables.otTables -- A collection of classes representing the various OpenType subtables. Most are constructed upon import from data in otData.py, all are populated with converter objects from otConverters.py. N)IntEnum)reduce)radians) defaultdict namedtuple)OPTIMIZE_FONT_SPEED)TupleVariation)dfs_base_table) quantizeRect)otRound) TransformIdentityDecomposedTransform) bytesjoinpadsafeEval)Vector)ControlBoundsPen) TransformPen) BaseTableFormatSwitchingBaseTable ValueRecordCountReference getFormatSwitchingBaseTableClass) fixedToFloat floatToFixedfloatToFixedToStrstrToFixedToFloat)LookupDebugInfoLOOKUP_DEBUG_INFO_KEY)IntFlag) TYPE_CHECKINGIteratorListOptionalSet) _TTGlyphSetcLeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZy)VarComponentFlagsr @i @lN)__name__ __module__ __qualname__RESET_UNSPECIFIED_AXES HAVE_AXESAXIS_VALUES_HAVE_VARIATIONTRANSFORM_HAS_VARIATIONHAVE_TRANSLATE_XHAVE_TRANSLATE_Y HAVE_ROTATIONHAVE_CONDITION HAVE_SCALE_X HAVE_SCALE_YHAVE_TCENTER_XHAVE_TCENTER_Y GID_IS_24BIT HAVE_SKEW_X HAVE_SKEW_Y RESERVED_MASKe/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/otTables.pyr*r*4sW#I!'$MNLLNNLKK)MrLr*VarTransformMappingValues)flagfractionalBitsscale defaultValue iL) translateX translateYrotationscaleXscaleYskewXskewYtCenterXtCenterYc.tjd|S)N>Bstructpackvs rMrffT1%rLc.tjd|S)N>Hrards rMrfrfgrgrLc4tjd|ddS)N>Lrrards rMrfrfhsT1%ab)rLc.tjd|S)Nrkrards rMrfrfirgrL)rr+r,c4tjd|dS)Nr`rrbunpackrds rMrfrfltQ'*rLc4tjd|dS)Nrirrords rMrfrfmrqrLc:tjdd|zdS)Nrkrrords rMrfrfnstUQY/2rLc4tjd|dS)Nrkrrords rMrfrforqrLc||}|dkr||dzfS|dkr|dz dz||dzz|dzfS|dkr"|dz dz||dzdzz||dzz|dzfS|d kr.|dz d z||dzdzz||dzdzz||dzz|d zfS|d z d z||dzd zz||dzdzz||dzdzz||d zz|d zfS)zlRead a variable-length number from data starting at index i. Return the number and the next index. r1rr-r+r.rmr,r/rK)dataib0s rM_read_uint32varrssX aB Dy1q5y dT a$q1u+-q1u44 dT b 4A;!#33d1q5kA1q5HH dT b 4A;"#44tAE{a7GG$ EK  q5 T b 4A;"#44tAE{b7HH4 EL La!e!e$ $rLcL|dkrtjd|S|dkrtjd|dzS|dkrtjd|dzd d S|d krtjd|d zStjdd tjd|zS)z:Write a variable-length number. Return the data. r1r`r7rii rkirNil@ryrards rM_write_uint32varrs  4x{{4## V{{4!f*.. X{{4!h,044 Z{{4!j.22{{4&T1)===rLcDeZdZdZd dZdZdZdZdZdZ d Z d Z y) VarComponentc$|jyN)populateDefaultsselfs rM__init__zVarComponent.__init__s rLNcd|_d|_d|_d|_d|_t |_t |_t|_ y)NrrK) flags glyphNameconditionIndexaxisIndicesIndex axisValuesNO_VARIATION_INDEXaxisValuesVarIndextransformVarIndexr transformr propagators rMrzVarComponent.populateDefaultssA " $"4!3,.rLcdt\|_|jtjzrdnd}t ||z}|z |j ||_tjzrt\|_tjzrt\|_ nd|_ |jd}n'|dj|j}t|}tjzr2tj|\}td|D|_nd|_t|j |k(sJtj"zrt\|_n t&|_tj(zrt\|_n t&|_t-|_fd} t0j3D]$\} } | | } t5|j.| | &tj6zs%|j.j8|j._tj<z} | rt\}| | dz z} | rdS) Nrrmr+AxisIndicesListc34K|]}t|dywN)fi2fl.0res rM z)VarComponent.decompile..s#EQE!RL#ErKc |jzrGttjddzd|j|j z}dz |S|j S)N>hr+r)rOrrbrprPrQrR)valuesrer|rr}s rMread_transform_componentz8VarComponent.decompile..read_transform_componentskv{{" dDQUOrrrVAR_TRANSFORM_MAPPINGitemssetattrrDrYrZrJ)rr|font localStategidSizeglyphIDnumAxes axisIndicesrr attr_namemapping_valuesvaluen_rr}s ` @@rM decompilezVarComponent.decompilesO 'a0  A 0===!1G$T!a'k%:; W 1 $33 3%4T1%= "D  $.. .'6tQ'? $D !1$(D !  (G$%67<.write_transform_components@v{{"{{% 4f6K6KLrL)cfgrr getGlyphIDrr*rGappend_packerrrBrrrr<rr compileDeltaValues_rrrr=rr>rrgetattrrr) rr optimizeSpeedr|rrrerrrrrs @rMcompilezVarComponent.compilesB!45  //$..1 U? &33 3E KK 7+ , '444 4E KK 7+ ,    * &55 5E KK()<)<= >doo&  &00 0E KK()>)>? @ KK22+/??;aU1b\;%2!2  '111 1E  " "&8 8 &AA AE KK()@)@A B 'BBB BE  ! !%7 7 &>> >E KK()?)?@ A '??? ?E *?)D)D)F J %I~DNNI6E KK1%H I J &488=.write-s5   %(8':U'BC !rLrrr))resetUnspecifiedAxesrrrrr)rK)begintagrrrrrr*r;rfloatfl2strrrrrrrOrrrPendtag)rrttFontrrrermappings ` rMtoXMLzVarComponent.toXML)s. ! k4>>*    * "D$7$7 8  , $d&;&; <  ! ! -zz-DDDzz-DDD6 ,t O!va}!5 OQV W  " "&8 8 &(?(? @  ! !%7 7 %t'='= >#8"="="? @ IwJJ- 2A )VAw'='=> ?  @  n%!!PsG c|Dcgc]}t|ts|}}|j|D]/\}}}|rJ|d}|dk(r||_|dk(rt ||_4|dk(rt ||_J|dk(r`tdt |D|_t |jdds|xjtjzc_ |d k(rt ||_ |d k(rt ||_ |tvrHt|j |t ||xjt|j"zc_ +J|ycc}w) Nrrrrrc34K|]}t|dywr)str2flrs rMrz'VarComponent.fromXML..bs'K!q" 'Krr0rr) isinstancerrrrrrrgetrr*r;rrrrrrO)rrrcontentrcres rMfromXMLzVarComponent.fromXMLRsH%>Au)=1>> $+ # D% ;gA{"!"))&.qk#++(0 %%"''Kx{'K"KEII&>> "d"u5 # ?s E'E'c dfd}tjD];\}}||}tj|t j||z=j t jzs%jjj_ tk(sJtfy)Nrcj|jzr-t|j|jz}dz |Sy)Nrr)rrOrrPrQ)rredeltasr}rs rMread_transform_component_deltazIVarComponent.applyTransformDeltas..read_transform_component_deltavsCzzFKK'&)V%:%:;fllJQrL) rrrrrrr*rDrYrZr)rrrrrrr}s`` @rMapplyTransformDeltasz!VarComponent.applyTransformDeltasss  *?)D)D)F  %I~2>BE  74>>9+MPU+U    .;;;$(NN$9$9DNN !CK1!S[!11rLcnt|t|k7rtS|j|jk(Sr)typeNotImplemented__dict__)rothers rM__eq__zVarComponent.__eq__s+ :e $! !}}..rLc>|j|}|tur|S| Sr)rr)rrresults rM__ne__zVarComponent.__ne__s$U#>1vA6zArLr) r8r9r:rrrrrrrrrrKrLrMrrs5 /DL89t'R#B2./ BrLrc,eZdZddZdZdZdZdZy)VarCompositeGlyphNc&|||_yg|_yr components)rrs rMrzVarCompositeGlyph.__init__s(2(>*BrLcg|_|r$I&&tT:>D OO " "9 -rLc~g}|jD]"}|j|j|$t|Sr)rrrr)rrr|rs rMrzVarCompositeGlyph.compiles; 1I KK ))$/ 0 1rLc|jd||jt|jD]\}}|j ||d|fg|j d|jy)Nrindex)rr enumeraterrr)r xmlWriterrrrr}rs rMrzVarCompositeGlyph.toXMLsl.6%doo6 =LAy OOItwl^ < =,-rLc|Dcgc]}t|ts|}}|D]F\}}}|dk(sJt}|j|||||jj |Hycc}w)Nr)rrrrrr)rrrrrrrs rMrzVarCompositeGlyph.fromXMLst%>Au)=1>>$+ . D%>) ))$I   dE7D 9 OO " "9 -  .?s A-A-r)r8r9r:rrrrrrKrLrMrrsG. .rLrceZdZdZy) AATStateTablec.i|_g|_g|_yr) GlyphClassesStatesPerGlyphLookupsrs rMrzAATStateTable.__init__s !rLNr8r9r:rrKrLrMrrs"rLrceZdZdZy)AATStateci|_yr) Transitionsrs rMrzAATState.__init__s rLNrrKrLrMrrsrLrc,eZdZdZedZdZdZy) AATActionNcy)NNNrK)rstatess rMcompileActionszAATAction.compileActionssrLcH|jDcgc]}|j|s|}}|r2|jddj||j |j dk7r1|jdd|j z|j yycc}w)NFlags,rr ReservedFlagsz0x%04X)_FLAGSrrjoinrr)rrfrs rM_writeFlagsToXMLzAATAction._writeFlagsToXMLs KK> VOE    VOE == VOE5!rLc|J|j|_|j}|dz|_t|dz|_t|dz|_t|dz|_|dz|_y)Nr$rr7r6i) readUShortr'r(boolrrrrrreaderr actionReaderrs rMrz"RearrangementMorphAction.decompilest###))+ !!#CK efn-/UV^, "V^rLc|j|fi||j|jd|j|j|j ||jd|j |j j|j }||j||j|j||jy)Nr'rr() rrrr'rr(_VERBSrcommentr)rrrrr verbComments rMrzRearrangementMorphAction.toXMLs 4)5)Jdmm< i(F$))4kkoodii0  "   k *rLcdx|_x|_|_dx|_x|_|_|Dcgc]}t |ts|}}|D]\}}}|dk(rt|d|_ |dk(rt|d|_9|dk(rt|d|_R|dk(sX|djdD]!} |j| j#ycc}w) NrFr'rr(rrr) r'r(rrrrrrrsplitrstrip rrrrrteltNameeltAttrs eltContentrOs rMrz RearrangementMorphAction.fromXMLs9:: : D$6Au)=1>>-4 0 )GXz*$ ('): ; F"$Xg%67 O+%-hw.?%@"G#$W-33C80DMM$**,/0 0?s C C N) r8r9r: staticSizeactionHeaderSizerr4rrrrrrKrLrMrrsJ 5F ; ; ; =  =  =  = = ? ? O O    !F& ",  0rLrc:eZdZdZdZddgZdZdZdZdZ d Z y ) ContextualMorphActionr-rSetMarkrc\d|_d\|_|_d|_d\|_|_y)NrFFrr)r'rCrr MarkIndex CurrentIndexrs rMrzContextualMorphAction.__init__1s/ )5& d&,:))rLc,|J|j|j|j}|jr|dz}|jr|dz}|j||j|j |j|j y)Nrr7)r*r'rrCrrGrHr+s rMrzContextualMorphAction.compile7s"""4==)"" << VOE    VOE5!4>>*4,,-rLc |J|j|_|j}t|dz|_t|dz|_|dz|_|j|_|j|_y)Nrr7i?)r.r'r/rCrrrGrHr0s rMrzContextualMorphAction.decompileCsz###))+ !!#EFN+ /"V^**,"--/rLc|j|fi||j|jd|j|j|j ||jd|j |j|jd|j |j|j||jy)Nr'rrGrH)rrrr'rrGrHrrrrrrs rMrzContextualMorphAction.toXMLMs 4)5)Jdmm< i(Kt~~>N$2C2CDrLcdx|_|_dx|_|_d\|_|_|Dcgc]}t |ts|}}|D]\}}}|dk(rt|d|_ |dk(r9|djdD]!} |j| j#^|dk(rt|d|_w|d k(rt|d|_|d k(st|d|_ycc}w) NrFrFr'rrrrrGrH) r'rrCrrGrHrrrr8rr9r:s rMrzContextualMorphAction.fromXMLZs-.. **// t',:))%>Au)=1>>-4 @ )GXz*$ ('): ; G#$W-33C80DMM$**,/0O+%-hw.?%@"K'!)(7*;!<N*$,Xg->$?! @?s C:C:N) r8r9r:r?r@rrrrrrrKrLrMrBrB,s1J 'F; .0 @rLrBceZdZdZy) LigActionc d|_d|_y)NFr)StoreGlyphIndexDeltars rMrzLigAction.__init__ns  !rLNrrKrLrMrOrOms !rLrOcVeZdZdZdZddgZdZdZdZe dZ d Z d Z d Z d Zy )LigatureMorphActionrrS SetComponentrcLd|_d\|_|_d|_g|_y)NrrE)r'rUrrActionsrs rMrzLigatureMorphAction.__init__s( .:+4+ rLc|J|j|j|j}|jr|dz}|jr|dz}t |j dkDr|dz}|j|t |j dkDr%|j}|j||y|jdy)Nrr7rr6)r*r'rrUrrrWcompileLigActions)rrrr,ractionss rMrzLigatureMorphAction.compiles&&&4==)""    VOE    VOE t|| q VOE5! t|| q ,,.G   {73 4   q !rLc4|J|j|_|j}t|dz|_t|dz|_t|dz}|dz|_|j}|r|j |||_yg|_y)Nrr7r6i)r.r'r/rUrr_decompileLigActionsrW)rr1rr2r performActionr,s rMrzLigatureMorphAction.decompiles'''))+ !!# 0/UV^, #V^'') 44\;ODLDLrLcdti}}}|D]C}|jjD]$\}}|j|j &Et |dD]O}||vst dt|dD]*} || d} t|| zdz} |j| | ,||z }Qt|d}||fS)NrLct| |fSrrxs rMrfz4LigatureMorphAction.compileActions..sQ|rLkeyrr,) setrraddrYsortedranger setdefaultr) rr rrZr,state _glyphClasstransar}suffix suffixIndexs rMr z"LigatureMorphAction.compileActionss'*CE2 7E&+&7&7&=&=&? 7" U E3356 7 7%;< A #q#a&!,@AqrUF#&v;?q"8K**6;?@!   VQ $$rLc,g}t|jD]p\}}|t|jdz k(}|jdz}||rdndz}||jrdndz}|j t jd|rt|S)Nr?r@rk) rrWrrRrQrrbrcr)rrr}actionlastrs rMrYz%LigatureMorphAction.compileLigActionss"4<<0 4IAvDLL)A--D**Z7E 4ZQ .E 6<rOrtrrs rMrzLigatureMorphAction.fromXMLsL-.. */44D, %>Au)=1>>-4 , )GXz*$ ('): ; G#$W-33C80DMM$**,/0O+%-hw.?%@"H$" Wb177<,12q22&%/ )1(;L2M)N& ##F+ ,?3sE E 9Ec|j|fi||j|jd|j|j|j ||j D]P}d|j fg}|jr|jd|jd||jR|j||jy)Nr'rrR)rrQr|) rrrr'rrWrRrQrr)rrrrrrtattribss rMrzLigatureMorphAction.toXMLs 4)5)Jdmm< i(ll F)6+A+ABCG||12   ' 2      rLN)r8r9r:r?r@rrrrrr rYr\rrrKrLrMrTrT|sPJm ,F ""&%%4! ,, rLrTcPeZdZdZdZgdZdZdZdZdZ dZ d Z e d Z y ) InsertionMorphActionr-r,)rCrCurrentIsKashidaLikeMarkedIsKashidaLikeCurrentInsertBeforeMarkedInsertBeforeczd|_|jD]}t||dd|_ggc|_|_yr&)r'rrrCurrentInsertionActionMarkedInsertionActionrs rMrzInsertionMorphAction.__init__sB KK 'D D$ & 'BDb?#T%?rLc|J|j|j|j}|jr|dz}|jr|dz}|j r|dz}|j r|dz}|jr|dz}|jr|dz}|t|jdzz}|t|jz}|j|t|jdkDr|t|j}nd }|j|t|jdkDr|t|j}nd }|j|y) Nrr7r6r5r4r3r{rr) r*r'rrCrrrrrrrrr)rrrr,r currentIndex markedIndexs rMrzInsertionMorphAction.compilesH&&&4==)"" << VOE    VOE  $ $ VOE  # # VOE  # # VOE  " " VOE T001Q66 T//005! t** +a /&uT-H-H'IJL!L<( t)) *Q .%eD,F,F&GHK K;'rLc|J|j|_|j}t|dz|_t|dz|_t|dz|_t|dz|_t|dz|_t|dz|_|j|||j|dzdz |_ |j|||j|d z |_ y) Nrr7r6r5r4r3ir{)rcount) r.r'r/rCrrrrr_decompileInsertionActionrrr0s rMrzInsertionMorphAction.decompile:s'''))+ !!#EFN+ /$($8!#'#7 #'#7 "&uv~"6&*&D&D $f&7&7&956>VWBW'E' #&*%C%C $f&7&7&9%&.&D& "rLc|dk(s|dk(rgS|j|j|dzz}|j|j|S)Nrrr+)rwrxgetGlyphNameManyreadUShortArray)rr2rrrr1s rMrz.InsertionMorphAction._decompileInsertionActionKsO F?eqjI**<+;+;eai+GH$$V%;%;E%BCCrLc|j|fi||j|jd|j|j|j ||j D]%}|jd||j'|j D]%}|jd||j'|j||jy)Nr'rrglyphr)rrrr'rrrr)rrrrrgs rMrzInsertionMorphAction.toXMLQs 4)5)Jdmm< i(,, A    8  B     ++ A    7q  A      rLc|j|Dcgc]}t|ts|}}|D]\}}}|dk(rt|d|_ |dk(r9|dj dD]!} |j | j#^|dk(r|jj|d|dk(r|jj|dJ|ycc}w)Nr'rrrrrr) rrrrr'r8rr9rrrr:s rMrzInsertionMorphAction.fromXML`s %>Au)=1>>-4 & )GXz*$ ('): ; G#$W-33C80DMM$**,/044++228G3DE33**11(72CD%g%u &?s C"C"ctid}}}|D]}|jjD]f\}}|j$|j t |j|j C|j t |j ht|dD]}||vrtdt|D]G} t|dz| z} t| t|D]} || | dz} |j| | I|D],} |j| }|tjd|z }.||fS)NrLct| |fSrr`ras rMrfz5InsertionMorphAction.compileActions..|sc!fWaLrLrcrr+rri)rerrrrfrrrgrhrrirrbrc)rr rZr,rrjrkrlrtstart startIndexlimitglyphsrrs rMr z#InsertionMorphAction.compileActionsps['*ub#f DE&+&7&7&=&=&? D" U//;KKe&B&B CD..:KKe&A&A BC  D DW*@A 5F$q#f+. ?!&kQ.%7 "5#f+6?E#EEAI6F**6:>? ?   5//%0&++dG44 5 5"{""rLN)r8r9r:r?r@rrrrrrrrr rKrLrMrr sHJFI(< "D & ##rLrceZdZdZddZy) FeatureParamsctj|d|jk(s$Jd|dd|jjt j |||y)N FeatureTagz&Wrong FeatureParams type for feature 'z': )featureParamTypesr __class__r8rr)rrrs rMrzFeatureParams.compiles[  ! !&"6 74>> I  < NN # #  I $-rLNc`tj|||||jjy)N)r)rrrr8rLs rMrzFeatureParams.toXMLs iu4>>;R;RSrLr )r8r9r:rrrKrLrMrrs .TrLrc eZdZy)FeatureParamsSizeNr8r9r:rKrLrMrrrLrc eZdZy)FeatureParamsStylisticSetNrrKrLrMrrrrLrc eZdZy)FeatureParamsCharacterVariantsNrrKrLrMrrrrLrc,eZdZddZdZdZdZdZy)CoverageNc,t|dsg|_yy)Nr)hasattrrrs rMrzCoverage.populateDefaultsstX&DK'rLc |jdk(r |d|_|`y|jdk(rgx}|_|d}t|d}||k7rtj d|}~|D]i}|j }|j }|j|} |j|dz} |j|jt| | k|`yg|_tj d|j|`y) Nr GlyphArrayr+ RangeRecordc|jSr)StartCoverageIndexrms rMrfz#Coverage.postRead..s 9M9MrLrc.GSUB/GPOS Coverage is not sorted by glyph ids.zUnknown Coverage format: %s) FormatrrglogwarningStartEndrextendrrh) rrawTablerrranges sorted_rangesrrendstartIDendIDs rMpostReadzCoverage.postReads ;;! "<0DK* K)[[A #% %FT[m,F#6/MNM& LM& Lee//%0,q0 d33E'54IJK  L KDK KK5t{{ C KrLct|dd}| gx}|_d}d|i}|r7|j|}t||k7}|d}|gg}|ddD]2} | |dzk7r&|dj ||j | g| }4|dj ||st |dzt |krd} t |D]\\} \} } t}| |_|j| |_ |j| |_ | |_ ||| <| | z| z dz} ^|r(tjd|jd |D]}|`d }d |i}||_|S) Nrrrrrmrc|jSr)StartIDrs rMrfz#Coverage.preWrite..s aiirLrcr+r)rrgetGlyphIDManyrgrrrrr getGlyphNamerrrrrsortr)rrrformatrglyphIDs brokenOrderrurrrr}rrrs rMpreWritezCoverage.preWritesx. >#% %FT[ &) **62H *h6KA;DfXF#AB< dQh&2J%%d+MM7),   2J  d #c&kAoF ;'0'84OA|s# A %AI"//6AG --c2AE+0A( !F1I!CK%/!3E4KK PQKK$7K8"A ")62 rLcnt|dgD]%}|jd||j'y)NrGlyphr)rrr)rrrrs rMtoXML2zCoverage.toXML2s9 x4 I   y  9     rLc\t|dd}| g}||_|j|dy)Nrr)rrr)rrrrrrs rMrzCoverage.fromXMLs1x. >F DK eGn%rLrr8r9r:rrrrrrKrLrMrrs2)V &rLrlcBeZdZd dZdZedZdZdZdZ dZ y) DeltaSetIndexMapNc,t|dsg|_yyNrrrrs rMrz!DeltaSetIndexMap.populateDefaultstY'DL(rLc2|ddzdk(sJ|d|_y)N EntryFormatrr)r)rrrs rMrzDeltaSetIndexMap.postRead s&'&0Q666 * rLcd}|D]}||z} |dz}d}|r |dz }|dz}|r t|d}|dksJ|d|z z |d|zdz zz}|dkrd}n|dkrd}n |dkrd}nd }|dz d z|dz zS) Nrrrr.r+irmr,)max)roredidxinner innerBits entrySizes rMgetEntryFormatzDeltaSetIndexMap.getEntryFormats C CKD v   NI aKE 1% Bi(Ta9n5I-JK : I Z I Z IIQ1$Q77rLct|dd}| gx}|_t|dkDrdnd|_|jj }t||d<|j ||d<|S)Nrrrr MappingCountr)rrrrrcopyr)rrrrs rMrzDeltaSetIndexMap.preWrite*so$ 40 ?%' 'Gdlw<&0aa ==%%'#&w< "&"5"5g">rLc|jd|jtt|dgD]R\}}d|fg}|tk7r|j d|dz fd|dzfg|j d||jTy) Nz7Omitted values default to 0xFFFF/0xFFFF (no variations)rrouterr.rrMap)r5rrrrrr)rrrr}rrs rMrzDeltaSetIndexMap.toXML24s ST!'$ 2">? HAuq\NE**  %2+. %&.1   u -     rLct|dd}| gx|_}t|d}t|jdd}t|jdd}|dksJ|j ||dz|zy)Nrrr0xFFFFrrr.)rrrrinsert) rrrrrrrrrs rMrzDeltaSetIndexMap.fromXMLEs|$ 40 ?%' 'DL7w(7H567H56uu{e34rLc\|t|jkr|j|StSr)rrr)rr}s rM __getitem__zDeltaSetIndexMap.__getitem__Os&"#c$,,&7"7t||AO=OOrLr) r8r9r:rrrrrrrrrKrLrMrrs5+882 "5PrLruint8c2eZdZddZdZdZdZdZdZy) VarIdxMapNc,t|dsi|_yyrrrs rMrzVarIdxMap.populateDefaultsTrrLc|ddzdk(sJ|j}|d}|j|dgt|t|z ztt |||_y)Nrrrrr) getGlyphOrderrrdictzipr)rrrrmapLists rMrzVarIdxMap.postReadXsi'&0Q666'') 9% }J#g,(FGHC G45 rLcDt|dd}| ix}|_|j}|Dcgc]}|| }}t|dkDr(|d|dk(r|d=t|dkDr |d|dk(rd|i}t||d<tj ||d<|Scc}w)Nrrrrr)rrrrrr)rrrrrrs rMrzVarIdxMap.preWrite_s$ 40 ?%' 'Gdl'') '12!71:22'lQ72;'"+#= 'lQ72;'"+#=w'#&w< "2"A"A'"J3s Bctt|dijD]8\}}d|fd|dz fd|dzff}|jd||j :y)Nrrrr.rrr)rgrrrr)rrrrrrs rMrzVarIdxMap.toXML2nsq"74B#?#E#E#GH LE5% %2+&%&.)E   u -     rLct|dd}| i}||_ |d}t|d}t|d}|dksJ|dz|z||<y#|j|d}YIxYw)Nrrrrrrr.)rrrr) rrrrrrrrrs rMrzVarIdxMap.fromXMLxs$ 40 ?G"DL 9'NEw(w(2+.  9&&(w8Es AA(cB|jj|tSr)rrr)rrs rMrzVarIdxMap.__getitem__s|| +=>>rLr) r8r9r:rrrrrrrKrLrMrrSs 6   /?rLrceZdZdZy) VarRegionListc|jd}|rt|j|_i|jdt |jdiS)NfvarRegionAxisCount)rraxesrrr)rr fvarTables rMrzVarRegionList.preWritesRHHV$ #&y~~#6D  mm ~dmm=NO  rLNr8r9r:rrKrLrMrrs rLrc,eZdZddZdZdZdZdZy) SingleSubstNc,t|dsi|_yyrrrs rMrzSingleSubst.populateDefaultsrrLci}t|d}|jdk(rV|d}|j|}|Dcgc] }||zdz }}|j|} t || D] \} } | || < nZ|jdk(r7t ||dk(sJd|d} t || D] \} } | || < nJd |jz||_|`ycc}w) Nrr DeltaGlyphIDr+ GlyphCountz invalid SingleSubstFormat2 table Substituteunknown format: %s)_getGlyphsFromCoverageTablerrrrrr)rrrrinputrz inputGIDSroutGIDSoutNamesinpoutsubstsubs rMrzSingleSubst.postReads +HZ,@A ;;! ^,E++E2I@IJW%50JGJ,,W5Hx0 #S"  # [[A E h|44 21 24\*Eu- #S"  # 9*T[[8 81 KKsCc"t|dd}| ix}|_t|j}|j}|Dcgc]\}}||||f}}}t t ||}d} d} |D]\} } | | | z dz} | | zdz| k7sn| d} nd} i} | |_t}|Dcgc] }|dd }}|Dcgc] }|dd }}||_ || d<| dk(r | J| | d<| S|| d<| Scc}}wcc}wcc}w) Nrr+rrrrr r) rrlistrrrgrrrr)rrrrrrmbgidItems sortableItemsrrzinIDoutIDrcovitemrrs rMrzSingleSubst.preWritesc$ 40 ?%' 'GdlW]]_%__ ?DEtq!Z]JqM2EEs8U34 # KD%}.u %. } j(56a66(56a66 " Q;$ $$',H^ $&+H\ "?F,76sD8D D ct|jj}|D]-\}}|jdd|fd|fg|j /y)N Substitutioninr)rgrrrr)rrrrinGlyphoutGlyphs rMrzSingleSubst.toXML2sWt||))+,!& GX   $5(BS0T U     rLcJt|dd}| i}||_|d||d<y)Nrrr&)rr)rrrrrrs rMrzSingleSubst.fromXMLs3$ 40 ?G"DL$U|d rLrrrKrLrMr r s,%N ,rLr c<eZdZddZdZdZdZdZedZ y) MultipleSubstNc,t|dsi|_yyrrrs rMrzMultipleSubst.populateDefaultsrrLci}|jdk(r@t|d}|dDcgc]}|j}}tt ||}nJd|jz||_|`ycc}w)NrrSequencer)rrrrrr)rrrrrsrs rMrzMultipleSubst.postReadsu ;;! 0*1EFF+3J+?@aQ\\@E@3vu-.G 8*T[[8 81 K AsA0c&t|dd}| ix}|_t}tt |j |j |_d|_||jDcgc]}|j||c}d}|Scc}w)Nrrcr)rr.) rrrrgrkeysrrr makeSequence_)rrrr"rrs rMrzMultipleSubst.preWrites$ 40 ?%' 'GdljD0dooF  ILT++GEN;T Us,Bct|jj}|D]>\}}dj|}|j dd|fd|fg|j @y)Nrr%r&r)rgrrrrr)rrrrr' outGlyphsrs rMrzMultipleSubst.toXML2 sdt||))+,"' GY((9%C   $5#,0O P     rLcJt|dd}| i}||_|dk(rJg|_|D]=}t|ts|\}}} |dk(s |jj |d?y|dk(rst |jdt|} |j| } gx} || <|D]3}t|ts|\}}} |dk(s | j |d5y|dr|djd ng} | Dcgc]}|jc}||d <ycc}w) Nrrrrr.rrrrr&) rr old_coverage_rrrintrrr8r9)rrrrrrelement element_name element_attrsrrr glyph_mappingr4rs rMrzMultipleSubst.fromXMLsL$ 40 ?G"DL : !#D " F!'5118. mQ7*&&--mG.DE  F  :  '3w<89E&&u-E-/ /MGEN" A!'5118. mQ</!((w)?@  A 05U|E%L&&s+ 3<=a =d =s?D c(t}||_|Sr)r.r)rseqs rMr2zMultipleSubst.makeSequence_0sj rLr) r8r9r:rrrrrrr2rKrLrMr+r+s0   >@rLr+c2eZdZddZdZdZdZdZdZy) ClassDefNc,t|dsi|_yy)N classDefs)rrArs rMrzClassDef.populateDefaults8t[)DN*rLcXi}|jdk(ra|d}|d}|j|}|t|z}|jt ||}t ||D] \} } | s | || <n|jdk(r|d} | D]u} | j } | s| j}| j} |j|}|j| dz}|jt ||}|D]} | || < wn tjd|j||_ |`y)Nr StartGlyphClassValueArrayr+ClassRangeRecordzUnknown ClassDef format: %s) rrrrrhrClassrrrrrA)rrrrAr classListrr glyphNamesrclsrecordsrecrs rMrzClassDef.postRead<s= ;;! \*E !23Iooe,Gc)n,E..uWe/DEJ"%j)"< / 3+.Ii( /[[A 12G /ii gg//%0,q0!225%3HI !+/I+.Ii(/ / KK5t{{ C" KrLct|dd}|i|_y|j}g}|jD]"\}}|s |j ||||f$|r|j |d\}}} | ||gg} |ddD]C\} }}| |dzk7s|| k7r*| dj ||g| j || |g| }|}|} E| dj ||g| Sy)NrArrr)rrArrrrr) rrrArrrrJrulastNamelastClsrrs rM_getClassRangeszClassDef._getClassRanges[sD+t4  DN __ 'oo/ BNIs LL*Y/C@ A B  JJL&+Ah #D(Gh/0F+09 'CdQh&#.2J%%tX&67MM3";<$   2J  tX. /M rLcd}dgi}|j|}|r|dd}|dd}||z dz}t|dz|dzkrDt|D]/\}\} } } } } t}| |_| |_| |_|||<1d}d|i}nA|dd}dg|z}|D]'\} } } } } t| |z | |z dzD]}| ||< )d}||d}||_|S)Nr+rFrrrrm)rDrE) rPrrrFrrrGrhr)rrrrr startGlyphendGlyph glyphCountr}rJr startNamerendNamerLstartGlyphNameclassesrs rMrzClassDef.preWritets<&+%%d+ 1Jbz!}H!J.2J6{Qa/@I&@Q$,R S     rLc\t|dd}| i}||_t|d||d<y)NrArZr)rrAr7)rrrrrrAs rMrzClassDef.fromXMLs9D+t4  I&DN$'g$7 %.!rLr) r8r9r:rrrPrrrrKrLrMr?r?7s  >2< 8rLr?c,eZdZddZdZdZdZdZy)AlternateSubstNc,t|dsi|_yy)N alternates)rr_rs rMrzAlternateSubst.populateDefaultsst\* DO+rLci}|jdk(rPt|d}|d}t|t|k(sJt||D]\}}|j||<nJd|jz||_|`y)Nrr AlternateSetr)rrrr Alternater_)rrrr_raltsralts rMrzAlternateSubst.postReads ;;! /0DEEN+Du:T* **t, 0S"%-- 3 0 9*T[[8 81$ KrLcd|_t|dd}| ix}|_t|j }t |D]\}\}}|j |||f||<!|jt}|Dcgc]}|d c}|_ g}|Dcgc]}|d } }| D]$}t} || _ |j| &d|_ ||dScc}wcc}w)Nrr_r)rra)rrr_rrrrrrrrarbrsortCoverageLast) rrr_rr}rrer"r#setListrcs rMrzAlternateSubst.preWrites T<6  +- -JZ%%'(#,U#3 B A 3y19cAE!H B j*/0$d1g0  (-.48.. $C>D DN   d # $!"<<1.s  C! C&c:t|jj}|D]s\}}|jd||j |D]%}|j d||j '|j d|j uy)Nrarrb)rgr_rrrrr)rrrrrr_rds rMrzAlternateSubst.toXML2st,,./%* !Iz   ~Y  ?    ! $##Ks#;!!# $   ^ ,     rLct|dd}| i}||_|d}g}|||<|D]-}t|ts|\}}}|j |d/y)Nr_r)rr_rrr) rrrrrr_rrer8s rMrzAlternateSubst.fromXMLsrT<6  J(DO'N  # 9 'Ggu-#* D% JJuW~ &  'rLrrrKrLrMr]r]s! =2   'rLr]c<eZdZddZdZedZdZdZdZ y) LigatureSubstNc,t|dsi|_yy)N ligatures)rrmrs rMrzLigatureSubst.populateDefaultsrBrLci}|jdk(rRt|d}|d}t|t|k(sJt|D]\}}||j||<nJd|jz||_|`y)Nrr LigatureSetr)rrrrLigaturerm)rrrrmrligSetsr}rs rMrzLigatureSubst.postReads ;;! /0DEE}-Gu:W- --#E* 53!(!4!4 # 5 9*T[[8 81" KrLct| Srr`rs rM_getLigatureSortKeyz!LigatureSubst._getLigatureSortKeys6JrLcbd|_t|dd}| ix}|_|rtt t |t rt}t|j|jD]T}t}|dd|_ t||_|||_|j!|dgj#|V|}t%|j'}t)|D]\}\}} |j+||| f||<!|j-t/} |D cgc]} | d c} | _g} |D cgc]} | d } } | D]>} t3}gx}|_ | D]}|j#|| j#|@d|_| | dScc} wcc} w)Nrrmrcrr)rro)rrrmrnextiterrrrgr1rsrp Componentr CompCountLigGlyphrirrrrrrrrrorf)rrrm newLigaturescompsligaturerr}rrer"r#rqrgligSetligsligs rMrzLigatureSubst.preWrites D+t4  )+ +I Di$95A  6L  0d6N6NO G#:%*12Y"%(Z"$-e$4!''a"5<     $##cllsxx ?V$!!#  $   ] +     rLcDt|dd}| i}||_|d}g}|||<|D]w}t|ts|\}}}t } |d| _|d} | r| j dng| _t| j| _ |j| yy)Nrmrrr) rrmrrrpryr8rwrrxr) rrrrrrmrr~r8rrs rMrzLigatureSubst.fromXMLJsD+t4  I&DN'N # ) Ggu-#* D%*C >CL|,J5?J,,S1RCM .CM KK  rLr) r8r9r:rrrrsrrrrKrLrMrkrks0    8'9R  rLrkc*eZdZdZdZddddefdZy) COLRc.|jd}|jD]O}|jdk7r|j|j.|j ||i||j<n t dtj|||S)Nr)offsetLayerRecordCount) tableDictz$LayerRecordCount converter not found) rw getConvertersradvancer?readAssertionErrorrr)rr1r subReaderconvs rMrzCOLR.decompile_s ''q'1 &&( IDyy..!!$//2 $ )TR HF499    I!!GH H""466rLc\d|_i|jdt|jdiS)Nr)rrrrrs rMrz COLR.preWriteps8!% mm t}}>P Q  rLglyphSetr( quantizationc|jdk(ryi}|jjD]2} |jj |||}|$|||j<4t|dxr|jdu}|s |rd|_ yy|s t|_ d|j_ ||j_ y#t $r!}ddlm}|d|j|d}~wwxYw)Nr) TTLibErrorz#Failed to compute COLR ClipBox for ClipListr) Version BaseGlyphListBaseGlyphPaintRecordPaintcomputeClipBox ExceptionfontTools.ttLibr BaseGlyphrrrclips) rrrrrLclipBoxer hasClipLists rMcomputeClipBoxeszCOLR.computeClipBoxeszs <<1  %%:: /C ))224<P"'.cmm$ /dJ/MDMM4M  $  (  '( $"'DMM % 6 9#--9JK sB;; C%C  C%Nr)r8r9r:rrr7rrKrLrMrr^s7" ((c(rLrc.eZdZedZfdZxZS) LookupListc|jD]a}|jD]P}t|jj dryt|jj dsOyct )NSubstGSUBPosGPOS)LookupSubTablerr8endswith ValueError)rlsts rMtablezLookupList.tablesf "Ajj "8$$--g6!8$$--e4!  " " rLc t|rd|vst|djvrt | ||S|djt|j}|j D]U}|j rt||jg}t|D]\}}t||vrt|t|}|j} |jr|jd| } |jr|j\} } } | d| d| d| d} |j| |j|j!||||jd|fg|j"r"t%|j"dt'|s t||jd}|j!||||jgXy)NDebgz: z in z (/)r)r!r|superrrrrepeatrrrstrr locationfeaturer5rxmlWriteauxevalvars)rrr debugDatarr lookupIndexr#infotagscriptlanguagerrs rMrzLookupList.toXML2sT!$DL,=,==7>)T2 2L%%&;.s$//#--2PrLrc)rgBaseGlyphRecordrrrs `rMrzBaseGlyphRecordArray.preWrites1%  &P }}!!##rLNrrKrLrMrr$rLrceZdZdZy)rcvt|jfd|_|jjS)Nc:j|jSrrrs rMrfz(BaseGlyphList.preWrite..sts}}7UrLrc)rgrrrrs `rMrzBaseGlyphList.preWrites1$*  % %+U% !}}!!##rLNrrKrLrMrrrrLrc eZdZdZdZdZdZy) ClipBoxFormatrr+c||juSrVariablers rM is_variablezClipBoxFormat.is_variablest}}$$rLc|jSrrrs rM as_variablezClipBoxFormat.as_variables }}rLN)r8r9r:StaticrrrrKrLrMrrs FH%rLrceZdZeZdZdZy)ClipBoxcHtfdjDS)Nc3JK|]}t|jywr)rr)rrrs rMrz#ClipBox.as_tuple..sO$WT499-Os #)rrrs`rMas_tuplezClipBox.as_tuplesO$:L:L:NOOOrLcR|jj|jSr)rr8rrs rM__repr__zClipBox.__repr__s#..))*4==?*;< EndGlyphID (%i); skippedrzqClipRecord[%i] overlaps previous records; ignoring redefined clip boxes for the following glyph ID range: [%i-%i]z:ClipRecord[%i] range references missing glyph IDs: [%i-%i])rr StartGlyphID EndGlyphIDrrrh IndexErrorrrrminrr) rrrrrr}rLredefinedGlyphs missingGlyphsrrs rMrzClipList.postReadsX'')  67% FAs#..0 /$$NN  OM !1!13>>A3EF 4&w/E%#'99S[[#9E%L#**73 4 8((  S & & A% L /"!((1sD<<EEc0tt}i}|jjD]3\}}|j }||j |||vs/|||<5|jDcic]\}}t |||c}}Scc}}wr)rrrrrr frozenset)r glyphsByClip uniqueClipsrrrdrs rMgroupszClipList.groupss"4(  "&**"2"2"4 + Iw""$C   $ $Y /+%#* C  + DPCUCUCW 4?CIf {3/ /   s5Bctt|dsi|_i}|j|jj D]\}}t fd|D}|s|d}|gg}|ddD]2}||dzk7r&|dj ||j |g|}4|dj ||D]\} } | | f|vsJ||| | f<g} t |j D]8\\} } }t} | | _| | _ || _ | j | :t| | d} | S)Nrc32K|]}|vs|ywrrK)rrglyphMaps rMrz$ClipList.preWrite..,s"(1yH?T#s  rrr) ClipCountr) rrgetReverseGlyphMaprrrgrrrrrr)rr clipBoxRangesrrrrurrrr clipRecordsrecordrrs @rMrzClipList.preWrite&s{tW%DJ **,#{{}224 6OFG5;HA;DfXF#AB< dQh&2J%%d+MM7),   2J  d #$ 6 ss|=888.5 ucl+ 6 6$ %+M,?,?,A%B ' !LUC'\F"'F  #F $FN   v &  '[)% rLc*|r|n|jj}|g}t|dr|jd|jf|j |||j t|jjdD]\}}|j d|j t|D]%}|jd||j '|j dd|jfg|j |j|||jd|j |jd|j |j||j y)Nrct|dS)Nr)r)r#s rMrfz ClipList.toXML..TsCQLrLrcCliprrr) rr8rrrrrrgrrrrr) rrrrr tableNamerrrs rMrzClipList.toXMLJs] Ddnn&=&= =E 4 " LL(DKK0 19e,% KKM   !'@  OFG   v &    #F^ $ ##G9#=!!# $   yHgnn+E*F G     NN9d +   Y '       V $      #rLct|dd}| ix|_}|dk(sJg}d}|D]}t|ts|\}}}|dk(r|j |d4|dk(s:t }t |d|_|D]-}t|ts|\}}}|j||||/|r |D]} ||| < yy)Nrrrrrr) rrrrrrrrr) rrrrrrrrelemrs rMrzClipList.fromXMLesgt, =!# #DJv~~ @DdE*#' D%w eGn-"!)!)%/!:#@D%dE2 +/(D%OOD%$? @ @ # + #*i  + rLrr ) r8r9r:rrrrrrrKrLrMrrs")V  "H6+rLrceZdZdZdZdZy) ExtendModerrr+N)r8r9r:PADREPEATREFLECTrKrLrMrrs C FGrLrc|eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZy) CompositeModerrr+rmr,r{rr r-r!rUr"rSr#rr$r.rzN)r8r9r:CLEARSRCDESTSRC_OVER DEST_OVERSRC_INDEST_INSRC_OUTDEST_OUTSRC_ATOP DEST_ATOPXORPLUSSCREENOVERLAYDARKENLIGHTEN COLOR_DODGE COLOR_BURN HARD_LIGHT SOFT_LIGHT DIFFERENCE EXCLUSIONMULTIPLYHSL_HUEHSL_SATURATION HSL_COLORHSL_LUMINOSITYrKrLrMrrs E C DHI FGGHHI C D FG FGKJJJJIHGNINrLrceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$y#)$ PaintFormatrr+rmr,r{rr r-r!rUr"rSr#rr$r.rrrr r r r rzr rrrr/c8|jjdS)NPaintVar)r startswithrs rMrzPaintFormat.is_variablesyy##J//rLc|jr|S tjd|jddS#t$rYywxYw)Nr2r{)rr- __members__rKeyErrorrs rMrzPaintFormat.as_variablesL    K **Xdiim_+EF F  s"7 AAN)%r8r9r:PaintColrLayers PaintSolid PaintVarSolidPaintLinearGradientPaintVarLinearGradientPaintRadialGradientPaintVarRadialGradientPaintSweepGradientPaintVarSweepGradient PaintGlyphPaintColrGlyphPaintTransformPaintVarTransformPaintTranslatePaintVarTranslate PaintScale PaintVarScalePaintScaleAroundCenterPaintVarScaleAroundCenterPaintScaleUniformPaintVarScaleUniformPaintScaleUniformAroundCenter PaintVarScaleUniformAroundCenter PaintRotatePaintVarRotatePaintRotateAroundCenterPaintVarRotateAroundCenter PaintSkew PaintVarSkewPaintSkewAroundCenterPaintVarSkewAroundCenterPaintCompositerrrKrLrMr-r-sOJMJNNNJM "$&!')$KN !#IL!N0rLr-c eZdZeZdZddZdedee jfdZ de dfdZ defdZdefd Z dded d d edeefd Zy)rc |j|jjS#t$rt d|jwxYw)NzUnknown Paint format: )rrrrNotImplementedErrorrs rM getFormatNamezPaint.getFormatNamesI N??4;;/44 4 N%(>t{{m&LM M Ns $'"A Ncb|r|n|jj}|g}|jd|jf|j |||j |j |j|j|||j||jy)Nr) rr8rrrr5rZrrr)rrrrrrs rMrz Paint.toXMLs Ddnn&=&= =E h ,-9e,$,,./ It$#rLcolrreturnc#$K|jtjk(rcg}|j|jj}dt ||j |j |jzDEd{y|jtjk(rq|jjD]@}|j|jk(stjd|jyt|jd|j!D]h}|j"t%|j"t'|s0t)||j*}tj|j*|jy7w)Nc3RK|]\}}tjd||!yw)Layers)rrrN)r SubTableEntry)rr}res rMrz+Paint.iterPaintSubTables..s.Aq''XQaHHs%'r)rrz not in colr.BaseGlyphList)rr-r7 LayerListrrFirstLayerIndex NumLayersrArrrrrrar6r tableClass issubclassrrr)rr\layersrrrs rMiterPaintSubTableszPaint.iterPaintSubTablessL ;;+55 5F~~)--%4//$2F2F2WX    ;;+44 4,,AA L##tzz1#11{&,,WW L $**/IJKK&&( KD*z$//4PT:/Vdii0--499EJJ K! s&A;F=F >AFAF1F=Fc^|j|Dcgc]}|jc}Scc}wr)rhr)rr\ps rM getChildrenzPaint.getChildrens%!%!8!8!>?A???s*ct|s tdt|fdD]}|dj}||y)zEDepth-first traversal of graph rooted at self, callback on each node.zcallback must be callablec&|jSrrhpaintr\s rMrfz Paint.traverse..%2J2J42PrLiter_subtables_fnrN)callable TypeErrorr r)rr\callbackpathrps ` rMtraversezPaint.traversesG!78 8" $P  DHNNE UO  rLc|jtjk(rX|j}t|j|j |j |j|j|jS|jtjk(r*tj|j|jS|jtjk(r*tj|j|j S|jtj"k(rttj|j$|j&j|j|j j|j$ |j& S|jtj(k(rtj|jS|jtj*k(ritj|j$|j&j|jj|j$ |j& S|jtj,k(r(tj.t1|j2S|jtj4k(rrtj|j$|j&j/t1|j2j|j$ |j& S|jtj6k(r=tj8t1|j: t1|j<S|jtj>k(rtj|j$|j&j9t1|j: t1|j<j|j$ |j& St|jjArtCd|jtS)NzVariable Paints not supported: )"rr-rBr xxyxxyyydxdyrDr translaterFrQrYrZrHcenterXcenterYrJrLrNrotateranglerPrRskew xSkewAngle ySkewAnglerTrrY)rr;s rM getTransformzPaint.getTransforms ;;+44 4AQTT144qttQTT144@ @ [[K66 6%%dggtww7 7 [[K22 2>>$++t{{; ; [[K>> >""4<<>t{{DKK0DLL=4<<-8  [[K99 9>>$**- - [[KEE E""4<<>tzz"DLL=4<<-8  [[K33 3??74::#67 7 [[K?? ?""4<<> +,DLL=4<<-8  [[K11 1==$//)9!:GDOOgt./1IJDLL=4<<-8  t{{ # / / 1%(G }&UV VrLrr(rct|}t|fdD]}}|dj}|jtj k(s0t tjd|Dt}||jjt|||jyt}tt j"|_t%|j|\|_|_|_|_|S)Nc&|jSrrnros rMrfz&Paint.computeClipBox..CrqrLrrrc3PK|]}|jj ywr)rr)rrs rMrz'Paint.computeClipBox..Is<RXX**,sx(" $P NDHNNE||{555!'''.r sIda1=Is )rrPairSetrrrrr PairSetCount Class1Recordr Class2Recordr DontSharerrArer Class1Count)rrrrrrcoveragerKrA newGlyphsrrrers @rM splitPairPosr A s8 B B$++KQ3{':':#;a#?2 CD Kw{D'A B C +33==? ''..%%{**+q0&.y&9 #%ix0 &.xy&9 #%hi0 #&{':':#;  #&{':':#;  T IQ   q S)A)A%BQ%F{M2&)+*B*B1*E*R*R&SK #N CD Kw{D'A B C !%  +33==?  + 5 5 ? ? A ''..))33 **{//0A5Iioo&7II 2:&QQay>Pq&Q #&__.+ Q!h,AqD+ '$+9H#5  2:&MQa9nq&M #*3//*;+ "&!Qq8|AH + '$+89#5  "%k&>&>"? "%k&>&>"?   I#'R+ 'N+ s0 M$)M$ M) M) M/M/9 M4M4c^|j}|dkry|dz}||z }gg}}gg} }t|jj|jj D]n\} } | j |kr#|j| |j| 8| xj |zc_|j| | j| pgg} } |jjD]l}|j|j}}|jd||_ |j|d|_ | j|| j|n|j|_ ||j_|jj|_||j_|j|_ ||_||_||j_|jj|_| |j_t||j_t| |j_| |j_ |jj|_| |j_ t| |j_t| |j_y)Nr+FT) ClassCountrrrr MarkRecordrGr BaseArray BaseRecordrrrrr MarkCount BaseCount)rrr classCount oldClassCount newClassCountoldMarkCoverageoldMarkRecordsnewMarkCoveragenewMarkRecordsr markRecordoldBaseRecordsnewBaseRecordsrL oldBaseRecord newBaseRecords rMsplitMarkBasePosr  s`''JA~!OM.M&("^O&("^O!$  '')>)>)I)I" . :   m +  " "9 -  ! !* -    -   " "9 -  ! !* - .&(NN$$//-'*}} } #&>>.=#A  #&>>-.#A  m,m, -%++K&5K#*77AACK&5K# +77K*K*K'5K$'11;;=K'5K$&).&9K#&).&9K#'5K$'11;;=K'5K$&).&9K#&).&9K# rL)r+rmr,)r+r,rrc||jj}|jj|j}|j }|j |}t|dsd|_yt|dr|jjj}|}|j}t|j|jj}|} |j| _ | } t|j|} | } | | _ n5|jj}t|j|} | } | } t|dr|jdz|_ t|j|} | || |}|r|j j'|dz| |S#t $r$t"j%d|j|YywxYw)zj An offset has overflowed within a sub-table. We need to divide this subtable into smaller parts. rTr SubTableCountrz)Don't know how to split %s lookup type %sF)rrrrrrrrrrrrrrr# splitTabler6rerrorr)rrrrsubIndexsubtable subTableTypernewExtSubTableClassnewExtSubTabletoInsertnewSubTableClassr splitFuncrs rMfixSubTableOverFlowsr. s (( ) / /E    $ $^%C%C DF++Hx(H 8[ )!x' ++55@@  **).*B*BC  ! ! , , -. + 2 2!&~'?'?@N&( %0"))44 &~'?'?@N&( v'%33a7~778F  8[. 9B x!|X6 I  7  $ $   s%F((*GGc ddl}ddlm}|jd}t}|D]e\}}t}|j |}|r$|j d}|dd}t|}||vsHt||fi} |dvrd| _ | ||<g|D]I\}} |jdst|dkDs'|dd|vs/||} ||dd} | | _ | | _ KtjD]\} }|| } |D]}| ||< t t"t$t&t(t*t,t.d t0t2t4t6t8t:t<t>t@d d tBitDtFtHtBtJd d a&tLdtLd<tLjOD]!}|jD] \}} || _(#dtRia*tWddD]}tXtTd|z<tWddD]}tZtTd|z<ddl.m/}|D]\}}|j |}|rk|ja\}}tc|}||} te| dsi| _3i| _4||dd|\}}|| jf|<|| jh|<||} |||\| _3| _4y)Nrr)otDataz([A-Za-z0-9]+)Format(\d+)$r!TVarrm)rr+rmr,r{rr r-) rr+rmr,r{rr r-r!r,)rrr+r,r{)rrmortmorxrJSTFsizer zss%02ddzcv%02d)buildConverters converters)5rer0rglobalsrmatchgrouprrrr3r NoVarTypeVarType _equivalentsrr r+r]rk ContextSubstChainContextSubstExtensionSubstReverseChainSingleSubst SinglePosPairPos CursivePos MarkBasePos MarkLigPos MarkMarkPos ContextPosChainContextPos ExtensionPosNoncontextualMorphRearrangementMorphContextualMorph LigatureMorphInsertionMorphrrrrrrhrr otConvertersr7rr7rr8convertersByName)r9r0 formatPat namespacerr baseClassm formatTyperJrvarType noVarTypebasercrd lookupEnumenumr}r7rr8rSs rM _buildClassesr^ s  89I I" e OOD ! 771:Dq!J8DI y ti\2.C'' $ !IdO!"&(a ??5 !c$i!mQRI8MoG!$qr(+I )G  'I  (#((*" d "C!IcN "" &     ! "!  3!KD&f-K!((*" #))+ "ID#!CN "" !1f D*C(Q,'D 1f I*H(Q,'I.U e OOD ! 88:LD&[FD/C3 -!#')$+:59i+P (J(%/CNN6 "+;C  (D/C3B5)3T 0CNC0!UrLc"|gS|jSr)r)r s rMrr s rL)__doc__rr]r functoolsrmathr itertools collectionsrrrr%fontTools.ttLib.tables.TupleVariationr !fontTools.ttLib.tables.otTraverser fontTools.misc.arrayToolsr fontTools.misc.roundToolsr fontTools.misc.transformr rrfontTools.misc.textToolsrrrfontTools.misc.vectorrfontTools.pens.boundsPenrfontTools.pens.transformPenrotBaserrrrrfontTools.misc.fixedToolsrrrrrrrr fontTools.feaLib.lookupDebugInfor r!loggingrbarraysysr"typingr#r$r%r&r'fontTools.ttLib.ttGlyphSetr( getLoggerr8rr*rNr?r@rArCrDrHrIrErFrrrrrrrobjectrrrrrBrOrTrrrrrrrrrrr r+r?r]rkrrrrrrrrrr-rr?rrrrr r r$r.r^rrKrLrMrxsV  //@<2-MM==(54 T ??6g!**6'7 ,**Aq!,**Aq!**;*I*I2sTUV'(9(F(FAqQ'(9(F(FAqQ &'8'D'Db$PQ R &'8'D'Db#q Q)*;*J*JAqRST)*;*J*JAqRST$&%)%  +*2*   $.>"vBvBr..D"F"v ##*R0yR0j>@I>@B ! !J)JZD#9D#N TI T     ] U&'U&t IP7@IPX4? 4?n I $M,*M,`H,HVf8'f8RB'-B'Jv,vr6(96(r+E+E\$9$$I$G=.w7=R+/8R+jG>+'+\@ ,W 5@T!" !'   QYM j;|4:4DN9~        25vkU^rL