Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 2øªj+ôã@s$dZddlZddlmZddlZddlmZmZddlm Z ddl m Z m Z m Z ddlmZmZmZmZmZdd lmZmZddlZddlZejeƒZGd d „d eƒZGd d „d eƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd„deƒZ#Gdd„deƒZ$Gdd„deƒZ%Gdd„de%ƒZ&Gdd„de%ƒZ'Gd d!„d!e%ƒZ(Gd"d#„d#eƒZ)Gd$d%„d%ed&ƒƒZ*Gd'd(„d(eƒZ+Gd)d*„d*eƒZ,Gd+d,„d,eƒZ-Gd-d.„d.eƒZ.Gd/d0„d0eƒZ/Gd1d2„d2eƒZ0Gd3d4„d4eƒZ1Gd5d6„d6eƒZ2Gd7d8„d8eƒZ3Gd9d:„d:eƒZ4Gd;d<„d„d>ed&ƒƒZ6Gd?d@„d@ed&ƒƒZ7GdAdB„dBeƒZ8GdCdD„dDeƒZ9GdEdF„dFeƒZ:GdGdH„dHed&ƒƒZ;d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d‚œZd‡dˆ„Z?d‰dŠ„Z@d‹dŒ„ZAd�dŽ„ZBe>e?e@d�œeAeBd�œd‘œZCd’d“„ZDd”d•„ZEeEƒd–d—„ZFdS)§záfontTools.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)Ú defaultdictÚ namedtuple)ÚotRound)Ú bytesjoinÚpadÚsafeEvalé)Ú BaseTableÚFormatSwitchingBaseTableÚ ValueRecordÚCountReferenceÚ getFormatSwitchingBaseTableClass)ÚLookupDebugInfoÚLOOKUP_DEBUG_INFO_KEYc@seZdZdd„ZdS)Ú AATStateTablecCsi|_g|_g|_dS)N)Z GlyphClassesZStatesZPerGlyphLookups)Úself©rúD/tmp/pip-build-_d5lkt3n/fonttools/fontTools/ttLib/tables/otTables.pyÚ__init__szAATStateTable.__init__N)Ú__name__Ú __module__Ú __qualname__rrrrrrsrc@seZdZdd„ZdS)ÚAATStatecCs i|_dS)N)Ú Transitions)rrrrr"szAATState.__init__N)rrrrrrrrr!src@s,eZdZdZedd„ƒZdd„Zdd„ZdS)Ú AATActionNcCsdS)N)NNr)ÚfontÚstatesrrrÚcompileActions)szAATAction.compileActionscs^‡fdd„ˆjDƒ}|r4|jddj|ƒd�|jƒˆjdkrZ|jddˆjd�|jƒdS) Ncsg|]}ˆj|r|‘qSr)Ú__dict__)Ú.0Úf)rrrú .sz.AATAction._writeFlagsToXML..ÚFlagsú,)ÚvaluerÚ ReservedFlagsz0x%04X)Ú_FLAGSÚ simpletagÚjoinÚnewliner&)rÚ xmlWriterÚflagsr)rrÚ_writeFlagsToXML-s zAATAction._writeFlagsToXMLcCs$||jkstd|ƒ‚d|j|<dS)Nzunsupported flag %sT)r'ÚAssertionErrorr)rÚflagrrrÚ_setFlag8szAATAction._setFlag)rrrr'Ú staticmethodrr-r0rrrrr&s  rc@sleZdZdZdZdddgZdddd d d d d dddddddddœZdd„Zdd„Zdd„Z dd„Z dd „Z d!S)"ÚRearrangementMorphActionérÚ MarkFirstÚ DontAdvanceÚMarkLastz no changeu Ax ⇒ xAu xD ⇒ Dxu AxD ⇒ DxAu ABx ⇒ xABu ABx ⇒ xBAu xCD ⇒ CDxu xCD ⇒ DCxu AxCD ⇒ CDxAu AxCD ⇒ DCxAu ABxD ⇒ DxABu ABxD ⇒ DxBAuABxCD ⇒ CDxABuABxCD ⇒ CDxBAuABxCD ⇒ DCxABuABxCD ⇒ DCxBA)rr éér3ééééé é é é é éécCs(d|_d|_d|_d|_d|_d|_dS)NrF)ÚNewStateÚVerbr4r5r6r&)rrrrrUs z!RearrangementMorphAction.__init__cCsz|dks t‚|j|jƒ|jdkr,|jdks6t|jƒ‚|j|jB}|jrP|dO}|jr^|dO}|jrl|dO}|j|ƒdS)NrrCi€i@i )r.Ú writeUShortrDrEr&r4r5r6)rÚwriterrÚ actionIndexr,rrrÚcompile]s   z RearrangementMorphAction.compilecCs`|dks t‚|jƒ|_|jƒ}|d@|_t|d@ƒ|_t|d@ƒ|_t|d@ƒ|_|d@|_dS)NrCi€i@i ið) r.Ú readUShortrDrEÚboolr4r5r6r&)rÚreaderrÚ actionReaderr,rrrÚ decompilegs   z"RearrangementMorphAction.decompilecCs†|j|f|Ž|jƒ|jd|jd�|jƒ|j|ƒ|jd|jd�|jj|jƒ}|dk rh|j|ƒ|jƒ|j |ƒ|jƒdS)NrD)r%rE) Úbegintagr*r(rDr-rEÚ_VERBSÚgetÚcommentÚendtag)rr+rÚattrsÚnameZ verbCommentrrrÚtoXMLqs   zRearrangementMorphAction.toXMLc CsÀd|_|_|_d|_|_|_dd„|Dƒ}xˆ|D]€\}}}|dkrZt|dƒ|_q8|dkrrt|dƒ|_q8|dkrŠt|dƒ|_q8|d kr8x$|djd ƒD]}|j|j ƒƒq¢Wq8WdS) NrFcSsg|]}t|tƒr|‘qSr)Ú isinstanceÚtuple)r Útrrrr"‚sz4RearrangementMorphAction.fromXML..rDr%rEr&r#r$) rDrEr&r4r5r6rÚsplitr0Ústrip) rrUrTÚcontentrÚeltNameÚeltAttrsÚ eltContentr/rrrÚfromXMLsz RearrangementMorphAction.fromXMLN) rrrÚ staticSizeÚactionHeaderSizer'rPrrIrNrVr`rrrrr2=s0   r2c@sDeZdZdZdZddgZdd„Zdd„Zd d „Zd d „Z d d„Z dS)ÚContextualMorphActionr<rÚSetMarkr5cCs(d|_d\|_|_d|_d\|_|_dS)NrFéÿÿ)FF)rere)rDrdr5r&Ú MarkIndexÚ CurrentIndex)rrrrr”s zContextualMorphAction.__init__cCs`|dks t‚|j|jƒ|j}|jr,|dO}|jr:|dO}|j|ƒ|j|jƒ|j|jƒdS)Ni€i@)r.rFrDr&rdr5rfrg)rrGrrHr,rrrrIšs    zContextualMorphAction.compilecCs\|dks t‚|jƒ|_|jƒ}t|d@ƒ|_t|d@ƒ|_|d@|_|jƒ|_|jƒ|_dS)Ni€i@iÿ?) r.rJrDrKrdr5r&rfrg)rrLrrMr,rrrrN¤s    zContextualMorphAction.decompilecCs~|j|f|Ž|jƒ|jd|jd�|jƒ|j|ƒ|jd|jd�|jƒ|jd|jd�|jƒ|j|ƒ|jƒdS)NrD)r%rfrg)rOr*r(rDr-rfrgrS)rr+rrTrUrrrrV®s   zContextualMorphAction.toXMLc CsØd|_|_d|_|_d \|_|_dd„|Dƒ}x |D]˜\}}}|dkrZt|dƒ|_q8|dkrŠxl|djd ƒD]}|j|j ƒƒqrWq8|d kr¢t|dƒ|_q8|d krºt|dƒ|_q8|d kr8t|dƒ|_q8WdS)NrFéÿÿcSsg|]}t|tƒr|‘qSr)rWrX)r rYrrrr"Àsz1ContextualMorphAction.fromXML..rDr%r#r$r&rfrg)rhrh) rDr&rdr5rfrgrrZr0r[) rrUrTr\rr]r^r_r/rrrr`¼s    zContextualMorphAction.fromXMLN) rrrrarbr'rrIrNrVr`rrrrrc�s  rcc@seZdZdd„ZdS)Ú LigActioncCsd|_d|_dS)NFr)ÚStoreÚGlyphIndexDelta)rrrrrÐs zLigAction.__init__N)rrrrrrrrriÏsric@s`eZdZdZdZddgZdd„Zdd„Zd d „Ze d d „ƒZ d d„Z dd„Z dd„Z dd„ZdS)ÚLigatureMorphActionr:r@Ú SetComponentr5cCs"d|_d\|_|_d|_g|_dS)NrF)FF)rDrmr5r&ÚActions)rrrrræs zLigatureMorphAction.__init__cCsŽ|dk s t‚|j|jƒ|j}|jr,|dO}|jr:|dO}t|jƒdkrP|dO}|j|ƒt|jƒdkr€|jƒ}|j||ƒn |jdƒdS)Ni€i@ri ) r.rFrDr&rmr5ÚlenrnÚcompileLigActions)rrGrrHr,ÚactionsrrrrIìs   zLigatureMorphAction.compilecCsv|dk s t‚|jƒ|_|jƒ}t|d@ƒ|_t|d@ƒ|_t|d@ƒ}|d@|_|jƒ}|rl|j||ƒ|_ng|_dS)Ni€i@i iÿ) r.rJrDrKrmr5r&Ú_decompileLigActionsrn)rrLrrMr,Z performActionrHrrrrNús     zLigatureMorphAction.decompilec CsÄdtƒi}}}x2|D]*}x$|jjƒD]\}}|j|jƒƒq(WqWxjt|dd„d�D]V}||krXx@tdt|ƒdƒD],} || d…} t|ƒ| d} |j| | ƒqvW||7}qXWt |dƒ}||fS)NócSst|ƒ |fS)N)ro)ÚxrrrÚsz4LigatureMorphAction.compileActions..)Úkeyrr3) ÚsetrÚitemsÚaddrpÚsortedÚrangeroÚ setdefaultr) rrÚresultrqrHÚstateÚ _glyphClassÚtransÚaÚiÚsuffixZ suffixIndexrrrrs      z"LigatureMorphAction.compileActionscCstg}xft|jƒD]X\}}|t|jƒdk}|jd@}||r>dndO}||jrPdndO}|jtjd|ƒƒqWt|ƒS)Nr iÿÿÿ?lri@z>L) Ú enumeraternrorkrjÚappendÚstructÚpackr)rr}r‚ÚactionÚlastr%rrrrp*s z%LigatureMorphAction.compileLigActionsc Cszg}d}|j|j|dƒ}xX|st|jƒ}t|d@ƒ}tƒ}|j|ƒt|d@ƒ|_|d@}|dkrld|}||_qW|S)NFr3li@iÿÿÿ?i iÀ)Ú getSubReaderÚposZ readULongrKrir…rjrk) rrMrHrqr‰rLr%rˆÚdeltarrrrr4s   z(LigatureMorphAction._decompileLigActionsc Csüd|_|_d|_|_d|_g|_dd„|Dƒ}xÄ|D]¼\}}}|dkrZt|dƒ|_q8|dkrŠx�|djdƒD]}|j|jƒƒqrWq8|d kr¢t|dƒ|_q8|d kr8t ƒ} |j dd ƒjdƒ} d d„| Dƒ} d | k| _ t|dƒ| _ |jj | ƒq8WdS)NrFcSsg|]}t|tƒr|‘qSr)rWrX)r rYrrrr"Jsz/LigatureMorphAction.fromXML..rDr%r#r$r&ÚActionÚcSsg|] }|jƒ‘qSr)r[)r r!rrrr"Vsrjrk)rDr&rmr5rnrrZr0r[rirQrjrkr…) rrUrTr\rr]r^r_r/rˆr,rrrr`Es*    zLigatureMorphAction.fromXMLcCsŽ|j|f|Ž|jƒ|jd|jd�|jƒ|j|ƒx>|jD]4}d|jfg}|jr`|jdƒ|jd|ƒ|jƒq@W|j |ƒ|jƒdS)NrD)r%rkr#rjr�)r#rj) rOr*r(rDr-rnrkrjr…rS)rr+rrTrUrˆZattribsrrrrV\s       zLigatureMorphAction.toXMLN)rrrrarbr'rrIrNr1rrprrr`rVrrrrrlÞs  rlc@s`eZdZdZdZddddddgZd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z e dd„ƒZ dS)ÚInsertionMorphActionr<r3rdr5ÚCurrentIsKashidaLikeÚMarkedIsKashidaLikeÚCurrentInsertBeforeÚMarkedInsertBeforecCs:d|_x|jD]}t||dƒqWd|_gg|_|_dS)NrF)rDr'Úsetattrr&ÚCurrentInsertionActionÚMarkedInsertionAction)rr/rrrrss  zInsertionMorphAction.__init__cCsø|dk s t‚|j|jƒ|j}|jr,|dO}|jr:|dO}|jrH|dO}|jrV|dO}|jrd|dO}|j rr|dO}|t |j ƒd>O}|t |j ƒO}|j|ƒt |j ƒdkrº|t |j ƒ}nd }|j|ƒt |j ƒdkræ|t |j ƒ}nd }|j|ƒdS) Ni€i@i iiir9riÿÿ)r.rFrDr&rdr5r�r‘r’r“ror•r–rX)rrGrrHr,Z currentIndexZ markedIndexrrrrIzs8    zInsertionMorphAction.compilecCs²|dk s t‚|jƒ|_|jƒ}t|d@ƒ|_t|d@ƒ|_t|d@ƒ|_t|d@ƒ|_t|d@ƒ|_t|d@ƒ|_ |j |||jƒ|d@d?d �|_ |j |||jƒ|d @d �|_ dS) Ni€i@i iiiiàr9)ÚindexÚcounté) r.rJrDrKrdr5r�r‘r’r“Ú_decompileInsertionActionr•r–)rrLrrMr,rrrrN”s"  zInsertionMorphAction.decompilecCs8|dks|dkrgS|j|j|dƒ}|j|j|ƒƒS)Niÿÿrr7)rŠr‹ÚgetGlyphNameManyZreadUShortArray)rrMrr—r˜rLrrrrš§s z.InsertionMorphAction._decompileInsertionActioncCsš|j|f|Ž|jƒ|jd|jd�|jƒ|j|ƒx$|jD]}|jd|d�|jƒq@Wx$|jD]}|jd|d�|jƒqfW|j|ƒ|jƒdS)NrD)r%r•)Úglyphr–)rOr*r(rDr-r•r–rS)rr+rrTrUÚgrrrrV®s      zInsertionMorphAction.toXMLc Cs¶|jƒdd„|Dƒ}xš|D]’\}}}|dkr>t|dƒ|_q|dkrnxf|djdƒD]}|j|jƒƒqVWq|dkrˆ|jj|dƒq|d kr¢|jj|dƒqd st |ƒ‚qWdS) NcSsg|]}t|tƒr|‘qSr)rWrX)r rYrrrr"¿sz0InsertionMorphAction.fromXML..rDr%r#r$r•rœr–F) rrrDrZr0r[r•r…r–r.) rrUrTr\rr]r^r_r/rrrr`½s  zInsertionMorphAction.fromXMLcCstƒid}}}xX|D]P}xJ|jjƒD]<\}}|jdk rJ|jt|jƒƒ|jdk r(|jt|jƒƒq(WqWx¦t|dd„d�D]’}||krŒq~xZtdt |ƒƒD]H} t |ƒd| } x2t| t |ƒƒD] } || | d…} |j | | ƒqÀWqœWx&|D]} |j | ƒ}|t j d|ƒ7}qîWq~W||fS) NrscSst|ƒ |fS)N)ro)rtrrrruÛsz5InsertionMorphAction.compileActions..)rvrr7r z>H)rwrrxr•ryrXr–rzr{ror|Ú getGlyphIDr†r‡)rrrqrHr}r~rr€rˆÚstartZ startIndexÚlimitÚglyphsrœÚglyphIDrrrrÏs&     z#InsertionMorphAction.compileActionsN)rrrrarbr'rrIrNršrVr`r1rrrrrr�lsr�c@seZdZdd„Zddd„ZdS)Ú FeatureParamscCs>tj|dƒ|jks,td|d|jjfƒ‚tj|||ƒdS)NZ FeatureTagz-Wrong FeatureParams type for feature '%s': %s)ÚfeatureParamTypesrQÚ __class__r.rr rI)rrGrrrrrIñs,zFeatureParams.compileNcCstj|||||jjd�dS)N)rU)r rVr¥r)rr+rrTrUrrrrVõszFeatureParams.toXML)NN)rrrrIrVrrrrr£ïsr£c@s eZdZdS)ÚFeatureParamsSizeN)rrrrrrrr¦øsr¦c@s eZdZdS)ÚFeatureParamsStylisticSetN)rrrrrrrr§ûsr§c@s eZdZdS)ÚFeatureParamsCharacterVariantsN)rrrrrrrr¨þsr¨c@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) ÚCoverageNcCst|dƒsg|_dS)Nr¡)Úhasattrr¡)rÚ propagatorrrrÚpopulateDefaultss zCoverage.populateDefaultsc CsÀ|jdkr|d|_n¢|jdkr¤g}|_|d}t|dd„d�}||krXtjdƒ|}~x\|D]>}|j}|j}|j|ƒ} |j|ƒd} |j|j t | | ƒƒƒq`Wng|_tjd |jƒ|`dS) Nr Ú GlyphArrayr7Ú RangeRecordcSs|jS)N)ÚStartCoverageIndex)r�rrrrusz#Coverage.postRead..)rvz.GSUB/GPOS Coverage is not sorted by glyph ids.zUnknown Coverage format: %s) ÚFormatr¡rzÚlogÚwarningÚStartÚEndržÚextendr›r{) rÚrawTablerr¡ÚrangesZ sorted_rangesÚrrŸÚendÚstartIDÚendIDrrrÚpostRead s&       zCoverage.postReadcCspt|ddƒ}|dkrg}|_d}d|i}|�rf|j|ƒ}t|ƒ|k}|d}|gg}x>|dd…D].} | |dkrŽ|d j|ƒ|j| gƒ| }qdW|d j|ƒ|s¾t|ƒdt|ƒk�rfd} xbtt|ƒƒD]R} || \} } tƒ}| |_|j | ƒ|_ |j | ƒ|_ | |_ ||| <| | | d} qÐW|�rFt jdƒ|jdd„d �x|D] }|`�qLWd }d |i}||_|S)Nr¡r r­rr8z.GSUB/GPOS Coverage is not sorted by glyph ids.cSs|jS)N)ÚStartID)r�rrrruDsz#Coverage.preWrite..)rvr7r®éÿÿÿÿr¾)Úgetattrr¡ÚgetGlyphIDManyrzr…ror{r®r½Z getGlyphNamer³r´r¯r±r²Úsortr°)rrr¡Úformatr¶ÚglyphIDsZ brokenOrderr‰r·r¢r—r‚rŸr¹r¸rrrÚpreWrite"sH            zCoverage.preWritecCs0x*t|dgƒD]}|jd|d�|jƒqWdS)Nr¡ÚGlyph)r%)r¿r(r*)rr+rÚ glyphNamerrrÚtoXML2NszCoverage.toXML2cCs0t|ddƒ}|dkrg}||_|j|dƒdS)Nr¡r%)r¿r¡r…)rrUrTr\rr¡rrrr`Ss  zCoverage.fromXML)N)rrrr¬r¼rÄrÇr`rrrrr©s  ,r©c@sBeZdZddd„Zdd„Zedd„ƒZdd „Zd d „Zd d „Z dS)ÚDeltaSetIndexMapNcCst|dƒsg|_dS)NÚmapping)rªrÉ)rr«rrrr¬]s z!DeltaSetIndexMap.populateDefaultscCs"|dd@dkst‚|d|_dS)NÚ EntryFormatiÀÿrrÉ)r.rÉ)rr¶rrrrr¼aszDeltaSetIndexMap.postReadcCs´d}x|D] }||O}q W|d@}d}x|r>|d7}|dL}q(Wt|dƒ}|dksVt‚|d|?|d|>d@B}|dkr€d}n |dkrŽd}n|dkrœd}nd }|dd >|dBS) Nriÿÿr ééÿr7iÿÿÿr8r3)Úmaxr.)rÉZoredÚidxÚinnerZ innerBitsZ entrySizerrrÚgetEntryFormates&     zDeltaSetIndexMap.getEntryFormatcCs\t|ddƒ}|dkrg}|_t|ƒdkr.dnd|_|jjƒ}t|ƒ|d<|j|ƒ|d<|S)NrÉiÿÿr rÚ MappingCountrÊ)r¿rÉror°rÚcopyrÐ)rrrÉr¶rrrrÄs    zDeltaSetIndexMap.preWritecCsTxNtt|dgƒƒD]:\}}d|fd|d?fd|d@ff}|jd|ƒ|jƒqWdS)NrÉr—ÚouterrËrÏiÿÿÚMap)r„r¿r(r*)rr+rr‚r%rTrrrrljs   zDeltaSetIndexMap.toXML2c Csft|ddƒ}|dkrg|_}t|dƒ}t|dƒ}t|dƒ}|dksNt‚|j||d>|BƒdS)NrÉr—rÓrÏiÿÿrË)r¿rÉrr.Úinsert) rrUrTr\rrÉr—rÓrÏrrrr`“s      zDeltaSetIndexMap.fromXML)N) rrrr¬r¼r1rÐrÄrÇr`rrrrrÈ[s     rÈZuint8c@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) Ú VarIdxMapNcCst|dƒsi|_dS)NrÉ)rªrÉ)rr«rrrr¬ s zVarIdxMap.populateDefaultscCsX|dd@dkst‚|jƒ}|d}|j|dgt|ƒt|ƒƒtt||ƒƒ|_dS)NrÊiÀÿrrÉr r¾)r.Ú getGlyphOrderrµroÚdictÚziprÉ)rr¶rÚ glyphOrderZmapListrrrr¼¤s  zVarIdxMap.postReadcs†t|ddƒ‰ˆdkri‰|_|jƒ}‡fdd„|Dƒ‰x&tˆƒdkr^ˆdˆd kr^ˆd =q:Wdˆi}tˆƒ|d<tjˆƒ|d<|S) NrÉcsg|] }ˆ|‘qSrr)r r�)rÉrrr"±sz&VarIdxMap.preWrite..r r7rÑrÊéþÿÿÿr¾r¾)r¿rÉr×rorÈrÐ)rrrÚr¶r)rÉrrÄ«s    zVarIdxMap.preWritecCsXxRtt|diƒjƒƒD]:\}}d|fd|d?fd|d@ff}|jd|ƒ|jƒqWdS)NrÉrœrÓrËrÏiÿÿrÔ)rzr¿rxr(r*)rr+rrœr%rTrrrrǺs   zVarIdxMap.toXML2c Cs€t|ddƒ}|dkri}||_y |d}Wn|jƒ|d}YnXt|dƒ}t|dƒ}|dkslt‚|d>|B||<dS)NrÉrœr—rÓrÏiÿÿrË)r¿rÉr×rr.) rrUrTr\rrÉrœrÓrÏrrrr`Äs     zVarIdxMap.fromXML)N)rrrr¬r¼rÄrÇr`rrrrrÖžs   rÖc@seZdZdd„ZdS)Ú VarRegionListcCs0|jdƒ}|rt|jƒ|_|jdt|jdƒi–S)NZfvarÚRegionAxisCount)rQroZaxesrÝrr )rrZ fvarTablerrrrÄÕs   zVarRegionList.preWriteN)rrrrÄrrrrrÜÓsrÜc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) Ú SingleSubstNcCst|dƒsi|_dS)NrÉ)rªrÉ)rr«rrrr¬ès zSingleSubst.populateDefaultsc sÖi}t|dƒ}|jdkrj|d‰|j|ƒ}‡fdd„|Dƒ}|j|ƒ}x~t||ƒD]\}} | ||<qTWn^|jdkr¶t|ƒ|dksŒtdƒ‚|d } x2t|| ƒD]\}} | ||<q Wnd sÈtd |jƒ‚||_|`dS) Nr©r Ú DeltaGlyphIDcsg|]}|ˆd‘qS)ir)r r¢)rŒrrr"òsz(SingleSubst.postRead..r7Z GlyphCountz invalid SingleSubstFormat2 tableÚ Substituterzunknown format: %s)Ú_getGlyphsFromCoverageTabler°rÀr›rÙror.rÉ) rr¶rrÉÚinputZ inputGIDSZoutGIDSZoutNamesÚinpÚoutÚsubstÚsubr)rŒrr¼ìs$     zSingleSubst.postReadcst|ddƒ}|dkri}|_t|jƒƒ}|j‰‡fdd„|Dƒ}tt||ƒƒ}d}d}xH|D].\}} |dkrz| |d}||d| kr^Pq^W|dkržd}nd}i} ||_tƒ} dd„|Dƒ} dd„|Dƒ} | | _ | | d <|dkrú|dk sðt ‚|| d <n| | d <| S) NrÉcs g|]\}}ˆ|ƒˆ|ƒf‘qSrr)r r�Úb)ržrrr"sz(SingleSubst.preWrite..r7ir cSsg|]}|dd‘qS)r rr)r Úitemrrrr"scSsg|]}|dd‘qS)r r)r rèrrrr"sr©rßrà) r¿rÉÚlistrxržrzrÙr°r©r¡r.)rrrÉrxZgidItemsZ sortableItemsrÂrŒZinIDZoutIDr¶Úcovrârår)ržrrÄs:      zSingleSubst.preWritecCsDt|jjƒƒ}x0|D](\}}|jdd|fd|fgƒ|jƒqWdS)NÚ SubstitutionÚinrä)rzrÉrxr(r*)rr+rrxÚinGlyphZoutGlyphrrrrÇ(s zSingleSubst.toXML2cCs2t|ddƒ}|dkri}||_|d||d<dS)NrÉrärì)r¿rÉ)rrUrTr\rrÉrrrr`/s  zSingleSubst.fromXML)N)rrrr¬r¼rÄrÇr`rrrrrÞæs  'rÞc@sBeZdZddd„Zdd„Zdd„Zdd „Zd d „Zed d „ƒZ dS)Ú MultipleSubstNcCst|dƒsi|_dS)NrÉ)rªrÉ)rr«rrrr¬9s zMultipleSubst.populateDefaultscCs\i}|jdkr.ÚSequencerzunknown format: %s)r°rárØrÙr.rÉ)rr¶rrÉr¡rårrrr¼=s  zMultipleSubst.postReadcsbtˆddƒ‰ˆdkri‰ˆ_tƒ}ttˆjƒƒ|jd�|_dˆ_|‡‡fdd„|jDƒdœ}|S)NrÉ)rvr csg|]}ˆjˆ|ƒ‘qSr)Ú makeSequence_)r rœ)rÉrrrr"Qsz*MultipleSubst.preWrite..)r©rð) r¿rÉr©rzréÚkeysržr¡r°)rrrêr¶r)rÉrrrÄHs   zMultipleSubst.preWritecCsNt|jjƒƒ}x:|D]2\}}dj|ƒ}|jdd|fd|fgƒ|jƒqWdS)Nr$rërìrä)rzrÉrxr)r(r*)rr+rrxríÚ outGlyphsrärrrrÇVs  zMultipleSubst.toXML2cCst|ddƒ}|dkri}||_|dkrlg|_x:|D]2}t|tƒsBq2|\}}} |dkr2|jj|dƒq2WdS|dkrÜt|jdt|ƒƒƒ} |j| } g} || <x8|D]0}t|tƒs´q¤|\}}} |dkr¤| j|dƒq¤WdS|drò|dj d ƒng} d d „| Dƒ||d <dS) NrÉr©rÅr%rðr—ràrär$cSsg|] }|jƒ‘qSr)r[)r r�rrrr"|sz)MultipleSubst.fromXML..rì) r¿rÉZ old_coverage_rWrXr…ÚintrQrorZ)rrUrTr\rrÉÚelementZ element_nameZ element_attrsÚ_r—rœZ glyph_mappingrórrrr`^s4         zMultipleSubst.fromXMLcCstƒ}||_|S)N)rðrà)r�Úseqrrrrñ~szMultipleSubst.makeSequence_)N) rrrr¬r¼rÄrÇr`r1rñrrrrrî7s    rîc@s>eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „ZdS)ÚClassDefNcCst|dƒsi|_dS)NÚ classDefs)rªrù)rr«rrrr¬‡s zClassDef.populateDefaultscCsþi}|jdkrj|d}|d}|j|ƒ}|t|ƒ}|jt||ƒƒ}xªt||ƒD]\} } | rP| || <qPWn†|jdkrâ|d} xr| D]Z} | j} | s’q‚| j}| j} |j|ƒ}|j| ƒd}|jt||ƒƒ}x|D] } | || <qÌWq‚Wnt j d|jƒ||_ |`dS)Nr Ú StartGlyphÚClassValueArrayr7ÚClassRangeRecordzUnknown ClassDef format: %s) r°ržror›r{rÙÚClassr³r´r±r²rù)rr¶rrùrŸZ classListrºr»Z glyphNamesrÆÚclsÚrecordsÚrecr¹rrrr¼‹s4       zClassDef.postReadc Csöt|ddƒ}|dkri|_dS|j}g}x.|jƒD]"\}}|s@q2|j||ƒ||fƒq2W|rò|jƒ|d\}}} | ||gg} x\|dd…D]L\} }}| |dksª|| krÌ| dj||gƒ| j|| |gƒ| }|}|} qŒW| dj||gƒ| SdS)Nrùrr r¾r¾)r¿rùržrxr…rÁrµ) rrrùržrxrÆrþr‰ZlastNameZlastClsr·r¢rrrÚ_getClassRangesªs.  zClassDef._getClassRangescCsd}dgi}|j|ƒ}|�r|dd}|dd}||d}t|ƒd|dkrªxFtt|ƒƒD]6}||\} } } } } tƒ}| |_| |_| |_|||<qbWd}d|i}nd|dd}dg|}x>|D]6\} } } } } x&t| || |dƒD] }| ||<qìWqÆWd}||dœ}||_|S)Nr7rürr r8)rúrûr¾)rror{rür³r´rýr°)rrrÂr¶r·Z startGlyphZendGlyphZ glyphCountr‚rþrŸÚ startNamer¹ÚendNamerZstartGlyphNameÚclassesr�rrrrÄÃs4         zClassDef.preWritecCsDt|jjƒƒ}x0|D](\}}|jdd|fd|fgƒ|jƒqWdS)NrørœÚclass)rzrùrxr(r*)rr+rrxrÆrþrrrrÇâszClassDef.toXML2cCs6t|ddƒ}|dkri}||_t|dƒ||d<dS)Nrùrrœ)r¿rùrô)rrUrTr\rrùrrrr`ès  zClassDef.fromXML)N) rrrr¬r¼rrÄrÇr`rrrrrø…s  røc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) ÚAlternateSubstNcCst|dƒsi|_dS)NÚ alternates)rªr)rr«rrrr¬òs zAlternateSubst.populateDefaultscCszi}|jdkrZt|dƒ}|d}t|ƒt|ƒks6t‚x4t||ƒD]\}}|j||<qBWndsltd|jƒ‚||_|`dS)Nr r©Ú AlternateSetrzunknown format: %s)r°ráror.rÙÚ Alternater)rr¶rrrâÚaltsrãÚaltrrrr¼ös  zAlternateSubst.postReadc CsÊd|_t|ddƒ}|dkr$i}|_t|jƒƒ}x4tt|ƒƒD]$}||\}}|j|ƒ||f||<q>W|jƒt ƒ}dd„|Dƒ|_ g}dd„|Dƒ}x"|D]}t ƒ} || _ |j | ƒqœWd|_||dœS)Nr rcSsg|] }|d‘qS)r r)r rèrrrr"sz+AlternateSubst.preWrite..cSsg|] }|d‘qS)r r¾r)r rèrrrr"s)r©r)r°r¿rrérxr{roržrÁr©r¡rr r…ÚsortCoverageLast) rrrrxr‚rÆrwrêÚsetListr rrrrÄs&     zAlternateSubst.preWritecCspt|jjƒƒ}x\|D]T\}}|jd|d�|jƒx"|D]}|jd|d�|jƒq8W|jdƒ|jƒqWdS)Nr)rœr )rzrrxrOr*r(rS)rr+rrxrÆrr rrrrÇs   zAlternateSubst.toXML2c Csht|ddƒ}|dkri}||_|d}g}|||<x0|D](}t|tƒsHq8|\}}}|j|dƒq8WdS)Nrrœ)r¿rrWrXr…) rrUrTr\rrrÆrwrõrrrr`(s    zAlternateSubst.fromXML)N)rrrr¬r¼rÄrÇr`rrrrrðs    rc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) Ú LigatureSubstNcCst|dƒsi|_dS)NÚ ligatures)rªr)rr«rrrr¬9s zLigatureSubst.populateDefaultscCs€i}|jdkr`t|dƒ}|d}t|ƒt|ƒks6t‚x:tt|ƒƒD]}||j|||<qDWndsrtd|jƒ‚||_|`dS)Nr r©Ú LigatureSetrzunknown format: %s)r°ráror.r{ÚLigaturer)rr¶rrrâÚligSetsr‚rrrr¼=s  zLigatureSubst.postReadcCsfd|_t|ddƒ}|dkr$i}|_|r ttt|ƒƒtƒr tƒ}xZt|j ƒdd„d�D]B\}}t ƒ}|dd…|_ t |ƒ|_ ||_|j|dgƒj|ƒqVW|}t|j ƒƒ}x4tt |ƒƒD]$}||\} } |j| ƒ| | f||<qºW|jƒtƒ} dd„|Dƒ| _g} d d„|Dƒ} xB| D]:} tƒ}g}|_ x| D]}|j|ƒ�q2W| j|ƒ�qWd|_| | d œS) Nr rcSst|dƒ |dfS)Nr)ro)rèrrrruVsz(LigatureSubst.preWrite..)rvrcSsg|] }|d‘qS)r r)r rèrrrr"dsz*LigatureSubst.preWrite..cSsg|] }|d‘qS)r r¾r)r rèrrrr"gs)r©r)r°r¿rrWÚnextÚiterrXrØrzrxrÚ ComponentroÚ CompCountÚLigGlyphr|r…rér{ržrÁr©r¡rr )rrrZ newLigaturesÚcompsÚligZligaturerxr‚rÆrwrêrr ZligSetÚligsrrrrÄJs<        zLigatureSubst.preWritecCs|t|jjƒƒ}xh|D]`\}}|jd|d�|jƒx.|D]&}|jd|jdj|jƒd�|jƒq8W|j dƒ|jƒqWdS)Nr)rœrr$)rœÚ components) rzrrxrOr*r(rr)rrS)rr+rrxrÆrrrrrrÇts    zLigatureSubst.toXML2c Csœt|ddƒ}|dkri}||_|d}g}|||<xd|D]\}t|tƒsHq8|\}}}tƒ} |d| _|d} | rx| jdƒng| _t| jƒ| _ |j | ƒq8WdS)Nrrœrr$) r¿rrWrXrrrZrrorr…) rrUrTr\rrrÆrrõrrrrrr`€s"      zLigatureSubst.fromXML)N)rrrr¬r¼rÄrÇr`rrrrr7s   * rc@seZdZdd„Zdd„ZdS)ÚCOLRcCsn|jdd�}xR|jƒD]>}|jdkr2|j|jƒq|jdƒ}|j||id�||j<PqWtdƒ‚tj |||ƒS)Nr)ÚoffsetÚLayerRecordCount)Z tableDictz$LayerRecordCount converter not found) rŠÚ getConvertersrUZadvanceraZgetConverterByNameÚreadr.r rN)rrLrZ subReaderÚconvrrrrN–s    zCOLR.decompilecCsd|_|jdt|jdƒi–S)Nr)rrr )rrrrrrĨsz COLR.preWriteN)rrrrNrÄrrrrr”srcs(eZdZedd„ƒZ‡fdd„Z‡ZS)Ú LookupListcCsPxF|jD]<}x6|jD],}t|ƒjjdƒr,dSt|ƒjjdƒrdSqWqWt‚dS)NZSubstÚGSUBZPosÚGPOS)ÚLookupÚSubTableÚtyperÚendswithÚ ValueError)rÚlÚstrrrÚtable´s   zLookupList.tablec sZ| sd|kst|djkr*tƒj||ƒS|djt|j}�x|jƒD�]}|j�rt||jgƒ}xêt |ƒD]š\}}t |ƒ|krðt |t |ƒŽ}|j } |jr°|j›d| ›�} |j rÞ|j \} } } | ›d| ›d| ›d| ›d�} |j| ƒ|jƒ|j||||jd|fgƒqpWqJ|j�r0t|jdt|ƒƒ �r0qJt||jdƒ}|j||||jgƒqJWdS)NZDebgz: z in z (ú/ú)r—)rÚdataÚsuperrÇr,rÚrepeatr¿rUr„ÚstrrÚlocationÚfeaturerRr*ZxmlWriteZauxÚevalÚvars) rr+rZ debugDatar!r%Ú lookupIndexrèÚinfoÚtagÚscriptÚlanguager4)r¥rrrǾs.   zLookupList.toXML2)rrrÚpropertyr,rÇÚ __classcell__rr)r¥rr"³s r"c@seZdZdd„ZdS)ÚBaseGlyphRecordArraycs"t|j‡fdd„d�|_|jjƒS)Ncs ˆj|jƒS)N)ržÚ BaseGlyph)r)rrrruÞsz/BaseGlyphRecordArray.preWrite..)rv)rzZBaseGlyphRecordrrÒ)rrr)rrrÄÛszBaseGlyphRecordArray.preWriteN)rrrrÄrrrrr>Ùsr>c@seZdZdd„ZdS)Ú BaseGlyphListcs"t|j‡fdd„d�|_|jjƒS)Ncs ˆj|jƒS)N)ržr?)r)rrrruèsz(BaseGlyphList.preWrite..)rv)rzÚBaseGlyphPaintRecordrrÒ)rrr)rrrÄåszBaseGlyphList.preWriteN)rrrrÄrrrrr@ãsr@c@seZdZdd„Zdd„ZdS)ÚClipBoxcst‡fdd„ˆjƒDƒƒS)Nc3s|]}tˆ|jƒVqdS)N)r¿rU)r r!)rrrú ðsz#ClipBox.as_tuple..)rXr)rr)rrÚas_tupleïszClipBox.as_tuplecCs|jj›|jƒ›�S)N)r¥rrD)rrrrÚ__repr__òszClipBox.__repr__N)rrrrDrErrrrrBísrBc@s@eZdZddd„Zdd„Zdd„Zdd „Zdd d „Zd d „ZdS)ÚClipListNcCst|dƒsi|_dS)NÚclips)rªrG)rr«rrrr¬øs zClipList.populateDefaultsc Csi}|jƒ}xèt|dƒD]Ø\}}|j|jkrDtjd||j|jƒqg}g}xlt|j|jdƒD]V} y || } Wn tk r�|j| ƒw`YnX| |kr¬t j |j ƒ|| <q`|j| ƒq`W|rÖtjd|t |ƒt |ƒƒ|rtjd|t |ƒt |ƒƒqW||_ dS)NÚ ClipRecordzCinvalid ClipRecord[%i].StartGlyphID (%i) > EndGlyphID (%i); skippedr zqClipRecord[%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])r×r„Ú StartGlyphIDÚ EndGlyphIDr±r²r{Ú IndexErrorr…rÒrBÚminrÍrG) rr¶rrGrÚr‚rZredefinedGlyphsZ missingGlyphsr¢rœrrrr¼üsD    zClipList.postReadcs`ttƒ}i‰x<|jjƒD].\}}|jƒ}||j|ƒ|ˆkr|ˆ|<qW‡fdd„|jƒDƒS)Ncsi|]\}}ˆ|t|ƒ“qSr)Ú frozenset)r rvr¡)Ú uniqueClipsrrú 0sz#ClipList.groups..)rrérGrxrDr…)rZ glyphsByCliprÆÚclipBoxrvr)rNrÚgroups(s  zClipList.groupscs4t|dƒsi|_i}|jƒ‰xÀ|jƒjƒD]°\}}t‡fdd„|Dƒƒ}|sNq*|d}|gg}x>|dd…D].}||dkr–|dj|ƒ|j|gƒ|}qlW|dj|ƒx,|D]$\} } | | f|ksÊt‚||| | f<q²Wq*Wg} x>t|jƒƒD].\\} } }tƒ} | | _ | | _ || _ | j| ƒqðWt | ƒ| dœ} | S) NrGc3s|]}|ˆkrˆ|VqdS)Nr)r rÆ)ÚglyphMaprrrC<sz$ClipList.preWrite..rr )Z ClipCountrHr¾r¾) rªrGZgetReverseGlyphMaprQrxrzr…r.rHrIrJrBro)rrZ clipBoxRangesr¡rPrÃr‰r·r¢rŸr¹Z clipRecordsÚrecordr¶r)rRrrÄ5s<   zClipList.preWritec Cs |r|n|jj}|dkrg}t|dƒr6|jd|jfƒ|j||ƒ|jƒxªt|jƒj ƒdd„d�D]Ž\}}|jdƒ|jƒx&t|ƒD]}|j d|d�|jƒqˆW|jdd|jfgƒ|jƒ|j ||ƒ|j dƒ|jƒ|j dƒ|jƒqdW|j |ƒ|jƒdS) Nr°cSs t|dƒS)Nr)rL)rèrrrrudsz ClipList.toXML..)rvÚCliprÅ)r%rB) r¥rrªr…r°rOr*rzrQrxr(rÇrS) rr+rrTrUÚ tableNamer¡rPrÆrrrrVZs.         zClipList.toXMLc CsÜt|ddƒ}|dkri|_}|dks*t‚g}d}xŠ|D]‚}t|tƒsHq8|\}}}|dkrj|j|dƒq8|dkr8tƒ}t|dƒ|_x2|D]*}t|tƒsœqŒ|\}}}|j ||||ƒqŒWq8W|rØx|D] } ||| <qÈWdS)NrGrTrÅr%rBr°) r¿rGr.rWrXr…rBrr°r`) rrUrTr\rrGr¡rPÚelemrÆrrrr`us.          zClipList.fromXML)N)NN) rrrr¬r¼rQrÄrVr`rrrrrFös  , % rFc@seZdZdZdZdZdS)Ú ExtendModerr r7N)rrrZPADÚREPEATZREFLECTrrrrrW�srWc@s|eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdS)Ú CompositeModerr r7r8r3r9r:r;r<r=r>r?r@rArBrCrËéééééééééééN)rrrZCLEARZSRCZDESTZSRC_OVERZ DEST_OVERZSRC_INZDEST_INZSRC_OUTZDEST_OUTZSRC_ATOPZ DEST_ATOPZXORÚPLUSZSCREENZOVERLAYZDARKENZLIGHTENZ COLOR_DODGEZ COLOR_BURNZ HARD_LIGHTZ SOFT_LIGHTZ DIFFERENCEZ EXCLUSIONZMULTIPLYZHSL_HUEZHSL_SATURATIONZ HSL_COLORZHSL_LUMINOSITYrrrrrY—s8rYc@sŒeZdZdZdZd"ZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!S)#Ú PaintFormatr r7r8r3r9r:r;r<r=r>r?r@rArBrCrËrZr[r\r]r^r_r`rarbrcrdééér™é N)r8)#rrrÚPaintColrLayersZ PaintSolidZ PaintVarSolidZPaintLinearGradientZPaintVarLinearGradientZPaintRadialGradientZPaintVarRadialGradientZPaintSweepGradientZPaintVarSweepGradientZ PaintGlyphÚPaintColrGlyphZPaintTransformZPaintVarTransformZPaintTranslateZPaintVarTranslateZ PaintScaleZ PaintVarScaleZPaintScaleAroundCenterZPaintVarScaleAroundCenterZPaintScaleUniformZPaintVarScaleUniformZPaintScaleUniformAroundCenterZ PaintVarScaleUniformAroundCenterZ PaintRotateZPaintVarRotateZPaintRotateAroundCenterZPaintVarRotateAroundCenterZ PaintSkewZ PaintVarSkewZPaintSkewAroundCenterZPaintVarSkewAroundCenterZPaintCompositerrrrrf¶s@rfc@s4eZdZdd„Zd dd„Zdd„Zedœd d „ZdS) ÚPaintc Cs6y t|jƒjStk r0td|j›�ƒ‚YnXdS)NzUnknown Paint format: )rfr°rUr)ÚNotImplementedError)rrrrÚ getFormatNameÛs zPaint.getFormatNameNcCsp|r|n|jj}|dkrg}|jd|jfƒ|j||ƒ|j|jƒƒ|jƒ|j||ƒ|j |ƒ|jƒdS)Nr°) r¥rr…r°rOrRror*rÇrS)rr+rrTrUrUrrrrVás   z Paint.toXMLcCs®|jtjkr&|jj|j|j|j…S|jtjkrhx4|jj D]}|j |j kr<|jgSq.csg|]}|ˆkr|‘qSrr)r r�)Ú newGlyphsrrr"ðsz splitPairPos..csi|]\}}|ˆkr||“qSrr)r rÒrÓ)rÔrrrOñsz splitPairPos..csg|]}|ˆkr|‘qSrr)r r�)rÕrrr"ôscs"i|]\}}|ˆkr|ˆ|“qSrr)r rÒrÓ)rÔrrrOõs)rÏrÐ)rÑr�rÏrÐ)r°roZPairSetr”r¿r©r¥r¡Z PairSetCountZ Class1RecordrªZ Class2RecordrÑÚ DontSharerŽrùrwrxZ Class1Count) rÈrÉrÀr+rÁrUÚcoveragerÿrùr)rÕrÔrÚ splitPairPos½sP          rØcCsž|j}|dkrdS|d}||}gg}}gg}} x`t|jj|jjƒD]J\} } | j|krr|j| ƒ|j| ƒqJ| j|8_|j| ƒ| j| ƒqJWgg} } xV|jj D]J}|j ƒ|j ƒ}}|j d|…|_ |j |d…|_ | j|ƒ| j|ƒq¬W|j |_ ||j_|jj ƒ|_||j_|j |_ ||_||_||j_|jj ƒ|_| |j_t|ƒ|j_t| ƒ|j_| |j_ |jj ƒ|_| |j_ t| ƒ|j_t| ƒ|j_dS)Nr7FT)Z ClassCountrÙr�r¡r¸Z MarkRecordrýr…Z BaseArrayZ BaseRecordr¥r—r°r‚roZ MarkCountZ BaseCount)rÈrÉrÀZ classCountZ oldClassCountZ newClassCountZoldMarkCoverageZoldMarkRecordsZnewMarkCoverageZnewMarkRecordsrÆZ markRecordZoldBaseRecordsZnewBaseRecordsrZ oldBaseRecordZ newBaseRecordrrrÚsplitMarkBasePossR               rÙ)r7r8r3)r7r3)r#r$c Cs4||jj}|jj|j}|j}|j|}t|dƒs>d|_dSt|dƒrœ|j j j }|}|j }t |j|j j }|ƒ} |j | _ | } t |j|} | ƒ} | | _ n |j j }t |j|} | ƒ} | } t|dƒrÒ|jd|_yt|j|} Wn&tk �r tjd|j|ƒdSX| || |ƒ}|�r0|jj|d| ƒ|S)zd An offset has overflowed within a sub-table. We need to divide this subtable into smaller parts. rÖTr¾Ú SubTableCountr z)Don't know how to split %s lookup type %sF)r»r,r"r%r¹rºr&rªrÖr¾r¥r¼r½r°rÚÚ splitTablerpr±ÚerrorrÕ)r¿rÀr,rÂZsubIndexZsubtableZ subTableTyperÄZnewExtSubTableClassZnewExtSubTableZtoInsertZnewSubTableClassrÉZ splitFuncrÁrrrÚfixSubTableOverFlowsUsH        rÝc CsBddl}ddlm}|jdƒ}tƒ}xl|D]d\}}t}|j|ƒ}|rb|jdƒ}|dd}t|ƒ}||kr*t||fiƒ} |dkr†d| _ | ||<q*Wx2t j ƒD]&\} } || } x| D] } | || <q²WqœWt t ttttttdœtttttttttd œ d tittt tt!d œd œa"t"dt"d <x0t"j#ƒD]$} x| j ƒD]\}} || _$�q.W�q Wdt%ia&x t'ddƒD]}t(t&d|<�q\Wx t'ddƒD]}t)t&d|<�q~Wddl*m+}xœ|D]”\}}|j|ƒ}|�r|j,ƒ\}}t-|ƒ}||} t.| dƒ�sòi| _/i| _0||dd…|ƒ\}}|| j/|<|| j0|<n||} |||ƒ\| _/| _0�q¦WdS)Nrr )ÚotDataz([A-Za-z0-9]+)Format(\d+)$r#r$T)r r7r8r3r9r:r;r<) r r7r8r3r9r:r;r<r=r3)rr r7r3r9)r#r$ZmortZmorxZJSTFÚsizer]zss%02déczcv%02d)ÚbuildConvertersÚ converters)r#r$r^éd)1ÚrerÞrIÚglobalsr ÚmatchÚgrouprr'rÖÚ _equivalentsrxrÞrîrrZ ContextSubstZChainContextSubstZExtensionSubstZReverseChainSingleSubstZ SinglePosZPairPosZ CursivePosZ MarkBasePosZ MarkLigPosZ MarkMarkPosZ ContextPosZChainContextPosZ ExtensionPosZNoncontextualMorphZRearrangementMorphZContextualMorphZ LigatureMorphZInsertionMorphr½Úvaluesr¼r¦r¤r{r§r¨Z otConvertersrárQrôrªrâÚconvertersByName)rärÞZ formatPatÚ namespacerUr,Z baseClassÚmZ formatTyperþÚbaser r Z lookupEnumÚenumr‚rárÂrârêrrrÚ _buildClasses�s†               rïcCs|dkr gS|jSdS)N)r¡)r×rrrráösrá)r)r€) r�r‚rƒr„r…r†r‡rˆr‰rŠr‹rŒr�)rŽr�r�r‘r’r“r”)r•r–r—r˜r™rš)r›rœr�ržrŸr r¡)r¢r£)r¤)r¥r¦)r§)r¨r©rªr«)r¬r­r®r¯)r°r±)r²r³r´rµ)r¶r·)GÚ__doc__rÒrîrÚ itertoolsÚ collectionsrrZfontTools.misc.roundToolsrZfontTools.misc.textToolsrrrZotBaser r r r rZ fontTools.feaLib.lookupDebugInforrÚloggingr†Ú getLoggerrr±Úobjectrrrr2rcrirlr�r£r¦r§r¨r©rÈrÖrÜrÞrîrørrrr"r>r@rBrFrWrYrfrmrèrÅrÌrÍrÎrØrÙrÛrÝrïrárrrrÚs¨   R@ ZC5QNkG]&   #>7C? 8f