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øªjr‡ã@s6dZddlZddlZddlmZddlZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZmZmZdd lmZmZmZmZdd lmZdd lmZdd lmZddlm Z m!Z!m"Z"ej#dƒZ$ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m-Z-m.Z.Gdd„de/ƒZ0Gdd„de0ƒZ1e1j2e j3dƒdd„ƒZ4dd„Z5dRdd„Z6dd„Z7dd „Z8e1j2e j9ƒd!d„ƒZ4e1j2e j:ƒd"d„ƒZ4d#d$„Z;dSd%d&„Zd,d-„Z?e1j2e j@ƒd.d„ƒZ4dVd1d2„ZAe1j2e jBƒd3d„ƒZ4e1j2e jCƒd4d„ƒZ4d5d6„ZDd7d8„ZEd9d:„ZFd;d<„ZGd=d>„ZHe1j2e jIƒd?d„ƒZ4Gd@dA„dAe1ƒZJeJj2e jKƒdBd„ƒZ4eJj2e jLƒdCd„ƒZ4eJj2e jMƒdDd„ƒZ4GdEdF„dFe1ƒZNeNj2e jKƒdGd„ƒZ4eNj2e jLƒdHd„ƒZ4eNj2e jMƒdId„ƒZ4GdJdK„dKe1ƒZOdLdM„ZPeOj2e jQƒdNd„ƒZ4eOj2e jKƒdOd„ƒZ4eOj2e jLƒdPd„ƒZ4eOj2e jMƒdQd„ƒZ4dS)Wz4 Merge OpenType Layout tables (GDEF / GPOS / GSUB). éN)Úior)Ú classifyTools)ÚotRound)ÚotTables)ÚotBase)Ú DefaultTable)ÚbuilderÚmodelsÚvarStore)ÚnonNoneÚallNoneÚallEqualÚ allEqualTo)ÚVarStoreInstancer)Úreduce)ÚbuildSinglePos)Úcompact_pair_posÚGPOS_COMPACT_MODE_DEFAULTÚGPOS_COMPACT_MODE_ENV_KEYzfontTools.varLib.mergeré) ÚShouldBeConstantÚ FoundANoneÚMismatchedTypesÚ LengthsDifferÚ KeysDifferÚInconsistentGlyphOrderÚInconsistentExtensionsÚUnsupportedFormatrÚVarLibMergeErrorc@sXeZdZddd„Zeddd„ƒZeifdd„ƒZffdd „Zd d „Zd d „Z dd„Z dS)ÚMergerNcCs ||_dS)N)Úfont)Úselfr ©r"ú.wrapper)rr(Ú__dict__r%ÚtypeÚstr)r/r0r.r1r")r.r/r0r#Úmerger,s    z Merger.mergercCsNt|ƒ}x@|jƒD]4}t|ddƒ}|dkr,P|jj|dƒ}|dk r|SqW|S)Nr%)r3ÚmroÚgetattrr%Úget)r/ÚthingÚ_defaultÚtypr%Úmr"r"r#Ú mergersForCs zMerger.mergersForc st|dƒr|jƒx|D]}t|dƒr|jƒqWtt|ƒjƒƒ‰t‡fdd„|Dƒƒspt|ˆdd„|Dƒd�‚|j|ƒ}|jd|j j ƒ}yPxJˆD]B‰ˆ|kr q’t |ˆƒ}‡fdd„|Dƒ}|jˆ|ƒ} | |||ƒq’WWn6t k �r} z| j jd ˆƒ‚WYdd} ~ XnXdS) NÚensureDecompiledc3s"|]}ˆtt|ƒjƒƒkVqdS)N)ÚsortedÚvarsÚkeys)Ú.0Úv)rAr"r#ú Zsz&Merger.mergeObjects..cSsg|]}tt|ƒjƒƒ‘qSr")r?r@rA)rBrCr"r"r#ú \sz'Merger.mergeObjects..)ÚexpectedÚgotÚ*csg|]}t|ˆƒ‘qSr")r7)rBÚtable)Úkeyr"r#rEdsÚ.)Úhasattrr>r?r@rAÚallrr=r8Ú __class__Ú mergeThingsr7rÚstackr)) r!ÚoutÚlstÚexcludeÚitemr%Z defaultMergerÚvalueÚvaluesÚ mergerFuncÚer")rJrAr#Ú mergeObjectsSs,        zMerger.mergeObjectscCs–t||tƒs(t|t|ƒdd„|Dƒd�‚xhtt|t|ŽƒƒD]R\}\}}y|j||ƒWq<tk rŒ}z|jjd|ƒ‚WYdd}~Xq.)rFrGz[%d]) rrZrÚ enumerateÚziprOrrPr))r!rQrRÚirUrVrXr"r"r#Ú mergeListsks  zMerger.mergeListscCsžt||tƒs*t|t|ƒjdd„|Dƒd�‚|j|ƒjddƒ}|dk rR||||ƒnHt|dƒrj|j||ƒn0t|t ƒr‚|j ||ƒnt||ƒsšt |||d�‚dS)NcSsg|]}t|ƒj‘qSr")r3r')rBr[r"r"r#rEysz&Merger.mergeThings..)rFrGr2) rr3rr'r=r8rLrYÚ isinstanceÚlistr_r)r!rQrRrWr"r"r#rOus    zMerger.mergeThingscs„x~|D]v‰ˆ|krqy6‡fdd„|Dƒ|_|j|ˆ‡fdd„|DƒƒWqtk rz}z|jjˆƒ‚WYdd}~XqXqWdS)Ncsg|]}ˆ|kr|‘qSr"r")rBr<)Útagr"r#rEŠsz&Merger.mergeTables..cs g|]}ˆ|kr|ˆnd‘qS)Nr")rBr<)rbr"r#rE‹s)ZttfsrOrrPr))r!r Z master_ttfsZ tableTagsrXr")rbr#Ú mergeTables†s  zMerger.mergeTables)N©N)rd) r'Ú __module__Ú __qualname__r$Ú classmethodr5r=rYr_rOrcr"r"r"r#r's    rc@s eZdZdS)ÚAligningMergerN)r'rerfr"r"r"r#rh”srhZ GlyphClassDefcsº|dkr"t|ƒst|d|d�‚dSdd„|Dƒ}i|_|j}tƒ}|jdd„|DƒŽx^|D]V‰t‡fdd„|Dƒƒ}t|ƒs˜t||d|dˆgd �‚|s¦d|ˆ<q\|d|ˆ<q\WdS) N)rFrGcSsg|] }|j‘qSr")Ú classDefs)rBÚlr"r"r#rEžszmerge..cSsg|] }|jƒ‘qSr")rA)rBrjr"r"r#rE¤sc3s|]}|jˆƒVqdS)N)r8)rBrj)Úkr"r#rD¦szmerge..rrK)rFrGrP)r ZNotANoneriÚsetÚupdater r r)r5r!rRZallKeysZ allValuesr")rkr#r&—s   r&csTˆjdkrˆStjƒ}d|_ˆj|_ˆj|_‡fdd„|jjDƒ|_t|jƒ|_|S)Nécsg|] }ˆj‘qSr")ÚValue)rBÚ_)r!r"r#rEµsz._SinglePosUpgradeToFormat2..) ÚFormatÚotÚ SinglePosÚCoverageÚ ValueFormatÚglyphsrorZÚ ValueCount)r!Úretr")r!r#Ú_SinglePosUpgradeToFormat2®s  rycsÂ|dkrdd„|Dƒ}ndd„t||ƒDƒ}tƒ}|j|Ž|jƒj‰t|ˆd�‰t‡fdd„|Dƒƒsntƒ‚~d}|dkr’‡‡fdd„|Dƒ}n(t|ƒt|ƒks¦t ‚‡‡fd d„|Dƒ}ˆ|fS) aBTakes font and list of glyph lists (must be sorted by glyph id), and returns two things: - Combined glyph list, - If values_lst is None, return input glyph lists, but padded with None when a glyph was missing in a list. Otherwise, return values_lst list-of-list, padded with None to match combined glyph lists. NcSsg|] }t|ƒ‘qSr")rl)rBrjr"r"r#rEÃsz&_merge_GlyphOrders..cSs$g|]\}}dd„t||ƒDƒ‘qS)cSsi|]\}}||“qSr"r")rBÚgrCr"r"r#ú Åsz1_merge_GlyphOrders...)r])rBrjÚvsr"r"r#rEÅs)rJc3s|]}t|ˆd�|kVqdS))rJN)r?)rBr|)ÚsortKeyr"r#rDÌsz%_merge_GlyphOrders..cs g|]‰‡‡fdd„ˆDƒ‘qS)csg|]}|ˆkr|nˆ‘qSr"r")rBÚglyph)ÚdefaultÚdict_setr"r#rEÒsz1_merge_GlyphOrders...r")rB)rÚorder)r€r#rEÒscs g|]‰‡‡fdd„ˆDƒ‘qS)cs g|]}|ˆkrˆ|nˆ‘qSr"r")rBr~)rr€r"r#rE×sz1_merge_GlyphOrders...r")rB)rr�)r€r#rE×s) r]rlrmÚgetReverseGlyphMapÚ __getitem__r?rMrrZr()r rRZ values_lstrZ dict_setsZcombinedZ paddedValuesÚpaddedr")rr�r}r#Ú_merge_GlyphOrdersºs$      r…cCszxt|D]l}|dkst|ƒtjks|jdks||jjkr8q|jdkrH|jS|jdkrf|j|jjj|ƒSt|dd�‚qWdS)Nrrnzsingle positioning lookup)Úsubtable) r3rrrsrtrvrqroÚindexr)r5Ú subtablesr~r!r"r"r#Ú%_Lookup_SinglePos_get_effective_valueÜs     r‰c CsÊxÄ|D]¼}|dkst|ƒtjks|jdks||jjkr8q|jdkr||j|jjj|ƒ}|j}x|D]}|j |krb|SqbWqq|jdkr¶|j j j |dƒ}|j j j |dƒ} |j|j| St|dd�‚qWdS)Nrrnrzpair positioning lookup)r†)r3rrÚPairPosrtrvrqÚPairSetr‡ÚPairValueRecordÚ SecondGlyphÚ ClassDef1rir8Ú ClassDef2Ú Class1RecordÚ Class2Recordr) r5rˆZ firstGlyphZ secondGlyphr!ÚpsÚpvrÚrecZklass1Zklass2r"r"r#Ú(_Lookup_PairPos_get_effective_value_pairës&       r•c s¶ttjdd„|Dƒdƒ|_‰t|ƒdkp4ˆd@dksBt|dd�‚|jj‰tdd „|Dƒƒr¦t‡fd d „|Dƒƒr¦t j ˆƒ|_ |j |j d d„|Dƒƒ|j j ƒ|_dSd |_d d„|Dƒ}t|jdd„|Dƒdd„|Dƒƒ\}}||j_‡fdd„|Dƒ|_ t|j ƒ|_xnt|ƒD]b\}}xVt|ƒD]J\}}||dk �r>�q$t||j||ƒ} | dk�rdt j ˆƒ} | ||<�q$W�qW|j|j |ƒ|j||dd�ttjdd„|j Dƒdƒ|_dS)NcSsg|] }|j‘qSr")ru)rBrjr"r"r#rEszmerge..rrézsingle positioning lookup)r†css|]}|jdkVqdS)rN)rq)rBrCr"r"r#rD szmerge..c3s|]}ˆ|jjkVqdS)N)rtrv)rBrC)ÚcoverageGlyphsr"r#rD scSsg|] }|j‘qSr")ro)rBrCr"r"r#rE srncSsg|] }t|ƒ‘qSr")ry)rBrCr"r"r#rEscSsg|] }|jj‘qSr")rtrv)rBrCr"r"r#rEscSsg|] }|j‘qSr")ro)rBrCr"r"r#rEscsg|]}tjˆƒ‘qSr")rÚ ValueRecord)rBrp)Ú valueFormatr"r#rEsrqrtrorw)rScSsg|] }|jƒ‘qSr")ZgetEffectiveFormat)rBrCr"r"r#rE-siðÿÿÿ)rqrtrorw)rÚintÚ__or__rurZrrtrvrMrr˜rorOÚ getFormatrqr…r rwr\r‰Úlookup_subtablesr_rY) r5r!rRrvr„r^rVÚjr~rCr")r—r™r#r&s: (      cCs~t|jdd„|Dƒdd„|Dƒƒ\}}g|_}xT|D]L}tjƒ}||_|jrZtj|jƒnd|_|j rrtj|j ƒnd|_ |j |ƒq6Wt |jƒ|_ xÔt|ƒD]È\}} x¾t|ƒD]²\} }tjƒ} || _| | dk rÚ| | } nt||j||j|ƒ} | dk�rd\} }nt| ddƒ} t| ddƒ}|j�r4tj|j| d�nd| _|j �rRtj|j |d�nd| _ | | | <q®WqœW|`|j|j|ƒdS)NcSsg|]}dd„|jDƒ‘qS)cSsg|] }|j‘qSr")r�)rBrCr"r"r#rE3sz$merge...)rŒ)rBr|r"r"r#rE3szmerge..cSsg|] }|j‘qSr")rŒ)rBr|r"r"r#rE4sÚValue1ÚValue2)Úsrc)NN)r…r rŒrrr�Ú valueFormat1rr˜rŸÚ valueFormat2r r)rZÚPairValueCountr\r•r�Ú _firstGlyphr7r_)r5r!rRrvr„Úpvrsr~r“r^rVržrCZvpairZv1Zv2r"r"r#r&/s8          cCs¾tdd„|Dƒƒstdƒ‚|j||dd �tjƒ}g|_d |_t|jd d„|Dƒd d„|Dƒ|d �\}}||j _ dd„|Dƒ|_t |jƒ|_ xt ||jƒD]\}}||_qšW|j|j|ƒdS)NcSsg|]}|jr|jdk‘qS)r)r‹Ú ValueFormat2)rBrjr"r"r#rEWsz)_PairPosFormat1_merge..zReport bug against fonttools.rtr‹Ú PairSetCountÚ ValueFormat1r§)rSrcSsg|] }|jj‘qSr")rtrv)rBrCr"r"r#rEescSsg|] }|j‘qSr")r‹)rBrCr"r"r#rEfs)rcSsg|] }tjƒ‘qSr")rrr‹)rBrpr"r"r#rEjs)rtr‹r¨r©r§)r r(rYrrr‹rŒr¤r…r rtrvrZr¨r]r¥r_)r!rRr5Úemptyrvr„r~r’r"r"r#Ú_PairPosFormat1_mergeVs$     r«c CsÒt|tƒr|}n|r |jr |jni}|r4t|jƒƒnd}g}x t|dƒD]}|jtƒƒqJWx"|jƒD]\}}||j |ƒqhW|dkr”d|d<n:t|ƒ|d<}x(|dd…D]} | j |ƒ|j | ƒq²W|S)Nrr) r`ÚdictriÚmaxrVÚranger)rlÚitemsÚaddÚintersection_updateÚdifference_update) r!Ú allGlyphsrir<rxrprkrCZclass0Úsr"r"r#Ú_ClassDef_invertqs    rµc CsÌtjƒ}i|_}|dk}|r,dgt|ƒ}tjƒ}x>t||ƒD]0\}}t||ƒ}|dkrf|dd…}|j|ƒq@W|j ƒ} |rŽ| j dt ƒƒx4t | ƒD](\} } | dkrªq˜x| D] } | || <q°Wq˜W|| fS)Nrr) rrÚClassDefrirZrÚ Classifierr]rµrmZ getClassesÚinsertrlr\) rRZ allGlyphsesr!riZallGlyphsesWasNoneÚ classifierZclassDefr³ZsetsÚclassesr^ÚclassSetrzr"r"r#Ú_ClassDef_merge_classify�s(    r¼FcCs0dd„|Dƒ}tdd„|Dƒdd„|Dƒƒ\|_}t|ƒ|_g}�xt||ƒD]ö\}}d} t|jjƒ} |jj} g} xÆ|D]¾} t t | ƒƒ}|| k�rd} | dk�rt j ƒ} g}| _ x^t|jƒD]P}|rÌd}n8t j ƒ}|jrætj|jƒnd|_|jrþtj|jƒnd|_|j|ƒq¾W| }n| j|dƒ}||}| j|ƒqxW|j| ƒqNW|}~tdd„|Dƒƒ\|_}t|ƒ|_g}x°t||ƒD]¢\}}|jj}g} x€|D]x}|j }t j ƒ}g}|_ xN|D]F} | �sÐ|d}n t t | ƒƒ}|j|dƒ}||}|jtj|ƒƒ�q¼W| j|ƒ�qšW|j| ƒ�q€W|}~|S)NcSsg|] }|j‘qSr")r�)rBrjr"r"r#rE©sz2_PairPosFormat2_align_matrices..cSsg|] }|j‘qSr")rŽ)rBrjr"r"r#rE¬scSsg|] }|jj‘qSr")rtrv)rBrjr"r"r#rE¬srcSsg|] }|j‘qSr")r�)rBrjr"r"r#rEÒs)r¼rŽrZÚ Class1Countr]rlrtrvriÚnextÚiterrrr�r‘r®Ú Class2Countr©rr˜rŸr§r r)r8r�ÚcopyÚdeepcopy)r!rRr Ú transparentÚmatricesrºZ new_matricesrjÚmatrixZnullRowZcoverageZ classDef1Z class1Recordsr»Z exemplarGlyphZ class2recordsrpZrec2Zrec1ÚklassZ classDef2Zrec1oldZoldClass2RecordsZrec1newZ class2Recordsr"r"r#Ú_PairPosFormat2_align_matrices§sh$               rÇc Cs°tdd„|Dƒƒstdƒ‚|j||dd �t|jd d„|Dƒƒ\}}||j_x4t||jƒD]$\}}|jj|krZ||dksZt‚qZWt |||jƒ}t |dƒ|_ |j |j |ƒdS)NcSsg|]}|jr|jdk‘qS)r)r�r§)rBrjr"r"r#rEìsz)_PairPosFormat2_merge..zReport bug against fonttools.rtrŽr½r�rÀr�r©r§)rScSsg|] }|jj‘qSr")rtrv)rBrCr"r"r#rE÷srr)rtrŽr½r�rÀr�r©r§éÿÿÿÿ) r r(rYr…r rtrvr]r�rÇrar�r_)r!rRr5rvrprjrˆrÄr"r"r#Ú_PairPosFormat2_mergeës   rÉc Cs|ttjdd„|Dƒdƒ|_|_ttjdd„|Dƒdƒ|_|_|jdkrXt|||ƒn$|jdkrpt |||ƒn t |dd�‚|`|`d}d}|jdkrøxÔ|j D]T}xN|j D]D}t |d dƒ}|dk rÎ||jƒO}t |d dƒ}|dk rª||jƒO}qªWqžWnt|jdk�rlxf|jD]\} xT| jD]J} t | d dƒ}|dk �r>||jƒO}t | d dƒ}|dk �r||jƒO}�qW�q W||_||_dS) NcSsg|] }|j‘qSr")r©)rBrjr"r"r#rE szmerge..rcSsg|] }|j‘qSr")r§)rBrjr"r"r#rE srrnzpair positioning lookup)r†rŸr )rršr›r¢r©r£r§rqr«rÉrr‹rŒr7rœr�r‘) r5r!rRZvf1Zvf2ZpairSetZpairValueRecordZpv1Zpv2Z class1RecordZ class2Recordr"r"r#r& s<                   ÚMarkÚBasecsˆtdd„|Dƒƒ|_t|j‡fdd„|Dƒ‡fdd„|Dƒƒ\}}|t|ˆdƒ_t|j‡fdd„|Dƒ‡fdd„|Dƒƒ\}}|t|ˆdƒ_g} xžt|t|ŽƒD]Œ\} } d d„| Dƒ} t| ƒsÖt|| d | d �‚nPt j ƒ} | d | _ d d„| Dƒ}t |ƒ�rd}nt j ƒ}d |_|j||ƒ|| _| j| ƒq¤Wt jƒ}| |_ t| ƒ|_t|ˆd|ƒg} xÞt|t|ŽƒD]Ì\} } t | ƒ�rˆd} n¨tt ˆdƒƒ} g}t| ˆd|ƒ‡fdd„| Dƒ}x(|D] }|jdg|jt|ƒƒ�qÄWxFt|ŽD]:}t |ƒ�rd}nt j ƒ}d |_|j||ƒ|j|ƒ�qòW| j| ƒ�qpWtt ˆdƒƒ}t|ˆd| ƒt|ˆdt| ƒƒt|ˆd|ƒdS)Ncss|] }|jVqdS)N)Ú ClassCount)rBrjr"r"r#rD2sz,_MarkBasePosFormat1_merge..csg|]}t|ˆdƒj‘qS)rt)r7rv)rBrj)rÊr"r#rE6sz-_MarkBasePosFormat1_merge..csg|]}t|ˆdƒj‘qS)ÚArray)r7Ú MarkRecord)rBrj)rÊr"r#rE7srtcsg|]}t|ˆdƒj‘qS)rt)r7rv)rBrj)rËr"r#rE<scs$g|]}tt|ˆdƒˆdƒ‘qS)rÍÚRecord)r7)rBrj)rËr"r#rE=scSsg|]}|dk r|j‘qS)N)ÚClass)rBÚrr"r"r#rECsr)rFrGcSsg|]}|dkrdn|j‘qS)N)Ú MarkAnchor)rBrÑr"r"r#rEZsrrÍrÏÚAnchorcs&g|]}|dkrgn t|ˆdƒ‘qS)NrÓ)r7)rBrÑ)rËr"r#rEqsZCount)r­rÌr…r r7rvr]r rrrrÎrÐr rÓrqrOrÒr)Z MarkArrayrZZ MarkCountÚsetattrÚextend)r!rRr5rÊrËZMarkCoverageGlyphsZ MarkRecordsZBaseCoverageGlyphsZ BaseRecordsÚrecordsrzZ glyphRecordsZ allClassesr”Z allAnchorsÚanchorÚarrayZanchorsZ glyphAnchorsrjr")rËrÊr#Ú_MarkBasePosFormat1_merge1sf          rÙcCsZt|jdd„|Dƒƒs2t|d|jdd„|Dƒd�‚|jdkrJt|||ƒn t|dd�‚dS) Ncss|] }|jVqdS)N)rq)rBrjr"r"r#rD…szmerge..zmark-to-base positioning lookupcSsg|] }|j‘qSr")rq)rBrjr"r"r#rEŠszmerge..)r†rFrGr)r†)rrqÚInconsistentFormatsrÙr)r5r!rRr"r"r#r&ƒs cCs^t|jdd„|Dƒƒs2t|d|jdd„|Dƒd�‚|jdkrNt|||dd ƒn t|dd �‚dS) Ncss|] }|jVqdS)N)rq)rBrjr"r"r#rD“szmerge..zmark-to-mark positioning lookupcSsg|] }|j‘qSr")rq)rBrjr"r"r#rE˜szmerge..)r†rFrGrZMark1ZMark2)r†)rrqrÚrÙr)r5r!rRr"r"r#r&‘s cCs”tjƒ}tjƒ|_t|dd„|Dƒdd„|Dƒƒ\}}||j_g|_}x:t|ŽD].}x(|D]}|dk r\|j|ƒPq\WdsRt‚qRWt |jƒ|_ |S)NcSsg|]}dd„|jDƒ‘qS)cSsg|] }|j‘qSr")r�)rBrCr"r"r#rE¥sz/_PairSet_flatten...)rŒ)rBr|r"r"r#rE¥sz$_PairSet_flatten..cSsg|] }|j‘qSr")rŒ)rBr|r"r"r#rE¦sF) rrr‹rtr…rvrŒr]r)r(rZr¤)rRr r!rvr„r¦rVrCr"r"r#Ú_PairSet_flattenŸs       rÛcsºtdd„|Dƒƒstdƒ‚tjƒ}d|_tjƒ|_ttjdd„|Dƒdƒ|_ ttjdd„|Dƒdƒ|_ t ˆdd„|Dƒd d„|Dƒƒ\}}||j_ ‡fd d„t |ŽDƒ|_t|jƒ|_|S) NcSsg|]}|jr|jdk‘qS)r)r‹r§)rBrjr"r"r#rE¶sz<_Lookup_PairPosFormat1_subtables_flatten..zReport bug against fonttools.rcSsg|] }|j‘qSr")r©)rBrjr"r"r#rE»srcSsg|] }|j‘qSr")r§)rBrjr"r"r#rE¼scSsg|] }|jj‘qSr")rtrv)rBrCr"r"r#rEÀscSsg|] }|j‘qSr")r‹)rBrCr"r"r#rEÁscs g|]}tdd„|Dƒˆƒ‘qS)cSsg|]}|dk r|‘qS)Nr")rBrCr"r"r#rEÄszG_Lookup_PairPosFormat1_subtables_flatten...)rÛ)rBrV)r r"r#rEÄs)r r(rrrŠrqrtrršr›r©r§r…rvr]r‹rZr¨)rRr r!rvr„r")r r#Ú(_Lookup_PairPosFormat1_subtables_flattenµs    rÜc Cstdd„|Dƒƒstdƒ‚tjƒ}d|_tjƒ|_ttjdd„|Dƒdƒ|_ ttjdd„|Dƒdƒ|_ t |dd„|Dƒƒ\}}||j_ t |||d d �}g}|_xnt|ŽD]b}tjƒ}|j|ƒg|_|j}x>ttd d „|DƒƒŽD]$} ttd d „| Dƒƒƒ} |j| ƒqäWqªW|S)NcSsg|]}|jr|jdk‘qS)r)r�r§)rBrjr"r"r#rEÊsz<_Lookup_PairPosFormat2_subtables_flatten..zReport bug against fonttools.rncSsg|] }|j‘qSr")r©)rBrjr"r"r#rEÏsrcSsg|] }|j‘qSr")r§)rBrjr"r"r#rEÐscSsg|] }|jj‘qSr")rtrv)rBrCr"r"r#rEÔsT)rÃcss|] }|jVqdS)N)r‘)rBrÑr"r"r#rDßsz;_Lookup_PairPosFormat2_subtables_flatten..css|]}|dk r|VqdS)Nr")rBÚcr"r"r#rDàs)r r(rrrŠrqrtrršr›r©r§r…rvrÇr�r]r)r‘rar¾r¿) rRr r!rvrprÄrÅZrowsÚrowÚcolsÚcolr"r"r#Ú(_Lookup_PairPosFormat2_subtables_flattenÉs(   rácCs¨t|ƒ}t|ƒ}d}x"||kr6||jdkr6|d7}qWt|d|…|ƒg|d|…<t|ƒ}|}x&|dkr†||djdkr†|d8}qbWt||d…|ƒg||d…<|S)zÇMerge multiple Format1 subtables at the beginning of lst, and merge multiple consecutive Format2 subtables that have the same Class2 (ie. were split because of offset overflows). Returns new list.rrNrn)rarZrqrÜrá)rRr rjr^r"r"r#Ú&_Lookup_PairPos_subtables_canonicalizeås  râc Csôt|dd„|Dƒdƒ\}}t|ƒ}tjƒ}d|_||_tjƒ|_||j_||_dg||_ x’|D]Š}|jdkr¢|j }xt|jjD]} |j | ƒ} t j |ƒ|j | <q~Wq`|jdkr`x.rnr)r…rZrrrsrqrurtrvrwror‡rÁrÂr\) rRr Zmin_inclusive_rec_formatrvrpZ num_glyphsÚnewZ singlePosZval_recÚgnamer^ržr"r"r#Ú#_Lookup_SinglePos_subtables_flattenùs,        råcs dd„|Dƒ}ˆ_x°tt||ƒƒ||jfgD]’\}}|s>q0|djjjdƒr0tdd„|Dƒƒsztˆddd„|Dƒd�‚tdd„|Dƒƒs”tˆƒ‚|dj |_ d d„|Dƒ}|dd…=|j |ƒq0W|joÜt |jdt jƒ}|�rt|jˆjƒ|_‡fd d„|Dƒ}ˆ_n”|j�o&t |jdt jƒ}|�r¢d d„|Dƒ‰t‡fd d„ˆDƒƒ�sžd d„|Dƒ} tt| ƒ‰t|jˆjˆƒ|_‡‡fdd„|Dƒ}ˆ_d} nd} ˆj|j|ƒt|jƒ|_|�rªt|jƒdk�rä|jdjdk�sèt‚|jdjj�s|jjdƒ|jd8_t|jƒdk�r4|jdjdk�s8t‚|jdjj�sb|jjdƒ|jd8_tjj t!t"ƒ} | �rð| dk�rðt#j$dƒt%ˆj| |jƒ|_t|jƒ|_nF|�rð| �rð|jd} | jj} dd„t| | j&ƒDƒ}t'|ˆjj(ƒƒ|_ˆj)||ddgd�ˆ`dS)NcSsg|] }|j‘qSr")ÚSubTable)rBrjr"r"r#rEszmerge..rÚ ExtensioncSsg|] }|j‘qSr")rN)rBÚstr"r"r#rEscSsg|] }|jj‘qSr")rNr')rBrèr"r"r#rEs)rFrGcSsg|] }|j‘qSr")ÚExtensionLookupType)rBrèr"r"r#rE scSsg|] }|j‘qSr")Z ExtSubTable)rBrèr"r"r#rE#scsg|]}t|ˆjƒ‘qSr")râr )rBrè)r5r"r#rE.scSsg|] }t|ƒ‘qSr")rZ)rBrèr"r"r#rE2scsg|]}|ˆdk‘qS)rr")rBÚnums)Ú numSubtablesr"r#rE3scSsg|]}|D] }|j‘q qSr")ru)rBrèÚtr"r"r#rE7scsg|]}t|ˆjˆƒ‘qSr")rår )rBrè)r5Úmirfr"r#rE<sTFrrnÚ0zCompacting GPOS...cSsi|]\}}||“qSr"r")rBräZ valRecordr"r"r#r{_szmerge..ræÚ SubTableCount)rSrÈrÈrÈ)*r�rar]rærNr'Ú startswithr rréZ LookupTyperÕr`rrrŠrâr rsrMrrrår_rZrïrqr(rtrvÚpopÚosÚenvironr8rrÚlogÚinforrorr‚rY)r5r!rRrˆrjÚstsZnew_stsZ isPairPosZ isSinglePosZvalueFormatListZ flattenedÚmodeZsinglePosTablervZsinglePosMappingr")r5rírër#r&sl$    & &    c@seZdZdZdd„ZdS)ÚInstancerMergerzIA merger that takes multiple master fonts, and instantiates an instance.cCs(tj||ƒ||_||_|j|ƒ|_dS)N)rr$ÚmodelÚlocationZ getScalarsÚscalars)r!r rùrúr"r"r#r$ps zInstancerMerger.__init__N)r'rerfÚ__doc__r$r"r"r"r#rølsrøcCs>|jdkst‚dd„|Dƒ}|j}|j}t|j||ƒƒ|_dS)NrcSsg|] }|j‘qSr")Ú Coordinate)rBÚar"r"r#rEyszmerge..)rqr(rùrûrÚ interpolateFromMastersAndScalarsrý)r5r!rRZCoordsrùrûr"r"r#r&vs cCs^|jdkst‚dd„|Dƒ}dd„|Dƒ}|j}|j}t|j||ƒƒ|_t|j||ƒƒ|_dS)NrcSsg|] }|j‘qSr")Ú XCoordinate)rBrþr"r"r#rE�szmerge..cSsg|] }|j‘qSr")Ú YCoordinate)rBrþr"r"r#rE‚s)rqr(rùrûrrÿrr)r5r!rRZXCoordsZYCoordsrùrûr"r"r#r&~scsj|j}|j}xXdD]P\‰}t||ƒ s*t‚t|ˆƒr‡fd d „|Dƒ}t|j||ƒƒ}t|ˆ|ƒqWdS)NÚXAdvanceÚ XAdvDeviceÚYAdvanceÚ YAdvDeviceÚ XPlacementÚ XPlaDeviceÚ YPlacementÚ YPlaDevicecsg|]}t|ˆdƒ‘qS)r)r7)rBrþ)Únamer"r#rE•szmerge..©rr©rr©rr©rr )r r r r)rùrûrLr(rrÿrÔ)r5r!rRrùrûÚ tableNamerVrUr")r r#r&ˆs  c@seZdZdZddd„ZdS)Ú MutatorMergerzÂA merger that takes a variable font, and instantiates an instance. While there's no "merging" to be done per se, the operation can benefit from many operations that the aligning merger does.TcCstj||ƒ||_||_dS)N)rr$Ú instancerÚdeleteVariations)r!r rrr"r"r#r$¤s zMutatorMerger.__init__N)T)r'rerfrür$r"r"r"r#ržsrcCs€|djjƒ|_|jdkrdS|j}|j}|jr4|`|rp|jdksFt‚|jd>|j }t ||ƒ}|j |7_ |jr|d|_dS)Nréi€ér) r2rÁrqrÚ DeviceTablerÚ DeltaFormatr(Ú StartSizeÚEndSizerrý)r5r!rRrÚdevÚvaridxÚdeltar"r"r#r&©s  c CsÂ|djjƒ|_|jdkrdS|j}xŒdD]„}|d}t||ƒsBq*t||ƒ}|jr\t||ƒ|dkrfq*|jdkstt ‚|j d>|j }t ||ƒ}|d} t || t|| ƒ|ƒq*W|jr¾d|_dS) NrrZXYri€rrýr)r2rÁrqrrLr7rÚdelattrrr(rrrrÔ) r5r!rRrrCrrrrr-r"r"r#r&¿s(      c Csž|djjƒ|_|j}x‚dD]z\}}t||ƒs0qt||ƒ}|jrJt||ƒ|dkrTq|jd ksbt‚|j d >|j }t ||ƒ}t ||t||dƒ|ƒqWdS)Nrrrrrrrrr i€r©rr©rr©rr©rr )rrrr ) r2rÁrrLr7rrrr(rrrrÔ) r5r!rRrr rrrrr"r"r#r&Ýs"     cs0eZdZdZdd„Zdd„Z‡fdd„Z‡ZS)ÚVariationMergerzGA merger that takes multiple master fonts, and builds a variable font.cCs&tj||ƒtj|ƒ|_|j|ƒdS)N)rr$r ZOnlineVarStoreBuilderÚ store_builderÚsetModel)r!rùZaxisTagsr r"r"r#r$s  zVariationMerger.__init__cCs||_|jj|ƒdS)N)rùr"r#)r!rùr"r"r#r#szVariationMerger.setModelcsnd}d|krJt|ƒr,|dk r(t||d�‚dS|j}|j|ƒ\}}|j|ƒtt|ƒj||ƒ|rj|j|ƒdS)N)rG)r rrùZ getSubModelr#Úsuperr!rO)r!rQrRZ masterModelrù)rNr"r#rO s  zVariationMerger.mergeThings)r'rerfrür$r#rOÚ __classcell__r"r")rNr#r!üsr!cCs0t|ƒr|ddfS|j|ƒ\}}|tj|ƒfS)Nr)r Z storeMastersrÚbuildVarDevTable)r"Z master_valuesÚbaseZvarIdxr"r"r#r&s r&cCsF|jdkrt|dd�‚t|jdd„|Dƒƒ\|_}|rBd|_||_dS)Nrza baseline coordinate)r†cSsg|] }|j‘qSr")rý)rBrþr"r"r#rE$szmerge..r)rqrr&r"rýr)r5r!rRrr"r"r#r& s   cCsF|jdkrt|dd�‚t|jdd„|Dƒƒ\|_}|rBd|_||_dS)Nrza caret)r†cSsg|] }|j‘qSr")rý)rBrþr"r"r#rE-szmerge..r)rqrr&r"rýr)r5r!rRrr"r"r#r&)s   cCsl|jdkrt|dd�‚t|jdd„|Dƒƒ\|_}t|jdd„|Dƒƒ\|_}|sV|rhd|_||_||_dS)Nrz an anchor)r†cSsg|] }|j‘qSr")r)rBrþr"r"r#rE6szmerge..cSsg|] }|j‘qSr")r)rBrþr"r"r#rE7sr)rqrr&r"rrÚ XDeviceTableÚ YDeviceTable)r5r!rRr(r)r"r"r#r&2s  csZxTdD]L\‰}t|ˆƒrt|j‡fd d „|Dƒƒ\}}t|ˆ|ƒ|rt|||ƒqWdS)Nrrrrrrrr csg|]}t|ˆdƒ‘qS)r)r7)rBrþ)r r"r#rEFszmerge..©rr©rr©rr©rr )r*r+r,r-)rLr&r"rÔ)r5r!rRrrUZ deviceTabler")r r#r&=s   )NN)N)N)F)rÊrË)RrüròrÁÚoperatorrÚloggingZfontTools.miscrZfontTools.misc.roundToolsrZfontTools.ttLib.tablesrrrrZ#fontTools.ttLib.tables.DefaultTablerZfontTools.varLibrr r ZfontTools.varLib.modelsr r r rZfontTools.varLib.varStorerÚ functoolsrZfontTools.otlLib.builderrZfontTools.otlLib.optimize.gposrrrÚ getLoggerrôÚerrorsrrrrrrrrrÚobjectrrhr5ZGDEFr&ryr…r‰r•rsr‹r«rµr¼rÇrÉrŠrÙZ MarkBasePosZ MarkMarkPosrÛrÜrárâråZLookuprøZ CaretValuerÓr˜rr!r&Z BaseCoordr"r"r"r#Úsn          0 m ".'   D' R[