
    jke                         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j                  e
      Z G d de      ZdZ G d d	e      Z G d
 de      Zy)    )ttLib)safeEval)DefaultTableNc                       e Zd Zy)TTXParseErrorN)__name__
__module____qualname__     :/usr/lib/python3/dist-packages/fontTools/misc/xmlReader.pyr   r      s    r   r   i @  c                   <    e Zd Z	 d	dZd
dZd Zd Zd Zd Zd Z	y)	XMLReaderNc                    |dk(  rt         j                  }t        |d      st        |d      | _        d| _        n|| _        d| _        || _        || _        |ddlm	}  |dd	       || _
        d | _        g | _        || _        d| _        y )
N-readrbTFr   )deprecateArgumentquietzconfigure logging instead)sysstdinhasattropenfile_closeStreamttFontprogressfontTools.misc.loggingToolsr   r   rootcontentStackcontentOnly	stackSize)self
fileOrPathr   r   r   r!   r   s          r   __init__zXMLReader.__init__   s     Jz6*Z.DI $D #DI %D Eg'BCDJ	&r   c                    |r| xj                   dz  c_         | j                  rt| j                  j                  dd       | j                  j	                         }| j                  j                  d|dz  xs d       | j                  j                  d       | j                  | j                         | j                  r| j                          |r| xj                   dz  c_         y y )N   r      d   )	r"   r   r   seektellset
_parseFiler   close)r#   rootlessfileSizes      r   r   zXMLReader.read,   s    NNaN==IINN1a yy~~'HMMaS!5A6IINN1		"JJLNNaN r   c                 8    | j                   j                          y N)r   r.   )r#   s    r   r.   zXMLReader.close:   s    		r   c                 r   ddl m}  |       }| j                  |_        | j                  |_        | j                  |_        d}	 |j                  t              }|s|j                  |d       y |t        |      z   }| j                  r| j                  j                  |dz         |j                  |d       u)Nr   )ParserCreater'   r)   )xml.parsers.expatr4   _startElementHandlerStartElementHandler_endElementHandlerEndElementHandler_characterDataHandlerCharacterDataHandlerr   BUFSIZEParselenr   r,   )r#   r   r4   parserposchunks         r   r-   zXMLReader._parseFile=   s    2%)%>%>"#'#:#: &*&@&@#IIg&EUA&E
"C}}!!#*-LL" r   c                    | j                   dk(  r/| j                  r#| j                  j                  g        d| _         y | j                   }|dz   | _         |j	                  d      }|~t        | j                  d      r4t        j                  j                  | j                  j                        }nt        j                         }t        j                  j                  ||      }|s|dk7  rt        d|z        | j                  j                  Y| j                  j                   sC|j	                  d      }|0t#        |      dk7  rt%        d	|z   d	z         }|| j                  _        | j                  j                  g        y |dk(  r_|Mt)        || j                  | j*                        }|j-                          | j                  j                  g        y t/        j0                  |      }d
|z  }	| j*                  r| j*                  j3                  |	       t4        j7                  |	       |dk(  rt.        j8                  }
n:d|v sd|v rt%        |d         rt:        }
nt/        j<                  |      }
|
t:        }
|dk(  r#|| j                  v r| j                  |   | _        n& |
|      | _        | j>                  | j                  |<   | j                  j                  g        y |dk(  rb|`t)        || j                  | j*                  d      }|j-                          | j                  j                  g        |j@                  | _         y |dk(  r3| j                  j                  g        ||| j                  d   f| _         y g }| j                  d   j                  |||f       | j                  j                  |       y )Nr'   r(   srcnamer   zillegal root tag: %ssfntVersion   "zParsing '%s' table...
GlyphOrderERRORrawlocaT)r!   )!r"   r!   r    appendgetr   r   ospathdirnamerD   getcwdjoinr   r   readertablesr>   r   rE   r   r   r   r   xmlToTagsetLabelloginforH   r   getTableClasscurrentTabler   )r#   rD   attrsr"   subFilerQ   rE   	subReadertagmsg
tableClassls               r   r6   zXMLReader._startElementHandlerP   s   >>Q4#3#3 $$R(DNNN	"Q))E"tyy&)''//$))..9 ))+ggll7G4Gx#$:T$ABB{{!!)$++2D2D#ii6*;'1,&.s[/@3/F&G.9DKK+$$R(!^"%gt{{DMMJ	 !!((,..&C)C/C}}&&s+HHSMl""--
E!eun%,9O)
"005
%!-Jf}!3 %)KK$4!$.sO!#'#4#4C $$R(!^ 3!'4;;SWXINN$$R(!DI!^$$R(ud&7&7&;<DIAb!(($q)9:$$Q'r   c                 (   | j                   dkD  r|dk7  r_| j                  d   rPt        | j                  d   d   t              r0| j                  d   d   dk7  r| j                  d   dxx   |z  cc<   y | j                  d   j	                  |       y y )Nr'   
rL   )r"   r    
isinstancestrrM   )r#   datas     r   r:   zXMLReader._characterDataHandler   s    >>A %%b)t004R8#>%%b)"-5!!"%b)T1)!!"%,,T2 r   c                 ,   | j                   dz
  | _         | j                  d= | j                  sg| j                   dk(  rd | _        y | j                   dk(  r@| j                  \  }}}| j                  j                  |||| j                         d | _        y y y )Nr'   rL   r(   )r"   r    r!   r   r[   fromXMLr   )r#   rD   r\   contents       r   r8   zXMLReader._endElementHandler   s    !+b!~~" 	1$'+yy$eW!!))$wL 	 %  r   )NNF)F)
r   r	   r
   r%   r   r.   r-   r6   r:   r8   r   r   r   r   r      s*    IN0 #&C(J3 	!r   r   c                   *    e Zd ZddZddZddZd Zy)	ProgressPrinterc                     t        |       y r2   print)r#   titlemaxvals      r   r%   zProgressPrinter.__init__   s	    er   Nc                      y r2   r   )r#   valrq   s      r   r,   zProgressPrinter.set       r   c                      y r2   r   )r#   rs   s     r   	incrementzProgressPrinter.increment   rt   r   c                     t        |       y r2   rn   )r#   texts     r   rW   zProgressPrinter.setLabel   s	    dr   )r)   r2   )r'   )r   r	   r
   r%   r,   rv   rW   r   r   r   rl   rl      s    r   rl   )	fontToolsr   fontTools.misc.textToolsr   #fontTools.ttLib.tables.DefaultTabler   r   rO   logging	getLoggerr   rX   	Exceptionr   r<   objectr   rl   r   r   r   <module>r      sY     - < 
 	  g!	I 	 [! [!|f r   