
    Eh                         d dl mZ d dlmZ d dlmZ d dlZ ej                  d      Z G d de      Z	 G d d	e	      Z
 G d
 de	      Zy)    )utils)	Container)string_typesNz^LTc                   D   e Zd Zej                  dgz   ZddZd Zed        Zed        Z	ed        Z
d Z	 	 dd
Z	 	 	 ddZdZddd	d	ddej                   ej"                  fdZej                   ej"                  fdZej                   ej"                  fdZddZd Zy)Page_layoutNc                 <   || _         || _        || _        | j                  j                  j	                  dd      dz  | j                  _        | j                   j                  | j                        | _        | j                  |      | _	        |j                  j	                  d|j                  j	                  d            }t        t        | j                  |            | _        | j                  j                  | _        | j                  \  }}}}	||z
  }
|	|z
  }y )NRotater   ih  CropBoxMediaBox)pdfpage_objpage_numberattrsgetrotateprocess_pagelayout
decimalizeinitial_doctoptuplemapcropboxbbox)selfr   r   r   r   r   x0bottomx1topwidthheights               P/var/www/html/bid_assistant/venv/lib/python3.12/site-packages/pdfplumber/page.py__init__zPage.__init__   s     &#}}2266xCcIhh++DMM:"oon=..$$Y0B0B:0NOS':;KK$$	"iiFBRv    c                 V    t        j                  || j                  j                        S N)r   r   r   	precision)r   xs     r"   r   zPage.decimalize   s    488#5#566r$   c                 @    | j                   d   | j                   d   z
  S )N   r   r   r   s    r"   r    z
Page.width       yy|diil**r$   c                 @    | j                   d   | j                   d   z
  S )N      r+   r,   s    r"   r!   zPage.height!   r-   r$   c                 t    t        | d      r| j                  S | j                         | _        | j                  S N_objects)hasattrr3   parse_objectsr,   s    r"   objectszPage.objects%   s/    4$T]]&:**,}}r$   c                     i | j                   | j                  | j                  | j                  fd| j                  j
                  D ]
  } |        S )Nc                 :   t        fd| j                  j                         D              }t        j                  t
        d| j                  j                        j                         }||d<   |d<   t        | d      r| j                         |d<   |j                  d      d k7  r!|d   z
  |d	<   |d   z
  |d
<   |d	   z   |d<   j                  |      d k(  rg |<   |   j                  |       t        | d      r| j                  D ]
  } 	|        y y )Nc              3   ~   K   | ]4  \  }}t        |t        t        t        f      r|d    dk7  r| |      f 6 yw)r   _N)
isinstancefloatintr   ).0kvds      r"   	<genexpr>z=Page.parse_objects.<locals>.process_object.<locals>.<genexpr>5   s@      %daa%l!;<! AaD	 %s   := object_typer   get_texttexty0y1r   r   doctop_objs)dict__dict__itemsresublt_pat	__class____name__lowerr4   rE   r   appendrJ   )
objattrkindchildrA   hidcr6   pnoprocess_objects
       r"   r\   z*Page.parse_objects.<locals>.process_object3   s    %cll.@.@.B % %D 66&"cmm&<&<=CCED"&D"%DsJ'"||~Vxx~%$t*nU!"T$ZX!$tE{!2X{{4 D( "DM  &sG$ YY *E"5)* %r$   )r   r!   r   r   r   rJ   )r   rU   rA   rY   rZ   r6   r[   r\   s     @@@@@@r"   r5   zPage.parse_objects+   sd    OOKK!!	* 	*4 ;;$$ 	 C3	  r$   r0   c                 d    dvrt        d      fd}t        || j                        }|S )N)r@   rY   zOrientation must be 'v' or 'h'c                 b    | d   dk(  rdnd}d k7  r| d   k(  nd}|| d   k(  | |   k\  z  z  S )Norientationr@   r!   r    rD   T )edimet	edge_type
min_lengthr_   s      r"   testzPage.filter_edges.<locals>.testY   sY    .#5(7C3<3D!M"i/$B=![03:%' r$   )	Exceptionfilteredges)r   r_   rd   re   rf   ri   s    ```  r"   filter_edgeszPage.filter_edgesR   s5     j(<==	 tTZZ(r$   c                    	 | j                  |||      }|dk(  rdnd	t        	fd|D              }t        j                  ||      }t	        t        d |D                    }|S )N)rd   re   r@   r   r   c              3   (   K   | ]	  }|     y wr&   r`   )r>   ra   pos_vars     r"   rB   z*Page.get_edge_positions.<locals>.<genexpr>m   s     373s   )	tolerancec              3   J   K   | ]  }t        |      t        |      z    y wr&   )sumlen)r>   cs     r"   rB   z*Page.get_edge_positions.<locals>.<genexpr>o   s      FQQ#a& Fs   !#)rj   setr   cluster_listlistsorted)
r   r_   rd   re   rn   ri   
edges_uniqedges_clust
edge_meansrm   s
            @r"   get_edge_positionszPage.get_edge_positionsd   sn    
 !!+J " 8 &,$%3U33
((yI& F+ FFG
r$   )lineslines_strictguttersr{      c	           	      
     fd}	t        t         j                   |	|d                  }t        t         j                   |	|d                  }t        j                   j
                  ||      }
|
S )z
        For the purposes of this method, "lines" refers to all
        two-dimensional lines, including "rect_edge" objects.

        To use only actual "line" objects, choose the
        "lines_strict" strategy.
        c                 (   t        | t        t        f      r| S | j                  vr'dj	                  |j                        }t        |      | dk(  r2|dk(  rj                  d      S |dk(  rj                  d	      S | dk(  r4|dk(  rj                  dd      S |dk(  rj                  dd	      S | d	k(  rO|dk(  r"t        j                  j                  d
      S |dk(  r"t        j                  j                  d
      S y y )Nz3{0} must be list/tuple of ints/floats or one of {1}r{   r@   )re   rn   rY   r|   line)rd   re   rn   r}   )min_size)
r;   ru   r   TABLE_STRATEGIESformat
ValueErrorrz   r   find_gutterschars)
paramnamemsggutter_min_heightgutter_min_widthline_min_heightline_min_widthr   x_tolerancey_tolerances
      r"   use_strategyz(Page.extract_table.<locals>.use_strategy   s^   %$/ 5 55Od&;&;< $S/)3;223#2"- 3 / / 3;223#1"- 3 / / &3;223"(#2"- 3 / / 3;223"(#1"- 3 / /
 	!3; --djj#!13 33; --djj#!24 4 	 "r$   rY   r@   r   r   )ru   r   r   r   extract_tabler   )r   r@   rY   r   r   r   r   r   r   r   tables   `  ``````  r"   r   zPage.extract_tablet   so    "&	4 &	4P T__l1c&:;<T__l1c&:;<##DJJ1##% r$   c                 F    t        j                  | j                  ||      S Nr   )r   extract_textr   r   r   r   s      r"   r   zPage.extract_text   s#     !!$**##% 	%r$   c                 F    t        j                  | j                  ||      S r   )r   extract_wordsr   r   s      r"   r   zPage.extract_words   s#     ""4::##% 	%r$   c                     t        | ||      S )N)strict)CroppedPage)r   r   r   s      r"   cropz	Page.crop   s    4f55r$   c                     t        | |      S r&   )FilteredPage)r   fns     r"   rh   zPage.filter   s    D"%%r$   )Nr   )Nr0   )Nr0   r0   F)rR   
__module____qualname__r   cached_propertiesr#   r   propertyr    r!   r6   r5   rj   rz   r   r   DEFAULT_X_TOLERANCEDEFAULT_Y_TOLERANCEr   r   r   r   rh   r`   r$   r"   r   r      s    !33	mC7 + + + +  
%P &  <

----@F ----% ----%6&r$   r   c                   $    e Zd ZddZed        Zy)r   c                     || _         |j                  | _        |j                  | _        |j                  | _        || _        || _        y r&   )parent_pager   r   r   r   )r   r   r   r   s       r"   r#   zCroppedPage.__init__   sA    &&22&22%00	r$   c                     t        | d      r| j                  S | j                  rddi}nddi}t        j                  | j
                  j                  | j                  fi || _        | j                  S )Nr3   r   Tr   )r4   r3   r   r   within_bboxr   r6   r   )r   kwargss     r"   r6   zCroppedPage.objects   sn    4$T]]&:;;'Ft%F))$$II  }}r$   Nr   rR   r   r   r#   r   r6   r`   r$   r"   r   r      s     
 
r$   r   c                   "    e Zd Zd Zed        Zy)r   c                     || _         || _        |j                  | _        |j                  | _        |j                  | _        y r&   )r   test_functionr   r   )r   r   r   s      r"   r#   zFilteredPage.__init__   s;    &*&22&22%00r$   c                     t        | d      r| j                  S t        j                  | j                  j
                  | j                        | _        | j                  S r2   )r4   r3   r   filter_objectsr   r6   r   r,   s    r"   r6   zFilteredPage.objects   sK    4$T]]&:,,$$
 }}r$   Nr   r`   r$   r"   r   r      s    1  r$   r   )
pdfplumberr   pdfplumber.containerr   sixr   rN   compilerP   r   r   r   r`   r$   r"   <module>r      sH     *  		F	B&9 B&H$ .4 r$   