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ã @srddlmZddlmZmZmZmZmZmZm Z m Z m Z m Z ddl mZddlmZmZddlmZddlmZddlmZddlmZdd lmZmZdd lmZdd lm Z d d l!m"Z"m#Z#m$Z$m%Z%e"Z&e#Z'dd„Z(dd„Z)dd„Z*dd„Z+d:Z,d!d"„Z-d#d$„Z.d%d&„Z/d'd(„Z0ed)d*ƒZ1d+d,„Z2d-d.„Z3d/d0„Z4d1d2„Z5Gd3d4„d4eƒZ6Gd5d6„d6e6ƒZ7Gd7d8„d8eƒZ8d9S);é)Ú namedtuple) Ú maxStackLimitÚ TopDictIndexÚ buildOrderÚtopDictOperatorsÚtopDictOperators2ÚprivateDictOperatorsÚprivateDictOperators2Ú FDArrayIndexÚFontDictÚ VarStoreData)ÚBytesIO)ÚspecializeCommandsÚcommandsToProgram)ÚnewTable)ÚvarLib)ÚallEqual)Ú roundFunc)Ú T2CharStringÚT2OutlineExtractor)ÚT2CharStringPen)Úpartialé)ÚVarLibCFFDictMergeErrorÚVarLibCFFPointTypeMergeErrorÚVarLibCFFHintTypeMergeErrorÚVarLibMergeErrorc CsŒ|d}dd„|jDƒ}tjj||ƒ}tjj||ƒ}|djjd}t|d�|_|j dj dkrˆ|j } x | D]} t | dƒrl|j| j _ qlWdS)NZfvarcSsg|] }|j‘qS©)ZaxisTag)Ú.0Zaxisrrú9/tmp/pip-build-_d5lkt3n/fonttools/fontTools/varLib/cff.pyú %sz"addCFFVarStore..ÚCFF2r)Z otVarStoreÚPrivate) ZaxesrÚbuilderZbuildVarRegionListZ buildVarStoreÚcffÚ topDictIndexr ZVarStoreÚFDArrayZvstoreÚhasattrr") ÚvarFontZvarModelÚ varDataListÚmasterSupportsZ fvarTableZaxisKeysZ varTupleListZ varStoreCFFVÚtopDictÚfdArrayÚfontDictrrrÚaddCFFVarStore#s   r.cCs^|jj}td|dƒ}|jj|_||_|d}t|dƒr>|j}nd}ttƒ}||_ ||_ t|dƒ�st ƒ}|_ d|_ |j|_||j_|j}|jrš||j_n||_tƒ} | jdƒ|j| ƒ|| _ttƒ} |dk �rØxDtD]<} | d} | | krØ| |jk�r|j| =t|| ƒrØt|| ƒqØWn¾|j }ttƒ} x®|D]¦} | jdƒxBt| jjƒƒD]0} | | j k�rL| j| =t| | ƒ�rLt| | ƒ�qLW| j}xJtD]B} | d} | | k�rŒ| |jk�r¶|j| =t|| ƒ�rŒt|| ƒ�qŒW�q.WxJtD]B} | d} | |k�rÞ| |jk�r|j| =t|| ƒ�rÞt|| ƒ�qÞWd|_tƒ} |j| |dd�| j dƒ|j!| |dd�dS)Nrr"r&Tré)ZisCFF2)"ÚotFontÚ getGlyphOrderrr%Úitemsr'r"rrÚorderÚcff2GetGlyphOrderr r&ÚstringsZ GlobalSubrsr,Ú CharStringsZcharStringsAreIndexedZcharStringsIndexr ZsetCFF2Úappendr rÚrawDictÚdelattrÚlistÚkeysrÚmajorr ÚcompileÚseekZ decompile)r$r0r4Z topDictDatar+Z privateDictZopOrderr,Z charStringsr-ZprivateOpOrderÚentryÚkeyÚfilerrrÚlib_convertCFFToCFF22s|                         rBcCs6|d}t|j|ƒtdƒ}|j|_||d<|d=dS)NzCFF r!)rBr$r)r(ZcffTableZnewCFF2rrrÚconvertCFFtoCFF2�s  rCcCst|tƒr|jƒrt|ƒS|S)N)Ú isinstanceÚfloatÚ is_integerÚint)ÚnumrrrÚ conv_to_int‹srIÚ BlueValuesÚ OtherBluesÚ FamilyBluesÚFamilyOtherBluesÚ BlueScaleÚ BlueShiftÚBlueFuzzÚStdHWÚStdVWÚ StemSnapHÚ StemSnapVcCs4||}||}||kr,||}||j}nd}|S)N)r")ÚregionFDArraysÚfd_indexÚriÚfd_mapZregion_fdArrayZ region_fd_mapZregion_fdIndexÚprivaterrrÚ get_private—s rZcsÜ|d}|dd…}t|ddƒr2dd„|Dƒ}ndd„|Dƒ}�x”t|jƒD�]„\}}|j} t| ddƒ} || \} } g} x0| jdd…D]}|jj|ƒd}| j|ƒqŠW| g}| }x6| D].}t||||ƒ}|dkrÜ|}n|}|j|ƒq¼Wt |ƒ}�xÚ| j j ƒD�]Ê\‰}g}ˆt k�r �qt |tƒ�r$y‡fd d„|Dƒ}Wn*tk �rltd jˆd �ƒ�wYnXy t|Ž}Wn"tk �rœtˆ||ƒ‚YnXdg|‰d }x`|D]X}‡fd d„t|ƒDƒ}| �rät|ƒ �räd}|‰| j|ƒ}|d|d<|j|ƒ�q²W|�sTdd„|Dƒ}n0‡fdd„|Dƒ}t|ƒ�sL| j|ƒ}n|d}t |tƒ�r¼xbt|ƒD]L\}}t |tƒ�r¨x4t|ƒD]\}}t|ƒ|||<�qˆWn t|ƒ||<�qjWnt|ƒ}|| j ˆ<�qWqNWdS)ab I step through the FontDicts in the FDArray of the varfont TopDict. For each varfont FontDict: step through each key in FontDict.Private. For each key, step through each relevant source font Private dict, and build a list of values to blend. The 'relevant' source fonts are selected by first getting the right submodel using vsindex_dict[vsindex]. The indices of the subModel.locations are mapped to source font list indices by assuming the latter order is the same as the order of the var_model.locations. I can then get the index of each subModel location in the list of var_model.locations. rrNr&cSsg|] }|j‘qSr)r&)rÚ fdTopDictrrrr ´sz&merge_PrivateDicts..cSsg|] }|g‘qSrr)rr[rrrr ¶sÚvsindexcsg|]}|jˆ‘qSr)r8)rÚpd)r@rrr Ôsz\Warning: {key} in default font Private dict is missing from another font, and was discarded.)r@Fcsg|]\}}|ˆ|‘qSrr)rÚiÚval)Ú prev_val_listrrr ïsTcSsg|] }|d‘qS)rr)rÚdatarrrr üscsg|]}|jˆ‘qSr)r8)rr])r@rrr þs)r'Ú enumerater&r"ÚgetattrÚ locationsÚindexr7rZÚlenr8r2Úpd_blend_fieldsrDr:ÚKeyErrorÚprintÚformatÚzipÚ IndexErrorrrÚ getDeltasrI)Ú top_dictsÚ vsindex_dictÚ var_modelrXr+Zregion_top_dictsrUrVZ font_dictZ private_dictr\Z sub_modelÚ_Zmaster_indicesÚlocr^ZpdsZlast_pdrWr]Ú num_mastersÚvalueZdataListÚvaluesZany_points_differZval_listÚrel_listÚdeltasÚitemÚjZjtemr)r@r`rÚmerge_PrivateDicts¢s~                   rzcCsd|kr|dS|dS)NzCFF r!r)ÚfontrrrÚ _cff_or_cff2sr|cCs.i}|d}|dd…}t|ƒ}t|ƒjjd}t|dƒsTdd„t|ƒDƒ|d<|Si}|j}|jƒ} x0t|ƒD]$\} } | || | <| |krpi|| <qpWx�t|ƒD]„\} } | jƒ}t| ƒjjd}t|dƒsæ||d}d||| <q¢|j}x8t|ƒD],\} } ||| }||}| |krö| || <qöWq¢W|S)aÆ Since a subset source font may have fewer FontDicts in their FDArray than the default font, we have to match up the FontDicts in the different fonts . We do this with the FDSelect array, and by assuming that the same glyph will reference matching FontDicts in each source font. We return a mapping from fdIndex in the default font to a dictionary which maps each master list index of each region font to the equivalent fdIndex in the region font.rrNÚFDSelectcSsi|] }d|“qS)rr)rrWrrrú (szgetfd_map..) rfr|r$r%r'Úranger}r1rb)r(Z fonts_listrXZ default_fontZ region_fontsZ num_regionsr+Z gname_mappingZdefault_fdSelectÚ glyphOrderÚgidZfdIndexrWZ region_fontZregion_glyphOrderZregion_topDictZdefault_fdIndexZregion_fdSelectZ region_maprrrÚ getfd_maps8       r‚ÚCVarDataz'varDataList masterSupports vsindex_dictc Cst|djjd}|gdd„|dd…Dƒ}t|jƒ}t||||ƒ}t||ƒ}t||j||ƒt|||j |j ƒdS)Nr!rcSsg|]}t|ƒjjd‘qS)r)r|r$r%)rZttFontrrrr Gsz&merge_region_fonts..r) r$r%rfÚmappingÚmerge_charstringsr‚rzror.r)r*) r(ÚmodelZordered_fonts_listr€r+rnrsÚcvDatarXrrrÚmerge_region_fontsDs   rˆcCs||kr dS||S)Nr)Z charstringsÚ glyphNamerrrÚ_get_csRsrŠc Cszg}x8|jdd…D]&}||kr*|j|ƒ|j|j|ƒƒqWtjj|ddƒ}t|ƒ} | ||<||gf|| <|j|ƒ| S)NrF)Zsupportsr7rerr#Z buildVarDatarf) r†r@r*roÚvsindex_by_keyr)ZvarTupleIndexesZsupportZvar_datar\rrrÚ_add_new_vsindexWs  rŒcsši}i}g}g}|dj}�xJt|ƒD�]<\} ‰‡fdd„|Dƒ} tdd„| DƒƒdkrZq&|j| ƒ\} } | d} tgˆ|dƒ}t| _| j|ƒ| dd…}x2t|dd�D]"\}}|j|ƒt|_|j|ƒq¨W|j | j | j | dd�}||ˆ<|j püd |j k�rq&td d „| Dƒƒ}y ||}Wn(tk �rHt| |||||ƒ}YnX|dkr&|d g|j dd…<q&W|�sˆd|}t||||||ƒt|||d �}|S)Nrcsg|]}t|jˆƒ‘qSr)rŠr6)rÚtd)Úgnamerrr nsz%merge_charstrings..cSsg|]}|dk r|‘qS)Nr)rZgsrrrr psr)ÚstartT)rYÚ globalSubrsrpÚoptimizeZblendcss|]}|dk VqdS)Nr)rÚvrrrú ”sz$merge_charstrings..r\)r)r*ro)T)r6rbrfZ getSubModelÚCFF2CharStringMergePenÚMergeOutlineExtractorZoutlineExtractorZdrawÚrestartÚ getCharStringrYr�Ú seen_movetoÚprogramÚtuplerhrŒrƒ)r€rsrnZ masterModelror‹r)r*Zdefault_charstringsr�Zall_csr†Zmodel_csZdefault_charstringZvar_penZ region_csÚ region_idxZregion_charstringZnew_csr@r\r‡r)rŽrr…esT         r…c@seZdZdZddd„ZdS)ÚCFFToCFF2OutlineExtractorz� This class is used to remove the initial width from the CFF charstring without trying to add the width to self.nominalWidthX, which is None. rcCs<|jƒ}|js8|t|ƒdAr*|dd…}|j|_d|_|S)Nr/r)ZpopallZgotWidthrfÚ defaultWidthXÚwidth)ÚselfZevenOddÚargsrrrÚ popallWidth±s z%CFFToCFF2OutlineExtractor.popallWidthN)r)Ú__name__Ú __module__Ú __qualname__Ú__doc__r¡rrrrrœ­srœcsjeZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z ‡ZS)r•z­ Used to extract the charstring commands - including hints - from a CFF charstring in order to merge it as another set of region data into a CFF2 variable font charstring.Ncstƒj||||||ƒdS)N)ÚsuperÚ__init__)rŸÚpenZ localSubrsr�Z nominalWidthXr�rY)Ú __class__rrr§Às zMergeOutlineExtractor.__init__cCs |jƒ}|jt|ƒd|_|S)Nr/)r¡Ú hintCountrf)rŸr rrrÚ countHintsÅsz MergeOutlineExtractor.countHintscCs|jj||ƒdS)N)r¨Úadd_hint)rŸÚtyper rrrÚ_hint_opÊszMergeOutlineExtractor._hint_opcCs|jƒ}|jd|ƒdS)NZhstem)r«r®)rŸrer rrrÚop_hstemÍszMergeOutlineExtractor.op_hstemcCs|jƒ}|jd|ƒdS)NZvstem)r«r®)rŸrer rrrÚop_vstemÑszMergeOutlineExtractor.op_vstemcCs|jƒ}|jd|ƒdS)NZhstemhm)r«r®)rŸrer rrrÚ op_hstemhmÕsz MergeOutlineExtractor.op_hstemhmcCs|jƒ}|jd|ƒdS)NÚvstemhm)r«r®)rŸrer rrrÚ op_vstemhmÙsz MergeOutlineExtractor.op_vstemhmcCsN|js.|jƒ}|r|jd|ƒ|jdd|_|jdj||jƒ\}}||fS)Nr²ééréÿÿÿÿ)Ú hintMaskBytesr«r®rªZ callingStackZgetBytes)rŸrer r·rrrÚ _get_hintmaskÝs   z#MergeOutlineExtractor._get_hintmaskcCs&|j|ƒ\}}|jjd|gƒ||fS)NÚhintmask)r¸r¨Ú add_hintmask)rŸrer·rrrÚ op_hintmaskçsz!MergeOutlineExtractor.op_hintmaskcCs&|j|ƒ\}}|jjd|gƒ||fS)NÚcntrmask)r¸r¨rº)rŸrer·rrrÚ op_cntrmaskìsz!MergeOutlineExtractor.op_cntrmask)N)r¢r£r¤r¥r§r«r®r¯r°r±r³r¸r»r½Ú __classcell__rr)r©rr•»s r•cs„eZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zd dd„Z‡ZS)!r”z"Pen to merge Type 2 CharStrings. çà?csPtƒjddd|d�d|_||_||_||_d|_d|_||_t |t d�|_ dS)NT)ržZglyphSetr!ÚroundTolerancerF)Úround) r¦r§Úpt_indexÚ _commandsÚm_indexrsÚ prev_move_idxr˜r‰rrÁ)rŸZdefault_commandsr‰rsZ master_idxrÀ)r©rrr§õszCFF2CharStringMergePen.__init__cCsv|jdkr|jj||ggƒnF|j|j}|d|krVt||jt|dƒ|d|jƒ‚|dj|ƒ|jd7_dS)Nrr)rÄrÃr7rÂrrfr‰)rŸZ point_typeÚ pt_coordsÚcmdrrrÚ add_points   z CFF2CharStringMergePen.add_pointcCsv|jdkr|jj||ggƒnF|j|j}|d|krVt||jt|dƒ|d|jƒ‚|dj|ƒ|jd7_dS)Nrr)rÄrÃr7rÂrrfr‰)rŸÚ hint_typer rÇrrrr¬s   zCFF2CharStringMergePen.add_hintcCs |jdkr.|jj|ggƒ|jjd|ggƒn`|j|j}|d|krft||jt|dƒ|d|jƒ‚|jd7_|j|j}|dj|ƒ|jd7_dS)NrÚr)rÄrÃr7rÂrrfr‰)rŸrÉZabs_argsrÇrrrrºs    z#CFF2CharStringMergePen.add_hintmaskcCs2|js d|_|j|ƒ}|jd|ƒ|jd|_dS)NTZrmovetor)r˜Ú_prÈrÂrÅ)rŸÚptrÆrrrÚ_moveTo/s   zCFF2CharStringMergePen._moveTocCs|j|ƒ}|jd|ƒdS)NZrlineto)rËrÈ)rŸrÌrÆrrrÚ_lineTo8s zCFF2CharStringMergePen._lineTocCs.|j}||ƒ||ƒ||ƒ}|jd|ƒdS)NZ rrcurveto)rËrÈ)rŸZpt1Zpt2Zpt3rËrÆrrrÚ _curveToOne<sz"CFF2CharStringMergePen._curveToOnecCsdS)Nr)rŸrrrÚ _closePathAsz!CFF2CharStringMergePen._closePathcCsdS)Nr)rŸrrrÚ_endPathDszCFF2CharStringMergePen._endPathcCsd|_||_d|_dS)Nr)rr)rÂrÄZ_p0)rŸr›rrrr–GszCFF2CharStringMergePen.restartcCs|jS)N)rÃ)rŸrrrÚ getCommandsLsz"CFF2CharStringMergePen.getCommandsc Csæx(|D] }|d}t|Ž}t|ƒ|d<qWd}x²|D]ª}|d}|dkrxt|dƒ}t|ƒsdtdƒ‚|ddg|d<nb|d} g} xL| D]D}t|ƒr¦| j|dƒqŠ||ƒdd…} |dg| }| j|ƒqŠW| |d<|}q4W|S)aý We first re-order the master coordinate values. For a moveto to lineto, the args are now arranged as: [ [master_0 x,y], [master_1 x,y], [master_2 x,y] ] We re-arrange this to [ [master_0 x, master_1 x, master_2 x], [master_0 y, master_1 y, master_2 y] ] If the master values are all the same, we collapse the list to as single value instead of a list. We then convert this to: [ [master_0 x] + [x delta tuple] + [numBlends=1] [master_0 y] + [y delta tuple] + [numBlends=1] ] rNrr¹r¼z3Hintmask values cannot differ between source fonts.)r¹r¼)rkr:rrr7) rŸÚcommandsZget_delta_funcrÇr Zm_argsZlastOpÚopZcoordZcoordsZ new_coordsrwrrrÚreorder_blend_argsOs.    z)CFF2CharStringMergePen.reorder_blend_argsNTcCsJ|j}|j|t|j|jd�ƒ}|r0t|dtd�}t|ƒ}t|||d�}|S)N)rÁF)ZgeneralizeFirstZmaxstack)r™rYr�) rÃrÕrrmrÁrrrr)rŸrYr�rpr‘rÓr™Z charStringrrrr—€sz$CFF2CharStringMergePen.getCharString)r¿)NNNT)r¢r£r¤r¥r§rÈr¬rºrÍrÎrÏrÐrÑr–rÒrÕr—r¾rr)r©rr”òs   2r”N) rJrKrLrMrNrOrPrQrRrSrT)9Ú collectionsrZfontTools.cffLibrrrrrrr r r r Úior ZfontTools.cffLib.specializerrrZfontTools.ttLibrZ fontToolsrZfontTools.varLib.modelsrZfontTools.misc.roundToolsrZfontTools.misc.psCharStringsrrZfontTools.pens.t2CharStringPenrÚ functoolsrÚerrorsrrrrZMergeDictErrorZMergeTypeErrorr.rBrCrIrgrZrzr|r‚rƒrˆrŠrŒr…rœr•r”rrrrÚsB 0       O  p+ H7