a
    —Æàg¶  ã                   @   sN  d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lZd d
lZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZe d¡Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#G dd„ de$ƒZ%d‹d d!„Z&dŒd"d#„Z'd$d%„ Z(d�d&d'„Z)dŽd(d)„Z*d�d*d+„Z+d�d,d-„Z,d‘d.d/„Z-d’d0d1„Z.d“d2d3„Z/ej0fd4d5„Z1d”d6d7„Z2d8d9„ Z3d:d;„ Z4d<d=„ Z5d>d?„ Z6G d@dA„ dAe7ƒZ8G dBdC„ dCe8ƒZ9G dDdE„ dEe8ƒZ:G dFdG„ dGe8ƒZ;d•dHdI„Z<d–dJdK„Z=d—dLdM„Z>dNdO„ Z?dPdQ„ Z@G dRdS„ dSe7ƒZAd˜dTdU„ZBejCfdVdW„ZDejEfdXdY„ZFejCfdZd[„ZGejCfd\d]„ZHd^d_„ ZId™d`da„ZJdšdbdc„ZKd›ddde„ZLdœdfdg„ZMd�dhdi„ZNdždjdk„ZOdŸdldm„ZPdndo„ ZQdpdq„ ZRdrds„ ZSdtdu„ ZTdvdw„ ZUdxdy„ ZVdzd{„ ZWd|d}„ ZXd~d„ ZYd€d�„ ZZd d‚dƒ„Z[G d„d…„ d…e7ƒZ\d¡d†d‡„Z]d¢dˆd‰„Z^e_dŠk�rJd d
l`Z`e` ae^ƒ ¡ d
S )£é    )ÚttLib)Úcmap_classes)ÚotTables)ÚValueRecordÚvalueRecordFormatDict)Úbuilder)Úcontextmanager)ÚnewTable)ÚLOOKUP_DEBUG_ENV_VARÚLOOKUP_DEBUG_INFO_KEY)ÚsetitemNc                   @   s   e Zd ZdS )ÚMtiLibErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   úR/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/mtiLib/__init__.pyr      s   r   c                   @   s   e Zd ZdS )ÚReferenceNotFoundErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ÚFeatureNotFoundErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ÚLookupNotFoundErrorNr   r   r   r   r   r   "   s   r   zfontTools.mtiLibc                 C   sx   | d d… dv r*t j t| dd … dƒ¡S | d d… dkrNdt| dd … ƒ S |  d¡dk shJ d|  ƒ‚| stJ d	ƒ‚| S )
Né   )zU zu é   z# z	glyph%.5dú r   zSpace found in glyph name: %szGlyph name is empty)r   ÚTTFontZ_makeGlyphNameÚintÚfind)Úsr   r   r   Ú	makeGlyph)   s    r   c                 C   s   dd„ | D ƒS )Nc                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Úgr   r   r   Ú
<listcomp>4   ó    zmakeGlyphs.<locals>.<listcomp>r   )Úlr   r   r   Ú
makeGlyphs3   s    r$   c                 C   s>   |d ur2z||  }W q: t y.   t| ƒ‚Y q:0 nt| ƒ}|S ©N)ÚKeyErrorr   r   ©ÚsymÚmappingÚidxr   r   r   Ú	mapLookup7   s    r+   c                 C   sL   zt | ƒ}W n: tyF   z||  }W n ty@   t| ƒ‚Y n0 Y n0 |S r%   )r   Ú
ValueErrorr&   r   r'   r   r   r   Ú
mapFeatureD   s    r-   c                    s�   z| ||ƒ}W np t y~ } zXz6|d urR| ‡ ‡‡fdd„||¡ W W Y d }~d S W n tyf   Y n0 ‚ W Y d }~n
d }~0 0 ˆˆ ˆ|ƒ d S )Nc                    s   ˆˆ ˆ| ƒS r%   r   )Úref©Ú
collectionÚkeyÚsetterr   r   Ú<lambda>X   r"   zsetReference.<locals>.<lambda>)r   ÚaddDeferredMappingÚAttributeError)Zmapperr)   r(   r2   r0   r1   ÚmappedÚer   r/   r   ÚsetReferenceQ   s    ÿr8   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDeferredMappingc                 C   s
   g | _ d S r%   )Ú_deferredMappings©Úselfr   r   r   Ú__init__b   s    zDeferredMapping.__init__c                 C   s*   t  d|t|ƒj¡ | j |||f¡ d S )Nz*Adding deferred mapping for symbol '%s' %s)ÚlogÚdebugÚtyper   r:   Úappend)r<   r2   r(   r7   r   r   r   r4   e   s    z"DeferredMapping.addDeferredMappingc              	   C   sh   | j D ]V\}}}t d|t|ƒj¡ z| | }W n tyF   |‚Y n0 ||ƒ t d|¡ qg | _ d S )Nz,Applying deferred mapping for symbol '%s' %sz	Set to %s)r:   r>   r?   r@   r   r&   )r<   r2   r(   r7   r6   r   r   r   ÚapplyDeferredMappingsi   s    ÿ
z%DeferredMapping.applyDeferredMappingsN)r   r   r   r=   r4   rB   r   r   r   r   r9   a   s   r9   c              
      sð  t  ¡ }g }|  d¡��€ | D �]h}t|ƒdk r<| d¡ q$|\‰ }}}t dˆ |¡ t  ¡ }d |_|r|t	t
||t|dƒ nd|_t|ƒ}	dgt|	ƒ  |_}
t|	ƒD ]\}}t	t
||t|
|ƒ q¦t|jƒ|_‡ fdd	„|D ƒ}|rð|d
 j}nJt  ¡ }ˆ ddtˆ ƒ   |_t  ¡ |_| |¡ |j}d |_g |_d
|_|dk�rL||_qt  ¡ }|ddt|ƒ   |_||_|j |¡ t|jƒ|_qW d   ƒ n1 �s 0    Y  |D ]}t|jjdd„ d�|j_�q®t|dd„ d�|_t|jƒ|_|S )Nzscript tableé   Ú z#Adding script %s language-system %sÚReqFeatureIndexiÿÿ  é   c                    s   g | ]}|j ˆ kr|‘qS r   ©Ú	ScriptTag©r   r   ©Z	scriptTagr   r   r!   ”   r"   z#parseScriptList.<locals>.<listcomp>r   r   Údefaultc                 S   s   | j S r%   )Ú
LangSysTag©Úrecr   r   r   r3   ¬   r"   z!parseScriptList.<locals>.<lambda>©r1   c                 S   s   | j S r%   rG   rM   r   r   r   r3   ®   r"   )ÚotÚ
ScriptListÚbetweenÚlenrA   r>   r?   ZLangSysZLookupOrderr8   r-   ÚsetattrrE   ÚstripSplitCommaZFeatureIndexÚ	enumerater   ÚFeatureCountZScriptZScriptRecordrH   ZDefaultLangSysZLangSysRecordZLangSysCountrL   ÚsortedZScriptCount)ÚlinesÚ
featureMapr<   ÚrecordsÚlineZ
langSysTagZdefaultFeatureÚfeaturesZlangSysÚsymsÚtheListÚir(   ÚscriptZ	scriptRecZ
langSysRecr   rJ   r   ÚparseScriptListw   sd    
ú	


.ÿrb   c              
   C   sF  t  ¡ }g |_|  d¡��
 | D ]ô}|\}}}|d urX||vsJJ d| ƒ‚t|jƒ||< z,t|ƒt|jƒks‚J d|t|jƒf ƒ‚W n ty–   Y n0 t  ¡ }||_t  ¡ |_|j 	|¡ |j}	d |	_
t|ƒ}
d gt|
ƒ  |	_}t|
ƒD ]\}}tt||t||ƒ qìt|	jƒ|	_q W d   ƒ n1 �s,0    Y  t|jƒ|_|S )Nzfeature tablezDuplicate feature name: %sú%d %d)rP   ÚFeatureListZFeatureRecordrR   rS   r   r,   Z
FeatureTagZFeaturerA   ZFeatureParamsrU   ÚLookupListIndexrV   r8   r+   r   ÚLookupCountrW   )rY   Ú	lookupMaprZ   r<   r\   ÚnameZ
featureTagÚlookupsZ
featureRecÚfeaturer^   r_   r`   r(   r   r   r   ÚparseFeatureList³   s8    
þ
.rk   c                 C   sÖ   d}d }g d¢}|   ¡ d  ¡ |v rÎt| ƒ}dddddœ |d  ¡ ¡}|r‚|d  ¡ dv shJ |d ƒ‚|d  ¡ d	kr||O }q|d  ¡ d
kr¨|t|d ƒd> O }q|d  ¡ dkr|dO }t|d ƒ}q||fS )Nr   )ÚrighttoleftÚignorebaseglyphsÚignoreligaturesÚignoremarksÚmarkattachmenttypeÚmarkfiltertypeé   r   rC   é   )rl   rm   rn   ro   )ÚyesÚnort   rp   rq   r   )ÚpeeksÚlowerÚnextÚgetr   )rY   ÚflagsÚ	filtersetZallFlagsr\   Úflagr   r   r   ÚparseLookupFlagsÔ   s0    ü
ûr}   c                 C   sD   i }| D ]0}t |ƒdks J |ƒ‚t|ƒ}|d ||d < qt |¡S )Nr   rr   r   )rS   r$   ÚotlZbuildSingleSubstSubtable©rY   ÚfontÚ
_lookupMapr)   r\   r   r   r   ÚparseSingleSubstõ   s    r‚   c                 C   s4   i }| D ] }t |ƒ}|dd … ||d < qt |¡S ©Nrr   r   )r$   r~   ZbuildMultipleSubstSubtabler   r   r   r   ÚparseMultipleþ   s
    r„   c                 C   s4   i }| D ] }t |ƒ}|dd … ||d < qt |¡S rƒ   )r$   r~   ZbuildAlternateSubstSubtabler   r   r   r   ÚparseAlternate  s
    r…   c                 C   sL   i }| D ]8}t |ƒdks J |ƒ‚t|ƒ}|d |t|dd … ƒ< qt |¡S )Nr   r   rr   )rS   r$   Útupler~   ZbuildLigatureSubstSubtabler   r   r   r   ÚparseLigature  s    r‡   c                 C   s¦   i }| D ]Œ}t |ƒdks J |ƒ‚|d  ¡  dd¡}|tv s@J ‚t|d ƒ}t|d ƒ}||vrjtƒ ||< t|| |ƒr„J ||fƒ‚t|| ||ƒ qt	 
|| ¡ ¡S )NrF   r   r   rD   rr   r   )rS   ÚtitleÚreplacer   r   r   r   ÚhasattrrT   r~   ZbuildSinglePosSubtableÚgetReverseGlyphMap)rY   r€   r�   Úvaluesr\   Úwr    Úvr   r   r   ÚparseSinglePos  s    
r�   c                 C   s¦  t  ¡ }d |_|_|  ¡ d  ¡ d  ¡ }|dv �r.d|_i }| D �] }t|ƒdks^J |ƒ‚|d  ¡ d  ¡ }|dv s‚J |ƒ‚|d t|ƒd …  	¡  
dd¡}t| d }	t|dd… ƒ\}
}t|d ƒ}|
|vrÞi ||
< |||
 vrþtƒ tƒ f||
 |< ||
 | }|dk�r,| j|	O  _|d }n| j|	O  _|d }t||ƒ�rZJ ||fƒ‚t|||ƒ qDtt| ¡ ƒ|ƒ|_g |_|jjD ]’}
||
 }t  ¡ }g  }|_t| ¡ |jd	�D ]F}|| }t  ¡ }||_|d |_|j�rî|d nd |_| |¡ �qºt|jƒ|_|j |¡ �qŠt|jƒ|_�nt|  d
¡�r”d|_d d g}|  ¡ d   d¡�rÀ|  !¡ d d tdƒ …  ¡ }dt j"fdt j#fdœ| \}}|| d u �sªJ ‚t$| ||d�||< �qH|\|_"|_#dd„ |D ƒ\|_%|_&dd„ t'|j%ƒD ƒ|_(|j(D ]:}dd„ t'|j&ƒD ƒ|_)|j)D ]}tƒ |_tƒ |_�q�qþ| D ]ò}t|ƒdk�sXJ |ƒ‚|d  ¡ d  ¡ }|dv �s~J |ƒ‚|d t|ƒd …  	¡  
dd¡}t| d }	dd„ |dd… D ƒ\}}}|j(| j)| }|dk�rö| j|	O  _|j}n| j|	O  _|j}t||ƒ�r"J ||fƒ‚t|||ƒ �q>|j(D ]@}|j)D ]2}t|j|jƒ|_|j�rlt|j|jƒnd |_�qB�q8tt|j"j* ¡ ƒ|ƒ|_nd�s¢J |ƒ‚|S )Nr   ©ÚleftÚrightrr   rC   r   rD   rF   r‘   rO   Úclassr   úclass definition begin)ÚfirstÚsecond©Úklassc                 s   s    | ]}d t |j ¡ ƒ V  qdS ©rr   N)ÚmaxÚ	classDefsrŒ   )r   Úcr   r   r   Ú	<genexpr>^  s   zparsePair.<locals>.<genexpr>c                 S   s   g | ]}t  ¡ ‘qS r   )rP   ÚClass1Record©r   r`   r   r   r   r!   a  r"   zparsePair.<locals>.<listcomp>c                 S   s   g | ]}t  ¡ ‘qS r   )rP   ÚClass2Record)r   Újr   r   r   r!   c  r"   c                 s   s   | ]}t |ƒV  qd S r%   ©r   ©r   Úxr   r   r   r�   m  r"   )+rP   ZPairPosZValueFormat1ZValueFormat2rv   Úsplitrw   ÚFormatrS   rˆ   r‰   r   r$   r   r   rŠ   rT   ÚmakeCoverageÚsetÚkeysÚCoverageZPairSetÚglyphsZPairValueRecordrX   Ú
getGlyphIDZSecondGlyphZValue1ZValue2rA   ZPairValueCountZPairSetCountÚendswithÚpeekZ	ClassDef1Z	ClassDef2ÚparseClassDefZClass1CountZClass2CountÚrangerž   r    r›   )rY   r€   r�   r<   ÚtyprŒ   r\   ZsideÚwhatÚmaskZglyph1Zglyph2ÚvalueZrec2ZvrZvalues1Zpairsetr[   Zvalues2Úpairr›   r*   r˜   Zrec1Zclass1Zclass2r   r   r   Ú	parsePair&  s²    

 



þýÿ

 


ÿýr¶   c                 C   s^   |   ¡ d  ¡ d  ¡ }|dv rT|  d¡� t| |ƒW  d   ƒ S 1 sJ0    Y  t| |ƒS )Nr   r�   )zfirstclass definition beginzsecondclass definition begin)rv   r¥   rw   Úuntilr¶   )rY   r€   r�   r±   r   r   r   ÚparseKernset†  s    ÿ(r¸   c                 C   s`   t | ƒdksJ ‚|ƒ }d|_t| d ƒ\|_|_t | ƒdkr\| d dkr\d|_t| d ƒ|_|S )Nr   rr   r   rD   )rS   r¦   ÚintSplitCommaZXCoordinateZYCoordinater   ZAnchorPoint)Údatar˜   Úanchorr   r   r   Ú
makeAnchor�  s    r¼   c                 C   sª   i }| D ]�}t |ƒdv s J |ƒ‚dtjfdtjfdœ|d  \}}t|d ƒ}||vrbd d g||< || | d u s~J ||fƒ‚t|dd … |ƒ|| |< qt || ¡ ¡S )N)rF   rC   r   rr   )ÚentryÚexitr   )	rS   rP   ZEntryAnchorZ
ExitAnchorr   r¼   r~   ZbuildCursivePosSubtabler‹   )rY   r€   r�   r[   r\   r*   r˜   Úglyphr   r   r   ÚparseCursive›  s    þýrÀ   c                 C   sF   g }|j D ]6}| | \}}| ¡ }||_t||j|ƒ | |¡ q
|S r%   )r«   ZMarkRecordClassÚClassrT   Z
MarkAnchorrA   )rº   Úcoveragerœ   r[   r¿   r˜   r»   Úrecordr   r   r   ÚmakeMarkRecords«  s    
rÄ   c                 C   sœ   g }i }|j D ]:}t|ƒ||< | ¡ }d g| }t||j|ƒ | |¡ q|  ¡ D ]D\\}}	}
|||  }t||jƒ}||	 d u sŽJ ||	fƒ‚|
||	< qR|S r%   )r«   rS   ZBaseRecordClassrT   Z
BaseAnchorrA   ÚitemsÚgetattr)rº   rÂ   rœ   Ú
classCountr[   r*   r¿   rÃ   Úanchorsr˜   r»   r   r   r   ÚmakeBaseRecords¶  s    


rÉ   c                 C   sè   d gt |jƒ }dd„ t|jƒD ƒ}|  ¡ D ]¶\\}}}}	}
|||  }|d u r–t ¡  }||| < |	|_dd„ t|	ƒD ƒ|_|jD ]}d g| |_	q„|j|	ks°J ||j|	fƒ‚|j|d  j	}|| d u sÚJ |||fƒ‚|
||< q,|S )Nc                 S   s   i | ]\}}||“qS r   r   )r   r`   r    r   r   r   Ú
<dictcomp>É  r"   z'makeLigatureRecords.<locals>.<dictcomp>c                 S   s   g | ]}t  ¡ ‘qS r   )rP   ÚComponentRecordrŸ   r   r   r   r!   Ð  r"   z'makeLigatureRecords.<locals>.<listcomp>rr   )
rS   r«   rV   rÅ   rP   ÚLigatureAttachZComponentCountr°   rË   ZLigatureAnchor)rº   rÂ   rœ   rÇ   r[   r*   r¿   r˜   ZcompIdxZ	compCountr»   rÃ   ZcompRecrÈ   r   r   r   ÚmakeLigatureRecordsÇ  s&    
ý
rÍ   c                 C   s:  |  ¡ }d|_i }i }||jf||jf||jfdœ}d}| D ]Ð}|d }	|	dv sTJ ‚t|d ƒ}
||	 \}}|	dkrxdnd}tdd„ |dd| … D ƒƒ}t|d|  ƒ}t|d| d … |ƒ}|	d	krØ|
||f }}n|
|f| | }}||vsúJ |ƒ‚|||< t||ƒ}q<t	t
| ¡ ƒ||jƒ}| ¡ }t|||ƒ}t||j|ƒ t||jt|ƒƒ t||j|ƒ t||j|ƒ |d |_|�sˆdndtd
d„ | ¡ D ƒƒ |_t	t
dd„ | ¡ D ƒƒ||jƒ}| ¡ }|jdk�rêt||||jƒ}nt||||jƒ}t||j|ƒ t||jt|ƒƒ t||j|ƒ t||j |ƒ |S )Nrr   )ÚmarkÚbaseÚligaturer   rÐ   r   c                 s   s   | ]}t |ƒV  qd S r%   r¢   rŸ   r   r   r   r�   ð  r"   z'parseMarkToSomething.<locals>.<genexpr>rF   rÎ   c                 s   s   | ]\}}|d  V  qdS r™   r   )r   ÚkrŽ   r   r   r   r�     r"   c                 S   s   g | ]}|d  ‘qS )r   r   ©r   rÑ   r   r   r   r!     r"   z(parseMarkToSomething.<locals>.<listcomp>ÚLigature)!ÚTyper¦   ZMarkAnchorClassZBaseAnchorClassr   r†   r   r¼   rš   r§   r¨   r©   ZMarkCoverageClassZMarkArrayClassrÄ   rT   Z
MarkRecordZ	MarkCountrS   ZMarkCoverageZ	MarkArrayZ
ClassCountrÅ   rÇ   ZBaseCoverageClassZBaseArrayClassÚBaserÍ   rÉ   Z
BaseRecordZ	BaseCountZBaseCoverageZ	BaseArray)rY   r€   rœ   r<   ZmarkDataZbaseDataZDataZmaxKlassr\   r±   r¿   rº   ZanchorClassZ
extraItemsÚextrasr˜   r»   r1   r´   ZmarkCoverageZ	markArrayZmarkRecordsZbaseCoverageZ	baseArrayZbaseRecordsr   r   r   ÚparseMarkToSomethingß  sZ    ý
&ÿr×   c                   @   s   e Zd Zdd„ ZdS )Ú
MarkHelperc                 C   s~   dD ]t}dD ]j}|| }|dkr.|dv r.|}nt | |ƒ| }|dkrHd}t| ||ƒ |dkrt t|ƒ}t| |d |ƒ qqd S )	N)ÚMarkrÕ   )rª   ÚArrayÚCountÚRecordÚAnchorrÙ   )rÛ   rÜ   rÝ   ZLigatureRecordrÌ   rÛ   rÁ   )rÆ   rT   rP   )r<   ZWhichZWhatr1   r´   r˜   r   r   r   r=     s    
zMarkHelper.__init__N©r   r   r   r=   r   r   r   r   rØ     s   rØ   c                   @   s   e Zd ZdZdZejZdS )ÚMarkToBaseHelperrÙ   rÕ   N)r   r   r   rÙ   rÕ   rP   ZMarkBasePosrÔ   r   r   r   r   rß   (  s   rß   c                   @   s   e Zd ZdZdZejZdS )ÚMarkToMarkHelperZMark1ZMark2N)r   r   r   rÙ   rÕ   rP   ZMarkMarkPosrÔ   r   r   r   r   rà   .  s   rà   c                   @   s   e Zd ZdZdZejZdS )ÚMarkToLigatureHelperrÙ   rÓ   N)r   r   r   rÙ   rÕ   rP   Z
MarkLigPosrÔ   r   r   r   r   rá   4  s   rá   c                 C   s   t | |tƒ ƒS r%   )r×   rß   ©rY   r€   r�   r   r   r   ÚparseMarkToBase:  s    rã   c                 C   s   t | |tƒ ƒS r%   )r×   rà   râ   r   r   r   ÚparseMarkToMark>  s    rä   c                 C   s   t | |tƒ ƒS r%   )r×   rá   râ   r   r   r   ÚparseMarkToLigatureB  s    rå   c                 C   s   | rdd„ |   d¡D ƒS g S )Nc                 S   s   g | ]}|  ¡ ‘qS r   ©ÚstriprI   r   r   r   r!   G  r"   z#stripSplitComma.<locals>.<listcomp>ú,©r¥   ©r\   r   r   r   rU   F  s    rU   c                 C   s   | rdd„ |   d¡D ƒS g S )Nc                 S   s   g | ]}t |ƒ‘qS r   r¢   rŸ   r   r   r   r!   K  r"   z!intSplitComma.<locals>.<listcomp>rè   ré   rê   r   r   r   r¹   J  s    r¹   c                   @   s   e Zd Zdd„ ZdS )ÚContextHelperc                 C   st  |  d¡rd}d}nd}d}| d¡r4d}d}d}nd}d}d}|| }|| _|| _|| _|| _|| _|| _|d	 | _|dkrÈd
d„ }	dd„ }
dd„ }dd„ }d }d }dd„ }dd„ }dd„ }dd„ }nº|dk�r$dd„ }	dd„ }
dd„ }dd„ }dd„ }dd„ }dd„ }dd„ }d d„ }d!d„ }n^|dk�rpd"d„ }	d#d„ }
d }d }d }d }d$d„ }d%d„ }d&d„ }d'd„ }nd�s‚J d(| ƒ‚|�r¨|
| _	|| _
|| _|| _|| _n|	| _	|| _
|| _|| _|| _|dk�r|d) | _|d* | _|d+ | _|d, | _d-d„ | _nl|dk�rp|d. | _|d/ | _|d0 | _|d1 | _d2d„ | _|�rJd3nd4| _|�rZdnd| _|�rjd5nd6| _d S )7NZSubstÚSubZPosÚChainrr   rF   rD   r   ÚLookupRecordc                 S   s   | j S r%   ©rª   ©Úrr   r   r   r3   k  r"   z(ContextHelper.__init__.<locals>.<lambda>c                 S   s   | j S r%   rï   rð   r   r   r   r3   l  r"   c                 S   s   dS )Nr%   r   rð   r   r   r   r3   m  r"   c                 S   s   dS )N)NNNr   rð   r   r   r   r3   n  r"   c                 S   s   | j fS r%   )ÚInputrð   r   r   r   r3   q  r"   c                 S   s   | j | j| jfS r%   ©Ú	Backtrackrò   Ú	LookAheadrð   r   r   r   r3   r  r"   c                 S   s   |\| _ dd„ |D ƒ\| _d S )Nc                 s   s   | ]}t |ƒd  V  qdS r™   ©rS   r£   r   r   r   r�   v  r"   ú>ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>)rò   Ú
GlyphCount©rñ   Údr   r   r   ÚSetRuleDatat  s    z+ContextHelper.__init__.<locals>.SetRuleDatac                 S   sF   |\| _ | _| _t|d ƒt|d ƒd t|d ƒ  | _| _| _d S ©Nr   rr   r   ©rô   rò   rõ   rS   ÚBacktrackGlyphCountÚInputGlyphCountÚLookAheadGlyphCountrù   r   r   r   ÚChainSetRuleDatax  s    $üýz0ContextHelper.__init__.<locals>.ChainSetRuleDatar   c                 S   s   | j S r%   rï   rð   r   r   r   r3   �  r"   c                 S   s   | j S r%   rï   rð   r   r   r   r3   ‚  r"   c                 S   s   | j fS r%   ©ÚClassDefrð   r   r   r   r3   ƒ  r"   c                 S   s   | j | j| jfS r%   ©ÚBacktrackClassDefÚInputClassDefÚLookAheadClassDefrð   r   r   r   r3   „  s    ýc                 S   s   |\| _ d S r%   r  rù   r   r   r   ÚSetContextDataŠ  s    z.ContextHelper.__init__.<locals>.SetContextDatac                 S   s   |\| _ | _| _d S r%   r  rù   r   r   r   ÚSetChainContextData�  s    z3ContextHelper.__init__.<locals>.SetChainContextDatac                 S   s   | j fS r%   )rÁ   rð   r   r   r   r3   �  r"   c                 S   s   | j | j| jfS r%   ró   rð   r   r   r   r3   ‘  r"   c                 S   s   |\| _ dd„ |D ƒ\| _d S )Nc                 s   s   | ]}t |ƒd  V  qdS r™   rö   r£   r   r   r   r�   •  r"   r÷   )rÁ   rø   rù   r   r   r   rû   “  s    c                 S   sF   |\| _ | _| _t|d ƒt|d ƒd t|d ƒ  | _| _| _d S rü   rý   rù   r   r   r   r  —  s    $üýc                 S   s
   | j d S ©Nr   rï   rð   r   r   r   r3      r"   c                 S   s
   | j d S r
  )ÚInputCoveragerð   r   r   r   r3   ¡  r"   c                 S   s   | j S r%   rï   rð   r   r   r   r3   ¦  r"   c                 S   s   | j | j | j S r%   )ÚBacktrackCoverager  ÚLookAheadCoveragerð   r   r   r   r3   §  s    c                 S   s   |\| _ dd„ |D ƒ\| _d S )Nc                 s   s   | ]}t |ƒV  qd S r%   rö   r£   r   r   r   r�   ­  r"   r÷   )rª   rø   rù   r   r   r   rû   «  s    c                 S   s.   |\| _ | _| _dd„ |D ƒ\| _| _| _d S )Nc                 s   s   | ]}t |ƒV  qd S r%   rö   r£   r   r   r   r�   µ  r"   zCContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>)r  r  r  rþ   rÿ   r   rù   r   r   r   r  ¯  s    üýzunknown format: %sÚRuleÚ	RuleCountÚRuleSetÚRuleSetCountc                 S   s   || v r|gS g S r%   r   ©r«   rœ   rñ   r   r   r   r3   Ì  r"   Z	ClassRuleZClassRuleCountZClassSetZClassSetCountc                 S   s&   |r|  | |¡S |dkr t| ƒS tƒ S r
  )Zintersect_classr¨   r  r   r   r   r3   Ò  s    ÿr  r  rò   rÁ   )r­   Ú
startswithÚTyprÔ   rí   ÚChainTypÚInputIdxÚDataLenrî   rª   ÚContextDatar  ÚRuleDatarû   r  r  r  r  Z	Intersectr  ZClassDefIndexrò   )r<   Ú	klassNamer¦   r  rÔ   rí   r  r  r  rª   ZChainCoverager  ZChainContextDatar  r	  r  ZChainRuleDatarû   r  r   r   r   r=   P  s     







	










zContextHelper.__init__NrÞ   r   r   r   r   rë   O  s   rë   c                 C   s„   t t|ƒ}g }| D ]l}|ƒ }t|ƒ}t|ƒdks8J |ƒ‚t|d ƒ}|dksTJ |ƒ‚|d |_tt||d t|dƒ | 	|¡ q|S )Nr   r   rr   re   )
rÆ   rP   rU   rS   r   ZSequenceIndexr8   r+   rT   rA   )rÅ   r  rg   r˜   ÚlstÚitemrN   r*   r   r   r   ÚparseLookupRecordsÝ  s    

r  c                 C   s   | sd S |ƒ }t | ƒ|_|S r%   )Údictr›   )r›   r€   r˜   r<   r   r   r   ÚmakeClassDefì  s
    
r  c                 C   sp   i }|   d¡�F | D ]0}t|d ƒ}||vs4J |ƒ‚t|d ƒ||< qW d   ƒ n1 sZ0    Y  t|||ƒS )Nzclass definitionr   rr   )rR   r   r   r  )rY   r€   r˜   r›   r\   r¿   r   r   r   r¯   ô  s    0r¯   c                 C   s8   | sd S t | tƒrt| ƒ} |ƒ }tt| ƒ|jd�|_|S )NrO   )Ú
isinstancer¨   rX   r¬   r«   )r«   r€   r˜   rÂ   r   r   r   r§   þ  s    
r§   c                 C   sV   g }|   d¡�, | D ]}| t|d ƒ¡ qW d   ƒ n1 s@0    Y  t|||ƒS )Nzcoverage definitionr   )rR   rA   r   r§   )rY   r€   r˜   r«   r\   r   r   r   ÚparseCoverage  s
    2r!  c                    s$  i }|D ]>\}}|  |ˆ j d g ¡ t‡ fdd„t|ƒD ƒƒ|f¡ qg }|D ]®}||vrh| d ¡ qPg }	|| D ]P\}}ttˆ jƒƒ }
ˆ  |
|¡ t	|
ˆ j
d t|ƒƒ t	|
ˆ j|ƒ |	 |
¡ qtttˆ jƒƒ }t	|ˆ j|	ƒ t	|ˆ jt|	ƒƒ | |¡ qPt	| ˆ j|ƒ t	| ˆ jt|ƒƒ d S )Nr   c                 3   s,   | ]$\}}||ˆ j krd ndd… V  qdS )rr   r   N©r  )r   r`   r   ©rœ   r   r   r�     r"   z!bucketizeRules.<locals>.<genexpr>rÛ   )Ú
setdefaultr  rA   r†   rV   rÆ   rP   r  rû   rT   rÔ   rS   rî   r  r  r  )r<   rœ   ÚrulesZ
bucketKeysZbucketsÚseqÚrecsZrulesetsZ
firstGlyphZ	thisRulesZruleZrulesetr   r#  r   ÚbucketizeRules  s.    ÿ
r(  c                    sb  t t|ƒƒ }|  ¡ d  ¡ d  ¡ }|dk�rd|_t d||j¡ t||jƒ‰ g }| D ]ˆ}|d  ¡ dksxJ |d ƒ‚t	|ƒdˆ j
 k r–| d¡ qxtdd„ |ddˆ j
 … D ƒƒ}t|dˆ j
 d … ˆ j|ƒ}	| ||	f¡ qXt‡ fdd„|D ƒƒ}
t|
|ƒ|_t|ˆ ||jjƒ �nD| d	¡�rød
|_t d||j¡ t||jƒ‰ d gˆ j
 }|  ¡ d  d¡�rî|  ¡ d d t	dƒ …  ¡ }ddtjfidtjfdtjfd
tjfdœdœˆ j
 | \}}|| d u �sØJ |ƒ‚t| ||d�||< �qTˆ  ||¡ g }| D ]’}|d  ¡  d	¡�s&J |d ƒ‚t	|ƒdˆ j
 k �rH| d¡ �q&tdd„ |ddˆ j
 … D ƒƒ}t|dˆ j
 d … ˆ j|ƒ}	| ||	f¡ �qt‡ fdd„|D ƒƒ‰t‡fdd„|ˆ j j ¡ D ƒƒ}
t|
|ƒ|_t|ˆ |t t!ˆƒd ƒƒ �nf| d¡�rPd|_t d||j¡ t||jƒ‰ tdd„ t ˆ j
ƒD ƒƒ}|  ¡ d  d¡�rÈ|  ¡ d d t	dƒ …  ¡ }ddtjfidtj"fdtj#fd
tj$fdœdœˆ j
 | \}}||  t%| ||d�¡ �q>ˆ  &||¡ t'| ƒ} t	| ƒdk�sîJ ‚| d }|d  ¡ dk�sJ |d ƒ‚t|dd … ˆ j|ƒ}	t(|ˆ j)d t	|	ƒƒ t(|ˆ j|	ƒ nd�s^J |ƒ‚|S )Nr   r¿   rr   zParsing %s format %srD   c                 s   s   | ]}t t|ƒƒV  qd S r%   )r$   rU   rŸ   r   r   r   r�   9  r"   zparseContext.<locals>.<genexpr>c                 3   s    | ]\}}|ˆ j  d  V  qdS ©r   Nr"  ©r   r&  r'  r#  r   r   r�   =  r"   r“   r   r”   )Ú	backtrackrD   Ú	lookahead)rr   rF   r—   c                 s   s   | ]}t |ƒV  qd S r%   )r¹   rŸ   r   r   r   r�   Y  r"   c                 3   s    | ]\}}|ˆ j  d  V  qdS r)  r"  r*  r#  r   r   r�   \  r"   c                 3   s   | ]\}}|ˆ v r|V  qd S r%   r   )r   r    rœ   )ÚfirstClassesr   r   r�   ]  s   rÂ   rF   c                 s   s   | ]
}g V  qd S r%   r   rŸ   r   r   r   r�   f  r"   úcoverage definition begin)r+  Úinputr,  rÛ   )*rÆ   rP   rv   r¥   rw   r¦   r>   r?   rë   rS   r  rA   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û   ÚlistrT   rÔ   )rY   r€   rÔ   rg   r<   r±   r%  r\   r&  r'  ZfirstGlyphsr›   r*   r˜   Ú	coveragesr   )rœ   r-  r   ÚparseContext-  s¢    
 
ÿýü	÷	÷
  ÿ
ÿýü	÷	÷
r2  c                 C   s   t | |d|d�S )NZContextSubst©rg   ©r2  ©rY   r€   rg   r   r   r   ÚparseContextSubst�  s    r6  c                 C   s   t | |d|d�S )NZ
ContextPosr3  r4  r5  r   r   r   ÚparseContextPos…  s    r7  c                 C   s   t | |d|d�S )NZChainContextSubstr3  r4  r5  r   r   r   ÚparseChainedSubst‰  s    r8  c                 C   s   t | |d|d�S )NZChainContextPosr3  r4  r5  r   r   r   ÚparseChainedPos�  s    r9  c           	         s   t  ¡ }d|_g g f}|  ¡ d  d¡r~|  ¡ d d tdƒ …  ¡ }dt jfdt j	fdœ| \}}||  
t| ||d�¡ q|d |_t|jƒ|_|d |_	t|j	ƒ|_i ‰ | D ]0}t|ƒdksÊJ |ƒ‚t|ƒ}|d ˆ |d < q²ttˆ  ¡ ƒ|ƒ|_‡ fdd„|jjD ƒ|_t|jƒ|_|S )	Nrr   r   r.  )r+  r,  r—   r   c                    s   g | ]}ˆ | ‘qS r   r   rÒ   ©r)   r   r   r!   ¦  r"   z,parseReverseChainedSubst.<locals>.<listcomp>)rP   ZReverseChainSingleSubstr¦   rv   r­   r®   rS   rw   r  r  rA   r!  rþ   r   r$   r§   r¨   r©   rª   r«   Z
Substituterø   )	rY   r€   r�   r<   r1  r±   r*   r˜   r\   r   r:  r   ÚparseReverseChainedSubst‘  s0    þý

r;  c                 C   s¦  |   d¡}|\}}}t d||¡ t ¡ }t| ƒ\|_}	|	d urF|	|_dtfdt	fdt
fdtfdtfdtfd	tfd
œdtfdtfdtfdtfdtfdtfdtfdtfd	tfdœ	dœ| | \|_}
|  d¡�˜ g }|  ¡ �rV|  d¡�D |  ¡ �r|
| ||ƒ}|j|jk�sJ ‚| |¡ qèW d   ƒ n1 �s20    Y  |  ¡ d dv rÒt| ƒ qÒW d   ƒ n1 �sl0    Y  |   d¡ ||_t|jƒ|_ |j dk�r¢d S |S )NÚlookupzParsing lookup type %s %srr   r   rF   rC   é   é   rs   )ÚsingleÚmultipleÚ	alternaterÐ   ÚcontextÚchainedZreversechainedé   )	r?  rµ   ZkernsetZcursivezmark to basezmark to ligaturezmark to markrB  rC  ©ÚGSUBÚGPOSz
lookup end)ú
% subtablezsubtable endr   )!Úexpectr>   r?   rP   ÚLookupr}   Z
LookupFlagZMarkFilteringSetr‚   r„   r…   r‡   r6  r8  r;  r�   r¶   r¸   rÀ   rã   rå   rä   r7  r9  Z
LookupTyper·   r®   rA   rv   rx   ZSubTablerS   ZSubTableCount)rY   ÚtableTagr€   rg   r\   Ú_rh   r±   r<  r{   ZparseLookupSubTableZ	subtablesZsubtabler   r   r   ÚparseLookup«  s\    

ù
÷öëë


,*
rM  c                    sV  t  |¡ƒ }tƒ ‰tƒ ‰ |dv s$J ‚t d|¡ tt|ƒƒ }d|_d‡ fdd„fd‡ ‡fdd„fd	d
œ}| ¡ D ]\}}t	||d ƒ qp|  
¡ d u�r¬|  
¡ d  ¡ }||vrÆt d|  
¡ ¡ t| ƒ q†|| \}}|dk�r‚|jd u røt ¡ |_g |j_|  
¡ \}	}
}	t| ||ˆƒ}ˆd u�rF|
ˆv�s4J d|
 ƒ‚t|jjƒˆ|
< n,t|
ƒt|jjƒk�srJ d|
t|jƒf ƒ‚|jj |¡ q†t||ƒd u �sšJ |ƒ‚t	|||| ƒƒ q†|j�rÄt|jjƒ|j_ˆd u�rLˆ ¡  tj t¡�rDd|v�rtdƒ|d< i |d _|d j ti ¡ |i ¡}ˆ ¡ D ]\}
}d|
dg|t|ƒ< �q&ˆ  ¡  ||_|S )NrE  z
Parsing %sé   rQ   c                    s
   t | ˆ ƒS r%   )rb   ©rY   )rZ   r   r   r3   ë  r"   zparseGSUBGPOS.<locals>.<lambda>rd   c                    s   t | ˆˆ ƒS r%   )rk   rO  ©rZ   rg   r   r   r3   ï  r"   )Ú
LookupListN)zscript table beginzfeature table beginr<  r   úSkipping %sr<  zDuplicate lookup name: %src   ZDebgrD   ) r   ÚgetTableClassr9   r>   r?   rÆ   rP   ÚVersionrŒ   rT   r®   rw   rx   rQ  rJ  rM  rS   r   rA   rf   rB   ÚosÚenvironry   r
   r	   rº   r$  r   rÅ   ÚstrÚtable)rY   r€   rK  Ú	containerr<   ÚfieldsÚattrÚparserr±   rL  rh   r<  r?   r   rP  r   ÚparseGSUBGPOSà  sv    
þþ÷



þ



ÿþÿr]  c                 C   s   t | |dƒS )NrF  ©r]  ©rY   r€   r   r   r   Ú	parseGSUB#  s    r`  c                 C   s   t | |dƒS )NrG  r^  r_  r   r   r   Ú	parseGPOS'  s    ra  c                 C   s~   i }|   d¡�P | D ]:}t|d ƒ}||vs4J |ƒ‚dd„ |dd … D ƒ||< qW d   ƒ n1 sd0    Y  t || ¡ ¡S )Nzattachment listr   c                 S   s   g | ]}t |ƒ‘qS r   r¢   rŸ   r   r   r   r!   1  r"   z#parseAttachList.<locals>.<listcomp>rr   )rR   r   r~   ZbuildAttachListr‹   )rY   r€   Zpointsr\   r¿   r   r   r   ÚparseAttachList+  s    :rb  c                 C   s¤   i }|   d¡�t | D ]^}t|d ƒ}||vs4J |ƒ‚t|d ƒ}dd„ |dd … D ƒ}|t|ƒksjJ |ƒ‚|||< qW d   ƒ n1 sˆ0    Y  t |i | ¡ ¡S )NÚcaretsr   rr   c                 S   s   g | ]}t |ƒ‘qS r   r¢   rŸ   r   r   r   r!   <  r"   z"parseCaretList.<locals>.<listcomp>r   )rR   r   r   rS   r~   ZbuildLigCaretListr‹   )rY   r€   rc  r\   r¿   ÚnumZ
thisCaretsr   r   r   ÚparseCaretList5  s    (re  c                 C   s\   t  ¡ }d|_dt|  ¡ ƒ |_d g|j |_t|  ¡ ƒD ]\}}t	t
|ƒ|ƒ|j|< q:|S )Nrr   )rP   ÚMarkGlyphSetsDefZMarkSetTableFormatrš   r©   ZMarkSetCountrª   rX   rÅ   r§   r¨   )Úsetsr€   r<   rÑ   rŽ   r   r   r   ÚmakeMarkFilteringSetsB  s    rh  c                 C   sŒ   i }|   d¡�d | D ]N}t|ƒdks,J |ƒ‚t|d ƒ}t|d ƒ}||vrTg ||< ||  |¡ qW d   ƒ n1 sx0    Y  t||ƒS )Nzset definitionr   r   rr   )rR   rS   r   r   rA   rh  )rY   r€   rg  r\   r¿   Ústr   r   r   ÚparseMarkFilteringSetsL  s    .rj  c                 C   sö   t  d¡ƒ }t d¡ t ¡ }ddd„ fdtfdtfdd	d„ fd
tfdœ}| 	¡ D ]\}}t
||d ƒ qR|  ¡ d urØ|  ¡ d  ¡ }||vr¢t d|¡ t| ƒ qh|| \}}t||ƒd u sÄJ |ƒ‚t
|||| |ƒƒ qh|jd u rædnd|_||_|S )NÚGDEFzParsing GDEFÚGlyphClassDefc                 S   s   t | |tjd�S ©Nr—   )r¯   rP   rl  r_  r   r   r   r3   a  r"   zparseGDEF.<locals>.<lambda>Z
AttachListZLigCaretListÚMarkAttachClassDefc                 S   s   t | |tjd�S rm  )r¯   rP   rn  r_  r   r   r   r3   g  r"   rf  )r”   zattachment list beginzcarets beginz&mark attachment class definition beginzmarkfilter set definition beginr   rR  rN  i  )r   rS  r>   r?   rP   rk  rb  re  rj  rŒ   rT   r®   rw   rx   rÆ   rf  rT  rX  )rY   r€   rY  r<   rZ  r[  r\  r±   r   r   r   Ú	parseGDEFZ  s6    
þþõro  c           
         sÈ   t  d¡ƒ }t d¡ g }ˆ  ¡ d ur¸ˆ  dt|ƒ ¡ ‡ fdd„dD ƒ\}}}}t| |ƒ}||_||_	||_
i |_tˆ ƒ}	|	d dkr¬|	d	 |jt|	d d
ƒ< tˆ ƒ}	q~| |¡ qd|_||_|S )NÚcmapzParsing cmapzcmap subtable %dc                    s   g | ]}t ˆ |ƒ‘qS r   )ÚparseCmapId)r   ÚfieldrO  r   r   r!   �  s   ÿzparseCmap.<locals>.<listcomp>)Ú
platformIDZ
encodingIDÚformatÚlanguager   zend subtablerr   r   )r   rS  r>   r?   r®   rI  rS   r   rs  Z	platEncIDru  rp  rx   r   rA   ZtableVersionÚtables)
rY   r€   rY  rv  ZplatIdZencIdÚfmtÚlangrX  r\   r   rO  r   Ú	parseCmap{  s*    

þ
ry  c                 C   s$   t | ƒ}||d ksJ ‚t|d ƒS )Nr   rr   )rx   r   )rY   rr  r\   r   r   r   rq  ”  s    rq  c                 C   sÎ   t  d¡ |  ¡ }d }|d  ¡ d dkr<|d  ¡ d }n.d |d  ¡ d d… ¡dkrj|d  ¡ d }|d ur¦t| ƒ | d¡}|d u r’|}n||ks¦J ||fƒ‚|d us¶J d	ƒ‚ttt	t
d
œ| | |ƒS )NzParsing tabler   ZFontDamerr   r   rF   zFont Chef TablerC   z7Don't know what table to parse and data doesn't specify)rF  rG  rk  rp  )r>   r?   rv   r¥   Újoinrx   Úljustr`  ra  ro  ry  )rY   r€   rK  r\   Útagr   r   r   Ú
parseTableš  s4    

ÿþüûûr}  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zedd„ ƒZedd„ ƒZdd„ Zdd„ ZdS )Ú	Tokenizerc                 C   sN   t |ƒ}z|j| _W n   d | _Y n0 t |ƒ| _d| _d| _g | _d | _d S )NrD   r   )Úiterrh   ÚfilenamerY   r\   ÚlinenoÚstoppersÚbuffer)r<   ÚfrY   r   r   r   r=   ·  s    
zTokenizer.__init__c                 C   s   | S r%   r   r;   r   r   r   Ú__iter__Ä  s    zTokenizer.__iter__c                 C   s†   |  j d7  _ t| jƒ }| _dd„ | d¡D ƒ}t|ƒdkrL|d sL|d= |r‚|d s‚t d| j | jf ¡ |r‚|d s‚|d= qn|S )Nrr   c                 S   s   g | ]}|  ¡ ‘qS r   ræ   rI   r   r   r   r!   Ê  r"   z(Tokenizer._next_line.<locals>.<listcomp>ú	r   éÿÿÿÿz!trailing tab found on line %d: %s)r�  rx   rY   r\   r¥   rS   r>   Úwarning©r<   r\   r   r   r   Ú
_next_lineÇ  s    zTokenizer._next_linec                 C   s:   |   ¡ }|r |d r |d d dks0|d dkr |S q d S )Nr   ú%rH  )rŠ  r‰  r   r   r   Ú_next_nonemptyÓ  s    (zTokenizer._next_nonemptyc                 C   s"   | j r| j }d | _ |S |  ¡ S d S r%   )rƒ  rŒ  ©r<   Úretr   r   r   Ú_next_bufferedÚ  s
    zTokenizer._next_bufferedc                 C   s(   |   ¡ }|d  ¡ | jv r$|| _t‚|S r
  )r�  rw   r‚  rƒ  ÚStopIterationr‰  r   r   r   Ú__next__â  s
    zTokenizer.__next__c                 C   s   |   ¡ S r%   )r‘  r;   r   r   r   rx   é  s    zTokenizer.nextc                 C   sH   | j s*z|  ¡ | _ W n ty(   Y d S 0 | j d  ¡ | jv rBd S | j S r
  )rƒ  rŒ  r�  rw   r‚  r;   r   r   r   r®   ì  s    zTokenizer.peekc                 C   s   |   ¡ }|d ur|S dS )N)rD   )r®   r�  r   r   r   rv   ö  s    zTokenizer.peeksc                 c   sF   |d }|d }|   |¡ | j |¡ d V  | jd= |  |d ¡ d S )Nz beginz endr‡  )Úexpectendswithr‚  rA   rI  )r<   r|  ÚstartÚendr   r   r   rR   ú  s    
zTokenizer.betweenc                 c   s:   t |ƒtur|f}| j |¡ d V  | jt|ƒ d …= d S r%   )r@   r†   r‚  ÚextendrS   )r<   Útagsr   r   r   r·     s
    zTokenizer.untilc                 C   s0   t | ƒ}|d  ¡ }||ks,J d||f ƒ‚|S )Nr   zExpected '%s', got '%s')rx   rw   ©r<   r   r\   r|  r   r   r   rI    s    zTokenizer.expectc                 C   s2   t | ƒ}|d  ¡ }| |¡s.J d||f ƒ‚|S )Nr   zExpected '*%s', got '%s')rx   rw   r­   r—  r   r   r   r’    s    zTokenizer.expectendswithN)r   r   r   r=   r…  rŠ  rŒ  r�  r‘  rx   r®   rv   r   rR   r·   rI  r’  r   r   r   r   r~  ¶  s   

	
r~  c                 C   s   t | ƒ}t|||d�S )a=  Convert a Monotype font layout file to an OpenType layout object

    A font object must be passed, but this may be a "dummy" font; it is only
    used for sorting glyph sets when making coverage tables and to hold the
    OpenType layout table while it is being built.

    Args:
            f: A file object.
            font (TTFont): A font object.
            tableTag (string): If provided, asserts that the file contains data for the
                    given OpenType table.

    Returns:
            An object representing the table. (e.g. ``table_G_S_U_B_``)
    ©rK  )r~  r}  )r„  r€   rK  rY   r   r   r   Úbuild  s    r™  c              	   C   s„  ddl }ddlm} ddlm} | du r6|jdd… } |ƒ  ddl}|jdtj	d�}|j
dd	d
ddd� |j
dddddd� |j
dd
tddd� | | ¡} |du r¼| jr¶t | j¡}n|ƒ }| jD ]¼}t d|¡ t|ddd�� }t||| jd�}W d  ƒ n1 �s0    Y  | |¡}	| ¡ }
|
 |	|¡ ddlm} |j}| |j¡}| |¡ | ¡  |
 ||¡ |  |¡ | ¡  qÂdS )z©Convert a FontDame OTL file to TTX XML

    Writes XML output to stdout.

    Args:
            args: Command line arguments (``--font``, ``--table``, input files).
    r   N)ÚconfigLogger)ÚMockFontrr   zfonttools mtiLib)Údescriptionz--fontz-fÚFILEr€   zDInput TTF files (used for glyph classes and sorting coverage tables))ÚmetavarÚdestÚhelpz--tablez-tZTABLErK  z7Table to fill (sniffed from input file if not provided)Úinputsú+zInput FontDame .txt files)rž  r@   Únargsr   zProcessing %sÚrtzutf-8)Úencodingr˜  )Ú	xmlWriter)!ÚsysÚ	fontToolsrš  ZfontTools.misc.testToolsr›  ÚargvÚargparseÚArgumentParserÚmainÚ__doc__Úadd_argumentrW  Ú
parse_argsr€   r   r   r¡  r>   r?   Úopenr™  rK  ÚcompileÚ	__class__Z	decompileZfontTools.miscr¦  Z	XMLWriterÚstdoutZbegintagÚnewlineZtoXMLZendtag)Úargsr€   r§  rš  r›  rª  r\  r„  rX  ZblobZ
decompiledr¦  r|  Úwriterr   r   r   r¬  -  s`    þûû
ÿ

0


r¬  Ú__main__)N)NN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)br¨  r   ZfontTools.ttLib.tables._c_m_a_pr   ZfontTools.ttLib.tablesr   rP   ZfontTools.ttLib.tables.otBaser   r   ZfontTools.otlLibr   r~   Ú
contextlibr   ZfontTools.ttLibr	   Z fontTools.feaLib.lookupDebugInfor
   r   Úoperatorr   rU  ÚloggingÚ	Exceptionr   r   r   r   Ú	getLoggerr>   r   r$   r+   r-   r8   r  r9   rb   rk   r}   r‚   r„   r…   r‡   r�   r¶   r¸   rÝ   r¼   rÀ   rÄ   rÉ   rÍ   r×   ÚobjectrØ   rß   rà   rá   rã   rä   rå   rU   r¹   rë   r  rª   r  r  r¯   r§   r!  r(  r2  r6  r7  r8  r9  r;  rM  r]  r`  ra  rb  re  rh  rj  ro  ry  rq  r}  r~  r™  r¬  r   r§  r¾   r   r   r   r   Ú<module>	   sœ   


<
!!
	


	

`


8


 



T





5C

!
c

J
