o
    ϩZh#                     @   s   d dl m Z  d dlmZ d dlmZmZmZm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 d d	lmZ G d
d deeZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    )copy)safe_string)get_column_letterget_column_intervalcolumn_index_from_stringrange_boundaries)DEFAULT_COLUMN_WIDTH)IntegerFloatBoolStrictStringAlias)Serialisable)StyleableObject)BoundDictionary)Elementc                       sl   e Zd ZdZdZe Ze ZeddZ	e
dZe Ze
dZ	d fdd		Zd
d Zdd Zdd Z  ZS )	Dimensionz<Information about the display properties of a row or column.)hiddenoutlineLevel	collapsedT
allow_noner   style_idNc                    s,   t  j||d || _|| _|| _|| _d S )N)ZsheetZstyle_array)super__init__indexr   r   r   )selfr   r   r   r   	worksheetvisiblestyle	__class__ T/var/www/html/lang_env/lib/python3.10/site-packages/openpyxl/worksheet/dimensions.pyr   )   s
   
zDimension.__init__c                 c   s0    | j D ]}t| |d }|r|t|fV  qd S N)
__fields__getattrr   )r   keyvaluer#   r#   r$   __iter__2   s   
zDimension.__iter__c                 C   s<   |  | j}| j}| j|d< |jdi | t| j|_|S )Nr   r#   )__new__r"   __dict__parentr   r   _style)r   cpattribr#   r#   r$   __copy__9   s   
zDimension.__copy__c                 C   s   d| j j dt|  dS )N<z Instance, Attributes=>)r"   __name__dictr   r#   r#   r$   __repr__B   s   zDimension.__repr__)TN)r4   
__module____qualname____doc__r&   r	   r   r   r   r   r   outline_levelr   r    r   r*   r1   r7   __classcell__r#   r#   r!   r$   r      s    
		r   c                       s   e Zd ZdZejd ZedZedZe	ddZ
edZe Ze Z										
				
												d fdd	Zedd Zedd Z  ZS )RowDimensionz2Information about the display properties of a row.)htcustomFormatcustomHeightsthickBotthickTopr   r   Tr   r>   r   NFc                    s`   |d ur|}|d ur|}|| _ |d ur| }|	d ur|	}|| _|| _t j||||
||d d S N)r    )r>   rB   rC   r   r   )r   r   r   r>   r@   rA   r?   r   r   r;   r   r   heightrspansrB   rC   kwr!   r#   r$   r   R   s   
zRowDimension.__init__c                 C   s   | j S )z+Always true if there is a style for the row)Z	has_styler6   r#   r#   r$   r?   s   s   zRowDimension.customFormatc                 C   s
   | j duS )z,Always true if there is a height for the rowN)r>   r6   r#   r#   r$   r@   x      
zRowDimension.customHeight)r   NNNNFr   NFNNNNNN)r4   r8   r9   r:   r   r&   r   rF   rA   r
   r>   rE   r   rB   rC   r   propertyr?   r@   r<   r#   r#   r!   r$   r=   F   s:    

!
r=   c                       s   e Zd ZdZe Ze ZedZ	e
 ZeddZeddZe Zejd Zdedddd	dd	d	d	dd	d	f fd
d	Zedd Zdd Zedd Zdd Z  ZS )ColumnDimensionz5Information about the display properties of a column.bestFitTr   )widthrL   customWidthr    minmaxAFr   Nc                    s`   || _ |
| _|| _|d ur| }|d ur|}|| _|d ur|}|| _t j||||||	d d S rD   )rM   rO   rP   rL   r   r   r   )r   r   r   rM   rL   r   r   r;   r   r    rO   rP   rN   r   	auto_sizer!   r#   r$   r      s   
zColumnDimension.__init__c                 C   
   t | jS )z.Always true if there is a width for the column)boolrM   r6   r#   r#   r$   rN      rI   zColumnDimension.customWidthc                 C   s*   t | j| jgst| j | _| _dS dS )z6
        Set boundaries for column definition
        N)allrO   rP   r   r   r6   r#   r#   r$   reindex   s   zColumnDimension.reindexc                 C   s   t | j dt | j S )z*Return the range of cells actually covered:)r   rO   rP   r6   r#   r#   r$   range   s   zColumnDimension.rangec                 C   s*   t | }| ddhkrtdi |S d S )NrO   rP   col)rY   )r5   keysr   )r   attrsr#   r#   r$   to_tree   s   zColumnDimension.to_tree)r4   r8   r9   r:   r
   rM   r   rL   r   rR   r   r   r	   rO   rP   r   r   r&   r   r   rJ   rN   rV   rX   r\   r<   r#   r#   r!   r$   rK   ~   s<    




rK   c                       s4   e Zd ZdZd fdd	Zddd	Zd
d Z  ZS )DimensionHolderz%
    Allow columns to be grouped
    r   Nc                    s$   || _ d | _|| _t || d S r%   )r   max_outlinedefault_factoryr   r   )r   r   	referencer_   r!   r#   r$   r      s   zDimensionHolder.__init__   Fc           	      C   s   |du r|}t |  tr9| | }||_||_t||dd }|D ]	}|| v r+| |= q"tt||f\|_|_	dS t |  t
rVt||d D ]}| jj| }||_||_qGdS dS )aT  allow grouping a range of consecutive rows or columns together

        :param start: first row or column to be grouped (mandatory)
        :param end: last row or column to be grouped (optional, default to start)
        :param outline_level: outline level
        :param hidden: should the group be hidden on workbook open or not
        Nra   )
isinstancer_   rK   r;   r   r   mapr   rO   rP   r=   rX   r   Zrow_dimensions)	r   startendr;   r   Znew_dimZwork_sequenceZcolumn_letterelr#   r#   r$   group   s&   zDimensionHolder.groupc                 C   sp   dd }t d}t }t|  |dD ]}| }|d ur(||j || q|r0t|| _	t
|r6|S d S )Nc                 S   s   |    | jS r%   )rV   rO   )r)   r#   r#   r$   sorter   s   z'DimensionHolder.to_tree.<locals>.sortercols)r(   )r   setsortedvaluesr\   addr   appendrP   r^   len)r   rh   rf   ZoutlinesrY   objr#   r#   r$   r\      s   

zDimensionHolder.to_tree)r   N)Nra   F)r4   r8   r9   r:   r   rg   r\   r<   r#   r#   r!   r$   r]      s
    
r]   c                   @   s   e Zd ZdZeddZed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									d	ddZdS )
SheetFormatPropertiesZsheetFormatPrTr      N   c
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r%   )	baseColWidthdefaultColWidthdefaultRowHeightr@   
zeroHeightrC   thickBottomoutlineLevelRowoutlineLevelCol)
r   rt   ru   rv   r@   rw   rC   rx   ry   rz   r#   r#   r$   r     s   
zSheetFormatProperties.__init__)	rr   Nrs   NNNNNN)r4   r8   r9   tagnamer	   rt   r
   ru   rv   r   r@   rw   rC   rx   ry   rz   r   r#   r#   r#   r$   rq      s*    







rq   c                   @   s.   e Zd ZdZe Z	dddZedd ZdS )SheetDimension	dimensionNc                 C   s
   || _ d S r%   )ref)r   r~   r#   r#   r$   r   *  rI   zSheetDimension.__init__c                 C   rS   r%   )r   r~   r6   r#   r#   r$   
boundaries0  s   
zSheetDimension.boundariesr%   )	r4   r8   r9   r{   r   r~   r   rJ   r   r#   r#   r#   r$   r|   $  s    
r|   N)r   Zopenpyxl.compatr   Zopenpyxl.utilsr   r   r   r   Zopenpyxl.utils.unitsr   Zopenpyxl.descriptorsr	   r
   r   r   r   r   Z!openpyxl.descriptors.serialisabler   Zopenpyxl.styles.styleabler   Zopenpyxl.utils.bound_dictionaryr   Zopenpyxl.xml.functionsr   r   r=   rK   r]   rq   r|   r#   r#   r#   r$   <module>   s    +8E=$