HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/pdfminer/__pycache__/layout.cpython-38.pyc
U

�R�]'X�@sddlmZddlmZddlmZddlmZddlmZddlmZddlmZdd	lm	Z	dd
lm
Z
ddlZGdd
�d
e�Z
Gdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�dee�ZGd d!�d!ee�ZGd"d#�d#e�ZGd$d%�d%e�ZGd&d'�d'ee�ZGd(d)�d)e�ZGd*d+�d+e�ZGd,d-�d-e�ZGd.d/�d/e�ZGd0d1�d1e�ZGd2d3�d3e�Z Gd4d5�d5e�Z!Gd6d7�d7e!�Z"Gd8d9�d9e!�Z#Gd:d;�d;e�Z$Gd<d=�d=e$�Z%Gd>d?�d?e$�Z&dS)@�)�SortedListWithKey�)�INF)�Plane)�	get_bound)�uniq)�fsplit)�bbox2str)�
matrix2str��apply_matrix_ptNc@seZdZddd�Zdd�ZdS)�
IndexAssignerrcCs
||_dS�N��index)�selfr�r�1/usr/lib/python3/dist-packages/pdfminer/layout.py�__init__szIndexAssigner.__init__cCsDt|t�r"|j|_|jd7_nt|t�r@|D]}|�|�q0dS�Nr)�
isinstance�	LTTextBoxr�LTTextGroup�run)r�obj�xrrrrs

zIndexAssigner.runN)r)�__name__�
__module__�__qualname__rrrrrrr
s
r
c@seZdZd
dd�Zdd�Zd	S)�LAParams��?�@皙�����?FcCs.||_||_||_||_||_||_||_dSr)�line_overlap�char_margin�line_margin�word_margin�
boxes_flow�detect_vertical�	all_texts)rr#r$r%r&r'r(r)rrrr$szLAParams.__init__cCsd|j|j|j|jfS)NzM<LAParams: char_margin=%.1f, line_margin=%.1f, word_margin=%.1f all_texts=%r>)r$r%r&r)�rrrr�__repr__5s�zLAParams.__repr__N)r r!r r"r FF�rrrrr+rrrrr"s�
rc@seZdZdd�ZdS)�LTItemcCsdS)zPerform the layout analysis.Nr�r�laparamsrrr�analyze>szLTItem.analyzeN�rrrr0rrrrr-<sr-c@seZdZdd�Zdd�ZdS)�LTTextcCsd|jj|��fS)Nz<%s %r>)�	__class__r�get_textr*rrrr+Gs�zLTText.__repr__cCst�dSr��NotImplementedErrorr*rrrr4KszLTText.get_textN)rrrr+r4rrrrr2Esr2c@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�LTComponentcCst�|�|�|�dSr)r-r�set_bbox�r�bboxrrrrSs

zLTComponent.__init__cCsd|jjt|j�fS)Nz<%s %s>)r3rr	r:r*rrrr+Xs�zLTComponent.__repr__cCst�dSr��
ValueError�r�_rrr�__lt__]szLTComponent.__lt__cCst�dSrr;r=rrr�__le___szLTComponent.__le__cCst�dSrr;r=rrr�__gt__aszLTComponent.__gt__cCst�dSrr;r=rrr�__ge__cszLTComponent.__ge__cCsB|\}}}}||_||_||_||_|||_|||_||_dSr)�x0�y0�x1�y1�width�heightr:)rr:rCrDrErFrrrr8fs

zLTComponent.set_bboxcCs|jdkp|jdkS�Nr)rGrHr*rrr�is_emptyqszLTComponent.is_emptycCs2t|t�sttt|����|j|jko0|j|jkSr)rr7�AssertionError�str�typerCrE�rrrrr�is_hoverlaptszLTComponent.is_hoverlapcCsNt|t�sttt|����|�|�r(dStt|j|j	�t|j	|j��SdSrI�
rr7rKrLrMrO�min�absrCrErNrrr�	hdistancexs
zLTComponent.hdistancecCsNt|t�sttt|����|�|�rFtt|j|j	�t|j	|j��SdSdSrIrPrNrrr�hoverlaps
"zLTComponent.hoverlapcCs2t|t�sttt|����|j|jko0|j|jkSr)rr7rKrLrMrDrFrNrrr�is_voverlap�szLTComponent.is_voverlapcCsNt|t�sttt|����|�|�r(dStt|j|j	�t|j	|j��SdSrI�
rr7rKrLrMrUrQrRrDrFrNrrr�	vdistance�s
zLTComponent.vdistancecCsNt|t�sttt|����|�|�rFtt|j|j	�t|j	|j��SdSdSrIrVrNrrr�voverlap�s
"zLTComponent.voverlapN)rrrrr+r?r@rArBr8rJrOrSrTrUrWrXrrrrr7Qsr7c@seZdZddd�Zdd�ZdS)�LTCurveFNcCs>t�|t|��||_||_||_||_||_||_||_	dSr)
r7rr�pts�	linewidth�stroke�fill�evenodd�stroking_color�non_stroking_color)rr[rZr\r]r^r_r`rrrr�szLTCurve.__init__cCsd�dd�|jD��S)N�,css|]}d|VqdS)z	%.3f,%.3fNr)�.0�prrr�	<genexpr>�sz"LTCurve.get_pts.<locals>.<genexpr>)�joinrZr*rrr�get_pts�szLTCurve.get_pts)FFFNN)rrrrrfrrrrrY�s
rYc@seZdZddd�ZdS)�LTLineFNc		
Cs t�||||g|||||�dSr�rYr)	rr[Zp0Zp1r\r]r^r_r`rrrr�szLTLine.__init__)FFFNN�rrrrrrrrrg�srgc@seZdZddd�ZdS)�LTRectFNc
Cs@|\}}	}
}t�||||	f|
|	f|
|f||fg|||||�dSrrh)rr[r:r\r]r^r_r`rCrDrErFrrrr�s0zLTRect.__init__)FFFNNrirrrrrj�srjc@seZdZdd�Zdd�ZdS)�LTImagecCsnt�||�||_||_|�d�|�d�f|_|�d�|_|�dd�|_|�d�|_t	|jt
�sj|jg|_dS)N)�WZWidth)�HZHeight)ZIMZ	ImageMask)ZBPCZBitsPerComponentr)ZCSZ
ColorSpace)r7r�name�streamZget_any�srcsizeZ	imagemask�bitsZ
colorspacer�list)rrnror:rrrr�s�
zLTImage.__init__cCsd|jj|jt|j�|jfS�Nz<%s(%s) %s %r>)r3rrnr	r:rpr*rrrr+�s
��zLTImage.__repr__Nr,rrrrrk�s
rkc@seZdZdd�Zdd�ZdS)�LTAnnocCs
||_dSr��_text)r�textrrrr�szLTAnno.__init__cCs|jSrrur*rrrr4�szLTAnno.get_textN�rrrrr4rrrrrt�srtc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LTCharcCs�t�|�||_||_|j|_|	|_|
|_||||_|��r�|�	�|}|\}}
|dkrf|d}n||d}d|
|d}
|}|
|}|||jf}|||f}n6|�
�|}|��|}||}d|f}|j||f}|j\}}}}}}d|||k�o||dk|_t
|j|�\}}t
|j|�\}}||k�rH||}}||k�r\||}}t�|||||f�|���r�|j|_n|j|_dS)Nr g����MbP?i�r)r2rrv�matrix�fontname�ncs�graphicstate�advZis_verticalZ	get_widthZ
get_heightZget_descentZuprightrr7rG�sizerH)rrzZfontZfontsizeZscalingZriserwZ	textwidthZtextdispr|r}rGZvxZvyZtxZtyZbllZburrHZdescent�a�b�c�d�e�frCrDrErFrrrr�sH

 





zLTChar.__init__cCs,d|jjt|j�t|j�|j|j|��fS)Nz(<%s %s matrix=%s font=%r adv=%s text=%r>)	r3rr	r:r
rzr{r~r4r*rrrr+s��zLTChar.__repr__cCs|jSrrur*rrrr4szLTChar.get_textcCsdS)z<Returns True if two characters can coexist in the same line.TrrNrrr�
is_compatibleszLTChar.is_compatibleN)rrrrr+r4r�rrrrry�s-ryc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�LTContainercCst�||�g|_dSr)r7r�_objsr9rrrr%szLTContainer.__init__cCs
t|j�Sr)�iterr�r*rrr�__iter__*szLTContainer.__iter__cCs
t|j�Sr)�lenr�r*rrr�__len__-szLTContainer.__len__cCs|j�|�dSr)r��appendrNrrr�add0szLTContainer.addcCs|D]}|�|�qdSr)r�)r�objsrrrr�extend4szLTContainer.extendcCs|jD]}|�|�qdSr)r�r0)rr/rrrrr09s
zLTContainer.analyzeN)	rrrrr�r�r�r�r0rrrrr�#sr�c@seZdZdd�Zdd�ZdS)�LTExpandableContainercCs t�|t
t
ttf�dSr)r�rrr*rrrrCszLTExpandableContainer.__init__cCsJt�||�|�t|j|j�t|j|j�t|j|j�t|j|j�f�dSr)	r�r�r8rQrCrD�maxrErFrNrrrr�Gs�zLTExpandableContainer.addN)rrrrr�rrrrr�Asr�c@seZdZdd�Zdd�ZdS)�LTTextContainercCst�|�t�|�dSr)r2rr�r*rrrrRs

zLTTextContainer.__init__cCsd�dd�|D��S)N�css |]}t|t�r|��VqdSr)rr2r4�rbrrrrrdXs
z+LTTextContainer.get_text.<locals>.<genexpr>)rer*rrrr4WszLTTextContainer.get_textNrxrrrrr�Psr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
LTTextLinecCst�|�||_dSr)r�rr&�rr&rrrr_s
zLTTextLine.__init__cCsd|jjt|j�|��fS)Nz
<%s %s %r>)r3rr	r:r4r*rrrr+ds
��zLTTextLine.__repr__cCs t�||�t�|td��dS)N�
)r�r0r�r�rtr.rrrr0iszLTTextLine.analyzecCst�dSrr5)r�plane�ratiorrr�find_neighborsnszLTTextLine.find_neighborsN)rrrrr+r0r�rrrrr�]sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�LTTextLineHorizontalcCst�||�t
|_dSr)r�rr�_x1r�rrrrtszLTTextLineHorizontal.__init__cCs\t|t�rD|jrD|jt|j|j�}|j|j|krDt�	|t
d��|j|_t�	||�dS�N� )
rryr&r�rGrHr�rCr�r�rtrEr��rrZmarginrrrr�yszLTTextLineHorizontal.addcs@|�j�|��j�j��j�j�f�}��fdd�|D�S)NcsVg|]N}t|t�rt|j�j��krt|j�j��ksNt|j�j��kr|�qSr)rr�rRrHrCrEr��r�rrr�
<listcomp>�s
�z7LTTextLineHorizontal.find_neighbors.<locals>.<listcomp>)rH�findrCrDrErF�rr�r�r�rr�rr��s
"z#LTTextLineHorizontal.find_neighborsN�rrrrr�r�rrrrr�rs	r�c@s$eZdZdd�Zdd�Zdd�ZdS)�LTTextLineVerticalcCst�||�t|_dSr)r�rr�_y0r�rrrr�szLTTextLineVertical.__init__cCs\t|t�rD|jrD|jt|j|j�}|j||jkrDt�	|t
d��|j|_t�	||�dSr�)
rryr&r�rGrHrFr�r�r�rtrDr�r�rrrr��szLTTextLineVertical.addcs@|�j�|��j��j�j��jf�}��fdd�|D�S)NcsVg|]N}t|t�rt|j�j��krt|j�j��ksNt|j�j��kr|�qSr)rr�rRrGrDrFr�r�rrr��s
�z5LTTextLineVertical.find_neighbors.<locals>.<listcomp>)rGr�rCrDrErFr�rr�rr��s
"z!LTTextLineVertical.find_neighborsNr�rrrrr��s	r�c@seZdZdd�Zdd�ZdS)rcCst�|�d|_dS)N���)r�rrr*rrrr�s
zLTTextBox.__init__cCs d|jj|jt|j�|��fSrs)r3rrr	r:r4r*rrrr+�s��zLTTextBox.__repr__Nr,rrrrr�src@seZdZdd�Zdd�ZdS)�LTTextBoxHorizontalcCs"t�||�|jjdd�d�dS)NcSs|jSr)rF�rrrr�<lambda>��z-LTTextBoxHorizontal.analyze.<locals>.<lambda>��key�rr0r��sortr.rrrr0�szLTTextBoxHorizontal.analyzecCsdS)Nzlr-tbrr*rrr�get_writing_mode�sz$LTTextBoxHorizontal.get_writing_modeN�rrrr0r�rrrrr��sr�c@seZdZdd�Zdd�ZdS)�LTTextBoxVerticalcCs"t�||�|jjdd�d�dS)NcSs|jSr)rEr�rrrr��r�z+LTTextBoxVertical.analyze.<locals>.<lambda>r�r�r.rrrr0�szLTTextBoxVertical.analyzecCsdS)Nztb-rlrr*rrrr��sz"LTTextBoxVertical.get_writing_modeNr�rrrrr��sr�c@seZdZdd�ZdS)rcCst�|�|�|�dSr)r�rr�)rr�rrrr�s

zLTTextGroup.__init__Nrirrrrr�src@seZdZdd�ZdS)�LTTextGroupLRTBcs&t�|��|jj�fdd�d�dS)Ncs&d�j|jd�j|j|jSr)r'rCrDrFr��r/rrr��s�z)LTTextGroupLRTB.analyze.<locals>.<lambda>r��rr0r�r�r.rr�rr0�szLTTextGroupLRTB.analyzeNr1rrrrr��sr�c@seZdZdd�ZdS)�LTTextGroupTBRLcs&t�|��|jj�fdd�d�dS)Ncs(d�j|j|jd�j|jSr)r'rCrErFr�r�rrr��s�z)LTTextGroupTBRL.analyze.<locals>.<lambda>r�r�r.rr�rr0�szLTTextGroupTBRL.analyzeNr1rrrrr��sr�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�LTLayoutContainercCst�||�d|_dSr)r�r�groupsr9rrrr�szLTLayoutContainer.__init__ccs�d}d}|D�]j}|dk	�rt|�|�oj|�|�ojt|j|j�|j|�|�koj|�|�t|j|j�|j	k}|j
o�|�|�o�|�|�o�t|j|j�|j|�|�ko�|�
|�t|j|j�|j	k}|r�t|t�s�|r�t|t�r�|�|�n�|dk	r�|Vd}nv|�r*|�s*t|j�}|�|�|�|�nJ|�rV|�sVt|j�}|�|�|�|�nt|j�}|�|�|Vd}|}q|dk�r�t|j�}|�|�|VdSr)r�rUrQrHr#rXrSr�rGr$r(rOrTrWrr�r�r�r&)rr/r�Zobj0�line�obj1ZhalignZvalignrrr�
group_objects�sn


�������������








zLTLayoutContainer.group_objectsccs�t|j�}|�|�i}|D]�}|�||j�}||kr8qg}|D]&}|�|�||kr@|�|�|��q@t|t�rzt	�}	nt
�}	t|�D]}
|	�|
�|	||
<q�qt
�}|D]8}||kr�q�||}	|	|kr�q�|�|	�|	��s�|	Vq�dSr)rr:r�r�r%r��poprr�r�r�rr��setrJ)rr/�linesr��boxesr�Z	neighbors�membersr��boxrZdonerrr�group_textlines@s:





z!LTLayoutContainer.group_textlinescs�|stt||f���dd�}�fdd�}dd�}t|d�}tt|��D]D}||}t|dt|��D]$}	||	}
|�d	|||
�||
f�qdqFt|j����|�|�r�|�	d	�\}}}}
|d	kr�|||
�r�|�d|||
f�q�t
|ttf�s�t
|
ttf��r
t||
g�}
nt
||
g�}
��|���|
�||
g��fd
d�|D�}|D]}|�|��qH�D]}|�d	||
|�|
|f��q^��|
�q�t��dk�s�ttt�����t��S)NcSs`t|j|j�}t|j|j�}t|j|j�}t|j|j�}|||||j|j|j|jS)a�A distance function between two TextBoxes.

            Consider the bounding rectangle for obj1 and obj2.
            Return its area less the areas of obj1 and obj2,
            shown as 'www' below. This value may be negative.
                    +------+..........+ (x1, y1)
                    | obj1 |wwwwwwwwww:
                    +------+www+------+
                    :wwwwwwwwww| obj2 |
            (x0, y0) +..........+------+
            )rQrCrDr�rErFrGrH)r��obj2rCrDrErFrrr�distbs
z/LTLayoutContainer.group_textboxes.<locals>.distcs\t|j|j�}t|j|j�}t|j|j�}t|j|j�}t��||||f��}|�||f�S)zECheck if there's any other object between obj1 and obj2.
            )	rQrCrDr�rErFr�r��
difference)r�r�rCrDrErFr�)r�rr�isanytsz0LTLayoutContainer.group_textboxes.<locals>.isanycSs|\}}}}||fSrr)�tr�r�r>rrr�key_obj~sz2LTLayoutContainer.group_textboxes.<locals>.key_objr�rrcs0g|](\}}}}|�ks |�kr||||f�qSrr)rbr�r�r�r�)�removedrrr��s
�z5LTLayoutContainer.group_textboxes.<locals>.<listcomp>)rKrLr�ranger�r�rr:r�r�rr�r�r��removerr)rr/r�r�r�r�Zdists�ir��jr�r�r��groupZ	to_remove�r�otherr)r�r�r�group_textboxes_sB



�

z!LTLayoutContainer.group_textboxescCs�tdd�|�\}}|D]}|�|�q|s.dSt|�||��}tdd�|�\}}|D]}|�|�qTt|�||��}d|jkr�|jdkr�|r�|�||�|_t�}|jD]}	|	�|�|�	|	�q�|j
dd�d�ndd	�}
|j
|
d�||||_dS)
NcSs
t|t�Sr)rryr�rrrr��r�z+LTLayoutContainer.analyze.<locals>.<lambda>cSs|��Sr)rJr�rrrr��r�r�rcSs|jSrr�r�rrrr��r�r�cSs,t|t�rd|j|jfSd|j|jfSdS)Nrr)rr�rErDrCr�rrr�getkey�s
z)LTLayoutContainer.analyze.<locals>.getkey)rr0rrr�r�r'r�r�r
rr�r�)rr/ZtextobjsZ	otherobjsrZ	textlinesZemptiesZ	textboxesZassignerr�r�rrrr0�s*

zLTLayoutContainer.analyzeN)rrrrr�r�r�r0rrrrr��s
HBr�c@s$eZdZdd�Zdd�Zdd�ZdS)�LTFigurecsf||_�|_|\}}}}t�fdd�||f|||f|||f||||ffD��}t�||�dS)Nc3s |]\}}t�||f�VqdSrr)rbrc�q�rzrrrd�s�z$LTFigure.__init__.<locals>.<genexpr>)rnrzrr�r)rrnr:rzr�y�w�hrr�rr�s*�zLTFigure.__init__cCs"d|jj|jt|j�t|j�fS)Nz<%s(%s) %s matrix=%s>)r3rrnr	r:r
rzr*rrrr+�s
��zLTFigure.__repr__cCs|js
dSt�||�dSr)r)r�r0r.rrrr0�szLTFigure.analyzeN)rrrrr+r0rrrrr��s	r�c@seZdZddd�Zdd�ZdS)�LTPagercCst�||�||_||_dSr)r�r�pageid�rotate)rr�r:r�rrrr�szLTPage.__init__cCsd|jj|jt|j�|jfS)Nz<%s(%r) %s rotate=%r>)r3rr�r	r:r�r*rrrr+�s
��zLTPage.__repr__N)rr,rrrrr��s
r�)'ZsortedcontainersrZutilsrrrrrr	r
rZsix�objectr
rr-r2r7rYrgrjrkrtryr�r�r�r�r�r�rr�r�rr�r�r�r�r�rrrr�<module>sH	J	
?



S