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´ddlmZddlZddlmZddlmZmZddlm Z ddl m Z Gdd„de ƒZ Gd d „d e ƒZGd d „d eƒZd ZejeƒZdZejeƒZdZejeƒZdZejeƒZdS)é)ÚBytesION)Ússtruct)Ú bytesjoinÚtostr)Ú OrderedDict)ÚMutableMappingc@s eZdZdS)Ú ResourceErrorN)Ú__name__Ú __module__Ú __qualname__©r r ú:/tmp/pip-build-_d5lkt3n/fonttools/fontTools/misc/macRes.pyr src@sÆeZdZdZdd„Zedd„ƒZedd„ƒZdd „Zd-d d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zedd „ƒZd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd S).ÚResourceReaderaÆReader for Mac OS resource forks. Parses a resource fork and returns resources according to their type. If run on OS X, this will open the resource fork in the filesystem. Otherwise, it will open the file itself and attempt to read it as though it were a resource fork. The returned object can be indexed by type and iterated over, returning in each case a list of py:class:`Resource` objects representing all the resources of a certain type. c Csdtƒ|_t|dƒr||_n>y|j|ƒ|_|jƒdSttfk rV|j|ƒ|_YnX|jƒdS)z�Open a file Args: fileOrPath: Either an object supporting a ``read`` method, an ``os.PathLike`` object, or a string. ÚreadN) rÚ _resourcesÚhasattrÚfileÚopenResourceForkÚ _readFilerÚIOErrorÚ openDataFork)ÚselfZ fileOrPathr r r Ú__init__s  zResourceReader.__init__c CsFt|dƒr|jƒ}t|ddƒ�}|jƒ}WdQRXt|ƒ}||_|S)NÚ __fspath__z/..namedfork/rsrcÚrb)rrÚopenrrÚname)ÚpathZresforkÚdataÚinfiler r r r/s zResourceReader.openResourceForkc Cs0t|dƒ�}|jƒ}WdQRXt|ƒ}||_|S)Nr)rrrr)rZdataforkrrr r r r9s  zResourceReader.openDataForkcCs|jƒ|jƒdS)N)Ú_readHeaderAndMapÚ _readTypeList)rr r r rAszResourceReader._readFileNcCs’|dk rLy|jj|ƒWntk r4tdƒ‚YnX|jjƒ|krLtdƒ‚y|jj|ƒ}Wntk rxtdƒ‚YnXt|ƒ|krŽtdƒ‚|S)Nz-Failed to seek offset ('offset' is too large)z#Failed to seek offset (reached EOF)z.Cannot read resource ('numBytes' is too large)z&Cannot read resource (not enough data))rÚseekÚ OverflowErrorrÚtellrÚlen)rZnumBytesÚoffsetrr r r Ú_readEs zResourceReader._readcCsh|jjdƒ|jtƒ}tjt||ƒ|jd}|jt|ƒ}tjt ||ƒ|j|j |_ |j|j |_ dS)Nré)rr"r'ÚResourceForkHeaderSizerÚunpackÚResourceForkHeaderÚ mapOffsetÚResourceMapHeaderSizeÚResourceMapHeaderZtypeListOffsetÚabsTypeListOffsetZnameListOffsetÚabsNameListOffset)rZ headerDatar,ZresourceMapDatar r r r Us    z ResourceReader._readHeaderAndMapc Csª|j}|jd|ƒ}tjd|ƒ\|_|d}xzt|jdƒD]h}|t|}|jt|ƒ}tjt|ƒ}t |ddd�}||d} |dd} |j || | ƒ} | |j |<q:WdS) Néz>HéÚtypez mac-roman)ÚencodingÚ refListOffsetÚnumRes) r/r'Ústructr*ZnumTypesÚrangeÚResourceTypeItemSizerÚResourceTypeItemrÚ_readReferenceListr) rr/Z numTypesDataZabsTypeListOffset2ÚiZresTypeItemOffsetZresTypeItemDataÚitemÚresTyper5r6Ú resourcesr r r r!`s      zResourceReader._readTypeListc CsPg}xFt|ƒD]:}|t|}|jt|ƒ}t|ƒ}|j||ƒ|j|ƒqW|S)N)r8ÚResourceRefItemSizer'ÚResourceÚ decompileÚappend) rr>r5r6r?r<Z refOffsetÚrefDataÚresr r r r;os   z!ResourceReader._readReferenceListcCs |j|S)N)r)rr>r r r Ú __getitem__yszResourceReader.__getitem__cCs |j|=dS)N)r)rr>r r r Ú __delitem__|szResourceReader.__delitem__cCs||j|<dS)N)r)rr>r?r r r Ú __setitem__szResourceReader.__setitem__cCs t|jƒS)N)r%r)rr r r Ú__len__‚szResourceReader.__len__cCs t|jƒS)N)Úiterr)rr r r Ú__iter__…szResourceReader.__iter__cCs |jjƒS)N)rÚkeys)rr r r rLˆszResourceReader.keyscCst|jjƒƒS)z6A list of the types of resources in the resource fork.)ÚlistrrL)rr r r Útypes‹szResourceReader.typesc Cs&y t||ƒStk r dSXdS)z/Return the number of resources of a given type.rN)r%ÚKeyError)rr>r r r ÚcountResources�s zResourceReader.countResourcescCs(|j|ƒ}|r ttd|dƒƒSgSdS)z7Returns a list of indices of resources of a given type.r2N)rPrMr8)rr>r6r r r Ú getIndices—s zResourceReader.getIndicescCsdd„|j|gƒDƒS)z6Return list of names of all resources of a given type.cSsg|]}|jdk r|j‘qS)N)r)Ú.0rEr r r ú ¡sz+ResourceReader.getNames..)Úget)rr>r r r ÚgetNamesŸszResourceReader.getNamesc Cs>|dkr dSy|||d}Wnttfk r8dSX|S)z…Return resource of given type located at an index ranging from 1 to the number of resources for that type, or None if not found. r2N)rOÚ IndexError)rr>ÚindexrEr r r ÚgetIndResource£szResourceReader.getIndResourcecCs4t|dd�}x"|j|gƒD]}|j|kr|SqWdS)z:Return the named resource of given type, else return None.z mac-roman)r4N)rrTr)rr>rrEr r r ÚgetNamedResource¯s   zResourceReader.getNamedResourcecCs|jjs|jjƒdS)N)rÚclosedÚclose)rr r r r[·szResourceReader.close)N)r r r Ú__doc__rÚ staticmethodrrrr'r r!r;rFrGrHrIrKrLÚpropertyrNrPrQrUrXrYr[r r r r r s,       rc@s"eZdZdZddd„Zdd„ZdS)rAz§Represents a resource stored within a resource fork. Attributes: type: resource type. data: resource data. id: ID. name: resource name. attr: attributes. NcCs"||_||_||_||_||_dS)N)r3rÚidrÚattr)rr>ZresDataZresIDZresNameZresAttrr r r rÇs zResource.__init__cCs°tjt||ƒtjdtd|jgƒƒ\|_|j|j}tjd|jd|ƒƒ\}|j|ƒ|_|jd krddS|j |j}tjd|jd|ƒƒ\}tjd||j|ƒƒ\}t |dd�|_ dS) Nz>Lóér2ÚBz>%ssz mac-roman)r4éÿÿÿÿ) rr*ÚResourceRefItemr7rZ dataOffsetr'rZ nameOffsetr0rr)rrDÚreaderZ absDataOffsetZ dataLengthZ absNameOffsetZ nameLengthrr r r rBÏs    zResource.decompile)NNNNN)r r r r\rrBr r r r rA¼s  rAzb > # big endian dataOffset: L mapOffset: L dataLen: L mapLen: L zW > # big endian attr: H typeListOffset: H nameListOffset: H zX > # big endian type: 4s numRes: H refListOffset: H z† > # big endian id: h nameOffset: h attr: B dataOffset: 3s reserved: L )Úiorr7ZfontTools.miscrZfontTools.misc.textToolsrrÚ collectionsrÚcollections.abcrÚ ExceptionrrÚobjectrAr+Úcalcsizer)r.r-r:r9rer@r r r r Ús"    0(