§
    eÒ³gM  ã                   óà  — d dl Z d dlZd dlZd dlmZ d dlmZmZ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mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d	d
lmZm Z  d	dl!m"Z"m#Z#  ej$        e%¦  «        Z&e
rd	dl'm(Z( d	dl)m*Z* edge+f         Z,ded         dee-ee-         e,f         ded         fd„Z. G d„ d¦  «        Z/e G d„ de/¦  «        ¦   «         Z0 G d„ de1¦  «        Z2 G d„ de/¦  «        Z3dS )é    N)Údeque)ÚasdictÚ	dataclassÚfield)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚIteratorÚListÚOptionalÚPatternÚTupleÚUnion)Ú
NumberTree)Ú	PDFParser)Ú	PDFObjRefÚresolve1)Ú	PSLiteralé   )ÚT_bboxÚT_obj)Údecode_textÚgeometry)ÚPage)ÚPDFÚPDFStructElementÚelementsÚmatcherÚreturnc              #   ót  ‡K  — dddt           fˆfd„}dddt           fˆfd„}t          ‰t          ¦  «        r|}nt          ‰t          j        ¦  «        r|}n‰}t          | ¦  «        }|rN|                     ¦   «         } ||¦  «        r|V — |                     t          |j	        ¦  «        ¦  «         |°LdS dS )z=
    Common code for `find_all()` in trees and elements.
    Úxr   r!   c                 ó   •— | j         ‰k    S )zMatch an element name.)Útype©r#   r    s    €úR/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pdfplumber/structure.pyÚ	match_tagz_find_all.<locals>.match_tag/   s   ø€ àŒv˜Ò Ð ó    c                 ó8   •— ‰                      | j        ¦  «        S )z,Match an element name by regular expression.)Úmatchr%   r&   s    €r'   Úmatch_regexz_find_all.<locals>.match_regex3   s   ø€ à�}Š}˜QœVÑ$Ô$Ð$r)   N)
ÚboolÚ
isinstanceÚstrÚrer   r   ÚpopleftÚ
extendleftÚreversedÚchildren)r   r    r(   r,   Ú
match_funcÚdÚels    `     r'   Ú	_find_allr8   '   s  øè è € ð!Ð'ð !­Dð !ð !ð !ð !ð !ð !ð%Ð)ð %­dð %ð %ð %ð %ð %ð %õ �'�3ÑÔð Øˆ
ˆ
Ý	�G�RœZÑ	(Ô	(ð Ø ˆ
ˆ
àˆ
Ýˆh‰Œ€AØ
ð ,Ø�YŠY‰[Œ[ˆØˆ:�b‰>Œ>ð 	ØˆHˆHˆHØ	�Š•X˜bœkÑ*Ô*Ñ+Ô+Ð+ð	 ð ,ð ,ð ,ð ,ð ,r)   c                   óž   — e Zd ZU dZed         ed<   deeee         e	f         de
d         fd„Zdeeee         e	f         ded         fd„ZdS )	ÚFindablezRfind() and find_all() methods that can be inherited to avoid
    repeating oneselfr   r4   r    r!   c                 ó,   — t          | j        |¦  «        S )z÷Iterate depth-first over matching elements in subtree.

        The `matcher` argument is either an element name, a regular
        expression, or a function taking a `PDFStructElement` and
        returning `True` if the element matches.
        )r8   r4   ©Úselfr    s     r'   Úfind_allzFindable.find_allK   s   € õ ˜œ¨Ñ0Ô0Ð0r)   c                 ój   — 	 t          t          | j        |¦  «        ¦  «        S # t          $ r Y dS w xY w)zìFind the first matching element in subtree.

        The `matcher` argument is either an element name, a regular
        expression, or a function taking a `PDFStructElement` and
        returning `True` if the element matches.
        N)Únextr8   r4   ÚStopIterationr<   s     r'   ÚfindzFindable.findV   sC   € ð	Ý�	 $¤-°Ñ9Ô9Ñ:Ô:Ð:øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚!$ ¤
2±2N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r/   r   Ú	MatchFuncr   r>   r   rB   © r)   r'   r:   r:   E   s¨   € € € € € € ðð ð Ð%Ô&Ð&Ð&Ñ&ð	1Ø˜S '¨#¤,°	Ð9Ô:ð	1à	Ð$Ô	%ð	1ð 	1ð 	1ð 	1ðØ˜S '¨#¤,°	Ð9Ô:ðà	Ð$Ô	%ðð ð ð ð ð r)   r:   c                   óª  — e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<    ee¬	¦  «        Z	e
eef         ed
<    ee¬	¦  «        Zee         ed<    ee¬	¦  «        Zed          ed<   ded          fd„Zdeeee         ef                  fd„Zde
eef         fd„ZdS )r   r%   ÚrevisionÚidÚlangÚalt_textÚactual_textÚtitleÚpage_number)Údefault_factoryÚ
attributesÚmcidsr4   r!   c                 ó*   — t          | j        ¦  «        S ©N©Úiterr4   ©r=   s    r'   Ú__iter__zPDFStructElement.__iter__s   ó   € Ý�D”MÑ"Ô"Ð"r)   c              #   ó  K  — | j         D ]}| j        |fV — Œt          | j        ¦  «        }|rT|                     ¦   «         }|j         D ]}|j        |fV — Œ|                     t          |j        ¦  «        ¦  «         |°RdS dS )z�Collect all MCIDs (with their page numbers, if there are
        multiple pages in the tree) inside a structure element.
        N)rT   rQ   r   r4   r1   r2   r3   )r=   Úmcidr6   r7   s       r'   Ú	all_mcidszPDFStructElement.all_mcidsv   sµ   è è € ð
 ”Jð 	)ð 	)ˆDØÔ" DÐ(Ð(Ð(Ð(Ð(Ý�$”-Ñ Ô ˆØð 	0Ø—’‘”ˆBØœð +ð +�Ø”n dÐ*Ð*Ð*Ð*Ð*Ø�LŠL� "¤+Ñ.Ô.Ñ/Ô/Ð/ð	 ð 	0ð 	0ð 	0ð 	0ð 	0r)   c                 ó@  — t          | ¦  «        }t          |g¦  «        }|r||                     ¦   «         }t          |                     ¦   «         ¦  «        D ]%}||         �||         g k    s||         i k    r||= Œ&d|v r|                     |d         ¦  «         |°||S )z'Return a compacted dict representation.Nr4   )r   r   r1   ÚlistÚkeysÚextend)r=   Úrr6   r7   Úks        r'   Úto_dictzPDFStructElement.to_dict„   s§   € å�4‰LŒLˆå�1�#‰JŒJˆØð 	)Ø—’‘”ˆBÝ˜"Ÿ'š'™)œ)‘_”_ð ð �Ø�a”5�= B q¤E¨R¢K K°2°a´5¸B²;°;Ø˜1˜øØ˜RÐÐØ—’˜˜JœÑ(Ô(Ð(ð ð 	)ð ˆr)   N)rC   rD   rE   r/   rG   r   Úintr   ÚdictrS   r
   r   r`   rT   r   r4   r   rZ   r   r^   re   rI   r)   r'   r   r   e   sj  € € € € € € à
€I€I�IØ�sŒmÐÐÑØ�ŒÐÐÑØ
�3Œ-ÐÐÑØ�sŒmÐÐÑØ˜#”ÐÐÑØ�CŒ=ÐÐÑØ˜#”ÐÐÑØ!& °tÐ!<Ñ!<Ô!<€J��S˜#�X”Ð<Ð<Ñ<Ø�u¨TÐ2Ñ2Ô2€Eˆ4�Œ9Ð2Ð2Ñ2Ø).¨¸tÐ)DÑ)DÔ)D€HˆdÐ%Ô&ÐDÐDÑDð#˜(Ð#5Ô6ð #ð #ð #ð #ð0˜8 E¨(°3¬-¸Ð*<Ô$=Ô>ð 0ð 0ð 0ð 0ð˜˜c 3˜hœð ð ð ð ð ð r)   c                   ó   — e Zd ZdS )ÚStructTreeMissingN)rC   rD   rE   rI   r)   r'   ri   ri   “   s   € € € € € Ø€Dr)   ri   c                   óL  — e Zd ZU dZed         ed<   dddded         fd„Zdeee	f         d	ee
         d
eee	f         fd„Zde	d
eee         ee	         f         fd„Zdee	         d
dfd„Zdeee	f         d
efd„Zdd„Zdeee	f         d
dfd„Zd
ee         fd„Zded
efd„ZdS )ÚPDFStructTreeaz  Parse the structure tree of a PDF.

    The constructor takes a `pdfplumber.PDF` and optionally a
    `pdfplumber.Page`.  To avoid creating the entire tree for a large
    document it is recommended to provide a page.

    This class creates a representation of the portion of the
    structure tree that reaches marked content sections, either for a
    single page, or for the whole document.  Note that this is slightly
    different from the behaviour of other PDF libraries which will
    also include structure elements with no content.

    If the PDF has no structure, the constructor will raise
    `StructTreeMissing`.

    r   ÚpageNÚdocr   c                 ó´  ‡— |j         | _         d| j         j        vrt          d¦  «        ‚t          | j         j        d         ¦  «        | _        t          | j                             di ¦  «        ¦  «        | _        t          | j                             di ¦  «        ¦  «        | _        g | _        |�Í|| _	        |j
        |i| _        d | _        | j                             d¦  «        }|€|                      ¦   «          d S t          |¦  «        }d| j	        j        j        vrd S | j	        j        j        d         Št          t#          ˆfd„|j        D ¦   «         ¦  «        ¦  «        }|                      |¦  «         d S d | _	        d„ |j        D ¦   «         | _        d	„ | j                             ¦   «         D ¦   «         | _        |                      ¦   «          d S )
NÚStructTreeRootzPDF has no structureÚRoleMapÚClassMapÚ
ParentTreeÚStructParentsc              3   ó.   •K  — | ]\  }}|‰k    ¯|V — Œd S rV   rI   )Ú.0ÚnumÚarrayÚ	parent_ids      €r'   ú	<genexpr>z)PDFStructTree.__init__.<locals>.<genexpr>Í   s1   øè è € ÐXÐX¡: 3¨ÀsÈiÒGWÐGW˜ÐGWÐGWÐGWÐGWÐXÐXr)   c                 ó   — i | ]
}|j         |“ŒS rI   )rQ   ©ru   rl   s     r'   ú
<dictcomp>z*PDFStructTree.__init__.<locals>.<dictcomp>Ó   s   € ÐGÐGÐG°T˜$Ô*¨DÐGÐGÐGr)   c                 ó2   — i | ]}|j         j        |j        “ŒS rI   )Úpage_objÚpageidrQ   r{   s     r'   r|   z*PDFStructTree.__init__.<locals>.<dictcomp>Ô   s/   € ð ð ð Ø;?�”Ô$ dÔ&6ðð ð r)   )rm   Úcatalogri   r   ÚrootÚgetÚrole_mapÚ	class_mapr4   rl   rQ   ÚpagesÚ	page_dictÚ_parse_struct_treer   r~   Úattrsr@   ÚvaluesÚ_parse_parent_tree)r=   rm   rl   Úparent_tree_objÚparent_treeÚparent_arrayrx   s         @r'   Ú__init__zPDFStructTree.__init__«   sÏ  ø€ Ø”7ˆŒØ 4¤8Ô#3Ð3Ð3Ý#Ð$:Ñ;Ô;Ð;Ý˜TœXÔ-Ð.>Ô?Ñ@Ô@ˆŒ	Ý  ¤§¢¨y¸"Ñ!=Ô!=Ñ>Ô>ˆŒÝ! $¤)§-¢-°
¸BÑ"?Ô"?Ñ@Ô@ˆŒØ02ˆŒð ÐØˆDŒIØÔ*¨DÐ1ˆDŒJØ!ˆDŒNð #œiŸmšm¨LÑ9Ô9ˆOØÐ&Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)å(¨Ñ9Ô9�ð #¨$¬)Ô*<Ô*BÐBÐBØ�FØ œIÔ.Ô4°_ÔE�	å'ÝÐXÐXÐXÐX°Ô1CÐXÑXÔXÑXÔXñ ô  �ð ×'Ò'¨Ñ5Ô5Ð5Ð5Ð5àˆDŒIàGÐG¸S¼YÐGÑGÔGˆDŒJðð ØCGÄ:×CTÒCTÑCVÔCVðñ ô ˆDŒNð ×#Ò#Ñ%Ô%Ð%Ð%Ð%r)   ÚobjrK   r!   c                 ó&  — g }dD ]\}||vrŒt          ||         ¦  «        }t          |t          ¦  «        r|                     |¦  «         ŒG|                     |¦  «         Œ]g }d }|D ]]}t          |t
          ¦  «        r ||k    r|�|                     |¦  «         d }Œ7|�|                     |¦  «         t          |¦  «        }Œ^|�|                     |¦  «         i }	|D ]¯}t          |t          ¦  «        rFt          |j        ¦  «        }|| j	        vrt                               d|¦  «         ŒP| j	        |         }|                     ¦   «         D ]=\  }
}t          |t          ¦  «        rt          |j        ¦  «        |	|
<   Œ2||
         |	|
<   Œ>Œ°|	S )N)ÚCÚAzUnknown attribute class %s)r   r.   r`   rb   Úappendrf   r   r   Únamer„   ÚloggerÚwarningÚitems)r=   r�   rK   Úattr_obj_listÚkeyÚattr_objÚ	attr_objsÚprev_objÚarefÚattrrd   Úvs               r'   Ú_make_attributeszPDFStructTree._make_attributesÙ   sÓ  € ð ˆØð 	/ð 	/ˆCØ˜#ˆ~ˆ~ØÝ  C¤Ñ)Ô)ˆHå˜(¥DÑ)Ô)ð /Ø×$Ò$ XÑ.Ô.Ð.Ð.à×$Ò$ XÑ.Ô.Ð.Ð.Øˆ	ØˆØ!ð 	*ð 	*ˆDõ ˜$¥Ñ$Ô$ð *Ø˜8Ò#Ð#¨Ð(<Ø×$Ò$ XÑ.Ô.Ð.Ø��àÐ'Ø×$Ò$ XÑ.Ô.Ð.Ý# D™>œ>��ØÐØ×Ò˜XÑ&Ô&Ð&ð ˆØð 	%ð 	%ˆCÝ˜#�yÑ)Ô)ð *Ý! #¤(Ñ+Ô+�Ø˜dœnÐ,Ð,Ý—N’NÐ#?ÀÑEÔEÐEØØ”n SÔ)�ØŸ	š	™œð %ð %‘��1Ý˜a¥Ñ+Ô+ð %Ý)¨!¬&Ñ1Ô1�D˜‘G�Gà! !œf�D˜‘G�Gð	%ð
 ˆr)   c                 ó  — d|vsJ d|z  ¦   «         ‚d|vsJ d|z  ¦   «         ‚d }| j         �4d|v r0|d         j        }|| j         v sJ d|z  ¦   «         ‚| j         |         }d}d|v rBt          |d         j        ¦  «        }|| j        v rt          | j        |         j        ¦  «        }d	|v rt          |d	         ¦  «        ng }t          |t          ¦  «        r|g}nt          |t          ¦  «        r	|d	         g}| 	                    d
¦  «        }|  
                    ||¦  «        }d|v r"t          t          |d         ¦  «        ¦  «        nd }d|v r"t          t          |d         ¦  «        ¦  «        nd }	d|v r"t          t          |d         ¦  «        ¦  «        nd }
d|v r"t          t          |d         ¦  «        ¦  «        nd }d|v r"t          t          |d         ¦  «        ¦  «        nd }t          |||||
|	|||¬¦	  «	        }||fS )NÚMCIDzUncaught MCR: %sÚObjzUncaught OBJR: %sÚPgzObject on unparsed page: %sÚ ÚSÚKÚRÚIDÚTÚLangÚAltÚ
ActualText)	r%   rL   rQ   rK   rM   rP   rN   rO   rS   )r†   Úobjidr   r”   rƒ   r   r.   rf   rg   r‚   r    r   )r=   r�   rQ   Ú
page_objidÚobj_tagr4   rK   rS   Ú
element_idrP   rM   rN   rO   Úelements                 r'   Ú_make_elementzPDFStructTree._make_element
  sP  € à˜SÐ Ð Ð Ð"4°sÑ":Ñ Ô Ð Ø˜CÐÐÐÐ!4°sÑ!:ÑÔÐàˆØŒ>Ð%¨$°#¨+¨+Ø˜TœœˆJØ ¤Ð/Ð/Ð/Ð1NÐQTÑ1TÑ/Ô/Ð/Øœ.¨Ô4ˆKØˆØ�#ˆ:ˆ:Ý! # c¤(¤-Ñ0Ô0ˆGØ˜$œ-Ð'Ð'Ý% d¤m°GÔ&<Ô&AÑBÔB�Ø),°¨¨•8˜C œHÑ%Ô%Ð%¸ˆÝ�h¥Ñ$Ô$ð 	"Ø �zˆHˆHÝ˜¥$Ñ'Ô'ð 	"Ø˜Cœ�zˆHØ—7’7˜3‘<”<ˆØ×*Ò*¨3°Ñ9Ô9ˆ
Ø9=À¸¸•[¥¨#¨d¬)Ñ!4Ô!4Ñ5Ô5Ð5È$ˆ
Ø36¸#°:°:•�H S¨¤XÑ.Ô.Ñ/Ô/Ð/À4ˆØ5;¸s°]°]�{�8 C¨¤KÑ0Ô0Ñ1Ô1Ð1ÈˆØ8=À¸¸•;�x¨¨E¬
Ñ3Ô3Ñ4Ô4Ð4È$ˆà8DÈÐ8KÐ8K�K�  \Ô!2Ñ3Ô3Ñ4Ô4Ð4ÐQUð 	õ #ØØØ#ØØØØØ#Ø!ð

ñ 

ô 

ˆð ˜Ð Ð r)   r�   c                 óÒ  — t          |¦  «        }i }d}|r¸|                     ¦   «         }|t          j        k    rŒ't	          |¦  «        |v rŒ9t          |¦  «        }d|v r!t          |d         j        ¦  «        dk    rd}nK|                      |¦  «        \  }}|€J ‚||f|t	          |¦  «        <   | 	                    |d         ¦  «         |°¸|sJ ‚|  
                    |¦  «         dS )zYPopulate the structure tree using the leaves of the parent tree for
        a given page.FÚTypero   TNÚP)r   r1   r   ÚKEYWORD_NULLÚreprr   r   r”   r³   r“   Ú_resolve_children)	r=   r�   r6   ÚsÚ
found_rootÚrefr�   r²   r4   s	            r'   rŠ   z PDFStructTree._parse_parent_tree4  s  € õ �,ÑÔˆØˆØˆ
Øð 	#Ø—)’)‘+”+ˆCð •iÔ,Ò,Ð,ØÝ�C‰yŒy˜Aˆ~ˆ~ØÝ˜3‘-”-ˆCà˜ˆ}ˆ}¥¨S°¬[Ô-=Ñ!>Ô!>ÐBRÒ!RÐ!RØ!�
�
ð %)×$6Ò$6°sÑ$;Ô$;Ñ!�˜àÐ*Ð*Ð*Ø&¨Ð0�•$�s‘)”)‘Ø—’˜˜SœÑ"Ô"Ð"ð' ð 	#ð* ÐÐÐØ×Ò˜qÑ!Ô!Ð!Ð!Ð!r)   c                 óˆ   — d|vrdS |d         j         }| j        �	|| j        v S | j        �|| j        j        j        k    rdS dS )Nr¤   TF)r®   r†   rl   r~   r   )r=   r�   r¯   s      r'   Úon_parsed_pagezPDFStructTree.on_parsed_pageS  sU   € Ø�sˆ?ˆ?Ø�4Ø˜”Y”_ˆ
ØŒ>Ð%Ø ¤Ð/Ð/ØŒ9Ð à˜TœYÔ/Ô6Ò6Ð6Ø�uØˆtr)   c                 ó�  ‡ ‡‡	— t          ‰ j        d         ¦  «        }t          |t          ¦  «        r‰ j        d         g}t	          |¦  «        }i Š	|�r%|                     ¦   «         }t          |¦  «        ‰	v rŒ)t          |¦  «        }t          |t          ¦  «        r1d|v r-‰                      |¦  «        sŒg|d         }t          |¦  «        }‰                      |¦  «        \  }}||f‰	t          |¦  «        <   |D ]x}t          |¦  «        }t          |t          ¦  «        r(‰                      |¦  «        sŒ<d|v r	|d         }nd|v rŒNt          |t          ¦  «        r| 
                    |¦  «         Œy|�°%dt          t                   dt          t                   fˆˆ	ˆ fd„Š ‰|¦  «         ‰                      ‰	¦  «         dS )zgPopulate the structure tree starting from the root, skipping
        unparsed pages and empty elements.r§   r£   r¢   r   r!   c                 óú  •— g }| D ]ô}t          |¦  «        }t          |t          ¦  «        r|                     |¦  «         Œ<t          |t          ¦  «        rB‰                     |¦  «        sŒgd|v r|                     |d         ¦  «         Œ‡d|v r|d         }‰t          |¦  «                 \  }} ‰|¦  «        }|�|s‰t          |¦  «        = ŒË||f‰t          |¦  «        <   |                     |¦  «         Œõ|S )Nr¢   r£   )r   r.   rf   r“   rg   r¾   r¸   )	r   Únext_elementsr¼   r�   r²   r4   Úprunerº   r=   s	         €€€r'   rÂ   z/PDFStructTree._parse_struct_tree.<locals>.prune‡  s  ø€ ØˆMØð .ð .�Ý˜s‘m”m�Ý˜c¥3Ñ'Ô'ð 
)Ø!×(Ò(¨Ñ-Ô-Ð-ØÝ ¥TÑ*Ô*ð )Ø×.Ò.¨sÑ3Ô3ð !Ø Ø �}�}Ø%×,Ò,¨S°¬[Ñ9Ô9Ð9Ø Ø #˜˜Ø! %œj˜Ø$%¥d¨3¡i¤i¤LÑ!�˜Ø ˜5 ™?œ?�à�?¨(�?Ø�$˜s™)œ)˜˜à#*¨HÐ#4�A•d˜3‘i”i‘LØ!×(Ò(¨Ñ-Ô-Ð-Ð-Ø Ð r)   N)r   r�   r.   rg   r   r1   r¸   r¾   r³   r   r“   r   r   r¹   )
r=   r�   r6   r¼   r�   r²   r4   ÚchildrÂ   rº   s
   `       @@r'   r‡   z PDFStructTree._parse_struct_tree_  së  øøø€ õ ˜œ	 #œÑ'Ô'ˆõ �d�DÑ!Ô!ð 	$Ø”I˜c”NÐ#ˆDÝ�$‰KŒKˆØˆØñ 	$Ø—)’)‘+”+ˆCå�C‰yŒy˜Aˆ~ˆ~ØÝ˜3‘-”-ˆCå˜#�tÑ$Ô$ð $¨°#¨¨Ø×*Ò*¨3Ñ/Ô/ð ØØ˜%”j�Ý˜s‘m”m�Ø $× 2Ò 2°3Ñ 7Ô 7ÑˆG�Xð # HÐ,ˆA�d�3‰iŒi‰LØ!ð 
$ð 
$�Ý˜u‘o”o�Ý˜c¥4Ñ(Ô(ð !Ø×.Ò.¨sÑ3Ô3ð !Ø Ø �|�|Ø # E¤
˜˜Ø 3˜˜Ø Ý˜e¥YÑ/Ô/ð $Ø—H’H˜U‘O”O�Oøð5 ñ 	$ð<	!�D¥œIð 	!­$­s¬)ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð2 	ˆˆd‰ŒˆØ×Ò˜qÑ!Ô!Ð!Ð!Ð!r)   Úseenc                 óR  ‡— t          | j        d         ¦  «        }t          |t          ¦  «        r| j        d         g}g | _        g }|D ]n}t          |¦  «        }t          |t          ¦  «        r"d|v r|                      |¦  «        sŒ@|d         }t          |¦  «        ‰v r|                     |¦  «         Œot          |¦  «        }|�rI| 	                    ¦   «         }‰t          |¦  «                 \  }}|€
J d¦   «         ‚|D �]
}	t          |	¦  «        }t          |t          ¦  «        r|j                             |¦  «         n\t          |t          ¦  «        rG|                      |¦  «        sŒmd|v r!|j                             |d         ¦  «         nd|v r|d         }	t          |	t          ¦  «        rW‰                     t          |	¦  «        d¦  «        \  }
}|
�/|j                             |
¦  «         |                     |	¦  «         �Œ|�°Iˆfd„|D ¦   «         | _        dS )z|Resolve children starting from the tree root based on references we
        saw when traversing the structure tree.
        r§   r£   NzUnparsed elementr¢   )NNc                 óF   •— g | ]}‰t          |¦  «                 d          ‘ŒS )r   )r¸   )ru   r¼   rÄ   s     €r'   ú
<listcomp>z3PDFStructTree._resolve_children.<locals>.<listcomp>Í  s(   ø€ ÐCÐCÐC°˜�d 3™iœiœ¨Ô+ÐCÐCÐCr)   )r   r�   r.   rg   r4   r¾   r¸   r“   r   r1   rf   rT   r   r‚   )r=   rÄ   r�   Úparsed_rootr¼   r�   r6   r²   r4   rÃ   Úchild_elementÚ_s    `          r'   r¹   zPDFStructTree._resolve_children£  s<  ø€ õ ˜œ	 #œÑ'Ô'ˆå�d�DÑ!Ô!ð 	$Ø”I˜c”NÐ#ˆDØˆŒàˆØð 	(ð 	(ˆCÝ˜3‘-”-ˆCÝ˜#�tÑ$Ô$ð !¨°#¨¨Ø×*Ò*¨3Ñ/Ô/ð ØØ˜%”j�Ý�C‰yŒy˜DÐ Ð Ø×"Ò" 3Ñ'Ô'Ð'øÝ�+ÑÔˆØñ 	(Ø—)’)‘+”+ˆCØ $¥T¨#¡Y¤Y¤ÑˆG�XØÐ&Ð&Ð(:Ñ&Ô&Ð&Ø!ð (ñ (�Ý˜u‘o”o�Ý˜c¥3Ñ'Ô'ð 	+Ø”M×(Ò(¨Ñ-Ô-Ð-Ð-Ý ¥TÑ*Ô*ð +à×.Ò.¨sÑ3Ô3ð !Ø Ø �}�}Øœ×,Ò,¨S°¬[Ñ9Ô9Ð9Ð9Ø #˜˜Ø # E¤
˜å˜e¥YÑ/Ô/ð (Ø'+§x¢xµ°U±´¸\Ñ'JÔ'JÑ$�M 1Ø$Ð0ØÔ(×/Ò/°Ñ>Ô>Ð>ØŸš ™œ˜ùð+ ñ 	(ð, DÐCÐCÐC°{ÐCÑCÔCˆŒˆˆr)   c                 ó*   — t          | j        ¦  «        S rV   rW   rY   s    r'   rZ   zPDFStructTree.__iter__Ï  r[   r)   r7   c                 óž  — d}| j         �| j         }n|j        �| j        |j                 }|j                             dd¦  «        }|�¡|�Ÿddl m}m}m}  | ||¦  «        |j        d         |j        d         z
  ¦  «        }t          ||¦  «        rUt          j        |¦  «        }|                     |g¦  «        }|st          d¦  «        ‚t          j        |d         ¦  «        S |S g }	|                     ¦   «         D ]ª\  }
}|
€<|�7t           j                             |j                             ¦   «         ¦  «        }nDg }nAt           j                             | j        |
         j                             ¦   «         ¦  «        }|D ]#}|d         |k    r|	                     |¦  «         Œ$Œ«|	st          d	¦  «        ‚t          j        |	¦  «        S )
z9Get the bounding box for an element for visual debugging.NÚBBoxr   )ÚCroppedPageÚ_invert_boxÚ_normalize_boxé   zElement no longer on pager   r]   zNo objects found)rl   rQ   r…   rS   r‚   rÎ   rÏ   rÐ   Úmediaboxr.   r   Úbbox_to_rectÚ_crop_fnÚ
IndexErrorÚobj_to_bboxr^   Ú	itertoolsÚchainÚfrom_iterableÚobjectsr‰   r“   Úobjects_to_bbox)r=   r7   rl   ÚbboxrÎ   rÏ   rÐ   ÚrectÚrectsÚ	mcid_objsrQ   r]   rÚ   Úcs                 r'   Úelement_bboxzPDFStructTree.element_bboxÒ  sû  € àˆØŒ9Ð Ø”9ˆDˆDØŒ^Ð'Ø”:˜bœnÔ-ˆDØŒ}× Ò  ¨Ñ.Ô.ˆØÐ Ð 0ØFÐFÐFÐFÐFÐFÐFÐFÐFÐFð
 �;Ø�˜tÑ$Ô$ d¤m°AÔ&6¸¼ÀqÔ9IÑ&Iñô ˆDõ ˜$ Ñ,Ô,ð ÝÔ,¨TÑ2Ô2�ØŸš t fÑ-Ô-�Øð BÝ$Ð%@ÑAÔAÐAÝÔ+¨E°!¬HÑ5Ô5Ð5ð �àˆIØ%'§\¢\¡^¤^ð ,ð ,Ñ!�˜TàÐ&ØÐ'Ý"+¤/×"?Ò"?ÀÄ×@SÒ@SÑ@UÔ@UÑ"VÔ"V˜˜à"$˜˜å'œo×;Ò;Øœ
 ;Ô/Ô7×>Ò>Ñ@Ô@ñô �Gð !ð ,ð ,�AØ˜”y DÒ(Ð(Ø!×(Ò(¨Ñ+Ô+Ð+øð,ð ð 5Ý Ð!3Ñ4Ô4Ð4ÝÔ+¨IÑ6Ô6Ð6r)   rV   )r!   N)rC   rD   rE   rF   r   rG   rŽ   r
   r/   r   rf   r    r   r   r   r³   rŠ   r-   r¾   r‡   r¹   r   rZ   r   rá   rI   r)   r'   rk   rk   —   s·  € € € € € € ðð ð" �6Ô
ÐÐÑð,&ð ,&˜Eð ,&¨°&Ô)9ð ,&ð ,&ð ,&ð ,&ð\/Ø˜˜S˜”>ð/Ø-5°c¬]ð/à	ˆc�3ˆhŒð/ð /ð /ð /ðb(! ð (!¨¨xÐ8HÔ/IÈ4ÐPSÌ9Ð/TÔ)Uð (!ð (!ð (!ð (!ðT"¨t°C¬yð "¸Tð "ð "ð "ð "ð>
 $ s¨C x¤.ð 
°Tð 
ð 
ð 
ð 
ðB"ð B"ð B"ð B"ðH*D d¨3°¨8¤nð *D¸ð *Dð *Dð *Dð *DðX#˜(Ð#3Ô4ð #ð #ð #ð #ð-7Ð/ð -7°Fð -7ð -7ð -7ð -7ð -7ð -7r)   rk   )4r×   Úloggingr0   Úcollectionsr   Údataclassesr   r   r   Útypingr   r   r	   r
   r   r   r   r   r   r   r   Úpdfminer.data_structuresr   Úpdfminer.pdfparserr   Úpdfminer.pdftypesr   r   Úpdfminer.psparserr   Ú_typingr   r   Úutilsr   r   Ú	getLoggerrC   r•   rl   r   Úpdfr   r-   rH   r/   r8   r:   r   Ú
ValueErrorri   rk   rI   r)   r'   ú<module>rï      s¼  ðØ Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à	ˆÔ	˜8Ñ	$Ô	$€ð ð ØÐÐÐÐÐØÐÐÐÐÐð Ð(Ð)¨4Ð/Ô0€	ð,ØÐ)Ô*ð,à�3˜ œ iÐ/Ô0ð,ð Ð Ô!ð,ð ,ð ,ð ,ð<ð ð ð ð ñ ô ð ð@ ð*ð *ð *ð *ð *�xñ *ô *ñ „ð*ðZ	ð 	ð 	ð 	ð 	˜
ñ 	ô 	ð 	ðh7ð h7ð h7ð h7ð h7�Hñ h7ô h7ð h7ð h7ð h7r)   