
    9iS                        S r SSKrSSKrSSKJr  SSKJrJr  SSKJ	r	J
r
  SSKJr  \\\4   rSSSS.rS	rS
 rS r\S4\S4\S4\S4S.r\" \R-                  5       5      / SQ-   r\" \R-                  5       5      SS/-   rS r\R4                  S:H  rSu  rrS)S jrS*S\4S jjr S+S jr!S*S jr"S r#S*S jr$S r%S r&S r'S  r(S! r)S" r*    S,S#\S$\S%\+S&\\   S'\+S\4S( jjr,g)-z&bidirectional algorithm implementation    Ndeque)OptionalUnion)bidirectionalmirrored   )MIRRORED)LALR>   c                     U S-   S-  $ )Nr	    xs    N/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/bidi/algorithm.py_LEAST_GREATER_ODDr   "   s    EQ;    c                     U S-   S-  $ )N   r   r   s    r   _LEAST_GREATER_EVENr   &   s    ER<r   Nr   r   )RLELRERLOLRO)BNPDFBr   r    c                     SU S-     $ )Nr   r   r   r   r   s    r   _embedding_directionr$   6   s    a!er   i  )i   i  c                    [         R                  n[        R                  " 5       S   S   nUR	                  SU S35        U(       a:  UR	                  SU S   -  5        UR	                  SR                  U S   5      5        U(       a,  UR	                  S	R                  [        U S
   5      5      5        U(       Ga  SnU S    H  nUS:w  a	  XgS   -  nM  US-  nM     UR	                  US-   5        SR                  SR                  U S    Vs/ s H  n[        US   5      PM     sn5      5      nUR	                  U5        U S    Vs/ s H  owS   R                  S5      PM     nn[        S5       HD  n	U	(       a  SOSnUR	                  USR                  U V
s/ s H  oU	   PM	     sn
5      -  5        MF     ggs  snf s  snf s  sn
f )z)Display debug information for the storager	      zin 
z  base level  : %d

base_levelz  base dir    : {}
base_dirz  runs        : {}
runsz  Chars       : charschCz  Res. levels : {}
 leveltypez                %s
z  Res. types  : %s
N)sysstderrinspectstackwriteformatlistjoinstrljustrange)storage	base_infor+   r*   r2   calleroutput_ch_typesi_ts              r   debug_storagerD   >   s    ZZF]]_Q"F
LL3vhb!"+gl.CCD+227:3FGH+2243HIJ#7#Cd{d)##	 $
 	Vd]#'..rww*1'*:;*:3SW*:;0
  	V29'2BC2B3f+##A&2BCqA/0+6LFLL"''6*B6Ra56*B"CCD !  < D +Cs   F?GG	returnc                 "   SnSnU  H  n[         (       a%  [        [        U5      s=::  a
  [        ::  a  O  OUnM3  U(       a  X4-   nSnU(       a  UR	                  5       (       a  Sn  O#[        U5      nUS;   a  Sn  OUS:X  d  M}  Sn  O   Uc  SnU$ )zGet the paragraph base embedding level. Returns 0 for LTR,
1 for RTL.

`text` a unicode object.

Set `upper_is_rtl` to True to treat upper case chars as strong 'R'
for debugging (default: False).

NFr	   )r   r   r   r   )_IS_UCS2_SURROGATE_MINord_SURROGATE_MAXisupperr   )textupper_is_rtlr(   prev_surrogater@   	bidi_types         r   get_base_levelrP   b   s     JN83s8E~E N &C"N CKKMMJ!#&	#J#J- 2 
r   c                 B   SnUS   nU  H  n[         (       a%  [        [        U5      s=::  a
  [        ::  a  O  OUnM3  U(       a  XF-   nSnU(       a  UR	                  5       (       a  SO
[        U5      nUS   R                  XeXwS.5        M     U(       a  [        USS9  gg)	z[Get the paragraph base embedding level and direction,
set the storage to the array of charsFr(   r   r+   )r,   r/   r0   origT)r=   N)rG   rH   rI   rJ   rK   r   appendrD   )rL   r<   rM   debugrN   r(   r@   rO   s           r   get_embedding_levelsrU      s     N&J 83s8E~E N &C"N'CKKMMC}S?Q	YR	
  g. r   c                    S=p#Sn[        5       nU S   nU S    GH  nUS   n[        R                  US5      u  pU	(       aP  US:w  a  US-  nM5  U	" U5      nU[        :  a  UR	                  Xd45        XpFM]  U[        S-
  :X  a  US-  nMq  US-  nMx  U[
        ;  a  XgS	'   US:w  a  XGS'   M  M  US
:X  aF  U(       a  US-  nM  U(       a  U[        S-
  :w  a  US-  nM  U(       a  UR                  5       u  pdM  M  US:X  d  M  UR                  5         S=p#U S   =ogS	'   SnGM	     U S    Vs/ s H  owS   [        ;  d  M  UPM     snU S'   [        U 5        U(       a  [        U SS9  ggs  snf )ztApply X1 to X9 rules of the unicode algorithm.

See http://unicode.org/reports/tr9/#Explicit_Levels_and_Directions

r   r   r(   r+   r0   )NNr	   r   r/   r    r!   Tr*   N)r   X2_X5_MAPPINGSgetEXPLICIT_LEVEL_LIMITrS   
X6_IGNOREDpopclear
X9_REMOVEDcalc_level_runsrD   )r<   rT   overflow_counteralmost_overflow_counterdirectional_overridelevelsembedding_levelr@   rO   
level_funcoverride	new_levels               r   explicit_embed_and_overridesrh      s    232WF l+OwK	-11)\J
  1$ A% "?3I//EF8A!5 $81$<< (1,' !A%  
*.G'3."6K / e##$)$+'+?!+CC+q0+<BJJL9O%9  c!=>> 181FFg,'*$e  t w''v;j+H'GG GgD) s   ,E* E*c           	      r   U S   R                  5         U S   nU(       d  gS nUS   nU" U S   US   5      nSnS=pgSu  pUS   US	   pU HC  nUS   US	   pX:X  a  US
-  nO*U" X5      nU S   R                  UUUUUS.5        UnXg-  nS
nXpME     U" XS   5      nU S   R                  UUUU	US.5        g)zpSplit the storage to run of char types at the same level.

Applies X10. See http://unicode.org/reports/tr9/#X10
r*   r+   Nc                 (    SS/[        X5      S-     $ )Nr   r   r   )max)b_lb_rs     r   calc_level_run'calc_level_runs.<locals>.calc_level_run  s    Sz#c-!+,,r   r   r(   r/   )r   r.   r0   r	   )soreorstartr0   length)r]   rS   )r<   r+   rn   
first_charrp   rq   	run_start
run_length
curr_level	curr_type
prev_level	prev_typer@   s                r   r_   r_      s    FOGE - qJ
.
70C
DC
CI!J&w/F1C	 #Gc&kI#!OJ 8CFO""&%( C#IJ *I) . \%:
;CFO 	
r   c                    U S    GH  nUS   =p4US   US   peU S   XUU-    nU H3  nUS   n	U	S:X  a  U=US'   n	U	S:X  a  US	:X  a  S
US'   U	S;   a  U	nUS   nM5     U H  nUS   S	:X  d  M  SUS'   M     [        S[        U5      S-
  5       HX  n
Xz   S   n	XzS-
     S   nXzS-      S   nU	S:X  a  XKs=:X  a  S:X  a
  O  OSXz   S'   U	S:X  d  MB  XK:X  d  MI  US;   d  MQ  XGU
   S'   MZ     [        [        U5      5       Ho  n
Xz   S   S:X  d  M  [        U
S-
  SS5       H  nX|   S   S:X  a	  SX|   S'   M    O   [        U
S-   [        U5      5       H  nX|   S   S:X  a	  SX|   S'   M    Mm     Mq     U H  nUS   S;   d  M  SUS'   M     US   nU H'  nUS   S:X  a  US:X  a  SUS'   US   S;   d  M"  US   nM)     GM     U(       a  [        U SS9  gg)z]Resolve weak type rules W1 - W3.

See: http://unicode.org/reports/tr9/#Resolving_Weak_Types

r*   rp   rr   rs   r+   r0   NSMENr   AN)r   r   r   r   r	   ESCSr~   r}   ET)r   r   r   ONr   r#   TrW   N)r;   lenrD   )r<   rT   runprev_strongrz   rr   rs   r+   r@   rO   idx	next_typeet_idxs                r   resolve_weak_typesr   8  sX    v"%e*,Gc(mv 8C
 FIE!*33Fi
 D [D%8"F ,,'FI) . C6{d"!F  CJN+C
6*IAgv.IAgv.ID i&D&D%)
6" T!*-%.c
6" ," U$Cz&!T)#C!GR4F}V,404f-	 5
 $C!GSZ8F}V,404f-	 9 % C6{00"F  %jC6{d"{c'9!F6{j(!&k S ` gD) r   c                    SnU S    H  nUS   US   pTSUS   0/U S   XDU-    -   SUS   0/-   n[        U5      nS	n[        U5       Hv  n	Xi   n
U
S   S
;   a  Uc  U	nXiS-
     S   nM!  M#  Uc  M(  Xi   S   nUS;   a  SnUS;   a  Sn[        X5       H&  nX+:X  a	  X&U   S'   M  [        Xl   S   5      Xl   S'   M(     S	nMx     M     U(       a  [        U 5        g	g	)zmResolving neutral types. Implements N1 and N2

See: http://unicode.org/reports/tr9/#Resolving_Neutral_Types

r.   r*   rr   rs   r0   rp   r+   rq   N)r!   SWSr   r	   r   r   r/   )r   r;   r$   rD   )r<   rT   prev_bidi_typer   rr   rs   r+   total_chars	seq_startr   r@   next_bidi_typeseq_idxs                r   resolve_neutral_typesr     sC    NvGc(mv c%j!"guv~67E
#$% 	
 %j	%C*C6{44 $ #I%*7^F%;N % (%*Z%7N%5),%5),#(#8);5C'N62 6J %w 76EN62 $9 !%IG & ` g r   c                 t   U S    H  nUS   US   pCU S   X3U-    nU H  nUS   S;   d   SR                  US   5      5       e[        US   5      S	:X  a2  US   S
:X  a  US==   S-  ss'   MO  US   S	:w  a  US==   S-  ss'   Mg  Mi  US   S
:w  d  Mt  US==   S-  ss'   M     M     U(       a  [        U SS9  gg)zdResolving implicit levels (I1, I2)

See: http://unicode.org/reports/tr9/#Resolving_Implicit_Levels

r*   rr   rs   r+   r0   )r   r   r}   r~   z{} not allowed herer/   r   r   r	   r   TrW   N)r6   r$   rD   )r<   rT   r   rr   rs   r+   r@   s          r   resolve_implicit_levelsr     s     vGc(mv 8Cv;"88 %,,S[98 $CL1S8 v;#%LA%L[C'LA%L (
 v;#%LA%L% 	 0 gD) r   c                    [        X4S-
  S5       Ht  nS=pg[        XS-   5       H;  nX   n	U	S   U:  a  Uc  U=pgM  UnM  Uc  M!  [        XU7S-    5      XU7S-   & S=pgM=     Uc  MX  Uc  M]  [        XU7S-    5      XU7S-   & Mv     g)zL2. From the highest level found in the text to the lowest odd
level on each line, including intermediate levels not actually
present in the text, reverse any contiguous sequence of characters
that are at that level or higher.

r	   r   Nr/   )r;   reversed)
r+   
line_startline_endhighest_levellowest_odd_levelr/   _start_endrun_idxrun_chs
             r   reverse_contiguous_sequencer     s     }&:B?ZA6G^Fg%'>$++FT"D#08PQ	9R0SED519-$((FT 7 $"2(0	1J(KED519%% @r   c                    SnU S   nUSSS2    H4  nUS   S;   a  U S   US'   SnM  U(       a  US   S	;   a
  U S   US'   M2  S
nM6     [        U5      nS=pgSn[        n	[        U5       Ha  n
X:   nUS   nX:  a  UnUS-  (       a  X:  a  Un	US   S:X  d
  XS-
  :X  d  M7  U
nUS   S:X  a  US-  n[        X6XxU	5        U
S-   nSn[        n	Mc     U(       a  [	        U 5        gg)zL1 and L2 rulesTr+   Nr   rR   )r!   r   r(   r/   )r   r   Fr   r   r!   r	   )r   rZ   r;   r   rD   )r<   rT   should_resetr+   r@   max_lenr   r   r   r   r   
char_levels               r   reorder_resolved_levelsr     s/   
 LGETrT{ v;*$ #<0CLLc&k\9
 #<0CL L " %jG
 JM+W~j \
%&M>j;)v;#!!3H6{c!A'8<L
 qJM31 4 g r   c                     U S    HG  nUS   n[        U5      (       d  M  [        US   5      S:X  d  M.  [        R                  " X35      US'   MI     U(       a  [	        U 5        gg)z@Applies L4: mirroring

See: http://unicode.org/reports/tr9/#L4

r+   r,   r/   r   N)r   r$   r
   rY   rD   )r<   rT   r@   unichars       r   apply_mirroringr   O  s\     wd)G!5c'l!Cs!J W6CI  
 g r   c                       SS/ [        5       S.$ )z4Return an empty storage skeleton, usable for testingN)r(   r)   r+   r*   r   r   r   r   get_empty_storager   a  s     	 r   str_or_bytesencodingrM   r)   rT   c                    [        5       n[        U [        5      (       a  U R                  U5      nSnOU nSnUc  [	        Xb5      nO	[
        U   nXS'   SU   US'   [        XeX$5        [        XT5        [        XT5        [        XT5        [        XT5        [        XT5        [        XT5        US   n	SR                  U	 V
s/ s H  oS   PM	     sn
5      nU(       a  UR                  U5      nU$ s  sn
f )	a  Accepts `str` or `bytes`. In case it's `bytes`, `encoding`
is needed as the algorithm works on `str` (default:"utf-8").

Set `upper_is_rtl` to True to treat upper case chars as strong 'R'
for debugging (default: False).

Set `base_dir` to 'L' or 'R' to override the calculated base_level.

Set `debug` to True to display (using sys.stderr) the steps taken with the
algorithm.

Returns the display layout, either as unicode or `encoding` encoded
string.

TFr(   r#   r)   r+   r.   r,   )r   
isinstancebytesdecoderP   PARAGRAPH_LEVELSrU   rh   r   r   r   r   r   r8   encode)r   r   rM   r)   rT   r<   rL   was_decodedr(   r+   r@   displays               r   get_displayr   k  s    ,  !G ,&&""8,#D7
%h/
&L$Z0GJ< 0w&')G+G+G#GEggE2ES4yE23G..*N 3s   >C-)FTF)F)FF)zutf-8FNF)-__doc__r3   r1   collectionsr   typingr   r   unicodedatar   r   mirrorr
   r9   r   
StrOrBytesr   rZ   r   r   rX   r7   keysr[   r^   r$   
maxunicoderG   rH   rJ   rD   intrP   rU   rh   r_   r   r   r   r   r   r   r   boolr   r   r   r   <module>r      sf  $ )  
  " / 3:
 !!,  
 $%$%	 .%%'(+==
.%%'(D%=8
 >>U"!- !EH* *Z/2M*`=@X*v9x*DL<=@$ "666 6 sm	6
 6 6r   