
    ^b                        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 j        d	                    e                    Zd
Z e j        e          ZdZ e j        e          Z e j        d                    eee          e j                   Z!d Z"d Z# G d de          Z$ G 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                     t                               | j                  }t          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              3   z   K   | ]6}|                                                                 D ]\  }}|||fV  7d S N)	groupdictitems).0matchkvs       >lib/python3.11/site-packages/openpyxl/workbook/defined_name.py	<genexpr>z'_unpack_print_titles.<locals>.<genexpr>/   sl       : ://++1133: :!Qq:q!f : : : : : : :    rowscols)TITLES_REGEXfinditervaluedictget)defnscannerkws      r#   _unpack_print_titlesr0   )   sd    
 ##DJ//G	 : :' : : : 
: 
:B 66&>>266&>>))r%   c                     g }t          j        | j                  D ].}|                    d          }|r|                    |           /|S )z
    Extract print area
    cells)r   r)   r*   groupappend)r-   newmcoords       r#   _unpack_print_arear8   5   sV     C#DJ//     	JJuJr%   c                   &   e Zd ZdZ e            Z ed          Z ed          Z ed          Z ed          Z	 ed          Z
 ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z e            Z ed          Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZed             Zed             Zed	             Zed
             Zd Z dS )DefinedNamedefinedNameT)
allow_none	attr_textNc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        d S r   )namecomment
customMenudescriptionhelp	statusBarlocalSheetIdhiddenfunctionvbProcedurexlmfunctionGroupIdshortcutKeypublishToServerworkbookParameterr=   )selfr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r=   s                    r#   __init__zDefinedName.__init__X   s    $ 	$&	"( &.&.!2"r%   c                 |    t          d| j        z             }|j        d         }|j        dk    r|j        S |j        S )N=r   OPERAND)r   r*   r   typesubtype)rN   tokparseds      r#   rS   zDefinedName.type|   s@    dj())1;)# 	">!{r%   c              #   4  K   | j         dk    rt          d| j        z             }|j        D ]k}|j        dk    r\t          j        |j                  }|                    d          p|                    d          }||                    d          fV  jd S d S )NRANGErQ   	notquotedquotedr2   )rS   r   r*   r   rT   r   r    r3   )rN   rU   partr6   	sheetnames        r#   destinationszDefinedName.destinations   s      9 	6C$*,--C	 6 6<7* 6%+DJ77A ! 4 4 I8I8II#QWWW%5%55555	6 	66 6r%   c                 r    t                               | j                  }|r|                    d          S d S )Nr?   )RESERVED_REGEXr    r?   r3   )rN   r6   s     r#   is_reservedzDefinedName.is_reserved   s9      ++ 	#776??"	# 	#r%   c                 ^    t          j        d                              | j                  d uS )Nz
^\[\d+\].*)recompiler    r*   rN   s    r#   is_externalzDefinedName.is_external   s'    z-((..tz::$FFr%   c              #      K   | j         D ]<}|dk    r	t          | |          }|!|t          v rd|z   }|t          |          fV  =d S )Nr=   z_xlnm.)	__attrs__getattrRESERVEDr   )rN   keyr"   s      r#   __iter__zDefinedName.__iter__   su      > 	* 	*Ck! c""A *= % 1A;q>>))))	* 	*r%   )NNNNNNNNNNNNNNNN)!__name__
__module____qualname__tagnamer   r?   r@   rA   rB   rC   rD   r   rE   r	   rF   rG   rH   rI   rJ   rK   rL   rM   r   r=   r   r*   rO   propertyrS   r]   r`   re   rk    r%   r#   r:   r:   A   s        G688Df%%%G4(((J&D)))K6T"""D$'''I7d+++LTT"""Ftt$$$H$$'''K
$$


Cg...O&D)))Kdd+++O---
IE+E  !"!!%!!%#'!!# !# !# !#H   X 6 6 X6 # # X# G G XG* * * * *r%   r:   c                   r    e Zd ZdZ ee          ZddZd Zd Z	d Z
d Zd	 Zd
 ZddZd ZddZd ZdS )DefinedNameListdefinedNames)expected_typerq   c                     || _         d S r   r;   )rN   r;   s     r#   rO   zDefinedNameList.__init__   s    &r%   c                     g }| j         D ]4}|j        dv r|j        |j        dk    r|                    |           5|| _         dS )zJ
        Strip invalid definitions and remove special hidden ones
        )z_xlnm.Print_Titlesz_xlnm.Print_AreaNz_xlnm._FilterDatabase)r;   r?   rE   r4   )rN   valid_namesns      r#   _cleanupzDefinedNameList._cleanup   so     ! 	" 	"AvCC  22 q!!!!&r%   c                 `    | j         D ]%}|j        |j        k    r|j        |j        k    r dS &dS )zc
        Check for whether DefinedName with the same name and scope already
        exists
        TNr;   r?   rE   )rN   r-   ds      r#   
_duplicatezDefinedNameList._duplicate   sJ    
 ! 	 	Av" q~9J'J tt	 	r%   c                     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)
isinstancer:   	TypeErrorr   
ValueErrorr;   r4   )rN   r-   namess      r#   r4   zDefinedNameList.append   sy    $,, 	DBCCC??4   	\Z[[[ #T r%   c                 *    t          | j                  S r   )lenr;   rd   s    r#   __len__zDefinedNameList.__len__   s    4#$$$r%   c                 D    | j         D ]}|j        |k    r
|j         dS dS )z6
        See if a globaly defined name exists
        NTr}   rN   r?   r-   s      r#   __contains__zDefinedNameList.__contains__   sA     $ 	 	DyD  T%6 tt	 	r%   c                 x    |                      |          }|s"t          d                    |                    |S )z+
        Get globally defined name
        zNo definition called {0})r,   KeyErrorformatr   s      r#   __getitem__zDefinedNameList.__getitem__   s>     xx~~ 	D5<<TBBCCCr%   Nc                 N    | j         D ]}|j        |k    r|j        |k    r|c S dS )zE
        Get the name assigned to a specicic sheet or global
        Nr}   )rN   r?   scoper-   s       r#   r,   zDefinedNameList.get   sH     $ 	 	DyD  T%6%%? 	 	r%   c                 t    |                      |          s"t          d                    |                    dS )z0
        Delete a globally defined name
        zNo globally defined name {0}N)deleter   r   )rN   r?   s     r#   __delitem__zDefinedNameList.__delitem__   sB     {{4   	H9@@FFGGG	H 	Hr%   c                 |    t          | j                  D ]&\  }}|j        |k    r|j        |k    r| j        |=  dS 'dS )z@
        Delete a name assigned to a specific or global
        TN)	enumerater;   r?   rE   )rN   r?   r   idxr-   s        r#   r   zDefinedNameList.delete   s]     #4#344 	 	ICyD  T%6%%? $S)tt	 	r%   c                 *    fd| j         D             S )zH
        Provide a list of all names for a particular worksheet
        c                 4    g | ]}|j         k    |j        S rq   )rE   r?   )r   r-   r   s     r#   
<listcomp>z.DefinedNameList.localnames.<locals>.<listcomp>
  s(    UUUd$:Ku:TU	UUUr%   rw   )rN   r   s    `r#   
localnameszDefinedNameList.localnames  s#     VUUUd&6UUUUr%   )rq   r   )rl   rm   rn   ro   r   r:   r;   rO   r{   r   r4   r   r   r   r,   r   r   r   rq   r%   r#   rs   rs      s        G(555K' ' ' '' ' '  ! ! !% % %       H H H   V V V V Vr%   rs   )&rb   !openpyxl.descriptors.serialisabler   openpyxl.descriptorsr   r   r   r   r   r	   r
   r   r   r   openpyxl.compatr   openpyxl.formular   openpyxl.utils.cellr   r   	frozensetri   join_namesrc   r   r_   	COL_RANGECOL_RANGE_RE	ROW_RANGEROW_RANGE_REVERBOSEr(   r0   r8   r:   rs   rq   r%   r#   <module>r      s/   
			 : : : : : :                        ( ' ' ' ' ' & & & & & &       
 9 % % % & & 
(		4;;FCCDD@	rz)$$,	rz)$$rz-44[)YWW*& &	* 	* 	*	 	 	c* c* c* c* c*, c* c* c*LcV cV cV cV cVl cV cV cV cV cVr%   