
    mj!                        U d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
mZmZ daeed<   daeed	<   g aee   ed
<   dZeed<    G d de      Z	 	 	 d.deeedf   deeedf   deeee   df   deeeee   f   fdZdee   dee   dee   fdZdee   defdZdedeee   ee   f   deee   ee   f   deee   ee   f   dee
   deedf   ded ed!eeeeeeegdf      d"ed#ed$edeeeee   ee   f   fd%Zd&eeeef      d'ee   d(ee   d)edeedf   deeef   fd*Zded'ee   d(ee   dee
   d)ed+ed ed,ed!eeeeeeegdf      deeeef   fd-Zy)/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                       e Zd Zy)OrientationNotFoundErrorN)__name__
__module____qualname__     R/root/.hermes/venv/lib/python3.12/site-packages/pypdf/_text_extraction/__init__.pyr   r      s    r   r   _min_maxspecialsreturnc                 ^   t        | t              r| ant        | t              rt	        |       at        |t              r|ant        |t              rt	        |      at        |t              r|D cg c]  }t	        |       c}ant        |t              r|at        t
        t        fS c c}w )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<#=qCF#= 	Hd	##+ >+CCC $>s   1B*mnc           	      &   | d   |d   z  | d   |d   z  z   | d   |d   z  | d   |d   z  z   | d   |d   z  | d   |d   z  z   | d   |d   z  | d   |d   z  z   | d   |d   z  | d   |d   z  z   |d   z   | d   |d   z  | d   |d   z  z   |d   z   g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                 :    | d   dkD  ry| d   dk  ry| d   dkD  ryy)	Nr*   gư>r   gư   r)   Z     r   )r&   s    r   orientr1   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                    |d   }|d   }|d   }|d   }|d   }|d   }t        ||      }t        ||      }t        |      }|d   |d   z
  }|d   |d   z
  }t        j                  |d   dz  |d   dz  z         }t        j                  |d   dz  |d   dz  z         }t        j                  |d   dz  |d   dz  z         }|}||vrt        |dv r|}|}n|dv r|}|}	 t              d	t        ||z  ||z        z  kD  r'|| z   d
   dk7  r7|| dz   z  }| || dz   ||||       d} n|
|	z   |z  k\  r|| z   d
   dk7  r| dz  } |j                         }|j                         }| |||fS # t        $ r Y 1w xY w)Nr   r)   r+   r   r   r*   )r   r.   )r/   r0   g?r   
  )	r,   r1   mathsqrtr   absmin	Exceptioncopy)r2   r3   r4   r5   r6   r7   r8   r9   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_checkrW   Z   s    lGlGAIAIlGlG'7#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#E+ +	E76E7operandsrJ   rK   fontc                    d}d}t        ||      }t        |      }||v rt        |       dkD  rt        | d   t              r| d   }d}||fS d}t        | d   t              rt        | d         n| d   }	t        |j                  t              r!	 |	j                  |j                  d      }||fS dj                  |	D 
cg c]9  }
|
|j                  v r|j                  |
   nt        |
f      j                         ; c}
      }||fS # t        $ r) |	j                  |j                  dk(  rdndd      }Y ||fS w xY wc c}
w )Nr@   Fr   Tsurrogatepasscharmapz	utf-16-be)r,   r1   lenr   r!   r   encodingdecoderF   joinbytes)rX   rJ   rK   rY   r7   tis_str_operandsr&   rO   ttr$   s              r   get_text_operandsre      s`    AOY	"A)Kl"s8}q'8hqk3'A"O. + A hqk3/ &hqk2a[ 
 $---			$--AA  GG_abZ[dmm);T]]1%tASASAUUb  !  		'+}}	'Ay'A  cs   D >>D<,D98D9text_operandsrtl_dirc	                 T   d}	|D ]  }
|	|
|j                   k(  r|j                  n|j                  |
      z  }	|j                  j	                  |
|
      }t        |      dk(  rt        |      }nd}|dk  s/d|cxk  rdk  s$n d|cxk  rdk  sn d|cxk  rd	k  s
n |t        v r|r|| z   n| |z   } d
|cxk  rdk  s2n d|cxk  rdk  s%n d|cxk  rdk  sn t        |cxk  r	t        k  rn n|sd}| || ||||       d} || z   } |rd}| || ||||       d} | |z   }  | ||	fS )Ng        r)   /   :   @   i    io   i   i!  i  i  i  i  ip  i  Tr@   F)

space_charspace_widthget_text_widthcharacter_mapgetr]   r"   r   r   r   )r2   rJ   rK   r6   rY   rf   r9   rg   r:   widthsraw_characterr$   xxs                r   get_display_strrt      sY    F& $mt&F$""DL_L_`mLnn""=-@q6Q;QBB 4Zr!T!%v%%v%--&1t8D1HDb"F"%v%%v%5~5+ y)]IVt8D+ y)]IV!8DI$L &  r   )NNN) __doc__rB   typingr   r   r   r   _fontr   genericr	   r
   r   r   r    __annotations__r   r   r#   r   rF   r   r!   tupler%   floatr,   r1   rW   boolre   rt   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   