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øªja{ã@sŽddlmZmZddlmZddlZddlZddlZddlZeje ƒZ Gdd„de ƒZ Gdd„de ƒZGd d „d eƒZeejd dƒƒd ksŽt‚ejd ƒjd ks¦td ƒ‚Gdd„de ƒZGdd„de ƒZGdd„de ƒZdd„Zdd„Zdd„Zdd„ZGdd„de ƒZGdd„deƒZGd d!„d!eƒZeed"œZd#d$„ZdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXgZ dCdD„Z!e!ƒZ"GdEdF„dFe ƒZ#GdGdH„dHe ƒZ$dS)Yé)ÚTagÚ bytesjoiné)Ú DefaultTableNc@seZdZdd„Zdd„ZdS)ÚOverflowErrorRecordcCs6|d|_|d|_|d|_|d|_|d|_dS)Nrrééé)Ú tableTypeÚLookupListIndexÚ SubTableIndexÚitemNameÚ itemIndex)ÚselfZ overflowTuple©rúB/tmp/pip-build-_d5lkt3n/fonttools/fontTools/ttLib/tables/otBase.pyÚ__init__ s     zOverflowErrorRecord.__init__c Cs$t|jd|jd|jd|jd|jf ƒS)Nz LookupIndex:zSubTableIndex:z ItemName:z ItemIndex:)Ústrr r r r r)rrrrÚ__repr__szOverflowErrorRecord.__repr__N)Ú__name__Ú __module__Ú __qualname__rrrrrrr src@seZdZdd„Zdd„ZdS)ÚOTLOffsetOverflowErrorcCs ||_dS)N)Úvalue)rÚoverflowErrorRecordrrrrszOTLOffsetOverflowError.__init__cCs t|jƒS)N)Úreprr)rrrrÚ__str__szOTLOffsetOverflowError.__str__N)rrrrrrrrrrsrc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚBaseTTXConverterzÉGeneric base class for TTX table converters. It functions as an adapter between the TTX (ttLib actually) table model and the model we use for OpenType tables, which is necessarily subtly different. cCs@ddlm}t||jd�}t||jƒ}|ƒ|_|jj||ƒdS)Nr)ÚotTables)ÚtableTag)ÚrÚ OTTableReaderrÚgetattrÚtableÚ decompile)rÚdataÚfontrÚreaderÚ tableClassrrrr$$s   zBaseTTXConverter.decompilec CsÒd}xÈy"t|jd�}|jj||ƒ|jƒStk rÈ}z„||jkrF‚|j}tjd|ƒ|}d}|j dkr‚ddl m }|||ƒ}nddl m }|||ƒ}|s¸ddl m }|||ƒ}|s¸‚WYdd}~XqXqWdS)a{ Create a top-level OTTableWriter for the GPOS/GSUB table. Call the compile method for the the table for each 'converter' record in the table converter list call converter's write method for each item in the value. - For simple items, the write method adds a string to the writer's self.items list. - For Struct/Table/Subtable items, it add first adds new writer to the to the writer's self.items, then calls the item's compile method. This creates a tree of writers, rooted at the GUSB/GPOS writer, with each writer representing a table, and the writer.items list containing the child data strings and writers. call the getAllData method call _doneWriting, which removes duplicates call _gatherTables. This traverses the tables, adding unique occurences to a flat list of tables Traverse the flat list of tables, calling getDataLength on each to update their position Traverse the flat list of tables again, calling getData each get the data in the table, now that pos's and offset are known. If a lookup subtable overflows an offset, we have to start all over. N)rz+Attempting to fix OTLOffsetOverflowError %srr)ÚfixLookupOverFlows)ÚfixSubTableOverFlows) Ú OTTableWriterrr#ÚcompileÚ getAllDatarrÚlogÚinfor rr)r*) rr&ZoverflowRecordÚwriterÚeZlastItemÚokr)r*rrrr,+s.          zBaseTTXConverter.compilecCs|jj||ƒdS)N)r#ÚtoXML2)rr0r&rrrÚtoXMLaszBaseTTXConverter.toXMLcCsJddlm}t|dƒs*t||jƒ}|ƒ|_|jj||||ƒ|jjƒdS)Nr)rr#)r rÚhasattrr"rr#ÚfromXMLÚpopulateDefaults)rÚnameÚattrsÚcontentr&rr(rrrr6ds    zBaseTTXConverter.fromXMLN)rrrÚ__doc__r$r,r4r6rrrrrs 6rÚir z#Oops, file a bug against fonttools.c@sæeZdZdZd=Zd>d d „Zd d „Zd d„Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„ZdS)?r!z5Helper class to retrieve data from an OpenType table.r%ÚoffsetÚposÚ localStaterNrcCs"||_||_||_||_||_dS)N)r%r=r>r?r)rr%r?r=rrrrrws zOTTableReader.__init__cCs|j|7_dS)N)r>)rÚcountrrrÚadvance~szOTTableReader.advancecCs ||_dS)N)r>)rr>rrrÚseek�szOTTableReader.seekcCs$|j|j|j|j|jƒ}|j|_|S)N)Ú __class__r%r?r=rr>)rÚotherrrrÚcopy„szOTTableReader.copycCs |j|}|j|j|j||jƒS)N)r=rCr%r?r)rr=rrrÚ getSubReader‰s zOTTableReader.getSubReadercCs6|j}||}tjd|›�|j||…ƒ\}||_|S)Nú>)r>ÚstructÚunpackr%)rÚtypecodeÚ staticSizer>ÚnewposrrrrÚ readValue�s zOTTableReader.readValuecCsH|j}|||}tj||j||…ƒ}tjdkr:|jƒ||_|jƒS)NÚbig)r>Úarrayr%ÚsysÚ byteorderÚbyteswapÚtolist)rrJrKr@r>rLrrrrÚ readArray“s  zOTTableReader.readArraycCs|jddd�S)NÚbr)rK)rM)rrrrÚreadInt8›szOTTableReader.readInt8cCs|jdd|d�S)NrUr)rKr@)rT)rr@rrrÚ readInt8Array�szOTTableReader.readInt8ArraycCs|jddd�S)NÚhr)rK)rM)rrrrÚ readShort szOTTableReader.readShortcCs|jdd|d�S)NrXr)rKr@)rT)rr@rrrÚreadShortArray¢szOTTableReader.readShortArraycCs|jddd�S)Nr<r )rK)rM)rrrrÚreadLong¥szOTTableReader.readLongcCs|jdd|d�S)Nr<r )rKr@)rT)rr@rrrÚ readLongArray§szOTTableReader.readLongArraycCs|jddd�S)NÚBr)rK)rM)rrrrÚ readUInt8ªszOTTableReader.readUInt8cCs|jdd|d�S)Nr]r)rKr@)rT)rr@rrrÚreadUInt8Array¬szOTTableReader.readUInt8ArraycCs|jddd�S)NÚHr)rK)rM)rrrrÚ readUShort¯szOTTableReader.readUShortcCs|jdd|d�S)Nr`r)rKr@)rT)rr@rrrÚreadUShortArray±szOTTableReader.readUShortArraycCs|jddd�S)NÚIr )rK)rM)rrrrÚ readULong´szOTTableReader.readULongcCs|jdd|d�S)Nrcr )rKr@)rT)rr@rrrÚreadULongArray¶szOTTableReader.readULongArraycCs4|j}|d}tjdd|j||…ƒ\}||_|S)Nrz>ló)r>rHrIr%)rr>rLrrrrÚ readUInt24¹s zOTTableReader.readUInt24cs‡fdd„t|ƒDƒS)Ncsg|] }ˆjƒ‘qSr)rg)Ú.0Ú_)rrrú Àsz1OTTableReader.readUInt24Array..)Úrange)rr@r)rrÚreadUInt24Array¿szOTTableReader.readUInt24ArraycCs>|j}|d}t|j||…ƒ}t|ƒdks4t|ƒ‚||_|S)Nr )r>rr%ÚlenÚAssertionError)rr>rLrrrrÚreadTagÂs zOTTableReader.readTagcCs&|j}||}|j||…}||_|S)N)r>r%)rr@r>rLrrrrÚreadDataÊs zOTTableReader.readDatacCs(|jr|jjƒntƒ}|||<||_dS)N)r?rEÚdict)rr8rÚstaterrrÚ __setitem__ÑszOTTableReader.__setitem__cCs|jo|j|S)N)r?)rr8rrrÚ __getitem__ÖszOTTableReader.__getitem__cCs|jo||jkS)N)r?)rr8rrrÚ __contains__ÙszOTTableReader.__contains__)r%r=r>r?r)NrN)rrrr;Ú __slots__rrArBrErFrMrTrVrWrYrZr[r\r^r_rarbrdrergrlrorprsrtrurrrrr!qs8 r!c@sHeZdZdZdMdd„Zedd„ƒZejdd„ƒZd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„ZdNdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Z d;d<„Z!d=d>„Z"d?d@„Z#dAdB„Z$dCdD„Z%dOdEdF„Z&dGdH„Z'dIdJ„Z(dKdL„Z)dS)Pr+z=Helper class to gather and assemble data for OpenType tables.NrcCs(g|_d|_||_||_||_d|_dS)N)Úitemsr>r?rÚ offsetSizeÚparent)rr?rrxrrrrás zOTTableWriter.__init__cCs |jdkS)Nr )rx)rrrrÚ longOffsetëszOTTableWriter.longOffsetcCs|rdnd|_dS)Nr r)rx)rrrrrrzïscCs(|jr|jjƒntƒ}|||<||_dS)N)r?rErq)rr8rrrrrrrsószOTTableWriter.__setitem__cCs |j|S)N)r?)rr8rrrrtøszOTTableWriter.__getitem__cCs |j|=dS)N)r?)rr8rrrÚ __delitem__ûszOTTableWriter.__delitem__cCsPd}xF|jD]<}t|dƒr&||j7}q t|dƒr<||j7}q |t|ƒ}q W|S)zrmrkr5rxÚ packULongÚ packUShortrHÚerrorÚgetOverflowErrorRecordrÚ packUInt24Ú ValueErrorr)rrwr>ÚnumItemsr<r€rrrrr} s$      zOTTableWriter.getDatacCs t|jƒS)N)Úhashrw)rrrrÚ__hash__&szOTTableWriter.__hash__cCs|j|ƒ}|tkr|S| S)N)Ú__eq__ÚNotImplemented)rrDÚresultrrrÚ__ne__*s zOTTableWriter.__ne__cCs,t|ƒt|ƒkrtS|j|jko*|j|jkS)N)Útyper�rxrw)rrDrrrrŒ.szOTTableWriter.__eq__cCs’t|dƒ}t|dƒ}|ri}|j}x`tt|ƒƒD]P}||}t|dƒrT|jƒ||<q0t|dƒr0|j|ƒ|s0|j||ƒ||<}q0Wt|ƒ|_dS)NÚ ExtensionÚ DontSharer|r})r5rwrkrmr|Ú _doneWritingÚ setdefaultÚtuple)rÚinternedTablesÚ isExtensionZ dontSharerwr<r€rrrr“3s     zOTTableWriter._doneWritingc Cs$d|t|ƒ<t|jƒ}tt|ƒƒ}|jƒt|dƒ}|}|r\|dk sLtdƒ‚|di}}}d}t|dƒr¸x0t|ƒD]$} |j| } t| ddƒdkrtd}PqtWt| ƒ|kr¸| j |||ƒnx\|D]T} |j| } t| dƒsØq¾|rö| d kröt| ddƒdkröq¾t| ƒ|kr¾| j |||ƒq¾q¾W|j |ƒdS) NTr‘zUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFÚsortCoverageLastr8ZCoverager}r) Úidrmrwr‚rkÚreverser5rnr"Ú _gatherTablesÚappend) rÚtablesÚ extTablesÚdoner‰ZiRanger—Z selfTablesr˜r<r€rrrr›Qs8           zOTTableWriter._gatherTablesc CsÈi}|j|ƒg}g}i}|j|||ƒ|jƒ|jƒd}x|D]}||_||jƒ}qBWx|D]}||_||jƒ}qbWg}x|D]}|jƒ}|j|ƒq†Wx|D]}|jƒ}|j|ƒq¦Wt|ƒS)z+Assemble all data, including all subtables.r)r“r›ršr>r�r}rœr) rr–r�ržrŸr>r#r%Z tableDatarrrr-ˆs.     zOTTableWriter.getAllDatacCs|j|j|j|d�}||_|S)N)rx)rCr?rry)rrxZ subwriterrrrÚ getSubWriterªszOTTableWriter.getSubWritercCs|jjtjd|›�|ƒƒdS)NrG)rwrœrHÚpack)rrJrrrrÚ writeValue²szOTTableWriter.writeValuecCs2tj||ƒ}tjdkr|jƒ|jj|jƒƒdS)NrN)rOrPrQrRrwrœÚtobytes)rrJÚvaluesÚarrrÚ writeArray´s  zOTTableWriter.writeArraycCs8d|kodkns t|ƒ‚|jjtjd|ƒƒdS)Né€z>bi€ÿÿÿ)rnrwrœrHr¡)rrrrrÚ writeInt8¹s zOTTableWriter.writeInt8cCs|jd|ƒdS)NrU)r¦)rr¤rrrÚwriteInt8Array¼szOTTableWriter.writeInt8ArraycCs8d|kodkns t|ƒ‚|jjtjd|ƒƒdS)Ni€z>hi€ÿÿ)rnrwrœrHr¡)rrrrrÚ writeShort¿s zOTTableWriter.writeShortcCs|jd|ƒdS)NrX)r¦)rr¤rrrÚwriteShortArrayÂszOTTableWriter.writeShortArraycCs|jjtjd|ƒƒdS)Nz>i)rwrœrHr¡)rrrrrÚ writeLongÅszOTTableWriter.writeLongcCs|jd|ƒdS)Nr<)r¦)rr¤rrrÚwriteLongArrayÇszOTTableWriter.writeLongArraycCs8d|kodkns t|ƒ‚|jjtjd|ƒƒdS)Nréz>B)rnrwrœrHr¡)rrrrrÚ writeUInt8Ês zOTTableWriter.writeUInt8cCs|jd|ƒdS)Nr])r¦)rr¤rrrÚwriteUInt8ArrayÍszOTTableWriter.writeUInt8ArraycCs8d|kodkns t|ƒ‚|jjtjd|ƒƒdS)Nriz>H)rnrwrœrHr¡)rrrrrÚ writeUShortÐs zOTTableWriter.writeUShortcCs|jd|ƒdS)Nr`)r¦)rr¤rrrÚwriteUShortArrayÓszOTTableWriter.writeUShortArraycCs|jjtjd|ƒƒdS)Nz>I)rwrœrHr¡)rrrrrÚ writeULongÖszOTTableWriter.writeULongcCs|jd|ƒdS)Nrc)r¦)rr¤rrrÚwriteULongArrayØszOTTableWriter.writeULongArraycCsDd|kodkns t|ƒ‚tjd|ƒ}|jj|dd…ƒdS)Nriz>Lr)rnrHr¡rwrœ)rrrUrrrÚ writeUInt24Ûs  zOTTableWriter.writeUInt24cCsx|D]}|j|ƒqWdS)N)rµ)rr¤rrrrÚwriteUInt24Arrayßs zOTTableWriter.writeUInt24ArraycCs0t|ƒjƒ}t|ƒdks t|ƒ‚|jj|ƒdS)Nr )rr£rmrnrwrœ)rÚtagrrrÚwriteTagãs zOTTableWriter.writeTagcCs|jj|ƒdS)N)rwrœ)rÚ subWriterrrrÚ writeSubTableèszOTTableWriter.writeSubTablecCs t||||d�}|jj|ƒ|S)N)r~r)ÚCountReferencerwrœ)rr#r8r~rÚrefrrrÚwriteCountReferenceës z!OTTableWriter.writeCountReferencecCs tj|f|Ž}|jj|ƒdS)N)rHr¡rwrœ)rÚformatr¤r%rrrÚ writeStructðszOTTableWriter.writeStructcCs|jj|ƒdS)N)rwrœ)rr%rrrÚ writeDataôszOTTableWriter.writeDatacCsd}}}}|jdkr"|j}nÞ|jdkr:|j}|j}nÆt|ddƒ}t|dƒrV|j}|jdkrp|jj}|j}n�|jdkrŽ|jjj}|jj}nrdj|j|gƒ}|j}x(|rÌ|jd krÌdj|j|gƒ}|j}q¦W|�r|jdkrò|jjj}|jj}n|jj}|j}t|j||||fƒS) NZ LookupListZLookupr8zÚ repeatIndexÚSubTableÚ ExtSubTableÚ.)rÃrÂ)r8rÁr"r5ryÚjoinrr)rr€r r r rÚp1rrrr†÷s6            z$OTTableWriter.getOverflowErrorRecord)NNr)r)rN)*rrrr;rÚpropertyrzÚsetterrsrtr{r�r}r‹r�rŒr“r›r-r r¢r¦r¨r©rªr«r¬r­r¯r°r±r²r³r´rµr¶r¸rºr½r¿rÀr†rrrrr+ÝsL  7"  r+c@s2eZdZdZd dd„Zdd„Zdd„Zd d „ZdS) r»z8A reference to a Count value, not a count of references.NcCs(||_||_||_|dk r$|j|ƒdS)N)r#r8r~ÚsetValue)rr#r8r~rrrrrs zCountReference.__init__cCsD|j}|j}||dkr"|||<n|||ks@t||||fƒ‚dS)N)r#r8rn)rrr#r8rrrrÉ!s   zCountReference.setValuecCs |j|jS)N)r#r8)rrrrÚgetValue(szCountReference.getValuecCs.|j|j}|dkrd}tttdœ|j|ƒS)Nr)rrr )r#r8Ú packUInt8r„rƒr~)rÚvrrrr|*s zCountReference.getCountData)NN)rrrr;rrÉrÊr|rrrrr»s  r»cCs tjd|ƒS)Nz>B)rHr¡)rrrrrË0srËcCs tjd|ƒS)Nz>H)rHr¡)rrrrr„3sr„cCs,d|kodkns t|ƒ‚tjd|ƒS)Nrlz>I)rnrHr¡)rrrrrƒ6s rƒcCs4d|kodkns t|ƒ‚tjd|ƒdd…S)Nriz>Ir)rnrHr¡)rrrrr‡:s r‡c@s�eZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d!d d„Z dd„Z dd„Z dd„Z dd„Zd"dd„Zdd„Zdd„Zdd„Zdd „Zd S)#Ú BaseTablez0Generic base class for all OpenType (sub)tables.cCs@|jjdƒ}|r4|`|j}|`|j||ƒt||ƒSt|ƒ‚dS)Nr')Ú__dict__Úgetr'r&r$r"ÚAttributeError)rÚattrr'r&rrrÚ __getattr__Cs   zBaseTable.__getattr__cCs.|jjdƒ}|r*|`|j}|`|j||ƒdS)Nr')rÎrÏr'r&r$)rr'r&rrrÚensureDecompiledNs  zBaseTable.ensureDecompiledcCsdd}xZ|jD]P}|j|ƒ}|tkr&tSd}|jrP|j|krL||j|j}ntS|||7}q W|S)Nrr)Ú convertersÚ getRecordSizer�ÚrepeatÚaux)Úclsr'Z totalSizeÚconvr~Ú countValuerrrrÕVs   zBaseTable.getRecordSizecCs|jS)N)rÔ)rrrrÚ getConverterseszBaseTable.getConverterscCs |j|S)N)ÚconvertersByName)rr8rrrÚgetConverterByNamehszBaseTable.getConverterByNameNc CsàxÚ|jƒD]Î}|jr˜t||jƒs.t||jgƒtt||jƒƒ|j}y|j|jƒ}t||j|ƒWqØt k r”|r�|j|kr�||jj |ƒYqØXq |jr²t |jd|j ƒ r²q t||jƒrÀq t|dƒr t||jdƒq WdS)NZwriteNullOffset) rÛrÖr5r8Úsetattrrmr"r×rÝÚKeyErrorrÉÚevalrÎ)rZ propagatorrÙrÚZ count_convrrrr7ks"    zBaseTable.populateDefaultscCs¨|j|ƒi}||_�xb|jƒD�]T}|jdkrB|j|j|dƒ}|jdkr^|j|j|dƒ}|jdkrv|j|dƒ}|jdkr’|j|j|dƒ}y¨|jrðt|jtƒr®|j}n |j|krÄ||j}n ||j}||j 7}|j ||||ƒ||j<nH|j �r t |j d|ƒ �r w |j |||ƒ||j<|j �r8||j||j<Wq tk �rt}z|j}|j|f|_‚WYdd}~Xq Xq Wt|d ƒ�r”|j||ƒn |jj|ƒ|`dS) NrÂÚ LookupTyperÃZExtensionLookupTypeZ FeatureParamsZ FeatureTagZ SubStructZ MorphTypeÚpostRead)Ú readFormatZ_BaseTable__rawTablerÛr8Z getConverterrrÖÚ isinstanceÚintr×rTràÚreadÚ isPropagatedÚ ExceptionÚargsr5rârÎÚupdate)rr'r&r#rÙrÚr1r8rrrr$ƒsJ               zBaseTable.decompilec Cs|jƒt|dƒr8t|dƒ }|j|ƒ}|o4t|dƒ}nd}|jjƒ}x<|jƒD]0}|jrP|jrP|j|j ƒ}t |t ƒrP|||j <qPWt|dƒr”d|_ t|dƒr¤d|_ t|jdƒrÂ|dj|jjƒ|j|ƒ�x0|jƒD�]"}|j|j ƒ}|j�rÂ|dkrþg}t|ƒ|j}t |jtƒ�rBt|ƒ|jk�sptd |jt|ƒfƒ‚n.|j|k�r`t ||j|d �n||jj|ƒy|j||||ƒWn:tk �r¾}z|j|j d f|_‚WYdd}~XnXqØ|j�r,t |t ƒ�rü|} |j| _|j| ƒ| jƒ||j <n|j||j |jƒ} d||j <|j�rü| ||j <qØ|j�rn|j |k�rJd||j <|j||j |j||j ƒ} | |d<qØ|j�rŠt |jd|ƒ �rŠqØy|j!||||ƒWnLtk �rê}z.|dk �rÄ|jj"n|j } |j| f|_‚WYdd}~XnX|jrØ|||j <qØW|�r |`#dS) NÚpreWriteÚFormatFr˜rr’Trázexpected %d values, got %d)rz[])$rÓr5rërÎrErÛZisCountrçrÏr8rär»r˜r’rCrÉráÚ writeFormatrÖrmr×rårnr¦rèrérKr~rÀrÊr½Z isLookupTyperàÚwriterrì) rr0r&Z deleteFormatr#rÙrrÚr1r¼r8rrrr,°s|            (        zBaseTable.compilecCsdS)Nr)rr'rrrrãszBaseTable.readFormatcCsdS)Nr)rr0rrrríszBaseTable.writeFormatcCsl|r|n|jj}|dkrg}t|dƒr6|d|jfg}|j||ƒ|jƒ|j||ƒ|j|ƒ|jƒdS)Nrì)rCrr5rìÚbegintagÚnewliner3Úendtag)rÚ xmlWriterr&r9r8Z tableNamerrrr4s    zBaseTable.toXMLc Cs¢xœ|jƒD]�}|jr\t||jgƒ}xvtt|ƒƒD]&}||}|j||||jd|fgƒq0Wq |jrxt|jdt |ƒƒ rxq t||jdƒ}|j||||jgƒq WdS)NÚindex) rÛrÖr"r8rkrmZxmlWriter×ràÚvars)rròr&rÙrr<r€rrrr3 szBaseTable.toXML2c Cs€y|j|ƒ}Wntk r$‚YnX|j|||ƒ}|jrnt||jdƒ}|dkrbg}t||j|ƒ|j|ƒnt||j|ƒdS)N)rÝrßZxmlReadrÖr"r8rÞrœ)rr8r9r:r&rÙrÚseqrrrr61s zBaseTable.fromXMLcCs|j|ƒ}|tkr|S| S)N)rŒr�)rrDrŽrrrr�@s zBaseTable.__ne__cCs0t|ƒt|ƒkrtS|jƒ|jƒ|j|jkS)N)r�r�rÓrÎ)rrDrrrrŒDs zBaseTable.__eq__)N)NN)rrrr;rÒrÓÚ classmethodrÕrÛrÝr7r$r,rãrír4r3r6r�rŒrrrrrÍ?s    -^ rÍc@sFeZdZdZedd„ƒZdd„Zdd„Zdd „Zd d „Z dd d„Z d S)ÚFormatSwitchingBaseTablezsMinor specialization of BaseTable, for tables that have multiple formats, eg. CoverageFormat1 vs. CoverageFormat2.cCstS)N)r�)rØr'rrrrÕSsz&FormatSwitchingBaseTable.getRecordSizecCs|jj|jgƒS)N)rÔrÏrì)rrrrrÛWsz&FormatSwitchingBaseTable.getConverterscCs|j|j|S)N)rÜrì)rr8rrrrÝZsz+FormatSwitchingBaseTable.getConverterByNamecCs|jƒ|_dS)N)rarì)rr'rrrrã]sz#FormatSwitchingBaseTable.readFormatcCs|j|jƒdS)N)r±rì)rr0rrrrí`sz$FormatSwitchingBaseTable.writeFormatNcCstj|||||ƒdS)N)rÍr4)rròr&r9r8rrrr4cszFormatSwitchingBaseTable.toXML)NN) rrrr;rörÕrÛrÝrãrír4rrrrr÷Ns r÷c@seZdZdd„Zdd„ZdS)ÚUInt8FormatSwitchingBaseTablecCs|jƒ|_dS)N)r^rì)rr'rrrrãhsz(UInt8FormatSwitchingBaseTable.readFormatcCs|j|jƒdS)N)r¯rì)rr0rrrríksz)UInt8FormatSwitchingBaseTable.writeFormatN)rrrrãrírrrrrøgsrø)Zuint16Zuint8c Cs0yt|Stk r*td|›�ƒ‚YnXdS)NzUnsupported format type: )ÚformatSwitchingBaseTablesrßÚ TypeError)Z formatTyperrrÚ getFormatSwitchingBaseTableClasstsrûÚ XPlacementrÚ YPlacementÚXAdvanceéÚYAdvanceéÚ XPlaDeviceé Ú YPlaDeviceé@Ú XAdvDevicer§Ú YAdvDevicer®Ú Reserved1éÚ Reserved2éÚ Reserved3éÚ Reserved4éÚ Reserved5é Ú Reserved6é@Ú Reserved7é€Ú Reserved8cCs,i}x"tD]\}}}}|||f||<q W|S)N)ÚvalueRecordFormat)ÚdÚmaskr8ÚisDeviceÚsignedrrrÚ _buildDict˜src@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚValueRecordFactoryz6Given a format code, this object convert ValueRecords.cCs<g}x,tD]$\}}}}||@r |j|||fƒq W||_dS)N)rrœr¾)rÚ valueFormatr¾rr8rrrrrr¥s zValueRecordFactory.__init__cCs t|jƒS)N)rmr¾)rrrrÚ__len__¬szValueRecordFactory.__len__c CsŠ|j}|sdStƒ}xp|D]h\}}}|r2|jƒ}n|jƒ}|rv|rrddlm} |j|ƒ} t| |ƒƒ}|j| |ƒnd}t |||ƒqW|S)Nr)r) r¾Ú ValueRecordrYrar rrFr"r$rÞ) rr'r&r¾Ú valueRecordr8rrrrZ subReaderrrrÚreadValueRecord¯s"    z"ValueRecordFactory.readValueRecordc Cstxn|jD]d\}}}t||dƒ}|rR|rF|jƒ}|j|ƒ|j||ƒql|jdƒq|rb|j|ƒq|j|ƒqWdS)Nr)r¾r"r rºr,r±rª) rr0r&r!r8rrrr¹rrrÚwriteValueRecordÄs    z#ValueRecordFactory.writeValueRecordN)rrrr;rrr"r#rrrrr¡s rc@sHeZdZddd„Zdd„Zdd„Zddd „Zd d „Zd d „Zdd„Z dS)r Nc CsŒ|dk rtx0tD](\}}}}||@rt|||r0dndƒqW|dk rˆxD|jjƒD] \}}t||ƒsbqNt|||ƒqNWn|dk rˆ|jjƒ|_dS)Nr)rrÞrÎrwr5rE) rrÚsrcrr8rrÚkeyÚvalrrrrØs zValueRecord.__init__cCs,d}x"|jjƒD]}|t|dB}qW|S)Nr)rÎÚkeysÚvalueRecordFormatDict)rr¾r8rrrÚ getFormatåszValueRecord.getFormatcCs4d}x*|jjƒD]\}}|r|t|dB}qW|S)Nr)rÎrwr()rr¾r8rrrrÚgetEffectiveFormatës zValueRecord.getEffectiveFormatc Cs |dkrg}nt|ƒ}x:tdd…D]*\}}}} t||ƒr$|j|t||ƒfƒq$Wg} xFtdd…D]6\}}}} t||ƒrdt||ƒ} | dk rd| j|| fƒqdW| rô|j||ƒ|jƒx(| D] \}} | dk r¼| j|||d�q¼W|j|ƒ|jƒn|j ||ƒ|jƒdS)Nr rÿ)r8) r‚rr5rœr"rïrðr4rñZ simpletag) rròr&Z valueNamer9Z simpleItemsrr8rr¾Z deviceItemsZdeviceZ deviceRecordrrrr4òs,       zValueRecord.toXMLcCs¦ddlm}x$|jƒD]\}}t||t|ƒƒqWxn|D]f}t|tƒsHq8|\}}}t||ƒƒ} x2|D]*} t| tƒstqd| \} } } | j| | | |ƒqdWt||| ƒq8WdS)Nr)r) r rrwrÞrårär•r"r6)rr8r9r:r&rÚkrÌÚelementrZelem2Zname2Zattrs2Zcontent2rrrr6 s        zValueRecord.fromXMLcCs|j|ƒ}|tkr|S| S)N)rŒr�)rrDrŽrrrr�s zValueRecord.__ne__cCs t|ƒt|ƒkrtS|j|jkS)N)r�r�rÎ)rrDrrrrŒ szValueRecord.__eq__)NN)N) rrrrr)r*r4r6r�rŒrrrrr Ôs  r )rrürr)rrýrr)r rþrr)rÿrrr)rrrr)rrrr)rrrr)r§rrr)r®rrr)r r rr)r r rr)r rrr)rrrr)rrrr)rrrr)rrrr)%ZfontTools.misc.textToolsrrrrPrOrHÚloggingÚ getLoggerrr.Úobjectrrèrrrmr¡rnÚitemsizer!r+r»rËr„rƒr‡rÍr÷rørùrûrrr(rr rrrrÚs`   Ql> 3