o
     ex                     @   s   d dl Z d dlZd dl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mZ ddlmZmZmZ G d	d
 d
eZdS )    N)StringIO)chain)AnyDictListOptionalSetTextIO   )utils)T_obj
T_obj_list)CSV_COLS_REQUIREDCSV_COLS_TO_PREPEND
Serializerc                   @   s2  e Zd Zg dZedeee  fddZede	e
ef fddZd3deee
  de	e
ef fd	d
Zd3deee
  ddfddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZedefd d!Zedefd"d#Zedefd$d%Zedefd&d'Zedefd(d)Z						d4d*ee deee
  d+eee
  d,eee
  d-ee d.ee dee
 fd/d0Z					d5d*ee deee
  d-ee d+eee
  d,eee
  dee
 fd1d2Z dS )6	Container)_rect_edges_curve_edges_edges_objectsreturnc                 C      d S N selfr   r   G/var/www/html/venv/lib/python3.10/site-packages/pdfplumber/container.pypages      zContainer.pagesc                 C   r   r   r   r   r   r   r   objects   r   zContainer.objectsNobject_typesc                 C   r   r   r   )r   r    r   r   r   to_dict   s   zContainer.to_dict
propertiesc                 C   s4   |d u r| j n|}|D ]}t| |rt| | qd S r   )cached_propertieshasattrdelattr)r   r"   propspr   r   r   flush_cache   s   

zContainer.flush_cachec                 C      | j dg S )Nrectr   getr   r   r   r   rects       zContainer.rectsc                 C   r)   )Nliner+   r   r   r   r   lines$   r.   zContainer.linesc                 C   r)   )Ncurver+   r   r   r   r   curves(   r.   zContainer.curvesc                 C   r)   )Nimager+   r   r   r   r   images,   r.   zContainer.imagesc                 C   r)   )Ncharr+   r   r   r   r   chars0   r.   zContainer.charsc                 C   r)   )Ntextboxverticalr+   r   r   r   r   textboxverticals4   r.   zContainer.textboxverticalsc                 C   r)   )Ntextboxhorizontalr+   r   r   r   r   textboxhorizontals8   r.   zContainer.textboxhorizontalsc                 C   r)   )Ntextlineverticalr+   r   r   r   r   textlineverticals<   r.   zContainer.textlineverticalsc                 C   r)   )Ntextlinehorizontalr+   r   r   r   r   textlinehorizontals@   r.   zContainer.textlinehorizontalsc                 C   4   t | dr| jS dd | jD }tt| | _| jS )Nr   c                 s       | ]}t |V  qd S r   )r   rect_to_edges.0rr   r   r   	<genexpr>H       z'Container.rect_edges.<locals>.<genexpr>)r$   r   r-   listr   )r   rect_edges_genr   r   r   
rect_edgesD   
   
zContainer.rect_edgesc                 C   r?   )Nr   c                 s   r@   r   )r   curve_to_edgesrB   r   r   r   rE   P   rF   z(Container.curve_edges.<locals>.<genexpr>)r$   r   r2   rG   r   )r   curve_edges_genr   r   r   curve_edgesL   rJ   zContainer.curve_edgesc                 C   s:   t | dr| jS tttj| j}|| j | j | _| jS )Nr   )	r$   r   rG   mapr   line_to_edger0   rI   rM   )r   
line_edgesr   r   r   edgesT   s
   
zContainer.edgesc                 C   "   dt dtfdd}tt|| jS )Nxr   c                 S      t | d dkS )NorientationhboolrS   r   r   r   test^      z(Container.horizontal_edges.<locals>.testr   rX   rG   filterrQ   r   rZ   r   r   r   horizontal_edges\      zContainer.horizontal_edgesc                 C   rR   )NrS   r   c                 S   rT   )NrU   vrW   rY   r   r   r   rZ   e   r[   z&Container.vertical_edges.<locals>.testr\   r^   r   r   r   vertical_edgesc   r`   zContainer.vertical_edgesstreaminclude_attrsexclude_attrs	precisionindentc           	      C   sH   |  |}t|||d|}|d u rtj||dS tj|||d d S )Nrf   rd   re   )rg   )r!   r   	serializejsondumpsdump)	r   rc   r    rd   re   rf   rg   data
serializedr   r   r   to_jsonj   s   

zContainer.to_jsonc                 C   s.  |d u r
t  }d}nd}|d u rt| j dg }g }t }| jd u r'| gn| j}	t|||d}
|	D ]+}|D ]&}t||d }t|r]||
	|7 }dd |d 
 D }|t|}q7q3tttt|ttt   }ttt|
j| }tj||d	d
}|  || |r|d | S d S )NTFannotrh   sc                 S   s    g | ]\}}t |tur|qS r   )typedict)rC   kra   r   r   r   
<listcomp>   s     z$Container.to_csv.<locals>.<listcomp>r   ignore)
fieldnamesextrasaction)r   rG   r   keyssetr   r   getattrlenri   itemsunionr   sortedr   r]   attr_filtercsv
DictWriterwriteheader	writerowsseekread)r   rc   r    rf   rd   re   	to_stringrn   fieldsr   
serializerpagetobjsnew_keysnon_req_colscolswr   r   r   to_csv   sD   

zContainer.to_csvr   )NNNNNN)NNNNN)!__name__
__module____qualname__r#   propertyr   r   r   r   r   strr   r   r!   r(   r-   r0   r2   r4   r6   r8   r:   r<   r>   rI   rM   rQ   r_   rb   r	   intro   r   r   r   r   r   r      s    $






r   )r   rj   ior   	itertoolsr   typingr   r   r   r   r   r	    r   _typingr   r   convertr   r   r   objectr   r   r   r   r   <module>   s     