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ïeã @s’dZddlZddlmZddlZddlZddlmZddl m Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Z d2d3„Z!d4d5„Z"d6d7„Z#d8d9„Z$d:d;„Z%dd?„Z'd@dA„Z(dBdC„Z)dDdE„Z*dFdG„Z+djdHdI„Z,e-e.e/fdJfe.e/fdJfe.e/fdJfe0dJfe0dJfe0dJfdK�Z1dLdM„Z2dkdNdO„Z3e-e.e/fdJfe.e/fdJfe0dJfe0dJfe0dJfdP�Z4dQdR„Z5dSdT„Z6dUdV„Z7dWZ8e-e0dXfe.e/fdJfe.e/fdJfe.e/fdJfe.e/fdJfe.e/fdJfe.e/fdJfe0dJfdY�Z9dZd[„Z:dld\d]„Z;d^d_„ZddZ?dedf„Z@dgdh„ZAeBdik�rŽddlCZCeCjDƒdS)mz"Various low level data validators.éN)Úopen)ÚMapping)Ú numberTypescCs.t|tƒrdSxdD]}t||ƒsdSqWdS)zY Some objects will likely come in that aren't dicts but are dict-ish enough. TÚkeysÚvaluesÚitemsF)rrr)Ú isinstancerÚhasattr)ÚvalueÚattr©r ú@/tmp/pip-build-_d5lkt3n/fonttools/fontTools/ufoLib/validators.pyÚ isDictEnoughs    rcCs t||ƒS)z" Generic. (Added at version 2.) )r)r Útypr r r ÚgenericTypeValidatorsrcCsNt|ttfƒsdSt|ƒ}t|ƒ}||r.dSx|D]}t|tƒs4dSq4WdS)z" Generic. (Added at version 2.) FT)rÚlistÚtupleÚsetÚint)rÚ validValuesZ valuesSetZvalidValuesSetr r r r ÚgenericIntListValidator"s  rcCst|tƒsdS|dkrdSdS)z" Generic. (Added at version 3.) FrT)rr)r r r r ÚgenericNonNegativeIntValidator1s  rcCst|tƒsdS|dkrdSdS)z" Generic. (Added at version 3.) FrT)rr)r r r r Ú!genericNonNegativeNumberValidator;s  rcCsœt|tƒsdSx*|jƒD]\}\}}|s*q||krdSqWx|jƒD]}||krDdSqDWx>|jƒD]2\}}||\}}|dkr†| r†qbt||ƒsbdSqbWdS)z" Generic. (Added at version 3.) FNT)rrrr)r Z prototypeÚkeyrÚrequiredÚvZ prototypeTyper r r ÚgenericDictValidatorEs"   rcCsddddg}||kS)z Version 2+. ZregularZitalicZboldz bold italicr )r Úoptionsr r r Ú"fontInfoStyleMapStyleNameValidatores rc Cs®t|tƒsdSt|ƒdkrdSddddg}ttdftdfd�}g}xV|D]N}t||ƒsZdS|d}|d }t|ƒ}|szdSt||ƒ}|sŒdS|j|ƒqHW|t |ƒkrªdSdS) z Version 3+. FrTééé)Ú rangeMaxPPEMÚrangeGaspBehaviorr"r#) rrÚlenÚdictrrrrÚappendÚsorted) r ZvalidBehaviorsÚ dictPrototypeZ ppemOrderZ rangeRecordZppemZbehaviorZ ppemValidityZbehaviorValidityr r r Ú)fontInfoOpenTypeGaspRangeRecordsValidatorls,       r)c CsÖt|tƒsdSt|ƒdksdS|jdƒdkr0dS|jdƒ\}}|jdƒdkrPdS|jdƒdkrbdS|jdƒ\}}}t|ƒdkr‚dSt|ƒdkr’dSt|ƒdkr¢dSyt|ƒ}t|ƒ}t|ƒ}Wntk rÒdSX|dksä|d krèdStj||ƒd}|dk�s ||k�rdS|jdƒ\}}} t|ƒdk�r2dSt|ƒdk�rDdSt| ƒdk�rVdSyt|ƒ}t|ƒ}t| ƒ} Wntk �rˆdSX|d k�sž|d k�r¢dS|d k�s¶|d k�rºdS| d k�sÎ| d k�rÒdSd S)z Version 2+. Féú rú/r ú:éé réé;T) rÚstrr$ÚcountÚsplitrÚ ValueErrorÚcalendarÚ monthrange) r ÚdateÚtimeÚyearÚmonthÚdayZ monthMaxDayÚhourÚminuteÚsecondr r r Ú$fontInfoOpenTypeHeadCreatedValidator‡sb       r@cCsTt|tƒsdSttdftdftdftdftdfd�}x|D]}t||ƒs:dSq:WdS)z Version 3+. FT)ZnameIDZ platformIDZ encodingIDZ languageIDÚstring)rrr%rr2r)r r(Z nameRecordr r r Ú$fontInfoOpenTypeNameRecordsValidatorÂs &  rBcCst|tƒsdS|dkrdSdS)z Version 2+. FrT)rr)r r r r Ú'fontInfoOpenTypeOS2WeightClassValidatorÎs  rCcCs*t|tƒsdS|dkrdS|dkr&dSdS)z Version 2+. Fré T)rr)r r r r Ú&fontInfoOpenTypeOS2WidthClassValidatorØs rEcCsBt|ttfƒsdSt|ƒdkr"dSx|D]}t|tƒs(dSq(WdS)z Version 2. Fé T)rrrr$r)rr r r r Ú*fontInfoVersion2OpenTypeOS2PanoseValidatoräs   rGcCsNt|ttfƒsdSt|ƒdkr"dSx&|D]}t|tƒs:dS|dkr(dSq(WdS)z Version 3+. FrFrT)rrrr$r)rr r r r Ú*fontInfoVersion3OpenTypeOS2PanoseValidatoròs   rHcCsrt|ttfƒsdSt|ƒdkr"dSx|D]}t|tƒs(dSq(W|\}}|dksV|dkrZdS|dksj|dkrndSdS)z Version 2+. Fr rééT)rrrr$r)rr ZclassIDZ subclassIDr r r Ú'fontInfoOpenTypeOS2FamilyClassValidators   rKcCsRt|ttfƒsdSt|ƒdkr"dSt|ƒdr2dSx|D]}t|tƒs8dSq8WdS)z Version 2+. FrIr T)rrrr$r)rr r r r Ú fontInfoPostscriptBluesValidators    rLcCsRt|ttfƒsdSt|ƒdkr"dSt|ƒdr2dSx|D]}t|tƒs8dSq8WdS)z Version 2+. FrFr T)rrrr$r)rr r r r Ú%fontInfoPostscriptOtherBluesValidator#s    rMcCsBt|ttfƒsdSt|ƒdkr"dSx|D]}t|tƒs(dSq(WdS)z Version 2+. Fr/T)rrrr$r)rr r r r Ú fontInfoPostscriptStemsValidator2s   rNcCsttddƒƒ}||krdSdS)z Version 2+. réFT)rÚrange)r rr r r Ú.fontInfoPostscriptWindowsCharacterSetValidator?srQcCs ttdfd�}t||ƒsdSdS)z Version 3+. T)ÚidF)r%r2r)r r(r r r Ú%fontInfoWOFFMetadataUniqueIDValidatorHs rScCsJtdftdftdftdfdœ}t||ƒs,dSd|krF|jdƒdkrFdSdS)z Version 3+. TF)ÚnameÚurlÚdirÚclassrVÚltrÚrtl)rXrY)r2rÚget)r r(r r r Ú#fontInfoWOFFMetadataVendorValidatorQs  r[cCsŽttdfd�}t||ƒsdSt|dƒs,dStdftdftdftdftdfdœ}x8|dD],}t||ƒsldSd|krZ|jdƒd krZdSqZWdS) z Version 3+. T)ÚcreditsFr\)rTrUÚrolerVrWrVrXrY)rXrY)r%rrr$r2rZ)r r(Zcreditr r r Ú$fontInfoWOFFMetadataCreditsValidator\s  $ r^cCsDttdftdfd�}t||ƒs"dSx|dD]}t|ƒs,dSq,WdS)z Version 3+. FT)rUÚtextr_)r%r2rrÚfontInfoWOFFMetadataTextValue)r r(r_r r r Ú(fontInfoWOFFMetadataDescriptionValidatorms racCsRttdftdftdfd�}t||ƒs(dSd|krNx|dD]}t|ƒs:dSq:WdS)z Version 3+. F)rUr_rRr_T)r%r2rrr`)r r(r_r r r Ú$fontInfoWOFFMetadataLicenseValidatorys rbcCs>ttdfd�}t||ƒsdSx|dD]}t|ƒs&dSq&WdS)z Version 3+. T)r_Fr_)r%rrr`)r r(r_r r r Ú&fontInfoWOFFMetadataTrademarkValidator†s rccCs>ttdfd�}t||ƒsdSx|dD]}t|ƒs&dSq&WdS)z Version 3+. T)r_Fr_)r%rrr`)r r(r_r r r Ú&fontInfoWOFFMetadataCopyrightValidator’s rdcCsDtdftdftdfdœ}t||ƒs&dSd|kr@|jdƒdkr@dSdS)z Version 3+. TF)rTrVrWrVrXrY)rXrY)r2rrZ)r r(r r r Ú%fontInfoWOFFMetadataLicenseeValidatoržs  recCsJtdftdftdftdfdœ}t||ƒs,dSd|krF|jdƒdkrFdSdS)z Version 3+. TF)r_ÚlanguagerVrWrVrXrY)rXrY)r2rrZ)r r(r r r r`©s  r`cCs4t|tƒsdS|sdSx|D]}t|ƒsdSqWdS)z Version 3+. FT)rrÚ&fontInfoWOFFMetadataExtensionValidator)r Ú extensionr r r Ú'fontInfoWOFFMetadataExtensionsValidator´s  ricCspttdftdftdfd�}t||ƒs(dSd|krNx|dD]}t|ƒs:dSq:Wx|dD]}t|ƒsXdSqXWdS)z Version 3+. FT)ÚnamesrrRrjr)r%rr2rÚ*fontInfoWOFFMetadataExtensionNameValidatorÚ*fontInfoWOFFMetadataExtensionItemValidator)r r(rTÚitemr r r rgÁs rgcCshttdftdftdfd�}t||ƒs(dSx|dD]}t|ƒs2dSq2Wx|dD]}t|ƒsPdSqPWdS)z Version 3+. FT)rRrjrrjr)r%r2rrrkÚ+fontInfoWOFFMetadataExtensionValueValidator)r r(rTÚvalr r r rlÑs rlcCsJtdftdftdftdfdœ}t||ƒs,dSd|krF|jdƒdkrFdSdS)z Version 3+. TF)r_rfrVrWrVrXrY)rXrY)r2rrZ)r r(r r r rkàs  rkcCsJtdftdftdftdfdœ}t||ƒs,dSd|krF|jdƒdkrFdSdS)z Version 3+. TF)r_rfrVrWrVrXrY)rXrY)r2rrZ)r r(r r r rnës  rncCsbt|tƒsdS|dkrtƒ}x@|D]8}t|ƒs2dS|jdƒ}|dk r"||krPdS|j|ƒq"WdS)z Version 3+. FNÚ identifierT)rrrÚguidelineValidatorrZÚadd)r Ú identifiersZguiderpr r r ÚguidelinesValidatorús   rtF)ÚxÚyÚanglerTÚcolorrpcCsÜt|tƒsdS|jdƒ}|jdƒ}|jdƒ}|dkr@|dkr@dS|dksP|dkr\|dk r\dS|dk rx|dk rx|dkrxdS|dk r˜|dkrŒdS|dkr˜dS|jdƒ}|dk r¸t|ƒ r¸dS|jd ƒ}|dk rØt|ƒ rØdSd S) z Version 3+. FrurvrwNrihrprxT)rÚ_guidelineDictPrototyperZÚidentifierValidatorÚcolorValidator)r rurvrwrprxr r r rqs0      rqcCsbt|tƒsdS|dkrtƒ}x@|D]8}t|ƒs2dS|jdƒ}|dk r"||krPdS|j|ƒq"WdS)z Version 3+. FNrpT)rrrÚanchorValidatorrZrr)r rsÚanchorrpr r r ÚanchorsValidator8s   r~)rurvrTrxrpcCszt|tƒsdS|jdƒ}|jdƒ}|dks2|dkr6dS|jdƒ}|dk rVt|ƒ rVdS|jdƒ}|dk rvt|ƒ rvdSdS)z Version 3+. FrurvNrprxT)rÚ_anchorDictPrototyperZrzr{)r rurvrprxr r r r|Ps     r|cCs\d}d}t|tƒsdS|sdSt|ƒdkr.dSx(|D] }t|ƒ}||ksP||kr4dSq4WdS)zƒ Version 3+. >>> identifierValidator("a") True >>> identifierValidator("") False >>> identifierValidator("a" * 101) False é é~FédT)rr2r$Úord)r ZvalidCharactersMinZvalidCharactersMaxÚcr r r rzis    rzcCs¶t|tƒsdS|jdƒ}t|ƒdkr(dSxˆ|D]€}|jƒ}d}yt|ƒ}d}Wntk rbYnX|sŽyt|ƒ}d}Wntk rŒYnX|s–dS|dkr¢dS|dkr.dSq.WdS)a¨ Version 3+. >>> colorValidator("0,0,0,0") True >>> colorValidator(".5,.5,.5,.5") True >>> colorValidator("0.5,0.5,0.5,0.5") True >>> colorValidator("1,1,1,1") True >>> colorValidator("2,0,0,0") False >>> colorValidator("0,2,0,0") False >>> colorValidator("0,0,2,0") False >>> colorValidator("0,0,0,2") False >>> colorValidator("1r,1,1,1") False >>> colorValidator("1,1g,1,1") False >>> colorValidator("1,1,1b,1") False >>> colorValidator("1,1,1,1a") False >>> colorValidator("1 1 1 1") False >>> colorValidator("1 1,1,1") False >>> colorValidator("1,1 1,1") False >>> colorValidator("1,1,1 1") False >>> colorValidator("1, 1, 1, 1") True Fú,r.Trr)rr2r4r$Ústriprr5Úfloat)r ÚpartsÚpartZ convertedr r r r{†s4+    r{s‰PNG  T)ÚfileNameZxScaleZxyScaleZyxScaleZyScaleZxOffsetZyOffsetrxcCs>t|tƒsdS|dsdS|jdƒ}|dk r:t|ƒ r:dSdS)z Version 3+. FrŠrxNT)rÚ_imageDictPrototyperZr{)r rxr r r ÚimageValidatorÚs  rŒc Cs�|dk s|dk s|dk st‚|dk rFt|dƒ�}|jdƒ}WdQRXn:|dk r\|dd…}n$|dk r€|jƒ}|jdƒ}|j|ƒ|tkrŒdSdS) z> Version 3+. This checks the signature of the image data. NÚrbéFú,Image does not begin with the PNG signature.T)Fr�)TN)ÚAssertionErrorrÚreadÚtellÚseekÚ pngSignature)ÚpathÚdataZfileObjÚfÚ signatureÚposr r r Ú pngValidatorés   ršc Csdt|tjjƒr|}n tjj|ƒ}d}t|tƒs6d|fStƒ}tƒ}i}�x|D�]ö}t|tƒsfd|fSt|ƒdkszd|fSx|D]}t|t ƒs€d|fSq€W|\} } | dkrÀ| j dƒsÀdd| fSt| ƒdkrÐdS|j | ƒsædd | fS| d k�rþ| dk�rþdS| |k�rdd | fS|j | ƒ| |k�r4dd | fS|j | ƒ| || <qNWd|j ƒk} | �s`dSdS)z; Check the validity of layercontents.plist. Version 3+. z1layercontents.plist in not in the correct format.Fr Zglyphszglyphs.z3Invalid directory name (%s) in layercontents.plist.rú(Empty layer name in layercontents.plist.z A glyphset does not exist at %s.zpublic.defaultúIThe name public.default is being used by a layer that is not the default.z1The layer name %s is used by more than one layer.z0The directory %s is used by more than one layer.ú1The required default glyph set is not in the UFO.TN)Fr›)Frœ)Fr�)TN)rÚfsÚbaseZFSZosfsZOSFSrrr$r2Ú startswithÚexistsrrr) r ZufoPathOrFileSystemZ fileSystemZbogusFileMessageZusedLayerNamesZusedDirectoriesÚcontentsÚentryÚiZ layerNameZ directoryNameZ foundDefaultr r r ÚlayerContentsValidatorsL                    r¥cCsôd}t|ƒsd|fSi}i}xÒ|jƒD]Æ\}}t|tƒs@d|fSt|ttfƒsVd|fS|s^d S|jdƒr&|jdƒ r„|jdƒ r„q&ntdƒt|ƒkr˜dS|jdƒr¨|}n|}x>|D]6}t|tƒsÌdd |fS||kràdd |fS|||<q²Wq&WdS)a> Check the validity of the groups. Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). >>> groups = {"A" : ["A", "A"], "A2" : ["A"]} >>> groupsValidator(groups) (True, None) >>> groups = {"" : ["A"]} >>> valid, msg = groupsValidator(groups) >>> valid False >>> print(msg) A group has an empty name. >>> groups = {"public.awesome" : ["A"]} >>> groupsValidator(groups) (True, None) >>> groups = {"public.kern1." : ["A"]} >>> valid, msg = groupsValidator(groups) >>> valid False >>> print(msg) The group data contains a kerning group with an incomplete name. >>> groups = {"public.kern2." : ["A"]} >>> valid, msg = groupsValidator(groups) >>> valid False >>> print(msg) The group data contains a kerning group with an incomplete name. >>> groups = {"public.kern1.A" : ["A"], "public.kern2.A" : ["A"]} >>> groupsValidator(groups) (True, None) >>> groups = {"public.kern1.A1" : ["A"], "public.kern1.A2" : ["A"]} >>> valid, msg = groupsValidator(groups) >>> valid False >>> print(msg) The glyph "A" occurs in too many kerning groups. z,The group data is not in the correct format.FúA group has an empty name.zpublic.z public.kern1.z public.kern2.z public.kernN.ú@The group data contains a kerning group with an incomplete name.z-The group data %s contains an invalid member.z1The glyph "%s" occurs in too many kerning groups.TN)Fr¦)Fr§)TN)rrrr2rrr r$)r ÚbogusFormatMessageZfirstSideMappingZsecondSideMappingZ groupNameZ glyphListÚdÚ glyphNamer r r ÚgroupsValidator<s6,       r«cCsŽd}t|tƒsd|fSxr|jƒD]f\}}t|tƒs:d|fSt|tƒsLd|fSx8|jƒD],\}}t|tƒspd|fSt|tƒsVd|fSqVWq WdS)a  Check the validity of the kerning data structure. Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). >>> kerning = {"A" : {"B" : 100}} >>> kerningValidator(kerning) (True, None) >>> kerning = {"A" : ["B"]} >>> valid, msg = kerningValidator(kerning) >>> valid False >>> print(msg) The kerning data is not in the correct format. >>> kerning = {"A" : {"B" : "100"}} >>> valid, msg = kerningValidator(kerning) >>> valid False >>> print(msg) The kerning data is not in the correct format. z.The kerning data is not in the correct format.FTN)TN)rrrr2r)r–r¨ÚfirstZ secondDictr?r r r r ÚkerningValidator‹s     r­z-The lib data is not in the correct format: %scCsÂt|ƒs"dt|ƒj}dt|fSxš|jƒD]Ž\}}t|tƒsTddt|ƒj|ffS|dkr,d}t|ttfƒsˆdt|ƒj}d||fSx0|D](}t|tƒsŽdt|ƒj}d||fSqŽWq,Wd S) ab Check the validity of the lib. Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). >>> lib = {"foo" : "bar"} >>> fontLibValidator(lib) (True, None) >>> lib = {"public.awesome" : "hello"} >>> fontLibValidator(lib) (True, None) >>> lib = {"public.glyphOrder" : ["A", "C", "B"]} >>> fontLibValidator(lib) (True, None) >>> lib = "hello" >>> valid, msg = fontLibValidator(lib) >>> valid False >>> print(msg) # doctest: +ELLIPSIS The lib data is not in the correct format: expected a dictionary, ... >>> lib = {1: "hello"} >>> valid, msg = fontLibValidator(lib) >>> valid False >>> print(msg) The lib key is not properly formatted: expected str, found int: 1 >>> lib = {"public.glyphOrder" : "hello"} >>> valid, msg = fontLibValidator(lib) >>> valid False >>> print(msg) # doctest: +ELLIPSIS public.glyphOrder is not properly formatted: expected list or tuple,... >>> lib = {"public.glyphOrder" : ["A", 1, "B"]} >>> valid, msg = fontLibValidator(lib) >>> valid False >>> print(msg) # doctest: +ELLIPSIS public.glyphOrder is not properly formatted: expected str,... zexpected a dictionary, found %sFzAThe lib key is not properly formatted: expected str, found %s: %rzpublic.glyphOrderz/public.glyphOrder is not properly formatted: %sz expected list or tuple, found %szexpected str, found %sTN)TN) rÚtypeÚ__name__Ú_bogusLibFormatMessagerrr2rr)r ÚreasonrZbogusGlyphOrderMessagerªr r r ÚfontLibValidator·s$-     r²cCsnt|ƒs"dt|ƒj}dt|fSxF|jƒD]:\}}t|tƒsRd|}dt|fS|dkr,t|ƒs,dSq,Wd S) aö Check the validity of the lib. Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). >>> lib = {"foo" : "bar"} >>> glyphLibValidator(lib) (True, None) >>> lib = {"public.awesome" : "hello"} >>> glyphLibValidator(lib) (True, None) >>> lib = {"public.markColor" : "1,0,0,0.5"} >>> glyphLibValidator(lib) (True, None) >>> lib = {"public.markColor" : 1} >>> valid, msg = glyphLibValidator(lib) >>> valid False >>> print(msg) public.markColor is not properly formatted. zexpected a dictionary, found %sFzkey (%s) should be a stringzpublic.markColorú+public.markColor is not properly formatted.TN)Fr³)TN)rr®r¯r°rrr2r{)r r±rr r r ÚglyphLibValidatorüs   r´Ú__main__)N)N)NNN)EÚ__doc__r6ÚiorZfs.baseržZfs.osfsÚcollections.abcrZfontTools.ufoLib.utilsrrrrrrrrr)r@rBrCrErGrHrKrLrMrNrQrSr[r^rarbrcrdrer`rirgrlrkrnrtr%rr‡r2ryrqr~rr|rzr{r”r‹rŒršr¥r«r­r°r²r´r¯ÚdoctestÚtestmodr r r r ÚsŒ       ;                '   J  ;O*E&