§
    ¡”j½!  ã            	       ó2  — d Z ddl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mZmZmZm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)
é    )ÚCallableÚIterator)ÚOptionalÚcasté   )ÚPdfCommonDocProtocol)Úlogger_warning)ÚArrayObjectÚDictionaryObjectÚ
NullObjectÚNumberObjectÚis_null_or_noneÚnumÚreturnc                 ó    ‡— g d¢Šdt           dt          t                   fˆfd„}d                     t	           || ¦  «        ¦  «        ¦  «        S )N))iè  ÚM)i„  ÚCM)iô  ÚD)i�  ÚCD)éd   ÚC)éZ   ÚXC)é2   ÚL)é(   ÚXL)é
   ÚX)é	   ÚIX)é   ÚV)é   ÚIV)r   ÚIr   r   c              3   ór   •K  — ‰D ]0\  }}t          | |¦  «        \  }}||z  V — | ||z  z  } | dk    r d S Œ1d S )Nr   )Údivmod)r   ÚdecimalÚ
roman_reprÚxÚ_Úromans        €úa/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pypdf/_page_labels.pyÚ	roman_numz1number2uppercase_roman_numeral.<locals>.roman_num\   sk   øè è € Ø#(ð 	ð 	ÑˆG�ZÝ˜#˜wÑ'Ô'‰DˆAˆqØ˜q‘.Ð Ð Ð Ø�7˜Q‘;ÑˆCØ�aŠxˆxØ��ð ð		ð 	ó    Ú )Úintr   ÚstrÚjoinÚlist)r   r/   r-   s     @r.   Únumber2uppercase_roman_numeralr6   K   sh   ø€ ðð ð €Eð •sð �x­œ}ð ð ð ð ð ð ð �7Š7•4˜	˜	 #™œÑ'Ô'Ñ(Ô(Ð(r0   Únumberc                 óD   — t          | ¦  «                             ¦   «         S ©N)r6   Úlower©r7   s    r.   Únumber2lowercase_roman_numeralr<   g   s   € Ý)¨&Ñ1Ô1×7Ò7Ñ9Ô9Ð9r0   c                 ó  — | dk    rt          d¦  «        ‚d„ t          t          d¦  «        t          d¦  «        dz   ¦  «        D ¦   «         }d}| dk    r+| dz  }|dk    rd}||dz
           |z   }| |z  } | dz  } | dk    °+|S )	Nr   zExpecting a positive numberc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Úchr)Ú.0Úis     r.   ú
<listcomp>z+number2uppercase_letter.<locals>.<listcomp>n   s   € Ð>Ð>Ð>˜1•�A‘”Ð>Ð>Ð>r0   ÚAÚZr   r1   é   )Ú
ValueErrorÚrangeÚord)r7   ÚalphabetÚrepÚ	remainders       r.   Únumber2uppercase_letterrM   k   s¤   € Ø�‚{€{ÝÐ6Ñ7Ô7Ð7Ø>Ð>¥¥c¨#¡h¤hµ°C±´¸1±Ñ =Ô =Ð>Ñ>Ô>€HØ
€CØ
�1Š*ˆ*Ø˜R‘Kˆ	Ø˜Š>ˆ>ØˆIØ�y 1‘}Ô%¨Ñ+ˆà�)ÑˆØ˜2‘ˆð �1Š*ˆ*ð €Jr0   c                 óD   — t          | ¦  «                             ¦   «         S r9   )rM   r:   r;   s    r.   Únumber2lowercase_letterrO   {   s   € Ý" 6Ñ*Ô*×0Ò0Ñ2Ô2Ð2r0   Údictionary_objectÚindexc                 ó¢  — t          t          | d         ¦  «        }d}d }d}|t          |¦  «        k     rd||         }||dz                                 ¦   «         }|dz   t          |¦  «        k    rn(||dz            |k    rn|dz  }|t          |¦  «        k     °dd„ t          t
          t          t          t          dœ}t          |t          ¦  «        st	          |dz   ¦  «        S |                     dd¦  «        }t          t          |                     dd	¦  «        ¦  «        }||                     d
¦  «                 }	| |	||z
  |z   ¦  «        z   S )Nú/Numsr   r   é   c                 ó   — dS )Nr1   r?   )r,   s    r.   ú<lambda>z%get_label_from_nums.<locals>.<lambda>”   s   € ˜€ r0   )Nz/Dz/Rz/rz/Az/az/Stz/Pr1   z/S)r   r
   ÚlenÚ
get_objectr3   r6   r<   rM   rO   Ú
isinstanceÚdictÚget)
rP   rQ   ÚnumsrB   ÚvalueÚstart_indexÚmÚstartÚprefixÚmapping_functions
             r.   Úget_label_from_numsrc      sM  € õ •Ð.¨wÔ7Ñ8Ô8€DØ	€AØ€EØ€KØ
�c�$‰iŒiŠ-ˆ-Ø˜1”gˆØ�Q˜‘U”×&Ò&Ñ(Ô(ˆØˆq‰5•C˜‘I”IÒÐØØ��A‘Œ;˜ÒÐØØ	ˆQ‰ˆð �c�$‰iŒiŠ-ˆ-ð ˆlÝÝ,Ý,Ý%Ý%ð4ð 4€Aõ �e�TÑ"Ô"ð Ý�5˜1‘9‰~Œ~ÐØ�IŠI�e˜QÑÔ€EÝ•#�u—y’y  rÑ*Ô*Ñ+Ô+€FØ˜Ÿš 4™œÔ)ÐØÐ$Ð$ U¨[Ñ%8¸5Ñ%@ÑAÔAÑAÐAr0   Úreaderc                 ó  — t          t          | j        ¦  «        }d|vrt          |dz   ¦  «        S t          t          |d                              ¦   «         ¦  «        }d|v rt          ||¦  «        S d|v rêt          |d         t          ¦  «        sÏd}|dk     rÇt          t          t                   |d         ¦  «        }|D ]—}t          t          t                   |d         ¦  «        }|d         |cxk    r|d         k    rVn ŒDt          |                     dd¦  «        ¦  «        s|dz  }|dk    rt          d	¦  «        ‚|} nt          ||¦  «        c S Œ˜n|dk     °Çt          d
|› 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   rS   z/Kidsr   r   z/LimitsNz"Too deep nesting is not supported.z,Could not reliably determine page label for ú.)r   r   Úroot_objectr3   rX   rc   rY   r   r5   r2   r   r[   ÚNotImplementedErrorr	   Ú__name__)rd   rQ   ÚrootÚnumber_treeÚlevelÚkidsÚkidÚlimitss           r.   Úindex2labelrp   ¤   s³  € õ Õ  &Ô"4Ñ5Ô5€DØ˜DÐ Ð Ý�5˜1‘9‰~Œ~ÐÝÕ'¨¨mÔ)<×)GÒ)GÑ)IÔ)IÑJÔJ€KØ�+ÐÐÝ" ;°Ñ6Ô6Ð6Ø�+ÐÐ¥j°¸WÔ1EÅzÑ&RÔ&RÐð ˆØ�cŠkˆkÝ�Õ-Ô.°¸GÔ0DÑEÔEˆDØð ð �å�d¥3œi¨¨Y¬Ñ8Ô8�Ø˜!”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ð  ð+ �cŠkˆkõ. ÐJÀ%ÐJÐJÐJÍHÑUÔUÐUÝˆu�q‰y‰>Œ>Ðr0   Úkeyr]   r\   Nc                 ó|  — 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

    rT   r   ú6A nums like array must have an even number of elementsr   N)rW   rG   Úinsert)rq   r]   r\   rB   s       r.   Ú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Ñ!Ô!Ð!Ð!Ð!r0   Ú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

    rT   r   rs   z/page_index_to must be greater or equal than keyN)rW   rG   rQ   Úpop)rq   rv   r\   rB   s       r.   Únums_clear_rangery   ó   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Ð4r0   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

    rT   r   rs   r   )NN)rW   rG   rQ   )rq   r\   rB   s      r.   Ú	nums_nextr{     sg   € õ ˆ4�y„y�1�}˜ÒÐÝÐQÑRÔRÐRà�
Š
�3‰Œ˜!Ñ€AØ�3ˆt‰9Œ9‚}€}Ø�Q”˜˜a !™eœÐ%Ð%Øˆ<r0   )Ú__doc__Úcollections.abcr   r   Útypingr   r   Ú
_protocolsr   Ú_utilsr	   Úgenericr
   r   r   r   r   r2   r3   r6   r<   rM   rO   rc   rp   ru   ry   Útupler{   r?   r0   r.   ú<module>rƒ      sN  ðð:ð :ðx /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð ð ð)¨ð )°ð )ð )ð )ð )ð8:¨3ð :°3ð :ð :ð :ð :ð Cð ¨Cð ð ð ð ð 3 Cð 3¨Cð 3ð 3ð 3ð 3ð"BÐ+;ð "BÀCð "BÈCð "Bð "Bð "Bð "BðJ.Ð,ð .°Sð .¸Sð .ð .ð .ð .ðb"Ø	ð"àð"ð ð"ð 
ð	"ð "ð "ð "ð<Ø	ðàðð ðð 
ð	ð ð ð ð6Ø	ðà
ðð ˆ8�LÔ! 8Ð,<Ô#=Ð=Ô>ðð ð ð ð ð r0   