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øªjqLã @s|dZddlmZddlmZddlmZddlmZddl m Z ddl Z ddl m Z ddlZejeƒZGd d „d eƒZd Zd Zd dddddddddœ Zefdd„ZGdd„deƒZdZejeƒZdZejeƒZdZejeƒZdZ eje ƒZ!dZ"eje"ƒZ#Gd d!„d!eƒZ$Gd"d#„d#e$ƒZ%Gd$d%„d%e$ƒZ&Gd&d'„d'ƒZ'd(d)„Z(d*d+„Z)d,d-„Z*ed.k�rxddl+Z+ddl,Z,e+j-e,j.ƒj/ƒdS)/aªttLib/sfnt.py -- low-level module to deal with the sfnt file format. Defines two public classes: SFNTReader SFNTWriter (Normally you don't have to use these classes explicitly; they are used automatically by ttLib.TTFont.) The reading and writing of sfnt files is separated in two distinct classes, since whenever to number of tables changes or whenever a table's length chages you need to rewrite the whole file anyway. é)ÚBytesIO)ÚSimpleNamespace)ÚTag)Ússtruct)Ú TTLibErrorN)Ú OrderedDictc@sZeZdZdd„Zddd„Zdd„ZeZd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)Ú SFNTReadercOs^|rT|tkrT|d}|jdƒt|jdƒƒ}|jdƒ|dkrTddlm}tj|ƒStj|ƒS)zb Return an instance of the SFNTReader sub-class which is compatible with the input file type. réZwOF2)Ú WOFF2Reader)rÚseekrÚreadÚfontTools.ttLib.woff2r ÚobjectÚ__new__)ÚclsÚargsÚkwargsÚinfileÚ sfntVersionr ©rú9/tmp/pip-build-_d5lkt3n/fonttools/fontTools/ttLib/sfnt.pyrs     zSFNTReader.__new__réc CsÜ||_||_d|_d|_t|_|jjdƒ|jjdƒ|_|jjdƒ|jdkrÎt |jƒ}|j }d|kop|kns†t d|dƒ‚||_ |jj|j |ƒ|jjt ƒ}t|ƒt kr¾t dƒ‚tjt||ƒnz|jdk�rd|_t|_|jjtƒ}t|ƒtk�rt d ƒ‚tjt||ƒn0|jjt ƒ}t|ƒt k�r:t d ƒ‚tjt||ƒt|jƒ|_|jdk�rht dƒ‚i}x:t|jƒD],}|jƒ} | j|jƒt| jƒ} | || <�qxWtt|jƒdd„d�ƒ|_|jdk�rØt|ƒ|_dS)Nrr sttcfz2specify a font number between 0 and %d (inclusive)rz'Not a Font Collection (not enough data)swOFFÚwoffz!Not a WOFF font (not enough data)z1Not a TrueType or OpenType font (not enough data)úÚOTTOÚtruez1Not a TrueType or OpenType font (bad sfntVersion)cSs |djS)Nr)Úoffset)ÚirrrÚYsz%SFNTReader.__init__..)Úkey)rrr)ÚfileÚcheckChecksumsÚflavorÚ flavorDataÚSFNTDirectoryEntryÚDirectoryEntryr r rÚ readTTCHeaderÚnumFontsrÚ offsetTableÚsfntDirectorySizeÚlenrÚunpackÚsfntDirectoryFormatÚWOFFDirectoryEntryÚwoffDirectorySizeÚwoffDirectoryFormatrÚrangeÚ numTablesÚfromFileÚtagrÚsortedÚitemsÚtablesÚWOFFFlavorData) Úselfr r!Z fontNumberÚheaderr'Údatar6rÚentryr3rrrÚ__init__.sT              zSFNTReader.__init__cCs ||jkS)N)r6)r8r3rrrÚhas_key_szSFNTReader.has_keycCs |jjƒS)N)r6Úkeys)r8rrrr>dszSFNTReader.keyscCsŽ|jt|ƒ}|j|jƒ}|jrŠ|dkrJt|dd…d|dd…ƒ}nt|ƒ}|jdkrt||jksŠtd|ƒ‚n||jkrŠtj d|ƒ|S)zFetch the raw table data.ÚheadNésé rzbad checksum for '%s' table) r6rÚloadDatar r!Ú calcChecksumÚcheckSumÚAssertionErrorÚlogÚwarning)r8r3r;r:ÚchecksumrrrÚ __getitem__gs "   zSFNTReader.__getitem__cCs|jt|ƒ=dS)N)r6r)r8r3rrrÚ __delitem__yszSFNTReader.__delitem__cCs|jjƒdS)N)r Úclose)r8rrrrK|szSFNTReader.closecCs@t|jtƒr|jS|jjƒ}|d=|jj|d<|jjƒ|d<|S)Nr Ú _filenameÚ_filepos)Ú isinstancer rÚ__dict__ÚcopyÚnameÚtell)r8ÚstaterrrÚ __getstate__…s   zSFNTReader.__getstate__cCs<d|kr,t|jdƒdƒ|_|jj|jdƒƒ|jj|ƒdS)Nr rLÚrbrM)ÚopenÚpopr r rOÚupdate)r8rSrrrÚ __setstate__‘szSFNTReader.__setstate__Néÿÿÿÿ)rrZ) Ú__name__Ú __module__Ú __qualname__rr<r=Ú __contains__r>rIrJrKrTrYrrrrrs 1  réFréér@é ééé2éd) rér`r rar_ér@é cCshd|kodkns$td|ƒ‚t s2|dkrHddlm}|||ƒSddlm}||t|d�SdS)a7 Compress 'data' to Zlib format. If 'USE_ZOPFLI' variable is True, zopfli is used instead of the zlib module. The compression 'level' must be between 0 and 9. 1 gives best speed, 9 gives best compression (0 gives no compression at all). The default value is a compromise between speed and compression (6). rrizBad compression level: %s)Úcompress)Z numiterationsN)Ú ValueErrorÚ USE_ZOPFLIÚzlibrjZ zopfli.zlibÚ ZOPFLI_LEVELS)r:Úlevelrjrrrrj¯s    rjc@sVeZdZdd„Zddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dS)Ú SFNTWritercOsbd}|rd|kr|d}n|r2t|ƒdkr2|d}|tkrX|dkrXddlm}tj|ƒStj|ƒS)ze Return an instance of the SFNTWriter sub-class which is compatible with the specified 'flavor'. Nr"r`Zwoff2r)Ú WOFF2Writer)r*rpr rqrr)rrrr"rqrrrrÂs    zSFNTWriter.__new__úNcCsú||_||_t|ƒ|_||_||_|jdkrTt|_t|_ t |_ d|_ t |t|_nJ|j sjtd|jƒ‚t|_t |_ t|_ ddlm}||dƒ\|_|_|_|jjƒ|_|j|j ||j j|_|jj|jƒ|jjd|j|jjƒƒtƒ|_dS)NrZwOFFzUnknown flavor '%s'r)ÚgetSearchRangeéó) r r1rrr"r#r/ÚdirectoryFormatr.Ú directorySizer-r%Ú signaturer)ÚsfntDirectoryEntrySizeÚorigNextTableOffsetrEr,r$ÚfontTools.ttLibrsÚ searchRangeÚ entrySelectorÚ rangeShiftrRÚdirectoryOffsetÚ formatSizeÚnextTableOffsetr Úwriterr6)r8r r1rr"r#rsrrrr<Ós,    zSFNTWriter.__init__cCs$||jkrtd|ƒ‚||j|<dS)Nzcannot rewrite '%s' table)r6r)r8r3r;rrrÚsetEntryõs  zSFNTWriter.setEntrycCsü||jkrtd|ƒ‚|jƒ}||_|j|_|dkrdt|dd…d|dd…ƒ|_||_d|_ n t|ƒ|_|j |j |ƒ|j dkr¦|j |_|j |jd d @7_ |j|jd d @|_|j jd |j|j jƒƒ|j|j jƒksìt‚|j||ƒdS) zWrite raw table data to disk.zcannot rewrite '%s' tabler?Nr@srATrr`ruéüÿÿÿr„)r6rr%r3r�rrCrDÚ headTableÚ uncompressedÚsaveDatar r"rzÚ origOffsetÚ origLengthÚlengthr‚rRrErƒ)r8r3r:r;rrrÚ __setitem__ûs$  "  zSFNTWriter.__setitem__cCs |j|S)N)r6)r8r3rrrrIszSFNTWriter.__getitem__c CsŠt|jjƒƒ}t|ƒ|jkr2td|jt|ƒfƒ‚|jdk�rðd|_d|_d|_ |j dt|ƒ7_ x(|D] \}}|j |j dd@7_ qlW|j rœ|j nt ƒ}|j dk rÈ|jdk rÈ|j |_ |j|_n6t|d ƒròtjd |jd d …ƒ\|_ |_n d|_ |_|j�rNt|jƒ|_|jjdd ƒ|jjƒ|_t|jƒ}t|ƒ|_|jj|ƒnd|_|_|_|j�rÈ|jjdd ƒ|jjƒ}|dd@}|jjd||ƒ|jjƒ|_t|jƒ|_|jj|jƒn d|_|_|jjdd ƒ|jjƒ|_n|j �st d|jƒ‚t!j"|j#|ƒ}|jj|j$|j%ƒd} x,|D]$\}}|dk�rJd} ||j&ƒ}�q4W| �rl|j'|ƒ|jj|j$ƒ|jj|ƒdS)zHAll tables must have been written to disk. Now write the directory. z-wrong number of tables; expected %d, found %drswOFFrrArtr`Nr…z>HHr r@rgúzUnknown flavor '%s'r?rr„r„)(r4r6r5r*r1rr"rxÚreservedZ totalSfntSizer‰r#r7Ú majorVersionÚ minorVersionÚhasattrÚstructr+r…ÚmetaDataÚmetaOrigLengthr r rRÚ metaOffsetrjÚ metaLengthr‚ÚprivDataÚ privOffsetÚ privLengthrŠrErÚpackrvrrwÚtoStringÚwriteMasterChecksum) r8r6r3r;r:ZcompressedMetaDataÚoffZ paddedOffÚ directoryZseenHeadrrrrKs`                zSFNTWriter.closec Cst|jjƒƒ}g}x*tt|ƒƒD]}|j|j||jƒq W|jtkrÊddl m }||j dƒ\|_ |_ |_tjt|ƒ}t|jjƒƒ}xB|D]:\}}tƒ} |j| _|j| _|j| _|j| _|| jƒ}qŒWtt|jƒt} | t|ƒksìt‚|jt|ƒƒt|ƒd@} d| d@} | S)Nr)rsrtlÿÿlº/ac)Úlistr6r>r0r*ÚappendrDr%r$r{rsr1r|r}r~rr™r,r4r5r3rˆrr‰rŠršr)ryrErCÚsum) r8r�ÚtagsZ checksumsrrsr6r3r;Z sfntEntryZ directory_endrHÚchecksumadjustmentrrrÚ_calcMasterChecksum^s,     zSFNTWriter._calcMasterChecksumcCs:|j|ƒ}|jj|jdjdƒ|jjtjd|ƒƒdS)Nr?r@z>L)r£r r r6rr‚r‘r™)r8r�r¢rrrr›|s zSFNTWriter.writeMasterChecksumcCsdS)NFr)r8rrrÚreordersTables‚szSFNTWriter.reordersTables)rrNN) r[r\r]rr<rƒr‹rIrKr£r›r¤rrrrrpÀs !Brpa > # big endian TTCTag: 4s # "ttcf" Version: L # 0x00010000 or 0x00020000 numFonts: L # number of fonts # OffsetTable[numFonts]: L # array with offsets from beginning of file # ulDsigTag: L # version 2.0 only # ulDsigLength: L # version 2.0 only # ulDsigOffset: L # version 2.0 only zä > # big endian sfntVersion: 4s numTables: H # number of tables searchRange: H # (max2 <= numTables)*16 entrySelector: H # log2(max2 <= numTables) rangeShift: H # numTables*16-searchRange zc > # big endian tag: 4s checkSum: L offset: L length: L ab > # big endian signature: 4s # "wOFF" sfntVersion: 4s length: L # total woff file size numTables: H # number of tables reserved: H # set to 0 totalSfntSize: L # uncompressed size majorVersion: H # major version of WOFF file minorVersion: H # minor version of WOFF file metaOffset: L # offset to metadata block metaLength: L # length of compressed metadata metaOrigLength: L # length of uncompressed metadata privOffset: L # offset to private data block privLength: L # length of private data block zº > # big endian tag: 4s offset: L length: L # compressed length origLength: L # original length checkSum: L # original checksum c@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)r%cCs d|_dS)NF)r†)r8rrrr<ËszDirectoryEntry.__init__cCstj|j|j|jƒ|ƒdS)N)rr+Úformatr r€)r8r rrrr2ÎszDirectoryEntry.fromFilecCstj|j||ƒdS)N)rr+r¥)r8ÚstrrrrÚ fromStringÑszDirectoryEntry.fromStringcCstj|j|ƒS)N)rr™r¥)r8rrrršÔszDirectoryEntry.toStringcCs:t|dƒr"d|jj|jt|ƒfSd|jjt|ƒfSdS)Nr3z<%s '%s' at %x>z <%s at %x>)r�Ú __class__r[r3Úid)r8rrrÚ__repr__×s zDirectoryEntry.__repr__cCsD|j|jƒ|j|jƒ}t|ƒ|jks*t‚t|jdƒr@|j|ƒ}|S)NÚ decodeData) r rr rŠr*rEr�r¨r«)r8r r:rrrrBÝs     zDirectoryEntry.loadDatacCs:t|jdƒr|j|ƒ}t|ƒ|_|j|jƒ|j|ƒdS)NÚ encodeData)r�r¨r¬r*rŠr rr‚)r8r r:rrrr‡ås     zDirectoryEntry.saveDatacCs|S)Nr)r8ÚrawDatarrrr«ìszDirectoryEntry.decodeDatacCs|S)Nr)r8r:rrrr¬ïszDirectoryEntry.encodeDataN) r[r\r]r<r2r§ršrªrBr‡r«r¬rrrrr%Ésr%c@seZdZeZeZdS)r$N)r[r\r]ÚsfntDirectoryEntryFormatr¥ryr€rrrrr$òsr$cs4eZdZeZeZ‡fdd„Zdd„Zdd„Z ‡Z S)r-cs"tt|ƒjƒttdƒst|_dS)NÚzlibCompressionLevel)Úsuperr-r<r�ÚZLIB_COMPRESSION_LEVELr¯)r8)r¨rrr<üs zWOFFDirectoryEntry.__init__cCsJddl}|j|jkr|}n,|j|jks*t‚|j|ƒ}t|ƒ|jksFt‚|S)Nr)rmrŠr‰rEÚ decompressr*)r8r­rmr:rrrr«s  zWOFFDirectoryEntry.decodeDatacCsPt|ƒ|_|jst||jƒ}|js0t|ƒ|jkr>|}|j|_n|}t|ƒ|_|S)N)r*r‰r†rjr¯rŠ)r8r:ZcompressedDatar­rrrr¬s    zWOFFDirectoryEntry.encodeData) r[r\r]ÚwoffDirectoryEntryFormatr¥ÚwoffDirectoryEntrySizer€r<r«r¬Ú __classcell__rr)r¨rr-÷s   r-c@s"eZdZdZddd„Zdd„ZdS)r7rNcCsÀd|_d|_d|_d|_|r¼|j|_|j|_|jr‚|jj|jƒ|jj|jƒ}t |ƒ|jks`t ‚|j |ƒ}t |ƒ|j ks|t ‚||_|j r¼|jj|jƒ|jj|j ƒ}t |ƒ|j ks¶t ‚||_dS)N)rŽr�r’r–r•r r r”r r*rEÚ _decompressr“r˜r—)r8Úreaderr­r:rrrr<"s& zWOFFFlavorData.__init__cCsddl}|j|ƒS)Nr)rmr²)r8r­rmrrrr¶7szWOFFFlavorData._decompress)N)r[r\r]ZFlavorr<r¶rrrrr7s r7cCsŽt|ƒd}|r |dd|7}d}d}|ddks8t‚xPtdt|ƒ|ƒD]<}||||…}tjdt|ƒd|ƒ}|t|ƒd@}qJW|S)awCalculate the checksum for an arbitrary block of data. Optionally takes a 'start' argument, which allows you to calculate a checksum in chunks by feeding it a previous result. If the data length is not a multiple of four, it assumes it is to be padded with null byte. >>> print(calcChecksum(b"abcd")) 1633837924 >>> print(calcChecksum(b"abcdxyz")) 3655064932 r ruriz>%dLlÿÿ)r*rEr0r‘r+r )r:Ú remainderÚvalueZ blockSizerÚblockZlongsrrrrC<s rCcCsž|jdƒ|jtƒ}t|ƒtkr(tdƒ‚tƒ}tjt||ƒ|j dkrNtdƒ‚|j dksp|j dkspt d|j ƒ‚t jd|j |j|j d ƒƒ|_|j dkrš|S) Nrz'Not a Font Collection (not enough data)ÚttcfzNot a Font Collectioniizunrecognized TTC version 0x%08xz>%dLr )r r Ú ttcHeaderSizer*rrrr+ÚttcHeaderFormatÚTTCTagÚVersionrEr‘r'r()r r:r8rrrr&Vs    "  r&cCsdtƒ}d|_d|_||_|jdƒ|jtjt|ƒƒ|j ƒ}|jt jd|jfdg|jžŽƒ|S)Nr»irz>%dL) rr¾r¿r'r r‚rr™r½rRr‘)r r'r8rrrrÚwriteTTCHeaderes $rÀÚ__main__)0Ú__doc__ÚiorÚtypesrZfontTools.misc.textToolsrZfontTools.miscrr{rr‘Ú collectionsrÚloggingÚ getLoggerr[rFrrr±rlrnrjrpr½Úcalcsizer¼r,r)r®ryr/r.r³r´r%r$r-r7rCr&rÀÚsysÚdoctestÚexitÚtestmodÚfailedrrrrÚ sZ       } R     )'