Ë
    ¨Œjb!  ã            	       ó  — d Z ddl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y)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)
é    )Ú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j                  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   ól   •K  — ‰D ]*  \  }}t        | |«      \  }}||z  –— | ||z  z  } | dk  sŒ* y  y ­w)Nr   )Údivmod)r   ÚdecimalÚ
roman_reprÚxÚ_Úromans        €ú\/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/pypdf/_page_labels.pyÚ	roman_numz1number2uppercase_roman_numeral.<locals>.roman_num\   sH   øè ø€ Û#(ÑˆG�ZÜ˜#˜wÓ'‰DˆAˆqØ˜q‘.Ò Ø�7˜Q‘;ÑˆCØ�a‹xÙñ $)ùs   ƒ,4°4Ú )Úintr   ÚstrÚjoinÚlist)r   r.   r,   s     @r-   Únumber2uppercase_roman_numeralr4   K   s;   ø€ ò€Eð ”sð œx¬™}õ ð �7‰7”4™	 #›Ó'Ó(Ð(ó    Únumberc                 ó4   — t        | «      j                  «       S ©N)r4   Úlower©r6   s    r-   Únumber2lowercase_roman_numeralr;   g   s   € Ü)¨&Ó1×7Ñ7Ó9Ð9r5   c                 óú   — | dk  rt        d«      ‚t        t        d«      t        d«      dz   «      D �cg c]  }t        |«      ‘Œ }}d}| dkD  r'| dz  }|dk(  rd}||dz
     |z   }| |z  } | dz  } | dkD  rŒ'|S c c}w )Nr   zExpecting a positive numberÚAÚZr   r/   é   )Ú
ValueErrorÚrangeÚordÚchr)r6   ÚiÚalphabetÚrepÚ	remainders        r-   Únumber2uppercase_letterrH   k   sž   € Ø�‚{ÜÐ6Ó7Ð7Ü %¤c¨#£h´°C³¸1±Ô =Ó>Ñ =˜1”�A•Ð =€HÐ>Ø
€CØ
�1Š*Ø˜R‘Kˆ	Ø˜Š>ØˆIØ�y 1‘}Ñ%¨Ñ+ˆà�)ÑˆØ˜2‘ˆð �1‹*ð €Jùò ?s   ´A8c                 ó4   — t        | «      j                  «       S r8   )rH   r9   r:   s    r-   Únumber2lowercase_letterrJ   {   s   € Ü" 6Ó*×0Ñ0Ó2Ð2r5   Údictionary_objectÚindexc                 óê  — t        t        | d   «      }d}d }d}|t        |«      k  rM||   }||dz      j                  «       }|dz   t        |«      k(  rn ||dz      |kD  rn|dz  }|t        |«      k  rŒMd„ d„ t        t
        t        t        dœ}t        |t        «      st        |dz   «      S |j                  dd«      }|j                  d	d
«      }| ||j                  d«         ||z
  |z   «      z   S )Nú/Numsr   r   é   c                  ó   — y)Nr/   © )r+   s    r-   Ú<lambda>z%get_label_from_nums.<locals>.<lambda>”   s   € ˜r5   c                 ó   — t        | «      S r8   )r1   )Úns    r-   rR   z%get_label_from_nums.<locals>.<lambda>•   s   € œ˜Aœr5   )Nz/Dz/Rz/rz/Az/az/Stz/Pr/   z/S)r   r	   ÚlenÚ
get_objectr4   r;   rH   rJ   Ú
isinstanceÚdictr1   Úget)	rK   rL   ÚnumsrD   ÚvalueÚstart_indexÚmÚstartÚprefixs	            r-   Úget_label_from_numsr`      s
  € ô ”Ð.¨wÑ7Ó8€DØ	€AØ€EØ€KØ
Œc�$‹iŠ-Ø˜1‘gˆØ�Q˜‘U‘×&Ñ&Ó(ˆØˆq‰5”C˜“IÒØØ��A‘‰;˜ÒØØ	ˆQ‰ˆð Œc�$‹i‹-ñ ÙÜ,Ü,Ü%Ü%ñ	€Aô �eœTÔ"Ü�5˜1‘9‹~ÐØ�I‰I�e˜QÓ€EØ�Y‰Y�t˜RÓ €FØÐ&�A�e—i‘i “oÑ& u¨{Ñ':¸UÑ'BÓCÑCÐCr5   Úreaderc                 ól  — t        t        | j                  «      }d|vrt        |dz   «      S t        t        |d   j	                  «       «      }d|v rt        ||«      S d|v r²t        |d   t        «      sŸd}|dk  r˜t        t        t           |d   «      }|D ]r  }t        t        t           |d   «      }|d   |cxk  r	|d   k  sŒ/n Œ2t        |j                  dd«      «      s|dz  }|dk(  rt        d	«      ‚|} nt        ||«      c S  n|dk  rŒ˜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   rN   z/Kidsr   r   z/LimitsNz"Too deep nesting is not supported.z,Could not reliably determine page label for Ú.)r   r
   Úroot_objectr1   rV   r`   rW   r   r3   r0   r   rY   ÚNotImplementedErrorr   Ú__name__)ra   rL   ÚrootÚnumber_treeÚlevelÚkidsÚkidÚlimitss           r-   Úindex2labelrm   £   sI  € ô Ô  &×"4Ñ"4Ó5€DØ˜DÑ Ü�5˜1‘9‹~ÐÜÔ'¨¨mÑ)<×)GÑ)GÓ)IÓJ€KØ�+ÑÜ" ;°Ó6Ð6Ø�+Ñ¤j°¸WÑ1EÄzÔ&Rð ˆØ�cŠkÜœÔ-Ñ.°¸GÑ0DÓEˆDÛ�äœd¤3™i¨¨Y©Ó8�Ø˜!‘9 Ô2¨°©Ö2Ü*¨3¯7©7°7¸DÓ+AÔBà ™
˜Ø  Cš<Ü"5Ø Dó#ð ð '*˜ñ Ü.¨s°EÓ:Ò:ð ð& ð+ �c‹kô. ÐAÀ%ÀÈÐJÌHÔUÜˆu�q‰y‹>Ðr5   Úkeyr[   rZ   Nc                 ó*  — t        |«      dz  dk7  rt        d«      ‚t        |«      }|dk7  r!| ||dz
     k  r|dz
  }|dk7  r| ||dz
     k  rŒ|t        |«      k  r| ||   k(  r	|||dz   <   y|j                  || «       |j                  |dz   |«       y)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

    rO   r   ú6A nums like array must have an even number of elementsr   N)rU   r@   Úinsert)rn   r[   rZ   rD   s       r-   Únums_insertrr   Ô   s¤   € ô  ˆ4ƒy�1�}˜ÒÜÐQÓRÐRäˆD‹	€AØ
ˆqŠ&�S˜D  Q¡™KÒ'Ø�‰Eˆð ˆqŠ&�S˜D  Q¡™KÓ'ð 	Œ3ˆt‹9‚}˜  Q¡šØˆˆQ�‰UŠà�‰�A�sÔØ�‰�A˜‘E˜5Õ!r5   Úpage_index_toc                 ó(  — t        |«      dz  dk7  rt        d«      ‚|| k  rt        d«      ‚|j                  | «      dz   }|t        |«      k  rD||   |k  r;|j                  |«       |j                  |«       |t        |«      k  r
||   |k  rŒ9yyyy)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

    rO   r   rp   z/page_index_to must be greater or equal than keyN)rU   r@   rL   Úpop)rn   rs   rZ   rD   s       r-   Únums_clear_rangerv   ò   s‘   € ô  ˆ4ƒy�1�}˜ÒÜÐQÓRÐRØ�sÒÜÐJÓKÐKà�
‰
�3‹˜!Ñ€AØ
Œc�$‹iŠ-˜D ™G }Ò4Ø�‰�ŒØ�‰�Œð Œc�$‹iŠ-˜D ™G }Ô4ˆ-Ð4ˆ-r5   c                 óš   — t        |«      dz  dk7  rt        d«      ‚|j                  | «      dz   }|t        |«      k  r||   ||dz      fS y)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

    rO   r   rp   r   )NN)rU   r@   rL   )rn   rZ   rD   s      r-   Ú	nums_nextrx     sW   € ô ˆ4ƒy�1�}˜ÒÜÐQÓRÐRà�
‰
�3‹˜!Ñ€AØŒ3ˆt‹9‚}Ø�Q‘˜˜a !™e™Ð%Ð%Ør5   )Ú__doc__Úcollections.abcr   Útypingr   r   Ú
_protocolsr   Ú_utilsr   Úgenericr	   r
   r   r   r   r0   r1   r4   r;   rH   rJ   r`   rm   rr   rv   Útuplerx   rQ   r5   r-   Ú<module>r€      s1  ðñ:õx %ß !å ,Ý "÷õ ð)¨ð )°ó )ð8:¨3ð :°3ó :ð Cð ¨Có ð 3 Cð 3¨Có 3ð!DÐ+;ð !DÀCð !DÈCó !DðH.Ð,ð .°Sð .¸Só .ðb"Ø	ð"àð"ð ð"ð 
ó	"ð<Ø	ðàðð ðð 
ó	ð6Ø	ðà
ðð ˆ8�LÑ! 8Ð,<Ñ#=Ð=Ñ>ôr5   