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øªjKèã@snddlmZddlmZmZmZmZddlmZddl m Z m Z m Z ddl mZddlmZddlmZddlmZdd lmZmZdd lmZmZdd lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-dd l.m/Z/ddl0Z0ddl1m2Z2ddl3Z3ddl4Z4ddl5Z5e3j6e7ƒZ8ddd„Z9ddd„Z:Gdd„de;ƒZDƒZ?dd„Z@dS)é)Ússtruct)ÚTagÚtostrÚ binary2numÚsafeEval)ÚFeatureLibError)ÚLookupDebugInfoÚLOOKUP_DEBUG_INFO_KEYÚLOOKUP_DEBUG_ENV_VAR)ÚParser)Ú FeatureFile)Úbuilder)Ú maxCtxFont)ÚnewTableÚgetTableModule)ÚotBaseÚotTables)ÚAlternateSubstBuilderÚChainContextPosBuilderÚChainContextSubstBuilderÚLigatureSubstBuilderÚMultipleSubstBuilderÚCursivePosBuilderÚMarkBasePosBuilderÚMarkLigPosBuilderÚMarkMarkPosBuilderÚReverseChainSingleSubstBuilderÚSingleSubstBuilderÚClassPairPosSubtableBuilderÚPairPosBuilderÚSinglePosBuilderÚChainContextualRule)ÚOpenTypeLibError)Ú defaultdictN)ÚStringIOFcCst||ƒ}|j||d�dS)aôAdd features from a file to a font. Note that this replaces any features currently present. Args: font (feaLib.ttLib.TTFont): The font object. featurefile: Either a path or file object (in which case we parse it into an AST), or a pre-parsed AST instance. tables: If passed, restrict the set of affected tables to those in the list. debug: Whether to add source debugging information to the font in the ``Debg`` table )ÚtablesÚdebugN)ÚBuilderÚbuild)ÚfontÚ featurefiler%r&r ©r+ú=/tmp/pip-build-_d5lkt3n/fonttools/fontTools/feaLib/builder.pyÚaddOpenTypeFeatures,s r-cCs*tt|ƒƒ}|r||_t||||d�dS)aeAdd features from a string to a font. Note that this replaces any features currently present. Args: font (feaLib.ttLib.TTFont): The font object. features: A string containing feature code. filename: The directory containing ``filename`` is used as the root of relative ``include()`` paths; if ``None`` is provided, the current directory is assumed. tables: If passed, restrict the set of affected tables to those in the list. debug: Whether to add source debugging information to the font in the ``Debg`` table )r%r&N)r$rÚnamer-)r)ÚfeaturesÚfilenamer%r&r*r+r+r,ÚaddOpenTypeFeaturesFromString>s r1c @s‚eZdZedd„d§DƒƒZd d„Zd¨dd„Zdd„Zdd„Zdd„Z dd„Z dd„Z dd„Z dd „Z d!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Zd?d@„ZdAdB„ZdCdD„ZdEdF„Z dGdH„Z!dIdJ„Z"dKdL„Z#dMdN„Z$dOdP„Z%dQdR„Z&dSdT„Z'dUdV„Z(dWdX„Z)dYdZ„Z*d[d\„Z+d]d^„Z,d_d`„Z-dadb„Z.dcdd„Z/dedf„Z0dgdh„Z1didj„Z2dkdl„Z3dmdn„Z4dodp„Z5dqdr„Z6dsdt„Z7dudv„Z8dwdx„Z9dydz„Z:d©d{d|„Z;d}d~„Zdƒd„„Z?d…d†„Z@d‡dˆ„ZAd‰dŠ„ZBd‹dŒ„ZCd�dŽ„ZDd�d�„ZEd‘d’„ZFd“d”„ZGd•d–„ZHd—d˜„ZId™dš„ZJd›dœ„ZKd�dž„ZLdŸd „ZMd¡d¢„ZNd£d¤„ZOd¥d¦„ZPdS)ªr'ccs|]}t|ƒVqdS)N)r)Ú.0Útagr+r+r,ú ZszBuilder.ÚBASEÚGDEFÚGPOSÚGSUBúOS/2ÚheadÚhhear.ÚvheaÚSTATcCs8||_t|tƒr |d|_|_nd||_|_|jƒ|_tƒ|_d|_ d|_ d|_ tƒ|_ d|_ i|_d|_d|_d|_g|_iidœ|_i|_i|_g|_d|_i|_tƒ|_i|_tƒ|_i|_i|_ttƒ|_ d|_!d|_"g|_#d|_$d|_%i|_&i|_'i|_(i|_)i|_*i|_+i|_,i|_-i|_.i|_/i|_0dS)NrF)r8r7)1r)Ú isinstancer Ú parseTreeÚfileZgetReverseGlyphMapÚglyphMapÚsetÚdefault_language_systems_Úscript_Ú lookupflag_Úlookupflag_markFilterSet_Úlanguage_systemsÚseen_non_DFLT_script_Únamed_lookups_Ú cur_lookup_Úcur_lookup_name_Úcur_feature_name_Úlookups_Úlookup_locationsÚ features_Úrequired_features_Úaalt_features_Úaalt_location_Úaalt_alternates_Ú featureNames_ÚfeatureNames_ids_Úcv_parameters_Úcv_parameters_ids_Úcv_num_named_params_r#ÚlistÚcv_characters_Úsize_parameters_Ú fontRevision_Únames_Úbase_horiz_axis_Úbase_vert_axis_Ú attachPoints_ÚligCaretCoords_ÚligCaretPoints_ÚglyphClassDefs_Ú markAttach_ÚmarkAttachClassID_ÚmarkFilterSets_Úos2_Úhhea_Úvhea_Ústat_)Úselfr)r*r+r+r,Ú__init__isX    zBuilder.__init__NFc sˆjdkrtˆjˆjƒjƒˆ_ˆjjˆƒ|dkr:ˆj}n4t|ƒ}|ˆj}|rndjt |ƒƒ}t d|›d�ƒ‚d|kr~ˆj ƒd|krŽˆj ƒd|kržˆj ƒd|kr®ˆjƒd|kr¾ˆjƒd |krΈjƒd |krÞˆjƒxvdD]n}||kròqäˆj|ƒ}|jjd k�s&|jjd k�s&|jjd k�r@t|ƒ}ˆj|<||_qä|ˆjkräˆj|=qäWt‡fd d„dDƒƒ�rŒd ˆjk�rŒtˆjƒˆjd _d|k�rĈjƒ}|�r°|ˆjd<ndˆjk�rĈjd=d|k�rüˆj ƒ} | �rè| ˆjd<ndˆjk�rüˆjd=|�st!j"j#t$ƒ�rˆj%ƒdS)Nz, z9The following tables were requested but are unsupported: Ú.r8r:r;r<r.zOS/2r=r7rc3s|]}|ˆjkVqdS)N)r))r2r3)rkr+r,r4Ñsz Builder.build..r6r5)r7r8)r7r8)&r?r r@rAÚparser(ÚsupportedTablesÚ frozensetÚjoinÚsortedÚNotImplementedErrorÚbuild_feature_aalt_Ú build_headÚ build_hheaÚ build_vheaÚ build_nameÚ build_OS_2Ú build_STATÚ makeTableÚ ScriptListÚ ScriptCountÚ FeatureListÚ FeatureCountÚ LookupListÚ LookupCountrr)ÚtableÚanyrÚ usMaxContextÚ buildGDEFÚ buildBASEÚosÚenvironÚgetr Ú buildDebg) rkr%r&Ú unsupportedZunsupported_stringr3r‚Z fontTableÚgdefÚbaser+)rkr,r(¦sh       $      z Builder.buildcCs,||j|ƒ}|j|_|j|_|jj|ƒ|S)N)r)rEÚ lookupflagrFÚ markFilterSetrMÚappend)rkÚlocationÚ builder_classÚresultr+r+r,Úget_chained_lookup_âs   zBuilder.get_chained_lookup_cCs6x0|jD]&\}}|||f}|jj|gƒj|ƒqWdS)N)rGrOÚ setdefaultr�)rkÚlookupZ feature_nameÚscriptÚlangÚkeyr+r+r,Úadd_lookup_to_feature_és zBuilder.add_lookup_to_feature_cCs¬|jr6t|jƒ|kr6|jj|jkr6|jj|jkr6|jS|jrL|jrLtd|ƒ‚||j|ƒ|_|j|j_|j|j_|j j |jƒ|jr�|j|j |j<|j r¦|j |j|j ƒ|jS)NzOWithin a named lookup block, all rules must be of the same lookup type and flag)rJÚtyperŽrEr�rFrKrr)rMr�rIrLrš)rkr‘r’r+r+r,Ú get_lookup_îs$   zBuilder.get_lookup_csšˆj rˆj rdSdd„ˆjjƒDƒ}x¼ˆjd gD]¬\}‰‡fdd„ˆjjƒDƒ}| rrˆdkrrtdˆ|ƒ‚xn|D]f\}}}}xX|D]P}t|tƒsž|g}x:|D]2}x,|jƒjƒD]\} } |j| t ƒƒj | ƒq¶Wq¤WqŠWqxWq6Wdd„|jƒDƒ} ‡fdd„|jƒDƒ} | �r"| �r"dSd d„ˆjjƒDƒˆ_ˆj } gˆ_ ˆj ˆj dƒ| �rjˆj|tƒ}| |_| �r‚ˆj|tƒ}| |_ˆjƒˆj j| ƒdS) NcSsi|]\}}t|ƒ|“qSr+)rB)r2ÚgÚar+r+r,ú sz/Builder.build_feature_aalt_..Úaaltcs*g|]"\\}}}}|ˆkr||||f‘qSr+r+)r2r—r˜ÚfeatureÚlookups)r.r+r,ú s z/Builder.build_feature_aalt_..zFeature %s has not been definedcSs*i|]"\}}t|ƒdkrt|ƒd|“qS)ér)ÚlenrY)r2ÚglyphÚreplr+r+r,rŸscs.i|]&\}}t|ƒdkrt|ˆjjd�|“qS)r¤)r™)r¥rrr)Z getGlyphID)r2r¦r§)rkr+r,rŸ$scSs*i|]"\\}}}}|dkr||||f“qS)r r+)r2r—r˜r¡r¢r+r+r,rŸ+s )Nr )rQrSÚitemsrOrr>rYZgetAlternateGlyphsr•rBÚupdaterMÚ start_featurerRrœrÚmappingrÚ alternatesÚ end_featureÚextend)rkr¬r‘r¡r—r˜r¢Ú lookuplistr–r¦ÚaltsZsingleZmultiZ old_lookupsZ single_lookupZ multi_lookupr+)r.rkr,rt sF     (     zBuilder.build_feature_aalt_cCs\|js dS|jjdƒ}|sPtdƒ}|jd<|jdd|jƒd|_d|_|_|j|_dS)Nr:óé6gð?lùe) r\r)r‰rÚ decompileÚ tableVersionÚcreatedÚmodifiedZ fontRevision)rkr‚r+r+r,ru<s  zBuilder.build_headcCs |js dS|jjdƒ}|sDtdƒ}|jd<|jdd|jƒd|_d|jkrZ|jd|_d|jkrp|jd|_d|jkr†|jd|_d|jkrœ|jd|_ dS) Nr;r±é$iZ caretoffsetZascenderZ descenderZlinegap) rhr)r‰rr³r´Z caretOffsetÚascentÚdescentÚlineGap)rkr‚r+r+r,rvGs        zBuilder.build_hheacCsŠ|js dS|jjdƒ}|sDtdƒ}|jd<|jdd|jƒd|_d|jkrZ|jd|_d|jkrp|jd|_d|jkr†|jd|_dS)Nr<r±r·iZverttypoascenderZverttypodescenderZverttypolinegap) rir)r‰rr³r´r¸r¹rº)rkr‚r+r+r,rwXs      zBuilder.build_vheacCs4dd„|jDƒ}xtddƒD]}||kr|SqWdS)NcSsg|] }|j‘qSr+)ÚnameID)r2r.r+r+r,r£isz,Builder.get_user_name_id..éiÿ)ÚnamesÚrange)rkr‚ZnameIDsZ user_name_idr+r+r,Úget_user_name_idgszBuilder.get_user_name_idcCs d}|dkrJtjƒ}|j\|_|_|_|_||jkrB|j||_nd|_nÒ||j kr†|js\n(||jksjt ‚tj ƒ}d|_ |j||_ n–||jk�rtjƒ}d|_|jj|dfdƒ|_|jj|dfdƒ|_|jj|dfdƒ|_|jj|dƒ|_|jj|dfdƒ|_t|j|ƒ|_|j||_|S)NÚsizerÚFeatUILabelNameIDÚFeatUITooltipTextNameIDÚSampleTextNameIDZParamUILabelNameID_0)rZFeatureParamsSizer[Ú DesignSizeÚ SubfamilyIDÚ RangeStartÚRangeEndrUZSubfamilyNameIDrTÚAssertionErrorZFeatureParamsStylisticSetÚVersionZUINameIDrVZFeatureParamsCharacterVariantsÚFormatrWr‰rÁrÂrÃrXZNumNamedParametersZFirstParamUILabelNameIDr¥rZZ CharCountZ Character)rkr3Úparamsr+r+r,ÚbuildFeatureParamsns:    zBuilder.buildFeatureParamsc Csú|js dS|jjdƒ}|s2tdƒ}|jd<g|_xÂ|jD]¸}|\}}}}}t|tƒsà|}||jkrœ||jkr�|j |ƒ|j|<|j|dk s�t ‚|j|}nD|d|j krà||j krÖ|j |ƒ|j |<|j |dk sÖt ‚|j |}|j |||||ƒq:WdS)Nr.r)r]r)r‰rr½r>ÚintrTrUr¿rÈrVrWÚsetName) rkr‚r.r»Ú platformIDÚ platEncIDÚlangIDÚstringr3r+r+r,rx™s*        zBuilder.build_namec CsŠ|js dS|jjdƒ}|sNtdƒ}|jd<dtjtdƒjƒ}|j||jƒd}d|jkrh|jd|_ d|jkr¶tdƒj ƒ}|jd\ |_ |_ |_ |_|_|_|_|_|_|_||_d|jkrÌ|jd|_d|jkrâ|jd|_d|jkrø|jd|_d |jk�r|jd |_d |jk�r(|jd |_d |jk�rLtd |jd d ƒ|_d |jk�rd|jd |_d|jk�r||jd|_d|jk�r˜|j|jdƒd|jk�rÄ|j |jdƒ}|\|_!|_"d}d|jk�rà|jd|_#d}d|jk�rü|jd|_$d}d|jk�r|jd|_%d}d|jk�r4|jd|_&d}dd„}t'||j(ƒ|_(|dk�r^||d#ƒ|dk�rr||d$ƒ|dk�r†||d%ƒdS)&NzOS/2r±rZfstypeÚpanoseZ typoascenderZ typodescenderZ typolinegapZ winascentZ windescentÚvendorz'''Z weightclassZ widthclassZ unicoderangeZ codepageranger¤ZxheightéZ capheightZ loweropsizeéZ upperopsizecSs(x"|D]}t||ƒst||dƒqWdS)Nr)ÚhasattrÚsetattr)r‚ÚattrsÚattrr+r+r,Ú checkattrïs  z%Builder.build_OS_2..checkattrÚulCodePageRange1ÚulCodePageRange2ÚsxHeightÚ sCapHeightÚ usDefaultCharÚ usBreakCharr„ÚusLowerOpticalPointSizeÚusUpperOpticalPointSize)rÜrÝ)rÞrßràrár„)rârã))rgr)r‰rrÚcalcsizerZ OS2_format_0r³ZfsTypeZPanoseZ bFamilyTypeZ bSerifStyleZbWeightZ bProportionZ bContrastZbStrokeVariationZ bArmStyleZ bLetterFormZbMidlineZbXHeightrÓZ sTypoAscenderZsTypoDescenderZ sTypoLineGapZ usWinAscentZ usWinDescentrZ achVendIDZ usWeightClassZ usWidthClassZsetUnicodeRangesÚbuild_codepages_rÜrÝrÞrßrârãÚmaxÚversion)rkr‚ÚdatarçrÓÚpagesrÛr+r+r,ry²s|     2                              zBuilder.build_OS_2cCs`x&dD]}||jkrt|›d�|ƒ‚qWt|tƒr>||jd<nt|tƒrT||jd<nt|ƒ‚dS)NÚElidedFallbackNameÚElidedFallbackNameIDz is already set.)rêrë)rjrr>rÍrYrÈ)rkÚvaluer‘Útokenr+r+r,ÚsetElidedFallbackNames       zBuilder.setElidedFallbackNamecCs„d|jkrg|jd<|jdd„|jdDƒkrBtd|j›d�|ƒ‚|jdd„|jdDƒkrptd|j›d�|ƒ‚|jdj|ƒdS) NÚ DesignAxescss|] }|jVqdS)N)r3)r2Úrr+r+r,r4sz(Builder.addDesignAxis..z$DesignAxis already defined for tag "z".css|] }|jVqdS)N)Ú axisOrder)r2rðr+r+r,r4sz+DesignAxis already defined for axis number rm)rjr3rrñr�)rkZ designAxisr‘r+r+r,Ú addDesignAxiss    zBuilder.addDesignAxiscCs’d|jkrg|jd<xh|jdD]Z}dd„|jDƒdd„|jDƒkr dd„|jDƒdd„|jDƒkr |j|jkr td|ƒ‚q W|jdj|ƒdS)NÚAxisValueRecordscSsh|] }|jƒ’qSr+)ÚasFea)r2Únr+r+r,ú +sz-Builder.addAxisValueRecord..cSsh|] }|jƒ’qSr+)rô)r2rõr+r+r,rö,scSsh|] }|jƒ’qSr+)rô)r2rõr+r+r,rö-scSsh|] }|jƒ’qSr+)rô)r2rõr+r+r,rö.sz8An AxisValueRecord with these values is already defined.)rjr½Ú locationsÚflagsrr�)rkZaxisValueRecordr‘Zrecord_r+r+r,ÚaddAxisValueRecord%s    zBuilder.addAxisValueRecordcsö|js dS|jjdƒ}|s$tddƒ‚|jjdƒ}i‰g}x|D]}gˆ|j<q>W|dk �rRxö|D]î}i}|jdkr||j|d<t|jƒdk�r&|jd}|j}t|ƒdkr¾|j|d|j dœƒt|ƒdkræ|j|d|d|j d œƒt|ƒd k�r|\} } } |j| | | |j d œƒˆ|jj |ƒq`|jd d „|jDƒ|j dœƒ|j |ƒq`W‡fdd„|Dƒ} |j jdƒ} | �sŽt dƒ} |j d<g| _ d|jk�rÈ|jd}| j |ƒ}|�sÞtd|›d�dƒ‚nd|jk�rÞ|jd}tj|j | ||d�dS)NrïzDesignAxes not definedrórrør¤)rìr.rÕ)rìZ linkedValuer.é)Z nominalValueZ rangeMinValueZ rangeMaxValuer.cSsi|]}|jd|j“qS)r)Úvaluesr3)r2Úir+r+r,rŸcsz&Builder.build_STAT..)r‘r.cs&g|]}|j|j|jˆ|jdœ‘qS))Zorderingr3r.rû)rñr3r½)r2rž)Ú axisValuesr+r,r£jsz&Builder.build_STAT..r.rëzElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerê)r÷ZelidedFallbackName)rjr‰rr3rør¥r÷rûr©r½r�r)rZ getDebugNameÚotlZbuildStatTable)rkZaxesZaxisValueRecordsZformat4_locationsr3ZavrZ valuesDictr‘rûZnominalZminValZmaxValZ designAxesZ nameTabler»r.r+)rýr,rz7sr                       zBuilder.build_STATc sÎddddddddd d d d d ddddddddddddddddddd œ‰‡fd!d"„|Dƒ}g}xdtdƒD]X}|jd#ƒxHt|d$|dd$ƒD].}||kr¨||d%7<qŠ||d&7<qŠWqdWd'd"„|DƒS)(Nrr¤rÕrúérÖéééééééééé0é1é2é3é4é5r²é7é8é9é:é;é<é=é>é?)iäiâiãiåiæiçièiéiêiji¤i¨iµi¶iQieibiai`i_i^i]i\iYiWiTiiáiÄiRiµcsg|]}|ˆkrˆ|‘qSr+r+)r2Úp)Ú pages2bitsr+r,r£®sz,Builder.build_codepages_..Úé Ú1Ú0cSsg|]}t|ddd…ƒ‘qS)Nr¤éÿÿÿÿ)r)r2rr+r+r,r£·s)r¾r�)rkréÚbitsrüÚjr+)rr,råŒsP zBuilder.build_codepages_cCsP|j r|j rdStjƒ}d|_|j|jƒ|_|j|jƒ|_tdƒ}||_ |S)Nir5) r^r_rr5rÉÚ buildBASEAxisZ HorizAxisZVertAxisrr‚)rkr�r“r+r+r,r†¹szBuilder.buildBASEcCs|sdS|\}}tjƒ}tjƒ|_||j_t|ƒ|j_tjƒ|_g|j_t|ƒ|j_x´t |ƒD]¨}tjƒ}|d|_ tj ƒ|_ d|j _ tj ƒ|j _ |j|dƒ|j j _g|j j _t|dƒ|j j _x4|dD](}tjƒ}d|_||_|j j jj|ƒqÌW|jjj|ƒq^W|S)Nrr¤rÕ)rZAxisZ BaseTagListZ BaselineTagr¥Z BaseTagCountZBaseScriptListZBaseScriptRecordZBaseScriptCountrrZ BaseScriptTagZ BaseScriptZBaseLangSysCountZ BaseValuesÚindexZ DefaultIndexZ BaseCoordZBaseCoordCountrÊZ Coordinater�)rkZaxisÚbasesÚscriptsr—ÚrecordÚcZcoordr+r+r,r!Ås4        zBuilder.buildBASEAxiscCs”tjƒ}|jƒ|_tj|j|jƒ|_tj |j |j |jƒ|_ |j ƒ|_|jƒ|_|jrXdnd|_t|j|j|j |j|jfƒrŒtdƒ}||_|SdSdS)Niir6)rr6ÚbuildGDEFGlyphClassDef_Ú GlyphClassDefrþZbuildAttachListr`rAZ AttachListZbuildLigCaretListrarbZ LigCaretListÚbuildGDEFMarkAttachClassDef_ÚMarkAttachClassDefÚbuildGDEFMarkGlyphSetsDef_ZMarkGlyphSetsDefrÉrƒrr‚)rkrŒr“r+r+r,r…ás$    zBuilder.buildGDEFcCsœ|jrdd„|jjƒDƒ}nbi}x|jD]}|j|jƒƒq(Wx>|jjjƒD].}x(|jD]}x|j ƒD] }d||<qfWqXWqLW|r”t j ƒ}||_ |SdSdS)NcSsi|]\}\}}||“qSr+r+)r2r�r&Ú_r+r+r,rŸüsz3Builder.buildGDEFGlyphClassDef_..rú) rcr¨rMr©ZinferGlyphClassesr?Z markClassesrûÚ definitionsÚglyphSetrr(Ú classDefs)rkÚclassesr–Ú markClassÚ markClassDefr¦r“r+r+r,r'ús  zBuilder.buildGDEFGlyphClassDef_cCs.dd„|jjƒDƒ}|sdStjƒ}||_|S)NcSsi|]\}\}}||“qSr+r+)r2r�r&r,r+r+r,rŸ sz8Builder.buildGDEFMarkAttachClassDef_..)rdr¨rr*r/)rkr/r“r+r+r,r) s z$Builder.buildGDEFMarkAttachClassDef_cCs@g}x,t|jjƒdd„d�D]\}}|j|ƒqWtj||jƒS)NcSs|dS)Nr¤r+)Úitemr+r+r,Úsz4Builder.buildGDEFMarkGlyphSetsDef_..)r™)rrrfr¨r�rþZbuildMarkGlyphSetsDefrA)rkZsetsÚglyphsÚid_r+r+r,r+s z"Builder.buildGDEFMarkGlyphSetsDef_cCs:d|jkr$tdƒ|jd<i|jd_|j|jdjt<dS)NZDebg)r)rrèrNr )rkr+r+r,rŠs  zBuilder.buildDebgcCsÐ|dkst|ƒ‚x|jD] }d|_qWg}xX|jD]N}|j|krBq2t|ƒ|_tt|jƒ|j|ƒdd�|j |t|jƒ<|j |ƒq2Wydd„|Dƒ}Wn4t k rÊ}zt t|ƒ|jƒ|‚WYdd}~XnX|S)Nr7r8)r‘r.r¡cSsg|] }|jƒ‘qSr+)r()r2Úlr+r+r,r£2sz)Builder.buildLookups_..)r7r8) rÈrMÚ lookup_indexr‚r¥rÚstrr‘Úget_lookup_name_rNr�r"r)rkr3r–r¢Z otLookupsÚer+r+r,Ú buildLookups_"s$     $zBuilder.buildLookups_c s$tt|dƒƒ}d|_tjƒ|_g|j_tjƒ|_g|j_tjƒ|_|j|ƒ|j_ i}i}i}dd„}�xrt |j j ƒ|d�D�]Z\}}|\} } } t dd„|Dƒƒ} |dko®| dk} t| ƒd krÄ| rÄqzxZ| D]R}y,|j|t|ƒj|d �|j|t|ƒ<WqÊtk �rtjd ƒYqÊXqÊW| | f}|j|ƒ}|dk�rœt|jjƒ}tjƒ}| |_tjƒ|_|j| ƒ|j_t| ƒ|j_t| ƒ|j_|jjj|ƒ|||<|j| iƒj| gƒj|ƒ|jj| | fƒ| krz||| | f<qzW�xt |j ƒƒD�]\} }tjƒ}| |_ tj!ƒ|_!d|j!_"g|j!_#x®t |j ƒƒD]ž\} }tj#ƒ}tj$ƒ|_$d|j$_%|j| | fƒ‰ˆdk�rnd |j$_&nˆ|j$_&‡fd d„|Dƒ|j$_'t|j$j'ƒ|j$_(| dk�r²|j$|j!_"n| |_)|j!j#j|ƒ�q*Wt|j!j#ƒ|j!_*|jjj|ƒ�qêWt|jjƒ|j_+t|jjƒ|j_(t|jj ƒ|j_|S)NicSs(|dd|dd|dd|dfS)NrrÕr¤r+)Úfr+r+r,r4Hsz#Builder.makeTable..)r™cSsg|]}|jdk r|j‘qS)N)r8)r2r7r+r+r,r£Osz%Builder.makeTable..r7rÀr)r¡zWfeaLib.Builder subclass needs upgrading to stash debug information. See fonttools#2065.iÿÿcsg|]}|ˆkr|‘qSr+r+)r2rü)Úreq_feature_indexr+r,r£„sÚdflt),ÚgetattrrrÉr|Z ScriptRecordr~Z FeatureRecordr€r<ZLookuprrrOr¨Útupler¥rNr9Ú_replaceÚKeyErrorÚwarningsÚwarnr‰Z FeatureTagÚFeaturerÌZ FeatureParamsrYZLookupListIndexr�r�r•rPZ ScriptTagZScriptZDefaultLangSysZ LangSysRecordZLangSysZ LookupOrderZReqFeatureIndexZ FeatureIndexrZ LangSysTagZ LangSysCountr})rkr3r‚Zfeature_indicesZrequired_feature_indicesr$ZsortFeatureTagr™r¢r—r˜Z feature_tagZlookup_indicesZ size_featureÚixZ feature_keyZ feature_indexZfrecZ lang_featuresZsrecZlangrecr+)r>r,r{7sˆ                   zBuilder.makeTablecCs(dd„|jjƒDƒ}||kr$||SdS)NcSsi|]\}}||“qSr+r+)r2ÚkÚvr+r+r,rŸ–sz,Builder.get_lookup_name_..)rIr¨)rkr–Úrevr+r+r,r:•szBuilder.get_lookup_name_cCs||dkr |dkr |jr td|ƒ‚|dkr:|jr@td|ƒ‚nd|_||f|jkrhtd|jƒ|jƒf|ƒ‚|jj||fƒdS)NÚDFLTr?z_If "languagesystem DFLT dflt" is present, it must be the first of the languagesystem statementszRlanguagesystems using the "DFLT" script tag must precede all other languagesystemsTz1"languagesystem %s %s" has already been specified)rCrrHÚstripÚadd)rkr‘r—Úlanguager+r+r,Úadd_language_system›s zBuilder.add_language_systemcCs|jrt|jƒStdhƒSdS)NrKr?)rKr?)rCrp)rkr+r+r,Úget_default_language_systems_´s z%Builder.get_default_language_systems_cCs:|jƒ|_d|_d|_||_d|_d|_|dkr6||_dS)NrKrr )rPrGrDrJrLrErFrR)rkr‘r.r+r+r,rª¿s zBuilder.start_featurecCs0|jdk st‚d|_d|_d|_d|_d|_dS)Nr)rLrÈrGrJrErF)rkr+r+r,r­És zBuilder.end_featurecCs\||jkrtd||ƒ‚|jdkr,td|ƒ‚||_d|j|<d|_|jdkrXd|_d|_dS)Nz$Lookup "%s" has already been definedr zpLookup blocks cannot be placed inside 'aalt' features; move it out, and then refer to it with a lookup statementr)rIrrLrKrJrErF)rkr‘r.r+r+r,Ústart_lookup_blockÑs     zBuilder.start_lookup_blockcCs4|jdk st‚d|_d|_|jdkr0d|_d|_dS)Nr)rKrÈrJrLrErF)rkr+r+r,Úend_lookup_blockãs  zBuilder.end_lookup_blockcCs<||jkst|ƒ‚d|_|j|}|dk r8|j||jƒdS)N)rIrÈrJršrL)rkÚ lookup_namer–r+r+r,Úadd_lookup_callës  zBuilder.add_lookup_callcCs ||_dS)N)r\)rkr‘Úrevisionr+r+r,Úset_font_revisionòszBuilder.set_font_revisioncCsüt|ƒdkst‚|jd kr*td|j|ƒ‚|jdkr>td|ƒ‚d|_|j||jf}|jj|dd|dfƒ}|dksx|r�|r�|dd…|j|<n g|j|<t|j|fgƒ|_ |rø|j|f}||j krìtd |j ƒ|jj ƒ|j |j ƒf|ƒ‚|j|j |<dS) Nrÿr rÀz7Language statements are not allowed within "feature %s"zCLanguage statements are not allowed within standalone lookup blocksrr?rÕzPLanguage %s (script %s) has already specified feature %s as its required feature)r rÀ) r¥rÈrLrrJrDrOr‰rprGrPrL)rkr‘rNÚinclude_defaultÚrequiredr™r¢r+r+r,Ú set_languageõs6     zBuilder.set_languagecCs‚t|ƒ}|jj|ƒ}|dk r |St|jƒd}||j|<xD|D]<}||jkrl|j|\}}td||f|ƒ‚||f|j|<q>W|S)Nr¤z=Glyph %s already has been assigned a MarkAttachmentType at %s)rprer‰r¥rdr)rkr‘r5r6r¦r,Úlocr+r+r,ÚgetMarkAttachClass_s    zBuilder.getMarkAttachClass_cCs8t|ƒ}|jj|ƒ}|dk r |St|jƒ}||j|<|S)N)rprfr‰r¥)rkr‘r5r6r+r+r,ÚgetMarkFilterSet_.s   zBuilder.getMarkFilterSet_cCsT|d@}|r$|j||ƒ}||d>B}|rD|j||ƒ}|dB}||_nd|_||_dS)Néÿrr)r[r\rFrE)rkr‘rìZ markAttachZ markFilterZmarkAttachClassr�r+r+r,Úset_lookup_flag7s   zBuilder.set_lookup_flagcCsp|jd krtd|j|ƒ‚|jdkr.td|ƒ‚|j|dfhkrBdSd|_||_d|_d|_|j|dddd �dS) Nr rÀz5Script statements are not allowed within "feature %s"zAScript statements are not allowed within standalone lookup blocksr?rTF)rWrX)r rÀ)rLrrGrJrDrErFrY)rkr‘r—r+r+r,Ú set_scriptDs   zBuilder.set_scriptcsBg}x8|D]0}|dk r0|j‡fdd„|Dƒƒq |jdƒq W|S)zÓHelper for building chain contextual substitutions Given a list of lookup names, finds the LookupBuilder for each name. If an input name is None, it gets mapped to a None LookupBuilder. Ncsg|]}ˆjj|jƒ‘qSr+)rIr‰r.)r2r7)rkr+r,r£csz1Builder.find_lookup_builders_..)r�)rkr¢Zlookup_buildersr¯r+)rkr,Úfind_lookup_builders_Ys zBuilder.find_lookup_builders_cCs(x"|D]}|jj|tƒƒj|ƒqWdS)N)r`r•rBr©)rkr‘r5Z contourPointsr¦r+r+r,Úadd_attach_pointsis zBuilder.add_attach_pointscCs,|j|tƒ}|jjt||||j|ƒƒƒdS)N)rœrÚrulesr�r!r`)rkr‘Úprefixr5Úsuffixr¢r–r+r+r,Úadd_chain_context_posms zBuilder.add_chain_context_poscCs,|j|tƒ}|jjt||||j|ƒƒƒdS)N)rœrrbr�r!r`)rkr‘rcr5rdr¢r–r+r+r,Úadd_chain_context_substus zBuilder.add_chain_context_substc Cs˜|jdkr(|jj|tƒƒ}|j|ƒdS|s0|rf|j|tƒ}|j|tƒ}|j j t ||hg||gƒƒn |j|tƒ}||j krŠt d||ƒ‚||j |<dS)Nr z)Already defined alternates for glyph "%s")rLrSr•rBr©rœrr”rrbr�r!r¬r) rkr‘rcr¦rdÚ replacementr°Úchainr–r+r+r,Úadd_alternate_subst}s       zBuilder.add_alternate_substcCs(|jdkrtd|ƒ‚|jj||fƒdS)Nr z9Feature references are only allowed inside "feature aalt")rLrrQr�)rkr‘Z featureNamer+r+r,Úadd_feature_referenceŽs zBuilder.add_feature_referencecCs|jj|ƒdS)N)rTrM)rkr3r+r+r,Úadd_featureName•szBuilder.add_featureNamecCs|jj|ƒdS)N)rVrM)rkr3r+r+r,Úadd_cv_parameter˜szBuilder.add_cv_parametercCs,||jkr|j|d7<n d|j|<dS)zbAdds new items to ``self.cv_num_named_params_`` or increments the count of existing items.r¤N)rX)rkr3r+r+r,Úadd_to_cv_num_named_params›s z"Builder.add_to_cv_num_named_paramscCs|j|j|ƒdS)N)rZr�)rkÚ characterr3r+r+r,Úadd_cv_character£szBuilder.add_cv_charactercCs|r||f|_n ||f|_dS)N)r_r^)rkr#r$Úverticalr+r+r,Ú set_base_axis¦s zBuilder.set_base_axisc CsZ|jdkrtd|j|ƒ‚||||g|_x,|jD]"\}}|||jf}|jj|gƒq0WdS)NrÀz9Parameters statements are not allowed within "feature %s")rLrr[rGrOr•) rkr‘rÄrÅrÆrÇr—r˜r™r+r+r,Úset_size_parameters¬s  zBuilder.set_size_parametersc Csp|s |s |r>|j|tƒ}|j|tƒ}|jjt||||gƒƒn |j|tƒ}x ttj |ŽƒD]} ||j | <qZWdS)N) rœrr”rrbr�r!rrÚ itertoolsÚproductÚ ligatures) rkr‘rcr5rdrgÚ forceChainrhr–r�r+r+r,Úadd_ligature_substºs    zBuilder.add_ligature_substc Cs®|s |s |rN|j|tƒ}|j|tƒ}||j|<|jjt||hg||gƒƒdS|j|tƒ} || jkr || j|kr’tj d|||rŠd|›�ndƒnt d||ƒ‚|| j|<dS)Nz@Removing duplicate multiple substitution from glyph "%s" to %s%sz at rz+Already defined substitution for glyph "%s") rœrr”rr«rbr�r!ÚlogÚinfor) rkr‘rcr¦rdÚ replacementsrvrhÚsubr–r+r+r,Úadd_multiple_substÌs"       zBuilder.add_multiple_substcCs"|j|tƒ}|jj|||fƒdS)N)rœrrbr�)rkr‘Z old_prefixZ old_suffixr«r–r+r+r,Úadd_reverse_chain_single_substås z&Builder.add_reverse_chain_single_substc CsÐ|jdkr>x.|jƒD]"\}}|jj|tƒƒ}|j|ƒqWdS|sJ|sJ|r^|j||||ƒdS|j|tƒ} x`|jƒD]T\}}|| j kr¾|| j |kr¦t j d|||ƒnt d|| j |f|ƒ‚|| j |<qtWdS)Nr zDRemoving duplicate single substitution from glyph "%s" to "%s" at %sz5Already defined rule for replacing glyph "%s" by "%s") rLr¨rSr•rBrMÚadd_single_subst_chained_rœrr«rxryr) rkr‘rcrdr«rvZ from_glyphZto_glyphr°r–r+r+r,Úadd_single_substés,    zBuilder.add_single_substcCsd|j|tƒ}|jt|jƒƒƒ}|dkr2|j|tƒ}|jj|ƒ|j j t |t |jƒƒg||gƒƒdS)N) rœrZfind_chainable_single_substrBÚkeysr”rr«r©rbr�r!rY)rkr‘rcrdr«rhr{r+r+r,r~s   z!Builder.add_single_subst_chained_cCs(|j|tƒ}|j||t|ƒt|ƒƒdS)N)rœrÚadd_attachmentÚmakeOpenTypeAnchor)rkr‘Z glyphclassZ entryAnchorZ exitAnchorr–r+r+r,Úadd_cursive_poss  zBuilder.add_cursive_posc CsŽxˆ|D]€\}}xv|jD]l}xf|jjƒD]X}||jkrPt|jƒ}|j|f|j|<q&|j|d} |j| kr&td|| |jf|ƒ‚q&WqWqWdS)z)Helper for add_mark_{base,liga,mark}_pos.rz&Glyph %s cannot be in both @%s and @%sN)r-r5r.Úmarksr‚Úanchorr.r) rkr‘Z lookupBuilderr„r,r1r2ÚmarkZ otMarkAnchorZexistingMarkClassr+r+r,Ú add_marks_s     zBuilder.add_marks_c CsZ|j|tƒ}|j|||ƒx:|D]2\}}t|ƒ}x |D]}||jj|iƒ|j<q6Wq WdS)N)rœrr‡r‚r#r•r.) rkr‘r#r„r Ú baseAnchorr1Ú otBaseAnchorr�r+r+r,Úadd_mark_base_pos*s   zBuilder.add_mark_base_posc Csv|j|tƒ}g}xH|D]@}i}|j|||ƒx|D]\}} t|ƒ|| j<q2W|j|ƒqWx|D]} ||j| <q`WdS)N)rœrr‡r‚r.r�ru) rkr‘ruÚ componentsr ZcomponentAnchorsr„ZanchorsZ ligAnchorr1r¦r+r+r,Úadd_mark_lig_pos2s   zBuilder.add_mark_lig_posc CsZ|j|tƒ}|j|||ƒx:|D]2\}}t|ƒ}x |D]}||jj|iƒ|j<q6Wq WdS)N)rœrr‡r‚Ú baseMarksr•r.) rkr‘r�r„r rˆr1r‰ZbaseMarkr+r+r,Úadd_mark_mark_pos>s   zBuilder.add_mark_mark_posc Cs:|j|tƒ}t|dd�}t|dd�}|j|||||ƒdS)NT)ÚpairPosContext)rœrÚmakeOpenTypeValueRecordZ addClassPair) rkr‘Z glyphclass1Úvalue1Z glyphclass2Úvalue2r–Úv1Úv2r+r+r,Úadd_class_pair_posHs   zBuilder.add_class_pair_poscCs|jj|ƒdS)N)rJÚadd_subtable_break)rkr‘r+r+r,r–NszBuilder.add_subtable_breakc Cs:|j|tƒ}t|dd�}t|dd�}|j|||||ƒdS)NT)r�)rœrr�Z addGlyphPair) rkr‘Zglyph1r‘Zglyph2r’r–r“r”r+r+r,Úadd_specific_pair_posQs   zBuilder.add_specific_pair_posc Cs¢|s |s |r|j||||ƒn€|j|tƒ}xr|D]j\}}t|dd�} xT|D]L} y|j|| | ƒWqJtk r”} ztt| ƒ| jƒ| ‚WYdd} ~ XqJXqJWq0WdS)NF)r�) Úadd_single_pos_chained_rœr r�Úadd_posr"rr9r‘) rkr‘rcrdÚposrvr–r5rìZ otValueRecordr¦r;r+r+r,Úadd_single_posWs    zBuilder.add_single_poscCsú|j|tƒ}g}x |jD]\}}}}|j|ƒqWg} x‚|D]z\} } | dkrX| jdƒq.) rœrrbr®r�r�Zfind_chainable_single_posr”r r™r¥rÈr!)rkr‘rcrdršrhÚtargetsr,r¢Úsubsr5rìZotValuer{r¦r+r+r,r˜ds(      zBuilder.add_single_pos_chained_cCsB|jj|dƒ\}}|r0||kr0td||f|ƒ‚||f|j|<dS)Nz0Glyph %s was assigned to a different class at %s)NN)rcr‰r)rkr‘r¦Z glyphClassZoldClassZ oldLocationr+r+r,ÚsetGlyphClass_|s zBuilder.setGlyphClass_cCstx|D]}|j||dƒqWx|D]}|j||dƒq"Wx|D]}|j||dƒq>Wx|D]}|j||dƒqZWdS)Nr¤rÕrúrÿ)rž)rkr‘Z baseGlyphsZligatureGlyphsZ markGlyphsZcomponentGlyphsr¦r+r+r,Úadd_glyphClassDef†s    zBuilder.add_glyphClassDefcCs&x |D]}||jkr||j|<qWdS)N)rb)rkr‘r5Úcaretsr¦r+r+r,Úadd_ligatureCaretByIndex_’s  z!Builder.add_ligatureCaretByIndex_cCs&x |D]}||jkr||j|<qWdS)N)ra)rkr‘r5r r¦r+r+r,Úadd_ligatureCaretByPos_—s  zBuilder.add_ligatureCaretByPos_cCs|jj|||||gƒdS)N)r]r�)rkr‘r»rÏrÐrÑrÒr+r+r,Úadd_name_recordœszBuilder.add_name_recordcCs||j|<dS)N)rg)rkr™rìr+r+r,Ú add_os2_fieldŸszBuilder.add_os2_fieldcCs||j|<dS)N)rh)rkr™rìr+r+r,Úadd_hhea_field¢szBuilder.add_hhea_fieldcCs||j|<dS)N)ri)rkr™rìr+r+r,Úadd_vhea_field¥szBuilder.add_vhea_field) r5r6r7r8r9r:r;r.r<r=)NF)F)QÚ__name__Ú __module__Ú __qualname__rprorlr(r”ršrœrtrurvrwr¿rÌrxryrîròrùrzrår†r!r…r'r)r+rŠr<r{r:rOrPrªr­rQrRrTrVrYr[r\r^r_r`rarerfrirjrkrlrmrorqrrrwr|r}rr~rƒr‡rŠrŒrŽr•r–r—r›r˜ržrŸr¡r¢r£r¤r¥r¦r+r+r+r,r'Ws° = <3 +TU- ^  '          r'cCs`|dkr dSd\}}|jdk r.tjt|jƒƒ}|jdk rHtjt|jƒƒ}tj|j|j|j||ƒS)zast.Anchor --> otTables.AnchorN)NN) Z xDeviceTablerþÚ buildDeviceÚdictZ yDeviceTableZ buildAnchorÚxÚyZ contourpoint)r…ZdeviceXZdeviceYr+r+r,r‚©s  r‚cCs<i|]4\}}}}|jdƒs||f|djƒ|dd…“qS)ZReservedrr¤N)Ú startswithÚlower)r2r,r.ÚisDevicer+r+r,rŸµs rŸcCs~|sdSi}xBtjƒD]6\}\}}t||dƒ}|r|rDtjt|ƒƒn|||<qW|rp| rp|jrhddinddi}tj|ƒ}|S)z&ast.ValueRecord --> otBase.ValueRecordNZYAdvancerZXAdvance)Ú_VALUEREC_ATTRSr¨r@rþrªr«rpZ buildValue)rIr�ZvrZastNameZotNamer°ÚvalZvalRecr+r+r,r�¼s   r�)NF)NNF)AZfontTools.miscrZfontTools.misc.textToolsrrrrZfontTools.feaLib.errorrZ fontTools.feaLib.lookupDebugInforr r ZfontTools.feaLib.parserr ZfontTools.feaLib.astr ZfontTools.otlLibr rþZfontTools.otlLib.maxContextCalcrZfontTools.ttLibrrZfontTools.ttLib.tablesrrZfontTools.otlLib.builderrrrrrrrrrrrrrr r!ZfontTools.otlLib.errorr"Ú collectionsr#rsÚior$ÚloggingrDr‡Ú getLoggerr§rxr-r1Úobjectr'r‚ZvalueRecordFormatr±r�r+r+r+r,ÚsF      D      \