
    ^b?                     `    d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 d Z
 G d d	e          Zd
S )z Read worksheets on-demand
   )	Worksheet    )ReadOnlyCell
EMPTY_CELL)get_column_letter)WorkSheetParserc                 J    t          | g           }|                                S N)r   parse_dimensions)sourceparsers     =lib/python3.11/site-packages/openpyxl/worksheet/_read_only.pyread_dimensionr      s#    VR((F""$$$    c                      e Zd ZdZdZdxZ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dZddZd	 Zdd
Zd Zd Zed             Zed             Zed             Zed             ZdS )ReadOnlyWorksheetr   Nc                     || _         || _        d| _        d | _        || _        || _        |                                  d S )Nvisible)parenttitlesheet_state_current_row_worksheet_path_shared_strings	_get_size)selfparent_workbookr   worksheet_pathshared_stringss        r   __init__zReadOnlyWorksheet.__init__"   sF    %
$ --r   c                     |                                  }t          |g           }|                                }|                                 ||\  | _        | _        | _        | _        d S d S r
   )_get_sourcer   r   close_min_column_min_row_max_column_max_row)r   srcr   
dimensionss       r   r   zReadOnlyWorksheet._get_size,   sq       b)),,..
		 	ZOYLDdmT-=t}}}	Z 	Zr   c                 J    | j         j                            | j                  S )z0Parse xml source on demand, must close after use)r   _archiveopenr   r   s    r   r"   zReadOnlyWorksheet._get_source5   s    {#(()=>>>r   Fc              #   D  K   t           }|rd}|p| j        }|p| j        }g }||f|dz   |z
  z  }|}d}	|                                 }
t	          |
| j        | j        j        | j        j        | j        j	                  }|
                                D ]R\  }	}||	|k    r nDt          ||	          D ]}|dz  }|V  ||	k    r!|                     ||||          }|dz  }|V  S|
                                 | ||	k     rt          ||dz             D ]
}|V  dS dS dS )zt
        The source worksheet file may have columns or rows missing.
        Missing cells will be created.
        Nr   )	data_onlyepochdate_formats)r   
max_columnmax_rowr"   r   r   r   r/   r0   _date_formatsparserange_get_rowr#   )r   min_colmin_rowmax_colr3   values_onlyfiller	empty_rowcounteridxr(   r   row_s                 r   _cells_by_rowzReadOnlyWorksheet._cells_by_row:   s     
  	F,T_)T\	 	<	Wq[7%:;I   d&:+/;+@HY.2k.GI I I  	 	HC sW}  7C((    1 #~ mmC';GG1					 	 7S= 	 7GAI..    	  	  	  	    r   c                     |s|sdS |p|d         d         }|dz   |z
  }t           g|z  }|rdg|z  }|D ]<}|d         }||cxk    r|k    r%n ||z
  }	|d         ||	<   |st          | fi |||	<   =t          |          S )zT
        Make sure a row contains always the same number of cells or values
         columnr   Nvalue)r   r   tuple)
r   r@   r8   r:   r;   	row_widthnew_rowcellr>   r?   s
             r   r7   zReadOnlyWorksheet._get_rowe   s      	7 	2/c"gh/aK')	,* 	)fy(G 	> 	>D8nG' > > > >W > > > > >'#G}" >#/#=#=#=#=GCLW~~r   c                 ^    |                      ||||          D ]}|r
|d         c S t          S )z4Cells are returned by a generator which can be emptyr   )rB   r   )r   r@   rF   s      r   	_get_cellzReadOnlyWorksheet._get_cell~   sE    %%fc63?? 	 	C 1vr   c                     t          | j        | j        g          s&|r|                                  nt	          d          t          | j                   | j         dt          | j                   | j         S )Nz9Worksheet is unsized, use calculate_dimension(force=True):)allr2   r3   _calculate_dimension
ValueErrorr   
min_columnr9   )r   forces     r   calculate_dimensionz%ReadOnlyWorksheet.calculate_dimension   s    DOT\233 	^ ^))++++ !\]]]#DO44wdlwwEVW[WfEgEgwimiuwwwr   c                     d}| j         D ]"}|s|d         }t          ||j                  }#|j        | _        || _        dS )z
        Loop through all the cells to get the size of a worksheet.
        Do this only if it is explicitly requested.
        r   rE   N)rowsmaxrF   r@   r'   r&   )r   r:   rrK   s       r   rQ   z&ReadOnlyWorksheet._calculate_dimension   sX      	0 	0A R5D'4;//GG"r   c                 "    dx| _         | _        dS )z
        Remove worksheet dimensions if these are incorrect in the worksheet source.
        NB. This probably indicates a bug in the library or application that created
        the workbook.
        N)r'   r&   r-   s    r   reset_dimensionsz"ReadOnlyWorksheet.reset_dimensions   s     ,0/(((r   c                     | j         S r
   )r%   r-   s    r   r9   zReadOnlyWorksheet.min_row   
    }r   c                     | j         S r
   )r'   r-   s    r   r3   zReadOnlyWorksheet.max_row   r]   r   c                     | j         S r
   )r$   r-   s    r   rS   zReadOnlyWorksheet.min_column       r   c                     | j         S r
   )r&   r-   s    r   r2   zReadOnlyWorksheet.max_column   r`   r   )F)r   NF)__name__
__module____qualname__r$   r%   r&   r'   r   rK   	iter_rowsvaluesrW   __getitem____iter__r    r   r"   rB   r7   rM   rU   rQ   r[   propertyr9   r3   rS   r2   rD   r   r   r   r      sb       KH!!K( >D#IF>D'K!H  Z Z Z? ? ?
(  (  (  ( V   2  x x x x# # #"0 0 0   X   X     X      X     r   r   N)__doc__	worksheetr   openpyxl.cell.read_onlyr   r   openpyxl.utilsr   _readerr   r   objectr   rD   r   r   <module>rp      s     !           < < < < < < < < , , , , , , $ $ $ $ $ $% % %
h  h  h  h  h  h  h  h  h  h r   