U
    d                     @   s   d dl mZ d dlZd dlmZ d dl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 edd	d
ddddgZdeZedeZG dd deZG dd deZG dd deZdS )    )defaultdictN)Serialisable)AliasStringIntegerBoolSequence
Descriptor)safe_string)	Tokenizer)SHEETRANGE_REZ
Print_AreaZPrint_TitlesZCriteriaZ_FilterDatabaseZExtractZConsolidate_AreaZSheet_Title|z^_xlnm\.(?P<name>{0})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 N)namecomment
customMenudescriptionhelp	statusBarlocalSheetIdhiddenfunctionvbProcedurexlmfunctionGroupIdshortcutKeypublishToServerworkbookParameterr   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r    r#   B/tmp/pip-unpacked-wheel-rwywncvq/openpyxl/workbook/defined_name.py__init__2   s     zDefinedName.__init__c                 C   s.   t d| j }|jd }|jdkr(|jS |jS )N=r   ZOPERAND)r   valueitemstypesubtype)r"   tokparsedr#   r#   r$   r)   V   s
    

zDefinedName.typec                 c   sb   | j dkr^td| j }|jD ]>}|jdkrt|j}|dpJ|d}||dfV  qd S )NRANGEr&   Z	notquotedquotedcells)r)   r   r'   r(   r*   r   matchgroup)r"   r+   partmZ	sheetnamer#   r#   r$   destinations_   s    


zDefinedName.destinationsc                 C   s   t | j}|r|dS d S )Nr   )RESERVED_REGEXr0   r   r1   )r"   r3   r#   r#   r$   is_reservedj   s    zDefinedName.is_reservedc                 C   s   t d| jd k	S )Nz
^\[\d+\].*)recompiler0   r'   r"   r#   r#   r$   is_externalq   s    zDefinedName.is_externalc                 c   sJ   | j D ]>}|dkrqt| |}|d k	r|tkr6d| }|t|fV  qd S )Nr   z_xlnm.)	__attrs__getattrRESERVEDr
   )r"   keyvr#   r#   r$   __iter__v   s    

zDefinedName.__iter__)NNNNNNNNNNNNNNNN)!__name__
__module____qualname__tagnamer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r	   r   r   r'   r%   propertyr)   r4   r6   r:   r@   r#   r#   r#   r$   r      sX   













                
$




r   c                       s(   e Zd ZdZ fddZdd Z  ZS )DefinedNameDictzv
    Utility class for storing defined names.
    Allows access by name and separation of global and scoped names
    c                    s8   t |tstdn|j|kr&tdt || d S )Nz*Value must be a an instance of DefinedNamez Key must be the same as the name)
isinstancer   	TypeErrorr   
ValueErrorsuper__setitem__)r"   r>   r'   	__class__r#   r$   rK      s
    


zDefinedNameDict.__setitem__c                 C   s   || |j < dS )zI
        Add names without worrying about key and name matching.
        N)r   )r"   r'   r#   r#   r$   add   s    zDefinedNameDict.add)rA   rB   rC   __doc__rK   rN   __classcell__r#   r#   rL   r$   rF      s   rF   c                   @   s<   e Zd ZdZeedZdddZdd Zdd	 Z	d
d Z
dS )DefinedNameListZdefinedNames)Zexpected_typer#   c                 C   s
   || _ d S r   )r   )r"   r   r#   r#   r$   r%      s    zDefinedNameList.__init__c                 C   sV   t t}| jD ]B}|jdkr8|jdkr(q||d |j< qt|j}||| |j< q|S )z@
        Break names down into sheet locals and globals
        N)z_xlnm.Print_Titlesz_xlnm.Print_Areaz_xlnm._FilterDatabaseglobal)r   rF   r   r   r   int)r"   namesdefnZsheetr#   r#   r$   by_sheet   s    



zDefinedNameList.by_sheetc                 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)r   r   r   )r"   rU   dr#   r#   r$   
_duplicate   s    
zDefinedNameList._duplicatec                 C   s
   t | jS r   )lenr   r9   r#   r#   r$   __len__   s    zDefinedNameList.__len__N)r#   )rA   rB   rC   rD   r   r   r   r%   rV   rX   rZ   r#   r#   r#   r$   rQ      s   


rQ   )collectionsr   r7   Z!openpyxl.descriptors.serialisabler   Zopenpyxl.descriptorsr   r   r   r   r   r	   Zopenpyxl.compatr
   Zopenpyxl.formular   Zopenpyxl.utils.cellr   	frozensetr=   joinZ_namesr8   formatr5   r   dictrF   rQ   r#   r#   r#   r$   <module>   s"      
f