
    j:j!                        % S r SSKrSSKJrJrJrJr  SSKJr  SSK	J
r
JrJr  Sq\\S'   Sq\\S	'   / q\\   \S
'   Sr\\S'    " S S\5      r   S.S\\\S4   S\\\S4   S\\\\   S4   S\\\\\   4   4S jjrS\\   S\\   S\\   4S jrS\\   S\4S jrS\S\\\   \\   4   S\\\   \\   4   S\\\   \\   4   S\\
   S\\S4   S\S \S!\\\\\\\/S4      S"\S#\S$\S\\\\\   \\   4   4S% jrS&\\\\4      S'\\   S(\\   S)\S\\S4   S\\\4   4S* jrS\S'\\   S(\\   S\\
   S)\S+\S \S,\S!\\\\\\\/S4      S\\\\4   4S- jrg)/ze
Code related to text extraction.

Some parts are still in _page.py. In doubt, they will stay there.
    N)AnyCallableOptionalUnion   )Font)DictionaryObjectTextStringObjectencode_pdfdocencodingCUSTOM_RTL_MINCUSTOM_RTL_MAXCUSTOM_RTL_SPECIAL_CHARS    LAYOUT_NEW_BT_GROUP_SPACE_WIDTHSc                       \ rS rSrSrg)OrientationNotFoundError    N)__name__
__module____qualname____firstlineno____static_attributes__r       U/var/www/website/venv/lib/python3.13/site-packages/pypdf/_text_extraction/__init__.pyr   r      s    r   r   _min_maxspecialsreturnc                    [        U [        5      (       a  U qO [        U [        5      (       a  [	        U 5      q[        U[        5      (       a  UqO [        U[        5      (       a  [	        U5      q[        U[        5      (       a  U Vs/ s H  n[	        U5      PM     snqO[        U[        5      (       a  Uq[        [
        [        4$ s  snf )a  
Change the Right-To-Left and special characters custom parameters.

Args:
    _min: The new minimum value for the range of custom characters that
        will be written right to left.
        If set to ``None``, the value will not be changed.
        If set to an integer or string, it will be converted to its ASCII code.
        The default value is -1, which sets no additional range to be converted.
    _max: The new maximum value for the range of custom characters that will
        be written right to left.
        If set to ``None``, the value will not be changed.
        If set to an integer or string, it will be converted to its ASCII code.
        The default value is -1, which sets no additional range to be converted.
    specials: The new list of special characters to be inserted in the
        current insertion order.
        If set to ``None``, the current value will not be changed.
        If set to a string, it will be converted to a list of ASCII codes.
        The default value is an empty list.

Returns:
    A tuple containing the new values for ``CUSTOM_RTL_MIN``,
    ``CUSTOM_RTL_MAX``, and ``CUSTOM_RTL_SPECIAL_CHARS``.

)
isinstanceintr   strordr   r   list)r   r   r   xs       r   set_custom_rtlr(      s    > $	D#		T$	D#		T(C  4<#=HqCFH#= 	Hd	#	##+ >+CCC $>s   
Cmnc           	      &   U S   US   -  U S   US   -  -   U S   US   -  U S   US   -  -   U S   US   -  U S   US   -  -   U S   US   -  U S   US   -  -   U S   US   -  U S   US   -  -   US   -   U S   US   -  U S   US   -  -   US   -   /$ )Nr      r         r   r   )r)   r*   s     r   multr/   E   s    	!qtadQqTk!	!qtadQqTk!	!qtadQqTk!	!qtadQqTk!	!qtadQqTk!AaD(	!qtadQqTk!AaD( r   c                 @    U S   S:  a  gU S   S:  a  gU S   S:  a  gg)	Nr-   gư>r   gư   r,   Z     r   )r)   s    r   orientr4   P   s/    td{te|taxr   text	cmtm_prevcmtm_matrix	memo_cmtmfont_resourceorientations.output	font_sizevisitor_text
str_widths
spacewidth
str_heightc                    US   nUS   nUS   nUS   nUS   nUS   n[        X5      n[        X5      n[        U5      nUS   US   -
  nUS   US   -
  n[        R                  " US   S-  US   S-  -   5      n[        R                  " US   S-  US   S-  -   5      n[        R                  " US   S-  US   S-  -   5      nUnUU;  a  [        eUS;   a  UnUnO
US;   a  UnUn [        W5      S	[        UU-  UU-  5      -  :  a'  X`-   S
   S:w  a  X`S-   -  nUb  U" U S-   UUUU5        Sn OWX-   U-  :  a  X`-   S
   S:w  a  U S-  n UR                  5       nUR                  5       nXX4$ ! [         a     N0f = f)Nr   r,   r.   r   r   r-   )r   r1   )r2   r3   g?r   
  )	r/   r4   mathsqrtr   absmin	Exceptioncopy)r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   cm_prevtm_prev	cm_matrix	tm_matrixmemo_cmmemo_tmm_prevr)   orientationdelta_xdelta_yscale_prev_xscale_prev_yscale_ymoved_heightmoved_widths                               r   crlf_space_checkrZ   Z   s    lGlGAIAIlGlG'#FY"A)KdVAYGdVAYG99WQZ]WQZ]:;L99WQZ]WQZ]:;Lii	!a)A,/9:GG,&&&h%$			!|sSl)BIPWDW%XXXr"d*+%+ t%! Z4DD#s*CKD nnGnnG))	  s   )AE1 2E1 1
E>=E>operandsrM   rN   fontc                    SnSn[        X!5      n[        U5      nX;   a  [        U 5      S:  a  [        U S   [        5      (       a
  U S   nSnXV4$ Sn[        U S   [        5      (       a  [        U S   5      OU S   n	[        UR                  [        5      (       a    U	R                  UR                  S5      nXV4$ SR                  U	 V
s/ s H;  oUR                  ;   a  UR                  U
   O[        U
45      R                  5       PM=     sn
5      nXV4$ ! [         a)    U	R                  UR                  S:X  a  SOSS5      n XV4$ f = fs  sn
f )NrC   Fr   Tsurrogatepasscharmapz	utf-16-be)r/   r4   lenr"   r$   r   encodingdecoderI   joinbytes)r[   rM   rN   r\   r:   tis_str_operandsr)   rR   ttr'   s              r   get_text_operandsrh      sa    AOY"A)K"s8}q'8hqk3''A"O. + A hqk3// &hqk2a[ 
 $----			$--AA  GG_ab_aZ[dmm);T]]1%tASASAUU_ab  !  		'+}}	'Ay'A  cs   D AE.E
Etext_operandsrtl_dirc	                    Sn	U GH9  n
XUR                   :X  a  UR                  OUR                  U
5      -  n	UR                  R	                  X5      n[        U5      S:X  a  [        U5      nOSnUS::  d7  SUs=::  a  S::  d*  O  SUs=::  a  S::  d  O  SUs=::  a  S	::  d  O  U[        ;   a  U(       a  X-   OX-   n M  S
Us=::  a  S::  d8  O  SUs=::  a  S::  d)  O  SUs=::  a  S::  d  O  [        Us=::  a
  [        ::  a"  O  OU(       d  SnUb
  U" XX#U5        Sn X-   n GM  U(       a  SnUb
  U" XX#U5        Sn X-   n GM<     XU	4$ )Ng        r,   /   :   @   i    io   i   i!  i  i  i  i  ip  i  TrC   F)

space_charspace_widthget_text_widthcharacter_mapgetr`   r%   r   r   r   )r5   rM   rN   r9   r\   ri   r<   rj   r=   widthsraw_characterr'   xxs                r   get_display_strrw      s>    F&t&F$""DL_L_`mLnn""=@q6Q;QBB 4Zr!T!%v%%v%--&18DHDb"F"%v%%v%5~5+ )IV8D+ )IV8DI 'L &  r   )NNN) __doc__rE   typingr   r   r   r   _fontr   genericr	   r
   r   r   r#   __annotations__r   r   r&   r   rI   r   r$   tupler(   floatr/   r4   rZ   boolrh   rw   r   r   r   <module>r      s    1 1  O O  &( $s) (()  # )	y 	
 #'"&,0+D
S$
+D
S$
+D CcD()+D 3T#Y	+D\DK DK DK d5k c >*
>*T%[$u+-.>* tE{DK/0>* T%[$u+-.	>*
 ,->* S/>* >* >* 8S#sC$=t$CDE>* >* >* >* 3T%[$u+-.>*B% 5../0% E{%  E{%  	% 
 S/%  39% P3!
3!E{3! E{3! ,-	3!
 3! 3! 3! 3! 8S#sC$=t$CDE3! 3e3!r   