
    HAi              	           S r SSKrSSKJrJrJrJr  SSKJr  Sr	S\	 S\	 S	\	 S	\	 S
3	r
 " S S5      r\" S5      rS\\\\S4      S\\\\4      4S jr\\\\\\4   \\\\4   \\   4   rg)z
Representation and utils for ranges of PDF file pages.

Copyright (c) 2014, Steve Witham <switham_github@mac-guyver.com>.
All rights reserved. This software is available under a BSD license;
see https://github.com/py-pdf/pypdf/blob/main/LICENSE
    N)AnyListTupleUnion   )
ParseErrorz(0|-?[1-9]\d*)z^(z|(z?(:z?)?)))$c                       \ rS rSrSrS\\S \4   SS4S jr\	S\
S\4S j5       rS\4S	 jrS\4S
 jrS\4S jrS\S\\\\4   4S jrS\S\4S jrS\4S jrSS jrSrg)	PageRange   a  
A slice-like representation of a range of page indices.

For example, page numbers, only starting at zero.

The syntax is like what you would put between brackets [ ].
The slice is one of the few Python types that can't be subclassed,
but this class converts to and from slices, and allows similar use.

  -  PageRange(str) parses a string representing a page range.
  -  PageRange(slice) directly "imports" a slice.
  -  to_slice() gives the equivalent slice.
  -  str() and repr() allow printing.
  -  indices(n) is like slice.indices(n).
argreturnNc                 @   [        U[        5      (       a  Xl        g[        U[        5      (       a  UR	                  5       U l        g[        U[
        5      =(       a    [        R                  " [        U5      nU(       d  [        U5      eUR                  S5      (       a8  [        UR                  S5      5      nUS:w  a  US-   OSn[        X45      U l        g[        UR                  SSS5       Vs/ s H  oU(       a  [        U5      OSPM     sn6 U l        gs  snf )a+  
Initialize with either a slice -- giving the equivalent page range,
or a PageRange object -- making a copy,
or a string like
    "int", "[int]:[int]" or "[int]:[int]:[int]",
    where the brackets indicate optional ints.
Remember, page indices start with zero.
Page range expression examples:

    :     all pages.                   -1    last page.
    22    just the 23rd page.          :-1   all but the last page.
    0:3   the first three pages.       -2    second-to-last page.
    :3    the first three pages.       -2:   last two pages.
    5:    from the sixth page onward.  -3:-1 third & second to last.
The third, "stride" or "step" number is also recognized.
    ::2       0 2 4 ... to the end.    3:0:-1    3 2 1 but not 0.
    1:10:2    1 3 5 7 9                2::-1     2 1 0.
    ::-1      all pages in reverse order.
Note the difference between this notation and arguments to slice():
    slice(3) means the first three pages;
    PageRange("3") means the range of only the fourth page.
    However PageRange(slice(3)) means the first three pages.
N   r            )
isinstanceslice_slicer
   to_slicestrrematchPAGE_RANGE_REr   groupint)selfr   mstartstopgs         K/var/www/html/land-ocr/venv/lib/python3.13/site-packages/pypdf/pagerange.py__init__PageRange.__init__$   s    0 c5!!Kc9%%,,.DKsC ARXXmS%AS/!771::
OE %519D,DKAqAQ!RAQAA#a&4"7AQ!RSDK!Rs   4Dinputc                     [        U [        [        45      =(       d;    [        U [        5      =(       a$    [	        [
        R                  " [        U 5      5      $ )z
True if input is a valid initializer for a PageRange.

Args:
    input: A possible PageRange string or a PageRange object.

Returns:
    True, if the ``input`` is a valid PageRange.

)r   r   r
   r   boolr   r   r   )r&   s    r#   validPageRange.validO   s<     %%!34 
uc"KtBHH]E,J'K	
    c                     U R                   $ )z/Return the slice equivalent of this page range.r   r   s    r#   r   PageRange.to_slice_   s    {{r+   c                 Z   U R                   nUR                  cX  UR                  b2  UR                  UR                  S-   :X  a  [	        UR                  5      $ UR                  UR                  4nO#UR                  UR                  UR                  4nSR                  S U 5       5      $ )zA string like "1:2:3".r   :c              3   @   #    U  H  oc  SO
[        U5      v   M     g 7f)N )r   ).0is     r#   	<genexpr>$PageRange.__str__.<locals>.<genexpr>n   s     EWiSV3Ws   )r   stepr    r!   r   join)r   sindicess      r#   __str__PageRange.__str__c   s}    KK66>ww"qvv1'<177|#ggqvvoGggqvvqvv-GxxEWEEEr+   c                 6    S[        [        U 5      5      -   S-   $ )z#A string like "PageRange('1:2:3')".z
PageRange())reprr   r.   s    r#   __repr__PageRange.__repr__p   s    d3t9o-33r+   nc                 8    U R                   R                  U5      $ )z
Assuming a sequence of length n, calculate the start and stop indices,
and the stride length of the PageRange.

See help(slice.indices).

Args:
    n:  the length of the list of pages to choose from.

Returns:
    Arguments for range().

)r   r;   )r   rC   s     r#   r;   PageRange.indicest   s     {{""1%%r+   otherc                 `    [        U[        5      (       d  gU R                  UR                  :H  $ )NF)r   r
   r   )r   rF   s     r#   __eq__PageRange.__eq__   s%    %++{{ell**r+   c                     [        U R                  U R                  R                  U R                  R                  U R                  R
                  445      $ )N)hash	__class__r   r    r!   r8   r.   s    r#   __hash__PageRange.__hash__   s;    T^^dkk&7&79I9I4;;K[K[%\]^^r+   c           
         [        U[        5      (       d  [        S[        U5       35      eU R                  R
                  c  UR                  R
                  b  [        S5      eU R                  R                  U R                  R                  4nUR                  R                  UR                  R                  4nUS   US   :  a  X2p2US   US   :  a  [        S5      e[        [        US   [        US   US   5      5      5      $ )NzCan't add PageRange and zCan't add PageRange with strider   r   zCan't add PageRanges with gap)r   r
   	TypeErrortyper   r8   
ValueErrorr    r!   r   max)r   rF   abs       r#   __add__PageRange.__add__   s    %++6tE{mDEE;;'5<<+<+<+H>??KKt{{///LL 1 11Q4!A$;q Q4!A$;<==qtS1qt_566r+   r-   )rF   r
   r   r
   )__name__
__module____qualname____firstlineno____doc__r   r   r   r$   staticmethodr   r(   r)   r   r<   rA   r   r   r;   objectrH   rM   rV   __static_attributes__ r+   r#   r
   r
      s     )TE%c"9: )Tt )TV 
S 
T 
 
% F F4# 4& &sC}!5 & +F +t +
_# _7r+   r
   r1   argsr   c                 X   / nSnSn/ U QSP H  n[         R                  U5      (       a7  U(       d  [        S5      eUc   eUR                  U[        U5      45        SnMT  U(       a  U(       d  UR                  U[        45        [        U[         5      (       a   U5       eUnSnM     U$ )a  
Given a list of filenames and page ranges, return a list of (filename, page_range) pairs.

Args:
    args: A list where the first element is a filename. The other elements are
        filenames, page-range expressions, slice objects, or PageRange objects.
        A filename not followed by a page range indicates all pages of the file.

Returns:
    A list of (filename, page_range) pairs.

NFz8The first argument must be a filename, not a page range.T)r
   r)   rR   appendPAGE_RANGE_ALLr   )ra   pairspdf_filenamedid_page_ranger   s        r#   parse_filename_page_rangesrh      s     *,E%)LN}t}??3 N  ?"?LL,	#78!N NlN;<!#y116361L"N# $ Lr+   )r\   r   typingr   r   r   r   errorsr   _INT_REr   r
   rd   r   rh   r   PageRangeSpecr`   r+   r#   <module>rm      s    
 * * 
WIRyG9CyHH7 H7V 3$
uS)T)*
+$	%Y
 $N c9eCHouS#s]7KTRUYVWr+   