§
    §‘Újy,  ã            	       óF  — d Z ddlZddlmZmZ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 erddlmZ d	Zd
Zdedefd„Zdedefd„Zdedefd„Zdedefd„Zdededefd„Zdededefd„Zdedededdfd„Zdedededdfd„Zdededeee         ee         f         fd„ZdS )u£  
Page labels are shown by PDF viewers as "the page number".

A page has a numeric index, starting at 0. Additionally, the page
has a label. In the most simple case:

    label = index + 1

However, the title page and the table of contents might have Roman numerals as
page labels. This makes things more complicated.

Example 1
---------

>>> reader.root_object["/PageLabels"]["/Nums"]
[0, IndirectObject(18, 0, 139929798197504),
 8, IndirectObject(19, 0, 139929798197504)]
>>> reader.get_object(reader.root_object["/PageLabels"]["/Nums"][1])
{'/S': '/r'}
>>> reader.get_object(reader.root_object["/PageLabels"]["/Nums"][3])
{'/S': '/D'}

Example 2
---------
The following is a document with pages labeled
i, ii, iii, iv, 1, 2, 3, A-8, A-9, ...

1 0 obj
    << /Type /Catalog
       /PageLabels << /Nums [
                        0 << /S /r >>
                        4 << /S /D >>
                        7 << /S /D
                             /P ( A- )
                             /St 8
                        >>
                        % A number tree containing
                        % three page label dictionaries
                        ]
                   >>
    ...
    >>
endobj


Â§12.4.2 PDF Specification 1.7 and 2.0
=====================================

Entries in a page label dictionary
----------------------------------
The /S key:
D       Decimal Arabic numerals
R       Uppercase Roman numerals
r       Lowercase Roman numerals
A       Uppercase letters (A to Z for the first 26 pages,
                           AA to ZZ for the next 26, and so on)
a       Lowercase letters (a to z for the first 26 pages,
                           aa to zz for the next 26, and so on)
é    N)ÚTYPE_CHECKINGÚOptionalÚcasté   )ÚPdfCommonDocProtocol)Úlogger_warning)ÚArrayObjectÚDictionaryObjectÚ
NullObjectÚNumberObjectÚis_null_or_none)ÚCallableiŸ  i   ÚnumÚreturnc                 óü   — | dk    rt          d¦  «        ‚| t          k    rt          d¦  «        ‚g d¢}g }|D ]0\  }}t          | |¦  «        \  }} |                     ||z  ¦  «         Œ1d                     |¦  «        S )Nr   úExpecting a positive number.zNumber is out of range.))iè  ÚM)i„  ÚCM)iô  ÚD)i�  ÚCD)éd   ÚC)éZ   ÚXC)é2   ÚL)é(   ÚXL)é
   ÚX)é	   ÚIX)é   ÚV)é   ÚIV)r   ÚIÚ )Ú
ValueErrorÚMAXIMUM_ROMAN_NUMERALÚdivmodÚappendÚjoin)r   ÚromanÚresultÚvalueÚsymbolÚcounts         ú„/Users/tedpeters/Documents/Projects/Claude Projects/TPC Houses/house-viewer/.venv/lib/python3.11/site-packages/pypdf/_page_labels.pyÚnumber2uppercase_roman_numeralr4   X   sœ   € Ø
ˆa‚x€xÝÐ7Ñ8Ô8Ð8Ø
Õ"Ò"Ð"ÝÐ2Ñ3Ô3Ð3ðð ð €Eð  €FØð &ð &‰ˆˆvÝ˜C Ñ'Ô'‰
ˆˆsØ�Š�f˜u‘nÑ%Ô%Ð%Ð%à�7Š7�6‰?Œ?Ðó    Únumberc                 óD   — t          | ¦  «                             ¦   «         S ©N)r4   Úlower©r6   s    r3   Únumber2lowercase_roman_numeralr;   u   s   € Ý)¨&Ñ1Ô1×7Ò7Ñ9Ô9Ð9r5   c                 óÆ   — | dk    rt          d¦  «        ‚t          | dz
  d¦  «        \  }}|dz   }|t          k    rt          d¦  «        ‚t          j        |         |dz   z  S )Nr   r   r   é   zNumber is too large.)r)   r+   ÚMAXIMUM_PAGE_LABEL_LENGTHÚstringÚascii_uppercase)r6   ÚrepetitionsÚpositionÚlengths       r3   Únumber2uppercase_letterrD   y   sm   € Ø�‚{€{ÝÐ7Ñ8Ô8Ð8å" 6¨A¡:¨rÑ2Ô2Ñ€K�Ø˜1‰_€FØÕ)Ò)Ð)ÝÐ/Ñ0Ô0Ð0ÝÔ! (Ô+¨{¸Q©Ñ?Ð?r5   c                 óD   — t          | ¦  «                             ¦   «         S r8   )rD   r9   r:   s    r3   Únumber2lowercase_letterrF   „   s   € Ý" 6Ñ*Ô*×0Ò0Ñ2Ô2Ð2r5   Údictionary_objectÚindexc                 óÜ  — t          t          | d         ¦  «        }t          |¦  «        }d}d }d}||k     rj|dz   |k    rt          dt          ¬¦  «         nJ||         }||dz                                 ¦   «         }|dz   |k    rn||dz            |k    rn|dz  }||k     °jd„ t          t          t          t          t          dœ}t          |t          ¦  «        st          |dz   ¦  «        S |                     d	d¦  «        }t          t          |                     d
d¦  «        ¦  «        }	|                     |                     d¦  «        ¦  «        }
|
€<t          dt          |                     d¦  «        ¬¦  «         t          |dz   ¦  «        S 	 |	 |
||z
  |z   ¦  «        z   S # t          t          f$ r5}t          dt          ||	|¬¦  «         t          |dz   ¦  «        cY d }~S d }~ww xY w)Nú/Numsr   r   z(Ignoring last /Nums key without a value.©Úsourceé   c                 ó   — dS )Nr(   © )Ú_s    r3   ú<lambda>z%get_label_from_nums.<locals>.<lambda>£   s   € ˜€ r5   )Nz/Dz/Rz/rz/Az/az/Stz/Pr(   z/Sz?Ignoring unknown page label numbering style %(style)r in /Nums.)rL   ÚstylezZIgnoring malformed page label entry in /Nums (/St=%(start)r, /P=%(prefix)r): %(exception)s)rL   ÚstartÚprefixÚ	exception)r   r	   Úlenr   Ú__name__Ú
get_objectÚstrr4   r;   rD   rF   Ú
isinstanceÚdictÚgetÚ	TypeErrorr)   )rG   rH   ÚnumsÚnums_lengthÚir0   Ústart_indexÚmrS   rT   Úmapping_functionrU   s               r3   Úget_label_from_numsrd   ˆ   s/  € õ •Ð.¨wÔ7Ñ8Ô8€DÝ�d‘)”)€KØ	€AØ€EØ€KØ
ˆkŠ/ˆ/Øˆq‰5�KÒÐÝØ:Å8ðñ ô ð ð Ø˜1”gˆØ�Q˜‘U”×&Ò&Ñ(Ô(ˆØˆq‰5�KÒÐØØ��A‘Œ;˜ÒÐØØ	ˆQ‰ˆð ˆkŠ/ˆ/ð ˆlÝÝ,Ý,Ý%Ý%ð4ð 4€Aõ �e�TÑ"Ô"ð Ý�5˜1‘9‰~Œ~ÐØ�IŠI�e˜QÑÔ€EÝ•#�u—y’y  rÑ*Ô*Ñ+Ô+€FØ—u’u˜UŸYšY t™_œ_Ñ-Ô-ÐØÐåØMÝØ—)’)˜D‘/”/ð	
ñ 	
ô 	
ð 	
õ
 �5˜1‘9‰~Œ~ÐðØÐ(Ð(¨°Ñ)<¸uÑ)DÑEÔEÑEÐEøÝ•zÐ"ð 	ð 	ð 	åØhÝØØØð	
ñ 	
ô 	
ð 	
õ �5˜1‘9‰~Œ~ÐÐÐÐÐÐøøøøð	øøøs   ÆF% Æ%G+Æ6*G&Ç G+Ç&G+Úreaderc                 óÒ  — t          t          | j        ¦  «        }d|vrt          |dz   ¦  «        S |d                              ¦   «         }t          |t          ¦  «        s)t          dt          |¬¦  «         t          |dz   ¦  «        S d|v rt          ||¦  «        S d|v �ržt          |d         t          ¦  «        �s‚d}|dk     �ry|d                              ¦   «         }t          |t          ¦  «        st          d	t          |¬
¦  «         �n1|D �]%}|                     ¦   «         }t          |t          ¦  «        st          dt          ¬¦  «         ŒC|                     dt          ¦   «         ¦  «                             ¦   «         }t          |t          ¦  «        rt          |¦  «        dk     rt          dt          ¬¦  «         Œ¶|d         |cxk    r|d         k    rVn ŒÒt          |                     dd¦  «        ¦  «        s|dz  }|dk    rt          d¦  «        ‚|} nt          ||¦  «        c S �Œ'n|dk     �°yt          dt          |¬¦  «         t          |dz   ¦  «        S )z±
    See 7.9.7 "Number Trees".

    Args:
        reader: The PdfReader
        index: The index of the page

    Returns:
        The label of the page, e.g. "iv" or "4".

    z/PageLabelsr   z1Page labels are not a dictionary: %(number_tree)s)rL   Únumber_treerJ   z/Kidsr   r   z*Page label kids are not an array: %(kids)s)rL   Úkidsz6Ignoring kid which is not a dictionary in /PageLabels.rK   z/LimitsrM   z>Ignoring kid with missing or malformed /Limits in /PageLabels.Nz"Too deep nesting is not supported.z6Could not reliably determine page label for %(index)d.)rL   rH   )r   r
   Úroot_objectrY   rX   rZ   r   rW   rd   r   r	   r\   ÚlistrV   r   ÚNotImplementedError)re   rH   Úrootrg   Úlevelrh   ÚkidÚlimitss           r3   Úindex2labelrp   Æ   s°  € õ Õ  &Ô"4Ñ5Ô5€DØ˜DÐ Ð Ý�5˜1‘9‰~Œ~ÐØ�}Ô%×0Ò0Ñ2Ô2€KÝ�kÕ#3Ñ4Ô4ð ÝØ?ÝØ#ð	
ñ 	
ô 	
ð 	
õ
 �5˜1‘9‰~Œ~ÐØ�+ÐÐÝ" ;°Ñ6Ô6Ð6Ø�+ÐÑ¥j°¸WÔ1EÅzÑ&RÔ&RÑð ˆØ�cŠk‰kØ˜wÔ'×2Ò2Ñ4Ô4ˆDÝ˜d¥KÑ0Ô0ð ÝØ@Ý#Øðñ ô ð ñ
 Øð !ñ !�à—n’nÑ&Ô&�Ý! #Õ'7Ñ8Ô8ð Ý"ØPÝ'ðñ ô ð ð ØŸš ­J©L¬LÑ9Ô9×DÒDÑFÔF�Ý! &­$Ñ/Ô/ð µ3°v±;´;À²?°?å"ØXÝ'ðñ ô ð ð Ø˜!”9 Ð2Ð2Ò2Ð2¨°¬Ò2Ð2Ð2Ð2Ð2Ý*¨3¯7ª7°7¸DÑ+AÔ+AÑBÔBð 
à ™
˜Ø  Cš<˜<Ý"5Ø Dñ#ô #ð ð '*˜ð ˜Ý.¨s°EÑ:Ô:Ð:Ð:Ð:ñ 3ð  ðU �cŠk‰kõX ÐKÕT\ÐdiÐjÑjÔjÐjÝˆu�q‰y‰>Œ>Ðr5   Úkeyr0   r^   c                 ó|  — t          |¦  «        dz  dk    rt          d¦  «        ‚t          |¦  «        }|dk    r)| ||dz
           k    r|dz
  }|dk    r| ||dz
           k    °|t          |¦  «        k     r| ||         k    r
|||dz   <   dS |                     || ¦  «         |                     |dz   |¦  «         dS )zÈ
    Insert a key, value pair in a Nums array.

    See 7.9.7 "Number Trees".

    Args:
        key: number key of the entry
        value: value of the entry
        nums: Nums array to modify

    rM   r   ú6A nums like array must have an even number of elementsr   N)rV   r)   Úinsert)rq   r0   r^   r`   s       r3   Únums_insertru     sÔ   € õ  ˆ4�y„y�1�}˜ÒÐÝÐQÑRÔRÐRåˆD‰	Œ	€AØ
ˆqŠ&ˆ&�S˜D  Q¡œKÒ'Ð'Ø�‰Eˆð ˆqŠ&ˆ&�S˜D  Q¡œKÒ'Ð'ð 	�3ˆt‰9Œ9‚}€}˜  Q¤š˜ØˆˆQ�‰U‰ˆˆà�Š�A�sÑÔÐØ�Š�A˜‘E˜5Ñ!Ô!Ð!Ð!Ð!r5   Úpage_index_toc                 ó†  — t          |¦  «        dz  dk    rt          d¦  «        ‚|| k     rt          d¦  «        ‚|                     | ¦  «        dz   }|t          |¦  «        k     rW||         |k    rO|                     |¦  «         |                     |¦  «         |t          |¦  «        k     r||         |k    °IdS dS dS dS )a  
    Remove all entries in a number tree in a range after an entry.

    See 7.9.7 "Number Trees".

    Args:
        key: number key of the entry before the range
        page_index_to: The page index of the upper limit of the range
        nums: Nums array to modify

    rM   r   rs   z/page_index_to must be greater or equal than keyN)rV   r)   rH   Úpop)rq   rv   r^   r`   s       r3   Únums_clear_rangery   1  sÄ   € õ  ˆ4�y„y�1�}˜ÒÐÝÐQÑRÔRÐRØ�sÒÐÝÐJÑKÔKÐKà�
Š
�3‰Œ˜!Ñ€AØ
�c�$‰iŒiŠ-ˆ-˜D œG }Ò4Ð4Ø�Š�‰ŒˆØ�Š�‰Œˆð �c�$‰iŒiŠ-ˆ-˜D œG }Ò4Ð4Ð4Ð4ˆ-ˆ-ˆ-ˆ-Ð4Ð4r5   c                 óÌ   — t          |¦  «        dz  dk    rt          d¦  «        ‚|                     | ¦  «        dz   }|t          |¦  «        k     r||         ||dz            fS dS )z±
    Return the (key, value) pair of the entry after the given one.

    See 7.9.7 "Number Trees".

    Args:
        key: number key of the entry
        nums: Nums array

    rM   r   rs   r   )NN)rV   r)   rH   )rq   r^   r`   s      r3   Ú	nums_nextr{   L  sg   € õ ˆ4�y„y�1�}˜ÒÐÝÐQÑRÔRÐRà�
Š
�3‰Œ˜!Ñ€AØ�3ˆt‰9Œ9‚}€}Ø�AŒw˜˜Q ™UœÐ#Ð#Øˆ:r5   ) Ú__doc__r?   Útypingr   r   r   Ú
_protocolsr   Ú_utilsr   Úgenericr	   r
   r   r   r   Úcollections.abcr   r*   r>   ÚintrY   r4   r;   rD   rF   rd   rp   ru   ry   Útupler{   rO   r5   r3   ú<module>r„      sw  ðð:ð :ðv €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ø(Ð(Ð(Ð(Ð(Ð(ð
 Ð ð  Ð ð¨ð °ð ð ð ð ð::¨3ð :°3ð :ð :ð :ð :ð@ Cð @¨Cð @ð @ð @ð @ð3 Cð 3¨Cð 3ð 3ð 3ð 3ð;Ð+;ð ;ÀCð ;ÈCð ;ð ;ð ;ð ;ð|JÐ,ð J°Sð J¸Sð Jð Jð Jð JðZ"Ø	ð"àð"ð ð"ð 
ð	"ð "ð "ð "ð<Ø	ðàðð ðð 
ð	ð ð ð ð6Ø	ðà
ðð ˆ8�LÔ! 8Ð,<Ô#=Ð=Ô>ðð ð ð ð ð r5   