o
    ީZhx                     @   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   K/var/www/html/lang_env/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)   )NZ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)   )NZtextboxverticalr+   r   r   r   r   textboxverticals4   r.   zContainer.textboxverticalsc                 C   r)   )NZtextboxhorizontalr+   r   r   r   r   textboxhorizontals8   r.   zContainer.textboxhorizontalsc                 C   r)   )NZtextlineverticalr+   r   r   r   r   textlineverticals<   r.   zContainer.textlineverticalsc                 C   r)   )NZ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   Zrect_to_edges.0rr   r   r   	<genexpr>H       z'Container.rect_edges.<locals>.<genexpr>)r$   r   r-   listr   )r   Zrect_edges_genr   r   r   
rect_edgesD   
   
zContainer.rect_edgesc                 C   r:   )Nr   c                 s   r;   r   )r   Zcurve_to_edgesr<   r   r   r   r?   P   r@   z(Container.curve_edges.<locals>.<genexpr>)r$   r   r1   rA   r   )r   Zcurve_edges_genr   r   r   curve_edgesL   rC   zContainer.curve_edgesc                 C   s:   t | dr| jS tttj| j}|| j | j | _| jS )Nr   )	r$   r   rA   mapr   Zline_to_edger0   rB   rD   )r   Z
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rH   r   r   r   test^      z(Container.horizontal_edges.<locals>.testr   rM   rA   filterrF   r   rO   r   r   r   horizontal_edges\      zContainer.horizontal_edgesc                 C   rG   )NrH   r   c                 S   rI   )NrJ   vrL   rN   r   r   r   rO   e   rP   z&Container.vertical_edges.<locals>.testrQ   rS   r   r   r   vertical_edgesc   rU   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[   rY   rZ   )r\   )r!   r   	serializejsondumpsdump)	r   rX   r    rY   rZ   r[   r\   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annotr]   sc                 S   s    g | ]\}}t |tur|qS r   )typedict)r=   krV   r   r   r   
<listcomp>   s     z$Container.to_csv.<locals>.<listcomp>r   ignore)
fieldnamesextrasaction)r   rA   r   keyssetr   r   getattrlenr^   itemsunionr   sortedr   rR   Zattr_filtercsv
DictWriterwriteheader	writerowsseekread)r   rX   r    r[   rY   rZ   Z	to_stringrc   fieldsr   
serializerpagetZobjsZnew_keysZ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   r1   r3   r5   r6   r7   r8   r9   rB   rD   rF   rT   rW   r	   intrd   r   r   r   r   r   r      s    $






r   )ru   r_   ior   	itertoolsr   typingr   r   r   r   r   r	    r   Z_typingr   r   convertr   r   r   objectr   r   r   r   r   <module>   s     