o
    ¾Ùøi/c  ã                   @   sR  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlm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mZ d dlmZm Z  d d	l!m"Z" d d
l#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl&m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= e >d¡Z?e@g d¢ƒZAer»ddlBmCZC ddlDmEZE ddddddœZFdeGdeHfd d!„ZId"eeHef deeHef fd#d$„ZJG d%d&„ d&eƒZKd:d'e(d(e)de(fd)d*„ZLd'e(d+e)de(fd,d-„ZMG d.d/„ d/e-ƒZNG d0d1„ d1eNƒZOd2e(d3e(ddfd4d5„ZPG d6d7„ d7eOƒZQG d8d9„ d9eOƒZRdS );é    N)Ú	lru_cache)
ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚ	GeneratorÚListÚOptionalÚPatternÚTupleÚUnion)Ú	normalize)Úwarn)ÚPDFPageAggregator)ÚLTCharÚLTComponentÚLTContainerÚLTCurveÚLTItemÚLTPageÚLTTextContainer)ÚPDFPageInterpreterÚ	PDFStackT)ÚPDFPage)Ú	PSLiteralé   )Úutils)ÚT_bboxÚT_numÚT_objÚ
T_obj_list)Ú	Container)ÚPDFStructTreeÚStructTreeMissing)ÚT_table_settingsÚTableÚTableFinderÚTableSettings)Údecode_textÚresolve_allÚresolve_and_decode)ÚMalformedPDFExceptionÚPdfminerException)ÚTextMapz^LT)ÚadvÚheightÚ	linewidthÚptsÚsizeÚsrcsizeÚwidthÚx0Úx1Úy0Úy1ÚbitsÚmatrixÚuprightÚfontnameÚtextÚ	imagemaskÚ
colorspaceÚevenoddÚfillÚnon_stroking_colorÚstrokeÚstroking_colorÚstreamÚnameÚmcidÚtag)Ú	PageImage)ÚPDFzSimSun,RegularzSimHei,RegularzSimKai,RegularzSimFang,RegularzSimLi,Regular)s   ËÎÌås   ºÚÌås   ¿¬Ìå_GB2312s   ·ÂËÎ_GB2312s   Á¥Êér<   Úreturnc                 C   sh   d| v r|   d¡d }| d |… | |d … }}nd| }}t |t|ƒdd… ¡}t|ƒdd… | S )Nó   +r   ó    é   éÿÿÿÿ)ÚindexÚCP936_FONTNAMESÚgetÚstr)r<   Úsplit_atÚprefixÚsuffixÚ
suffix_new© rX   ú\/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/pdfplumber/page.pyÚfix_fontname_bytes\   s   
rZ   Úkwargsc                 C   s   dd„ |   ¡ D ƒS )Nc                 S   s(   i | ]\}}|t |tƒrt|ƒn|“qS rX   )Ú
isinstanceÚlistÚtuple)Ú.0ÚkeyÚvaluerX   rX   rY   Ú
<dictcomp>h   s    ÿÿz'tuplify_list_kwargs.<locals>.<dictcomp>)Úitems)r[   rX   rX   rY   Útuplify_list_kwargsg   s   þrd   c                       s”   e Zd ZU dZdZee ed< dZee	 ed< dde
dee ddfdd	„Zdd
d„Zddd„Zdef‡ fdd„Zd‡ fdd„Zd‡ fdd„Z‡  ZS )Ú"PDFPageAggregatorWithMarkedContentzZExtract layout from a specific page, adding marked-content IDs to
    objects where found.NÚcur_mcidÚcur_tagrH   ÚpropsrK   c                 C   s6   t |jƒ| _t|tƒrd|v r|d | _dS d| _dS )z5Handle beginning of tag, setting current MCID if any.ÚMCIDN)r(   rF   rg   r\   Údictrf   )ÚselfrH   rh   rX   rX   rY   Ú	begin_tagu   s   
z,PDFPageAggregatorWithMarkedContent.begin_tagc                 C   s   d| _ d| _dS )z/Handle beginning of tag, clearing current MCID.N)rg   rf   ©rk   rX   rX   rY   Úend_tag}   s   
z*PDFPageAggregatorWithMarkedContent.end_tagc                 C   s,   | j jr| j jd }| j|_| j|_dS dS )z^Add current MCID to what we hope to be the most recent object created
        by pdfminer.six.rO   N)Úcur_itemÚ_objsrf   rG   rg   rH   )rk   Úcur_objrX   rX   rY   Útag_cur_item‚   s
   	ýz/PDFPageAggregatorWithMarkedContent.tag_cur_itemc                    s   t ƒ j|i |¤Ž}|  ¡  |S )z;Hook for rendering characters, adding the `mcid` attribute.)ÚsuperÚrender_charrr   )rk   Úargsr[   r.   ©Ú	__class__rX   rY   rt   �   s   z.PDFPageAggregatorWithMarkedContent.render_charc                    ó   t ƒ j|i |¤Ž |  ¡  dS )z7Hook for rendering images, adding the `mcid` attribute.N)rs   Úrender_imagerr   ©rk   ru   r[   rv   rX   rY   ry   –   ó   z/PDFPageAggregatorWithMarkedContent.render_imagec                    rx   )zAHook for rendering lines and curves, adding the `mcid` attribute.N)rs   Ú
paint_pathrr   rz   rv   rX   rY   r|   ›   r{   z-PDFPageAggregatorWithMarkedContent.paint_path©N©rK   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rf   r	   ÚintÚ__annotations__rg   rS   r   r   rl   rn   rr   Úfloatrt   ry   r|   Ú__classcell__rX   rX   rv   rY   re   n   s   
 

re   Úbox_rawÚrotationc                 C   sp   t dd„ | D ƒƒstd| › �ƒ‚t| d | d fƒ\}}t| d | d fƒ\}}|dv r2||||fS ||||fS )	Nc                 s   s   � | ]	}t |tjƒV  qd S r}   )r\   ÚnumbersÚNumber©r_   ÚxrX   rX   rY   Ú	<genexpr>¦   s   € z!_normalize_box.<locals>.<genexpr>z0Bounding box contains non-number coordinate(s): r   rN   r   é   )éZ   i  )Úallr+   Úsorted)r‡   rˆ   r5   r6   r7   r8   rX   rX   rY   Ú_normalize_box¡   s   ÿr’   Ú	mb_heightc                 C   s    | \}}}}||| ||| fS r}   rX   )r‡   r“   r5   r7   r6   r8   rX   rX   rY   Ú_invert_boxµ   s   r”   c                   @   sÄ  e Zd ZU ejdg Zee ed< dZe	ed< dZ
	dgddd	ed
edefdd„Zdhdd„Zedefdd„ƒZedefdd„ƒZedeeeef  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eef fdd„ƒZdeeef deeef fd d!„Zd"edefd#d$„Z d%ee! de"eddf fd&d'„Z#deeef fd(d)„Z$	did*e%e& de'fd+d,„Z(	did*e%e& dee) fd-d.„Z*	did*e%e& de%e) fd/d0„Z+	did*e%e& deeee%e    fd1d2„Z,	did*e%e& de%eee%e    fd3d4„Z-d5ede.fd6d7„Z/					djd8e0ee1e f d9e	d:e	d;ed<e	d=e	d5edeeeef  fd>d?„Z2d5edefd@dA„Z3d5edefdBdC„Z4d5edefdDdE„Z5	dkdFe	d<e	d5edefdGdH„Z6	dldJe7dKe	dLe	ddMfdNdO„Z8	dldJe7dKe	dLe	ddMfdPdQ„Z9	dldJe7dKe	dLe	ddMfdRdS„Z:dTe;ege	f ddUfdVdW„Z<d5eddUfdXdY„Z=				I	IdmdZe%e0ee>f  d[e%e0ee>f  d\e%e0ee>f  d]e	d^e	dd_fd`da„Z?didbe%ee  deeef fdcdd„Z@defdedf„ZAdS )nÚPageÚ_layoutÚcached_propertiesTÚis_originalNr   ÚpdfrJ   Úpage_objÚpage_numberÚinitial_doctopc                    sà   || _ | | _ˆ | _|| _|| _ddtdtdtf‡ fdd„}|ddƒ}|d | _t|d	ƒ| jƒ}|d
 |d  }t	||ƒ| _
dD ]}	|	ˆ jv rYt	t||	ƒ| jƒ|ƒ}
t| |	 ¡ |
ƒ q?dˆ jvrc| j
| _| j
| _tƒ | jƒ| _d S )Nr`   ÚdefaultrK   c                    s    t ˆ j | ¡ƒ}|d u r|S |S r}   )r)   ÚattrsrR   )r`   r�   ra   ©rš   rX   rY   Úget_attrÌ   s   zPage.__init__.<locals>.get_attrÚRotater   ih  ÚMediaBoxrŽ   r   )ÚCropBoxÚTrimBoxÚBleedBoxÚArtBoxr£   r}   )r™   Ú	root_pagerš   r›   rœ   rS   r   rˆ   r’   r”   Úmediaboxrž   ÚsetattrÚlowerÚcropboxÚbboxr   Ú_get_textmapÚget_textmap)rk   r™   rš   r›   rœ   r    Ú	_rotationÚmb_rawr“   Úbox_nameÚbox_normalizedrX   rŸ   rY   Ú__init__¿   s,   


ÿ€
zPage.__init__rK   c                 C   s   |   ¡  | j ¡  d S r}   )Úflush_cacher®   Úcache_clearrm   rX   rX   rY   Úcloseë   s   z
Page.closec                 C   ó   | j d | j d  S )NrN   r   ©r¬   rm   rX   rX   rY   r4   ï   ó   z
Page.widthc                 C   r·   )NrŽ   r   r¸   rm   rX   rX   rY   r/   ó   r¹   zPage.heightc                 C   s0   zdd„ t | j| ƒD ƒW S  ty   g  Y S w )z-Return the structure tree for a page, if any.c                 S   s   g | ]}|  ¡ ‘qS rX   )Úto_dict)r_   ÚelemrX   rX   rY   Ú
<listcomp>û   s    z'Page.structure_tree.<locals>.<listcomp>)r"   r™   r#   rm   rX   rX   rY   Ústructure_tree÷   s
   ÿzPage.structure_treec              
   C   sx   t | dƒr| jS t| jj| j| jjd�}t| jj|ƒ}z| | j	¡ W n t
y3 } zt|ƒ‚d }~ww | ¡ | _| jS )Nr–   )ÚpagenoÚlaparams)Úhasattrr–   re   r™   Úrsrcmgrr›   r¿   r   Úprocess_pagerš   Ú	Exceptionr,   Ú
get_result)rk   ÚdeviceÚinterpreterÚerX   rX   rY   Úlayoutÿ   s    
ý€ÿ
zPage.layoutc                    sx   dt ttf dtdt ttf f‡fdd„‰ dtdtf‡ ‡fdd„}tˆjjƒp(g }tt||ƒƒ}t	ˆt
ƒr:ˆ |¡S |S )	NÚptÚrrK   c                    sF   |d }t |ƒD ]}| \}}||d krˆ jnˆ j}||| f} q| S )Nr�   rN   )Úranger4   r/   )rÉ   rÊ   ÚturnsÚirŒ   ÚyÚcomprm   rX   rY   Úrotate_point  s   z!Page.annots.<locals>.rotate_pointÚannotc                    sb  | d \}}}}ˆ ||fˆj ƒ}ˆ ||fˆj ƒ}ˆjj}ttg |¢|¢R ƒ|ƒ\}}	}
}|  di ¡}| d¡|  d¡|  d¡dœ}| ¡ D ]>\}}|d urƒz	| d¡||< W qE ty‚   z	| d¡||< W n ty   ˆj	j
rr‚ td	|› d
|› d�ƒ Y nw Y qEw qEˆjd||| |
||	 ˆj|	 |	||
| ||	 dœ}| |¡ d| v r«ˆ| d< | |d< |S )NÚRectÚAÚURIÚTÚContents)ÚuriÚtitleÚcontentszutf-8zutf-16zCould not decode z of annotation. z will be missing.rÑ   )r›   Úobject_typer5   r7   r6   r8   ÚdoctopÚtopÚbottomr4   r/   ÚPÚdata)rˆ   r§   r/   r”   r’   rR   rc   ÚdecodeÚUnicodeDecodeErrorr™   Úraise_unicode_errorsr   r›   rœ   Úupdate)rÑ   Ú_aÚ_bÚ_cÚ_dÚpt0Úpt1Úrhr5   rÜ   r6   rÝ   ÚaÚextrasÚkÚvÚparsed©rÐ   rk   rX   rY   Úparse  s\    ýÿÿý€ýýõ
zPage.annots.<locals>.parse)r   r…   rƒ   r   r)   rš   Úannotsr]   Úmapr\   ÚCroppedPageÚ_crop_fn)rk   rñ   Úrawrï   rX   rð   rY   rò     s   *1

zPage.annotsc                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]
}|d  dur|‘qS )r×   NrX   )r_   rë   rX   rX   rY   r¼   T  s    z#Page.hyperlinks.<locals>.<listcomp>)rò   rm   rX   rX   rY   Ú
hyperlinksR  s   zPage.hyperlinksc                 C   s    t | dƒr| jS |  ¡ | _| jS )NÚ_objects)rÀ   rø   Úparse_objectsrm   rX   rX   rY   ÚobjectsV  s   

zPage.objectsrÉ   c                 C   s*   | j d |d  | j d | j |d  fS )Nr   r   )r¨   r/   )rk   rÉ   rX   rX   rY   Úpoint2coord]  s   *zPage.point2coordÚobjc           
         s
  t  td|jj¡ ¡ }dtttf dt	tttf  fdd„}t
td t||j ¡ ƒƒƒ}||d< ˆ j|d< dD ]}t||ƒrGtt||ƒjƒ||< q6t|ttfƒrd| ¡ }ˆ jjd ur`tˆ jj|ƒn||d	< t|tƒrš|j}t|jtƒru|jn|jf|d
< t|jtƒr„|jn|jf|d< t|d tƒr™t |d ƒ|d< n#t|t!fƒr½t"tˆ j#|d ƒƒ|d< ‡ fdd„|j$D ƒ|d< |j%|d< ˆ j&d d… \}}	d|v réˆ j'|d  |	 |d< ˆ j'|d  |	 |d< ˆ j(|d  |d< d|v �r|dk�r|d | |d< |d | |d< |S )NÚ ÚitemrK   c                 S   s$   | \}}|t v rt|ƒ}||fS d S r}   )Ú	ALL_ATTRSr)   )rþ   rí   rî   ÚresrX   rX   rY   Úprocess_attrd  s
   z)Page.process_object.<locals>.process_attrrÚ   r›   )ÚncsÚscsr=   rD   rB   r<   r1   c                    s$   g | ]^}}|gt ˆ j|ƒ¢R ‘qS rX   )ró   rû   )r_   Úcmdr1   rm   rX   rY   r¼   —  s   $ z'Page.process_object.<locals>.<listcomp>ÚpathÚdashrN   r7   r8   rÜ   rÝ   rÛ   r5   r   r6   ))ÚreÚsubÚlt_patrw   r   rª   r   rS   r   r	   rj   Úfilterró   Ú__dict__rc   r›   rÀ   r*   ÚgetattrrF   r\   r   r   Úget_textr™   Úunicode_normÚnormalize_unicodeÚgraphicstateÚscolorr^   ÚncolorÚbytesrZ   r   r]   rû   Úoriginal_pathÚdashing_styler¨   r/   rœ   )
rk   rü   Úkindr  ÚattrÚcsr=   ÚgsÚmb_x0Úmb_toprX   rm   rY   Úprocess_objecta  sJ   &

€ÿý
ÿÿ€
zPage.process_objectÚlayout_objectsc                 c   sR   � |D ]#}t |tƒr | jjd ur|  |¡V  |  |j¡E d H  q|  |¡V  qd S r}   )r\   r   r™   r¿   r  Úiter_layout_objectsrp   )rk   r  rü   rX   rX   rY   r  «  s   €
÷zPage.iter_layout_objectsc                 C   sR   i }|   | jj¡D ]}|d }|dv rq	| |¡d u rg ||< ||  |¡ q	|S )NrÚ   )Úanno)r  rÈ   rp   rR   Úappend)rk   rú   rü   r  rX   rX   rY   rù   ¹  s   zPage.parse_objectsÚtable_settingsc                 C   s   t  |¡}t| |ƒS r}   )r'   Úresolver&   ©rk   r!  ÚtsetrX   rX   rY   Údebug_tablefinderÄ  s   

zPage.debug_tablefinderc                 C   s   t  |¡}t| |ƒjS r}   )r'   r"  r&   Útablesr#  rX   rX   rY   Úfind_tablesÊ  s   
zPage.find_tablesc                 C   sX   t  |¡}|  |¡}t|ƒdkrd S dtdttttf fdd„}tt	||d�ƒd }|S )Nr   rŒ   rK   c                 S   s   t | jƒ | jd | jd fS )Nr   r   )ÚlenÚcellsr¬   ©rŒ   rX   rX   rY   ÚsorterÚ  s   zPage.find_table.<locals>.sorter)r`   )
r'   r"  r'  r(  r%   r   rƒ   r   r]   r‘   )rk   r!  r$  r&  r+  ÚlargestrX   rX   rY   Ú
find_tableÐ  s   

zPage.find_tablec                    s&   t  |¡‰ |  ˆ ¡}‡ fdd„|D ƒS )Nc                    s"   g | ]}|j d i ˆ jpi ¤Ž‘qS )rX   )ÚextractÚtext_settings)r_   Útable©r$  rX   rY   r¼   æ  s   " z'Page.extract_tables.<locals>.<listcomp>)r'   r"  r'  )rk   r!  r&  rX   r1  rY   Úextract_tablesá  s   

zPage.extract_tablesc                 C   s6   t  |¡}|  |¡}|d u rd S |jdi |jpi ¤ŽS ©NrX   )r'   r"  r-  r.  r/  )rk   r!  r$  r0  rX   rX   rY   Úextract_tableè  s
   

zPage.extract_tabler[   c                 K   s\   t | jd�}d|vr| d| ji¡ d|vr| d| ji¡ i |¥|¥}tj| jfi |¤ŽS )N)Úlayout_bboxÚlayout_width_charsÚlayout_widthÚlayout_height_charsÚlayout_height)rj   r¬   rã   r4   r/   r   Úchars_to_textmapÚchars)rk   r[   ÚdefaultsÚfull_kwargsrX   rX   rY   r­   ò  s   ÿzPage._get_textmapÚpatternÚregexÚcaseÚ
main_groupÚreturn_charsÚreturn_groupsc           	      K   s*   | j di t|ƒ¤Ž}|j||||||d�S )N)r?  r@  rA  rB  rC  rX   )r®   rd   Úsearch)	rk   r>  r?  r@  rA  rB  rC  r[   ÚtextmaprX   rX   rY   rD  ý  s   
úzPage.searchc                 K   s   | j di t|ƒ¤ŽjS r3  )r®   rd   Ú	as_string©rk   r[   rX   rX   rY   Úextract_text  s   zPage.extract_textc                 K   ó   t j| jfi |¤ŽS r}   )r   Úextract_text_simpler;  rG  rX   rX   rY   rJ    ó   zPage.extract_text_simplec                 K   rI  r}   )r   Úextract_wordsr;  rG  rX   rX   rY   rL    rK  zPage.extract_wordsÚstripc                 K   s   | j di t|ƒ¤Žj||d�S )N)rM  rB  rX   )r®   rd   Úextract_text_lines)rk   rM  rB  r[   rX   rX   rY   rN    s   ÿzPage.extract_text_linesFr¬   ÚrelativeÚstrictrô   c                 C   s   t | |||d�S )N)rO  rP  )rô   ©rk   r¬   rO  rP  rX   rX   rY   Úcrop!  s   z	Page.cropc                 C   ó   t | |||tjd�S ©zS
        Same as .crop, except only includes objects fully within the bbox
        )rO  rP  Úcrop_fn)rô   r   Úwithin_bboxrQ  rX   rX   rY   rV  &  ó   ÿzPage.within_bboxc                 C   rS  rT  )rô   r   Úoutside_bboxrQ  rX   rX   rY   rX  0  rW  zPage.outside_bboxÚtest_functionÚFilteredPagec                 C   s
   t | |ƒS r}   )rZ  )rk   rY  rX   rX   rY   r
  :  ó   
zPage.filterc                 K   sB   t | dd„ ƒ}dd„ | j ¡ D ƒ|_tj| jfi |¤Ž|jd< |S )uê   
        Removes duplicate chars â€”Â those sharing the same text and positioning
        (within `tolerance`) as other characters in the set. Adjust extra_args
        to be more/less restrictive with the properties checked.
        c                 S   s   dS )NTrX   r*  rX   rX   rY   Ú<lambda>C  s    z#Page.dedupe_chars.<locals>.<lambda>c                 S   s   i | ]\}}||“qS rX   rX   )r_   r  ÚobjsrX   rX   rY   rb   D  s    z%Page.dedupe_chars.<locals>.<dictcomp>Úchar)rZ  rú   rc   rø   r   Údedupe_charsr;  )rk   r[   ÚprX   rX   rY   r_  =  s   zPage.dedupe_charsÚ
resolutionr4   r/   Ú	antialiasÚforce_mediaboxrI   c           	      C   s€   ddl m}m} tdd„ |||fD ƒƒ}|dkrtd|› �ƒ‚|dur+d| | j }n|dur6d| | j }|| |p;|||d�S )	zò
        You can pass a maximum of 1 of the following:
        - resolution: The desired number pixels per inch. Defaults to 72.
        - width: The desired image width in pixels.
        - height: The desired image width in pixels.
        r   )ÚDEFAULT_RESOLUTIONrI   c                 s   s   � | ]}|d uV  qd S r}   rX   r‹   rX   rX   rY   r�   X  s   € z Page.to_image.<locals>.<genexpr>zUOnly one of these arguments can be provided: resolution, width, height. You provided NéH   )ra  rb  rc  )Údisplayrd  rI   ÚsumÚ
ValueErrorr4   r/   )	rk   ra  r4   r/   rb  rc  rd  rI   Ú	num_specsrX   rX   rY   Úto_imageH  s    ÿüzPage.to_imageÚobject_typesc              	   C   sl   |d u rt | j ¡ ƒdg }n|}| j| j| j| j| j| j| j	| j
dœ}|D ]}t| |d ƒ||d < q&|S )NrÑ   )r›   rœ   rˆ   r«   r¨   r¬   r4   r/   Ús)r]   rú   Úkeysr›   rœ   rˆ   r«   r¨   r¬   r4   r/   r  )rk   rk  Ú_object_typesÚdÚtrX   rX   rY   rº   i  s   ø
zPage.to_dictc                 C   s   d| j › d�S )Nz<Page:ú>)r›   rm   rX   rX   rY   Ú__repr__|  s   zPage.__repr__©r   r~   r}   )TTr   TT)TT)FT)NNNFF)Br   r€   r�   r!   r—   r   rS   r„   r˜   ÚboolÚpagesr   rƒ   r   r³   r¶   Úpropertyr4   r/   r   r   r½   r   rÈ   r    rò   r÷   rú   r   rû   r   r   r  r   r   r  rù   r	   r$   r&   r%  r%   r'  r-  r2  r4  r-   r­   r   r
   rD  rH  rJ  rL  rN  r   rR  rV  rX  r   r
  r_  r…   rj  rº   rr  rX   rX   rX   rY   r•   º   s6  
 ûþýü
û
,A"Jÿ
þÿÿ
þÿÿ
þÿÿ
þÿÿ
þÿÿ
þ
ùþýüûúùø	
÷ÿÿÿÿ
þÿÿÿÿ
þÿÿÿÿ
þÿÿÿÿ
þ
úþýüûú
ù$!r•   c                   @   s(   e Zd ZU dZeed< defdd„ZdS )ÚDerivedPageFr˜   Úparent_pagec                 C   sd   || _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|  	t
j¡ tƒ | jƒ| _d S r}   )rx  r§   r™   rš   r›   rœ   rˆ   r¨   r«   r´   r!   r—   r   r­   r®   )rk   rx  rX   rX   rY   r³   ƒ  s   zDerivedPage.__init__N)r   r€   r�   r˜   rt  r„   r•   r³   rX   rX   rX   rY   rw  €  s   
 rw  r¬   Úparent_bboxc                 C   st   t  | ¡}|dkrtd| › d�ƒ‚t  | |¡}|d u r%td| › d|› �ƒ‚t  |¡}||k r8td| › d|› �ƒ‚d S )Nr   zBounding box z has an area of zero.z. is entirely outside parent page bounding box z. is not fully within parent page bounding box )r   Úcalculate_arearh  Úget_bbox_overlap)r¬   ry  Ú	bbox_areaÚoverlapÚoverlap_arearX   rX   rY   Útest_proposed_bbox‘  s$   
ÿÿ
ÿÿÿr  c                       sb   e Zd Zejddfdededeeegef de	de	f
‡ fdd	„Z
ed
eeef fdd„ƒZ‡  ZS )rô   FTrx  Ú	crop_bboxrU  rO  rP  c                    s”   |r|j \}}}}ˆ \}	}
}}|	| |
| || || f‰ |r%tˆ |j ƒ dtdtf‡ ‡fdd„}tƒ  |¡ || _ˆtju rE|j | _ d S ˆ | _ d S )Nr]  rK   c                    s
   ˆ| ˆ ƒS r}   rX   )r]  ©r€  rU  rX   rY   rõ   ¶  r[  z&CroppedPage.__init__.<locals>._crop_fn)r¬   r  r    rs   r³   rõ   r   rX  )rk   rx  r€  rU  rO  rP  Úo_x0Úo_topÚ_r5   rÜ   r6   rÝ   rõ   rv   r�  rY   r³   ¦  s   

zCroppedPage.__init__rK   c                    ó2   t ˆ dƒrˆ jS ‡ fdd„ˆ jj ¡ D ƒˆ _ˆ jS )Nrø   c                    s   i | ]
\}}|ˆ   |¡“qS rX   )rõ   ©r_   rí   rî   rm   rX   rY   rb   Ç  s    ÿz'CroppedPage.objects.<locals>.<dictcomp>©rÀ   rø   rx  rú   rc   rm   rX   rm   rY   rú   Ã  s   


ÿzCroppedPage.objects)r   r€   r�   r   Úcrop_to_bboxr•   r   r   r    rt  r³   rv  r   rS   rú   r†   rX   rX   rv   rY   rô   ¥  s"    úþýüûú rô   c                       sJ   e Zd Zdedeegef f‡ fdd„Zede	e
ef fdd„ƒZ‡  ZS )rZ  rx  Ú	filter_fnc                    s   |j | _ || _tƒ  |¡ d S r}   )r¬   r‰  rs   r³   )rk   rx  r‰  rv   rX   rY   r³   Î  s   zFilteredPage.__init__rK   c                    r…  )Nrø   c                    s"   i | ]\}}|t tˆ j|ƒƒ“qS rX   )r]   r
  r‰  r†  rm   rX   rY   rb   ×  s    ÿÿz(FilteredPage.objects.<locals>.<dictcomp>r‡  rm   rX   rm   rY   rú   Ó  s   


þzFilteredPage.objects)r   r€   r�   r•   r   r   rt  r³   rv  r   rS   r    rú   r†   rX   rX   rv   rY   rZ  Í  s      rZ  rs  )Sr‰   r  Ú	functoolsr   Útypingr   r   r   r   r   r   r	   r
   r   r   Úunicodedatar   r  Úwarningsr   Úpdfminer.converterr   Úpdfminer.layoutr   r   r   r   r   r   r   Úpdfminer.pdfinterpr   r   Úpdfminer.pdfpager   Úpdfminer.psparserr   rý   r   Ú_typingr   r   r   r    Ú	containerr!   Ú	structurer"   r#   r0  r$   r%   r&   r'   r(   r)   r*   Úutils.exceptionsr+   r,   Ú
utils.textr-   Úcompiler	  Úsetrÿ   rf  rI   r™   rJ   rQ   r  rS   rZ   rd   re   r’   r”   r•   rw  r  rô   rZ  rX   rX   rX   rY   Ú<module>   sZ    0$	
ÿ!û	"3   I(