U
    ‰dÁV  ã                $   @   s†  d dl mZ ddlZd dl mZ d dlmZ d dlT dddd	œZddddd
œZddddd
œZ	G dd„ de
ƒZejZejZejZejZejZejZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-dZ.d)Z/d*Z0d+Z1G d,d-„ d-ej2ƒZ3d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQg$Z4dRdS„ Z5e 6e5ƒ ¡Z7dS )Té   )Úantlré    N)ÚUtils)Úupack1)Ú*é    é@   )ÚRÚVÚA)r	   r
   r   ÚDc                   @   s   e Zd ZdZdS )ÚFormulaParseExceptionzP
   An exception indicating that a Formula could not be successfully parsed.
   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú;/tmp/pip-unpacked-wheel-xnx7fvnv/xlwt/ExcelFormulaParser.pyr      s   r   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é!   é"   é#   c                   @   sl   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dd„ Zdd„ Zdd„ ZdS )ÚParserc                 O   s0   t jj| f|ž|Ž t| _d| _g | _g | _d S )Nó    )r   Ú	LLkParserÚ__init__Ú_tokenNamesZ
tokenNamesÚrpnÚsheet_referencesÚxcall_references)ÚselfÚargsÚkwargsr   r   r   r6   E   s
    zParser.__init__c                 C   s   |   d¡ d S )Nr
   )Úexpr)r;   r   r   r   ÚformulaN   s    zParser.formulac                 C   sV  |   |¡ |  d¡tkrR|  d¡tkrR|  d¡}|rZ|tfkrZ|  t¡ t dt¡}nØ|r€|tfkr€|  t¡ t dt	¡}n²|r¦|t
fkr¦|  t
¡ t dt¡}nŒ|rÌ|tfkrÌ|  t¡ t dt¡}nf|rò|tfkrò|  t¡ t dt¡}n@|r|tfkr|  t¡ t dt¡}nt |  d¡|  ¡ ¡‚|   |¡ |  j|7  _q
qRq
d S ©Nr   ÚB)Ú
prec0_exprÚLAÚEQÚLEÚmatchÚstructÚpackZptgEQÚNEZptgNEÚGTZptgGTÚLTZptgLTÚGEZptgGEZptgLEr   ÚNoViableAltExceptionÚgetFilenamer8   ©r;   Úarg_typeÚla1Úopr   r   r   r>   S   s2    
 







zParser.exprc                 C   sP   |   |¡ |  d¡tkrL|  t¡ t dt¡}|   |¡ |  j|7  _q
qLq
d S r@   )Ú
prec1_exprrC   ÚCONCATrF   rG   rH   Z	ptgConcatr8   ©r;   rP   rR   r   r   r   rB   €   s    


zParser.prec0_exprc                 C   s´   |   |¡ |  d¡tks&|  d¡tkr°|  d¡}|rV|tfkrV|  t¡ t dt¡}n<|r||tfkr||  t¡ t dt¡}nt	 
|  d¡|  ¡ ¡‚|   |¡ |  j|7  _q
q°q
d S r@   )Ú
prec2_exprrC   ÚADDÚSUBrF   rG   rH   ZptgAddZptgSubr   rM   rK   rN   r8   rO   r   r   r   rS   ’   s    




zParser.prec1_exprc                 C   s´   |   |¡ |  d¡tks&|  d¡tkr°|  d¡}|rV|tfkrV|  t¡ t dt¡}n<|r||tfkr||  t¡ t dt¡}nt	 
|  d¡|  ¡ ¡‚|   |¡ |  j|7  _q
q°q
d S r@   )Ú
prec3_exprrC   ÚMULÚDIVrF   rG   rH   ZptgMulZptgDivr   rM   rK   rN   r8   rO   r   r   r   rV   °   s    




zParser.prec2_exprc                 C   sP   |   |¡ |  d¡tkrL|  t¡ t dt¡}|   |¡ |  j|7  _q
qLq
d S r@   )Ú
prec4_exprrC   ÚPOWERrF   rG   rH   ZptgPowerr8   rU   r   r   r   rY   Í   s    


zParser.prec3_exprc                 C   sŒ   |   |¡ |  d¡}|rD|tfkrD|  t¡ |  jt dt¡7  _nD|rr|tt	t
tttttttttttttfkrrnt |  d¡|  ¡ ¡‚d S r@   )Ú
prec5_exprrC   ÚPERCENTrF   r8   rG   rH   Z
ptgPercentÚEOFrD   rI   rJ   rK   rL   rE   rW   rX   rZ   r[   r]   ÚRPÚCOMMAÚ	SEMICOLONrT   r   rM   rN   ©r;   rP   rQ   r   r   r   r\   ß   s    


,zParser.prec4_exprc                 C   sŒ   |   d¡}|r8|ttttttttt	t
tfkr8|  |¡ nP|rr|tfkrr|  t¡ |  |¡ |  jt dt¡7  _nt |  d¡|  ¡ ¡‚d S r@   )rC   Ú
TRUE_CONSTÚFALSE_CONSTÚ	STR_CONSTÚ	NUM_CONSTÚ	INT_CONSTÚFUNC_IFÚFUNC_CHOOSEÚNAMEÚ	QUOTENAMEÚLPÚREF2DÚprimaryrX   rF   r8   rG   rH   Z	ptgUminusr   rM   rK   rN   rd   r   r   r   r^   ò   s    
"

zParser.prec5_exprc           2      C   st  d }d }d }d }d }d }d }d }	d }
d }|   d¡}|rf|tfkrf|  t¡ |  jt dtd¡7  _n
|rš|tfkrš|  t¡ |  jt dtd¡7  _nÖ|rð|tfkrð|  	d¡}|  t¡ |  jt dt
¡t|jdd…  dd¡ƒ 7  _n€|r8|tfkr8|  	d¡}|  t¡ |  jt dtt|jƒ¡7  _n8|r<|tfkr<|  t¡ |  t¡ |  d	¡ |   d¡}|r|tfkr|  t¡ n4|r®|tfkr®|  t¡ nt |  	d¡|  ¡ ¡‚|  jt d
tdd¡7  _t| jƒd }|  |¡ |   d¡}|r|tfkr|  t¡ n4|r<|tfkr<|  t¡ nt |  	d¡|  ¡ ¡‚|  jt d
tdd¡7  _t| jƒd }| jd |… t d|| ¡ | j|d d …  | _|  |¡ |  t¡ |  jt d
tdd¡7  _|  jt d
tdd¡7  _t| jƒ}| jd |… t d||d  d ¡ | j|d d …  | _	n4|r||tfkr||  t¡ d}g }|  t¡ |  d	¡ t| jƒ}t| jƒg}|   d¡tksª|   d¡tkrÀ|   d¡}|rÒ|tfkrÒ|  t¡ n4|rð|tfkrð|  t¡ nt |  	d¡|  ¡ ¡‚t| jƒ}|   d¡}|rN|tttttttt t!t"tt#fkrN|  |¡ nD|r||tttfkr||  jt dt$¡7  _nt |  	d¡|  ¡ ¡‚| %| j|d … ¡ | %t| jƒ¡ nqÀqŠ|  t¡ | jd |… | _t|ƒ}dd„ |D ƒ}dg| }d|d< t&|d ddƒD ]"}|| ||  d ||d < qd| d g}t&|ƒD ] }| %|d ||  d ¡ qLd| d }t&|ƒD ]V}t&|| ||d  ƒD ]0}| j| }|d |d |d | f| j|< qœ|d7 }q‚g }| %t d
td|¡¡ | %tjd|d  f|žŽ ¡ t&|ƒD ].}| %|| ¡ | %t d
td|| ¡¡ q| %t d
t'|d d¡¡ |  jd (|¡7  _nô|rÆ|tfkrÆ|  t¡ |  |¡ |  t¡ |  jt dt)¡7  _nª|   d¡tkrJt* +|   d¡¡rJ|  	d¡}|  t¡ t,|jƒ}|dkr*|  jt dt-|¡7  _n|  jt dtt|ƒ¡7  _n&|   d¡t#krºt* +|   d¡¡rº|  	d¡}|  t#¡ t. /|j¡\}}t0t1|  } |  jt d| ||¡7  _n¶|   d¡t#krZ|   d¡t2krZ|  	d¡}|  t#¡ |  t2¡ |  	d¡}|  t#¡ t. /|j¡\}!}"t. /|j¡\}#}$t3t4|  } |  jt d| |!|#|"|$¡7  _n|   d¡tksŠ|   d¡t ksŠ|   d¡t!k
rT|   d¡t2ksª|   d¡t5k
rT|  6¡ }%|%}&|   d¡}|ræ|t2fkræ|  t2¡ |  6¡ }&n*|rú|t5fkrúnt |  	d¡|  ¡ ¡‚|  t5¡ |  	d¡}|  t#¡ t7t1|  } d}'t. /|j¡\}!}"t dd|!|"¡}'|   d¡}|	rÊ|t2fk	rÊ|  t2¡ |  	d¡}	|  t#¡ t8t4|  } t. /|	j¡\}#}$t dd|!|#|"|$¡}'nJ|	rþ|t9t:t;t<t	t=t>t?t"t@tAtBtCttttDfk	rþnt |  	d¡|  ¡ ¡‚|  jt d| ¡7  _| j %|%|&t| jƒf¡ |  j|'7  _n|   d¡t k
rœt* +|   d¡¡
rœ|  	d¡}
|  t ¡ tEd|
jF ƒ‚nÔ|   d¡t krZ|   d¡tkrZ|  	d¡}|  t ¡ |j G¡ }(|(tHkr tH|( \})}*}+},}-tI|-ƒ}.ntEd|j ƒ‚|)dk }/|/rR| jJ %|(t| jƒd f¡ |  jt d tKd!d"d¡7  _|  t¡ |  L|.|*|+¡}0|  t¡ |0|+ksˆ|0|*k rštEd#|0|jf ƒ‚|/rÌttM|,  }1|  jt d$|1|0d d%¡7  _nŒ|*|+krütNtM|,  }1|  jt d|1|)¡7  _n\|0dkr2|j G¡ d&kr2|  jt d
td'd¡7  _n&ttM|,  }1|  jt d$|1|0|)¡7  _nt |  	d¡|  ¡ ¡‚d S )(Nr   Z2Br   rA   éÿÿÿÿz""ú"z<Bdr
   z<BBHé   r   z<Hé   r	   c                 S   s   g | ]}t |ƒ‘qS r   )Úlen)Ú.0Úchunkr   r   r   Ú
<listcomp>~  s     z"Parser.primary.<locals>.<listcomp>r   r   z<%dHéd   Ú iÿÿ  z<BHz<B2Hz<B4Hz<3Hz<5Hz<Bz*[formula] found unexpected NAME token (%r)z[formula] unknown function (%s)z<BHHHiÞ­  i¾ï  z%d parameters for function: %sz<2BHéÿ   ZSUMr    )OrC   re   rF   r8   rG   rH   ZptgBoolrf   rg   rK   ZptgStrr   ÚtextÚreplacerh   ZptgNumÚfloatrj   rn   r>   rc   rb   r   rM   rN   ZptgAttrru   ra   ZptgFuncVarRrk   r9   ri   rl   rm   rX   ro   Ú
ptgMissArgÚappendÚxrangeZptgFuncVarVÚjoinZptgParenÚ_tokenSet_0ÚmemberÚintZptgIntr   Zcell_to_packed_rowcolZptgRefRÚ_RVAdeltaRefÚCOLONZptgAreaRÚ_RVAdeltaAreaÚBANGÚsheetZ	ptgRef3dRZ
ptgArea3dRr`   rD   rI   rJ   rL   rE   rW   rZ   r[   r]   r_   rT   Ú	ExceptionÚtxtÚupperZall_funcs_by_nameÚlistr:   Z	ptgNameXRÚ	expr_listÚ	_RVAdeltaZptgFuncR)2r;   rP   Zstr_tokZint_tokZnum_tokZ	ref2d_tokZ
ref2d1_tokZ
ref2d2_tokZref3d_ref2dZref3d_ref2d2Zname_tokZfunc_tokrQ   Zpos0Zpos1Úpos2Z
rpn_chunksZ	rpn_startZref_markersÚmarkZncZ	chunklensZskiplensZicZjump_posZchunk_shiftÚrefxÚrefZ
choose_rpnZ	int_valueÚrÚcZptgZr1Zc1Zr2Úc2Zsheet1Zsheet2Z	rpn_ref2dZ	func_tokuÚopcodeÚmin_argcÚmax_argcZ	func_typeZarg_type_strÚarg_type_listZxcallÚ	arg_countZfunc_ptgr   r   r   rp     s˜   




4

"





2


>



 


(

 
$


"



 "

 




"P









2"

 



ü
ü

 
zParser.primaryc                 C   sÂ   d }d }d }d }|   d¡}|rD|tfkrD|  d¡}|  t¡ |j}nz|rn|tfkrn|  d¡}|  t¡ |j}nP|r¨|tfkr¨|  d¡}|  t¡ |jdd…  dd¡}nt 	|  d¡|  
¡ ¡‚|S )Nr   rq   z''ú')rC   rl   rK   rF   r|   ri   rm   r}   r   rM   rN   )r;   r”   Zsheet_ref_nameZsheet_ref_intZsheet_ref_quoterQ   r   r   r   rŠ     s&    






zParser.sheetc                 C   s¶  d }d}|| }|   d¡}|rˆ|ttttttttt	t
ttfkrˆ|  |¡ |d7 }|   d¡tksr|   d¡tkr†|t|ƒk rˆ|| }n|d }|dkr |d }|   d¡}|rÄ|tfkrÄ|  t¡ n0|rÞ|tfkrÞ|  t¡ nt |  d¡|  ¡ ¡‚|   d¡}|r2|ttttttttt	t
ttfkr2|  |¡ nD|r`|tttfkr`|  jt dt¡7  _nt |  d¡|  ¡ ¡‚|d7 }qTq²qTn*|rœ|tfkrœnt |  d¡|  ¡ ¡‚|S )Nr   r   rq   ú+éþÿÿÿrA   )rC   re   rf   rg   rh   ri   rj   rk   rl   rm   rX   rn   ro   r>   rb   rc   ru   rF   r   rM   rK   rN   ra   r8   rG   rH   r   )r;   r›   r™   rš   Zarg_cntrP   rQ   r   r   r   r   2  s>    
(



(
zParser.expr_listN)r   r   r   r6   r?   r>   rB   rS   rV   rY   r\   r^   rp   rŠ   r   r   r   r   r   r3   A   s   	-  r3   z<0>r`   z<2>ÚNULL_TREE_LOOKAHEADre   rf   rg   rh   ri   rj   rk   rl   rm   rD   rI   rJ   rK   rL   rE   rW   rX   rZ   r[   r]   r_   rn   ra   ÚLBÚRBr‡   rb   rc   ro   Ú
REF2D_R1C1r‰   rT   c                  C   s   ddg} | S )Nl   `ÿ# r   r   )Údatar   r   r   Úmk_tokenSet_0˜  s    r¥   )8rz   r   rG   r   ZUnicodeUtilsr   Z
ExcelMagicr   r†   rˆ   r‹   r   ZSKIPZINVALID_TYPEZEOF_TYPEr`   r    ZMIN_USER_TYPEre   rf   rg   rh   ri   rj   rk   rl   rm   rD   rI   rJ   rK   rL   rE   rW   rX   rZ   r[   r]   r_   rn   ra   r¡   r¢   r‡   rb   rc   ro   r£   r‰   rT   r5   r3   r7   r¥   ZBitSetrƒ   r   r   r   r   Ú<module>   s´   
    3Ü)