o
    ˷e                     @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZmZ eg dZdeZe d	eZd
Ze eZdZe eZe deeee j Z!dd Z"dd Z#G dd deZ$G dd deZ%dS )    N)Serialisable)
AliasTypedStringFloatIntegerBoolNoneSetSetSequence
Descriptor)safe_string)	Tokenizer)SHEETRANGE_RESHEET_TITLE)
Print_AreaPrint_TitlesCriteria_FilterDatabaseExtractConsolidate_AreaSheet_Title|z^_xlnm\.(?P<name>{0})z-(?P<cols>[$]?[a-zA-Z]{1,3}:[$]?[a-zA-Z]{1,3})z(?P<rows>[$]?\d+:[$]?\d+)z{0}{1}?,?{2}?c                 C   s2   t | j}tdd |D }|d|dfS )zg
    Extract rows and or columns from print titles so that they can be
    assigned to a worksheet
    c                 s   s2    | ]}|   D ]\}}|r
||fV  q
qd S N)	groupdictitems).0matchkv r    U/var/www/ideatree/venv/lib/python3.10/site-packages/openpyxl/workbook/defined_name.py	<genexpr>/   s    
z'_unpack_print_titles.<locals>.<genexpr>rowscols)TITLES_REGEXfinditervaluedictget)defnscannerkwr    r    r!   _unpack_print_titles)   s   r-   c                 C   s2   g }t | jD ]}|d}|r|| q|S )z
    Extract print area
    cells)r   r&   r'   groupappend)r*   newmcoordr    r    r!   _unpack_print_area5   s   

r4   c                   @   s  e Zd ZdZe ZeddZeddZeddZeddZ	eddZ
eddZeddZeddZeddZeddZeddZeddZeddZeddZe ZedZ																dddZedd	 Zed
d Zedd Zedd Zdd Z dS )DefinedNamedefinedNameT)
allow_none	attr_textNc                 C   sd   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _d S r   )namecomment
customMenudescriptionhelp	statusBarlocalSheetIdhiddenfunctionvbProcedurexlmfunctionGroupIdshortcutKeypublishToServerworkbookParameterr8   )selfr9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r8   r    r    r!   __init__X   s    
zDefinedName.__init__c                 C   s.   t d| j }|jd }|jdkr|jS |jS )N=r   OPERAND)r   r'   r   typesubtype)rH   tokparsedr    r    r!   rL   |   s
   

zDefinedName.typec                 c   sh    | j dkr0td| j }|jD ]!}|jdkr/t|j}|dp&|d}||dfV  qd S d S )NRANGErJ   	notquotedquotedr.   )rL   r   r'   r   rM   r   r   r/   )rH   rN   partr2   	sheetnamer    r    r!   destinations   s   


zDefinedName.destinationsc                 C   s   t | j}|r|dS d S )Nr9   )RESERVED_REGEXr   r9   r/   )rH   r2   r    r    r!   is_reserved   s   
zDefinedName.is_reservedc                 C   s   t d| jd uS )Nz
^\[\d+\].*)recompiler   r'   rH   r    r    r!   is_external   s   zDefinedName.is_externalc                 c   sL    | j D ]}|dkrqt| |}|d ur#|tv rd| }|t|fV  qd S )Nr8   z_xlnm.)	__attrs__getattrRESERVEDr   )rH   keyr   r    r    r!   __iter__   s   

zDefinedName.__iter__)NNNNNNNNNNNNNNNN)!__name__
__module____qualname__tagnamer   r9   r:   r;   r<   r=   r>   r   r?   r   r@   rA   rB   rC   rD   rE   rF   rG   r   r8   r   r'   rI   propertyrL   rU   rW   r[   r`   r    r    r    r!   r5   A   sZ    














$




r5   c                   @   sx   e Zd ZdZeedZdddZdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdddZdd ZdddZdd ZdS )DefinedNameListdefinedNames)expected_typer    c                 C   s
   || _ d S r   r6   )rH   r6   r    r    r!   rI         
zDefinedNameList.__init__c                 C   sF   g }| j D ]}|jdv r|jdu rq|jdkrq|| q|| _ dS )zJ
        Strip invalid definitions and remove special hidden ones
        )z_xlnm.Print_Titlesz_xlnm.Print_AreaNz_xlnm._FilterDatabase)r6   r9   r?   r0   )rH   valid_namesnr    r    r!   _cleanup   s   


zDefinedNameList._cleanupc                 C   s.   | j D ]}|j|jkr|j|jkr dS qdS )zc
        Check for whether DefinedName with the same name and scope already
        exists
        TNr6   r9   r?   )rH   r*   dr    r    r!   
_duplicate   s
   
zDefinedNameList._duplicatec                 C   sF   t |ts	td| |rtd| jd d  }|| || _d S )Nz You can only append DefinedNamesz7DefinedName with the same name and scope already exists)
isinstancer5   	TypeErrorrp   
ValueErrorr6   r0   )rH   r*   namesr    r    r!   r0      s   



zDefinedNameList.appendc                 C   s
   t | jS r   )lenr6   rZ   r    r    r!   __len__   rj   zDefinedNameList.__len__c                 C   s*   | j D ]}|j|kr|jdu r dS qdS )z6
        See if a globaly defined name exists
        NTrn   rH   r9   r*   r    r    r!   __contains__   s
   
zDefinedNameList.__contains__c                 C   s    |  |}|std||S )z+
        Get globally defined name
        zNo definition called {0})r)   KeyErrorformatrw   r    r    r!   __getitem__   s   
zDefinedNameList.__getitem__Nc                 C   s,   | j D ]}|j|kr|j|kr|  S qdS )zE
        Get the name assigned to a specicic sheet or global
        Nrn   )rH   r9   scoper*   r    r    r!   r)      s
   
zDefinedNameList.getc                 C   s   |  |std|dS )z0
        Delete a globally defined name
        zNo globally defined name {0}N)deletery   rz   )rH   r9   r    r    r!   __delitem__   s   
zDefinedNameList.__delitem__c                 C   s:   t | jD ]\}}|j|kr|j|kr| j|=  dS qdS )z@
        Delete a name assigned to a specific or global
        TN)	enumerater6   r9   r?   )rH   r9   r|   idxr*   r    r    r!   r}      s   zDefinedNameList.deletec                    s    fdd| j D S )zH
        Provide a list of all names for a particular worksheet
        c                    s   g | ]
}|j  kr|jqS r    )r?   r9   )r   r*   r|   r    r!   
<listcomp>
  s    z.DefinedNameList.localnames.<locals>.<listcomp>ri   )rH   r|   r    r   r!   
localnames  s   zDefinedNameList.localnames)r    r   )ra   rb   rc   rd   r   r5   r6   rI   rm   rp   r0   rv   rx   r{   r)   r~   r}   r   r    r    r    r!   rf      s    



	

	

rf   )&rX   !openpyxl.descriptors.serialisabler   openpyxl.descriptorsr   r   r   r   r   r   r	   r
   r   r   openpyxl.compatr   openpyxl.formular   openpyxl.utils.cellr   r   	frozensetr^   join_namesrY   rz   rV   	COL_RANGECOL_RANGE_RE	ROW_RANGEROW_RANGE_REVERBOSEr%   r-   r4   r5   rf   r    r    r    r!   <module>   s(   0


f