o
    h;                     @   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                   @   s4  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      t NNotImplementedErrorself 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&   r0   zContainer.linesc                 C   r+   )NZcurver-   r   r   r   r   curves*   r0   zContainer.curvesc                 C   r+   )Nimager-   r   r   r   r   images.   r0   zContainer.imagesc                 C   r+   )Ncharr-   r   r   r   r   chars2   r0   zContainer.charsc                 C   r+   )NZtextboxverticalr-   r   r   r   r   textboxverticals6   r0   zContainer.textboxverticalsc                 C   r+   )NZtextboxhorizontalr-   r   r   r   r   textboxhorizontals:   r0   zContainer.textboxhorizontalsc                 C   r+   )NZtextlineverticalr-   r   r   r   r   textlineverticals>   r0   zContainer.textlineverticalsc                 C   r+   )NZtextlinehorizontalr-   r   r   r   r   textlinehorizontalsB   r0   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   Zrect_to_edges.0rr   r   r   	<genexpr>J       z'Container.rect_edges.<locals>.<genexpr>)r&   r   r/   listr   )r   Zrect_edges_genr   r   r   
rect_edgesF   
   
zContainer.rect_edgesc                 C   r<   )Nr   c                 s   r=   r   )r   Zcurve_to_edgesr>   r   r   r   rA   R   rB   z(Container.curve_edges.<locals>.<genexpr>)r&   r   r3   rC   r   )r   Zcurve_edges_genr   r   r   curve_edgesN   rE   zContainer.curve_edgesc                 C   s:   t | dr| jS tttj| j}|| j | j | _| jS )Nr   )	r&   r   rC   mapr   Zline_to_edger2   rD   rF   )r   Z
line_edgesr   r   r   edgesV   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rJ   r   r   r   test`      z(Container.horizontal_edges.<locals>.testr   rO   rC   filterrH   r   rQ   r   r   r   horizontal_edges^      zContainer.horizontal_edgesc                 C   rI   )NrJ   r   c                 S   rK   )NrL   vrN   rP   r   r   r   rQ   g   rR   z&Container.vertical_edges.<locals>.testrS   rU   r   r   r   vertical_edgese   rW   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r]   r[   r\   )r^   )r#   r   	serializejsondumpsdump)	r   rZ   r"   r[   r\   r]   r^   data
serializedr   r   r   to_jsonl   s   

zContainer.to_jsonc                 C   s4  |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	tjd
d}|  || |r|d | S d S )NTFZannotr_   sc                 S   s    g | ]\}}t |tur|qS r   )typedict)r?   krX   r   r   r   
<listcomp>   s     z$Container.to_csv.<locals>.<listcomp>r   ignore\)
fieldnamesextrasactionquoting
escapechar)r   rC   r!   keyssetr   r   getattrlenr`   itemsunionr   sortedr   rT   Zattr_filtercsv
DictWriterQUOTE_MINIMALwriteheader	writerowsseekread)r   rZ   r"   r]   r[   r\   Z	to_stringre   fieldsr   
serializerpagetZobjsZnew_keysZnon_req_colscolswr   r   r   to_csv   sP   

zContainer.to_csvr   )NNNNNN)NNNNN)!__name__
__module____qualname__r%   propertyr   r   r   r   r   strr   r!   r#   r*   r/   r2   r3   r5   r7   r8   r9   r:   r;   rD   rF   rH   rV   rY   r	   intrf   r   r   r   r   r   r      s    









r   )ry   ra   ior   	itertoolsr   typingr   r   r   r   r   r	    r   Z_typingr   r   convertr   r   r   objectr   r   r   r   r   <module>   s     