U
    Dvf                     @   s~   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZe	e
ZG dd deZdZG dd	 d	eZG d
d deZdS )    )ttLib)safeEval)DefaultTableNc                   @   s   e Zd ZdS )TTXParseErrorN)__name__
__module____qualname__ r	   r	   </tmp/pip-unpacked-wheel-qlge9rch/fontTools/misc/xmlReader.pyr      s   r   i @  c                   @   sH   e Zd ZdddZdddZdd Zd	d
 Zdd Zdd Zdd Z	dS )	XMLReaderNFc                 C   s   |dkrt j}t|ds,t|d| _d| _n|| _d| _|| _|| _|d k	rhddlm	} |dd	 || _
d | _g | _|| _d| _d S )
N-readrbTFr   )deprecateArgumentquietzconfigure logging instead)sysstdinhasattropenfile_closeStreamttFontprogressZfontTools.misc.loggingToolsr   r   rootcontentStackcontentOnly	stackSize)selfZ
fileOrPathr   r   r   r   r   r	   r	   r
   __init__   s"    

zXMLReader.__init__c                 C   s   |r|  j d7  _ | jrR| jdd | j }| jd|d pBd | jd | | j | jrl|   |r~|  j d8  _ d S )N   r      d   )	r   r   r   seektellset
_parseFiler   close)r   ZrootlessZfileSizer	   r	   r
   r   ,   s    
zXMLReader.readc                 C   s   | j   d S N)r   r&   )r   r	   r	   r
   r&   :   s    zXMLReader.closec                 C   s~   ddl m} | }| j|_| j|_| j|_d}|t	}|sJ|
|d qz|t| }| jrl| j|d  |
|d q.d S )Nr   )ParserCreater   r!   )xml.parsers.expatr(   _startElementHandlerStartElementHandler_endElementHandlerEndElementHandler_characterDataHandlerCharacterDataHandlerr   BUFSIZEParselenr   r$   )r   r   r(   parserposchunkr	   r	   r
   r%   =   s    
zXMLReader._parseFilec                 C   s  | j dkr&| jr&| jg  d| _ d S | j }|d | _ |d}|d k	r|t| jdrftj	| jj
}nt }tj||}|s|dkrtd| | jjd kr| jjs|d}|d k	rt|dkrtd	| d	 }|| j_| jg  n|dkr|d k	r*t|| j| j}|  | jg  d S t|}d
| }	| jrP| j|	 t|	 |dkrltj}
n@d|ksd|krt|d rt}
nt|}
|
d krt}
|dkr|| jkr| j| | _n|
|| _| j| j|< | jg  n|dkr:|d k	r:t|| j| jdd}|  | jg  |j | _ nP|dkrd| jg  ||| jd f| _ n&g }| jd |||f | j| d S )Nr   r    srcnamer   zillegal root tag: %ssfntVersion   "zParsing '%s' table...
GlyphOrderERRORrawZlocaT)r   )!r   r   r   appendgetr   r   ospathdirnamer7   getcwdjoinr   r   readerZtablesr2   r   r8   r   r   r   r   ZxmlToTagsetLabelloginfor;   r   ZgetTableClasscurrentTabler   )r   r7   attrsr   ZsubFilerC   r8   Z	subReadertagmsgZ
tableClasslr	   r	   r
   r*   P   sp    







"




zXMLReader._startElementHandlerc                 C   sn   | j dkrj|dkrZ| jd rZt| jd d trZ| jd d dkrZ| jd d  |7  < n| jd | d S )Nr   
r>   )r   r   
isinstancestrr?   )r   datar	   r	   r
   r.      s    
zXMLReader._characterDataHandlerc                 C   s`   | j d | _ | jd= | js\| j dkr,d | _n0| j dkr\| j\}}}| j|||| j d | _d S )Nr   r>   r    )r   r   r   r   rJ   ZfromXMLr   )r   r7   rK   contentr	   r	   r
   r,      s    

zXMLReader._endElementHandler)NNF)F)
r   r   r   r   r   r&   r%   r*   r.   r,   r	   r	   r	   r
   r      s        

Er   c                   @   s2   e Zd ZdddZdddZddd	Zd
d ZdS )ProgressPrinterr!   c                 C   s   t | d S r'   print)r   titlemaxvalr	   r	   r
   r      s    zProgressPrinter.__init__Nc                 C   s   d S r'   r	   )r   valrX   r	   r	   r
   r$      s    zProgressPrinter.setr   c                 C   s   d S r'   r	   )r   rY   r	   r	   r
   	increment   s    zProgressPrinter.incrementc                 C   s   t | d S r'   rU   )r   textr	   r	   r
   rG      s    zProgressPrinter.setLabel)r!   )N)r   )r   r   r   r   r$   rZ   rG   r	   r	   r	   r
   rT      s   


rT   )Z	fontToolsr   ZfontTools.misc.textToolsr   Z#fontTools.ttLib.tables.DefaultTabler   r   rA   logging	getLoggerr   rH   	Exceptionr   r0   objectr   rT   r	   r	   r	   r
   <module>   s   
 