
    >wgS                        d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZ eeef   ZddddZd	Zd
 Zd ZedfedfedfedfdZ eej-                               g dz   Z eej-                               ddgz   Zd Zej4                  dk(  Zd\  ZZd)dZd*defdZ d+dZ!d*dZ"d Z#d*dZ$d Z%d Z&d Z'd  Z(d! Z)d" Z*	 	 	 	 d,d#ed$ed%e+d&ee   d'e+defd(Z,y)-z&bidirectional algorithm implementation    Ndeque)OptionalUnion)bidirectionalmirrored   )MIRRORED)LALR>   c                     | dz   dz  S )Nr	    xs    E/var/www/horilla/myenv/lib/python3.12/site-packages/bidi/algorithm.py_LEAST_GREATER_ODDr   "   s    EQ;    c                     | dz   dz  S )N   r   r   s    r   _LEAST_GREATER_EVENr   &   s    ER<r   Nr   r   )RLELRERLOLRO)BNPDFBr   r    c                     d| dz     S )Nr   r   r   r   r   s    r   _embedding_directionr$   6   s    a!er   i  )i   i  c                 X   t         j                  }t        j                         d   d   }|j	                  d| d       |r:|j	                  d| d   z         |j	                  dj                  | d                |r,|j	                  d	j                  t        | d
                      |rd}| d   D ]  }|dk7  r	||d   z  }|dz  } |j	                  |dz          dj                  dj                  | d   D cg c]  }t        |d          c}            }|j	                  |       | d   D cg c]  }|d   j                  d       }}t        d      D ]<  }	|	rdnd}|j	                  |dj                  |D 
cg c]  }
|
|	   	 c}
      z         > yyc c}w c c}w c c}
w )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C3#f+##A&CCq 	EA/0+6LFLL"''6*BR2a5*B"CCD	E!  < D +Cs   <F4F" F'returnc                     d}d}| D ]e  }t         r"t        t        |      cxk  r	t        k  rn n|}+|r||z   }d}|r|j	                         rd} nt        |      }|dv rd} n|dk(  scd} n |d}|S )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 3s8E~E N 3&C"N CKKMJ!#&	#J#J-2 
r   c                    d}|d   }| D ]k  }t         r"t        t        |      cxk  r	t        k  rn n|}+|r||z   }d}|r|j	                         rdn
t        |      }|d   j                  ||||d       m |rt        |d       yy)	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  
3s8E~E N 3&C"N'CKKMC}S?Q	Y	R	

 g. r   c                    dx}}d}t               }| d   }| d   D ]  }|d   }t        j                  |d      \  }	}
|	rL|dk7  r|dz  }. |	|      }|t        k  r|j	                  ||f       ||
}}W|t        dz
  k(  r|dz  }i|dz  }o|t
        vr||d	<   |dk7  s||d<   |d
k(  r3|r|dz  }|r|t        dz
  k7  r|dz  }|s|j                         \  }}|dk(  s|j                          dx}}| d   x}|d	<   d} | d   D cg c]  }|d   t        vs| c}| d<   t        |        |rt        | d       yyc c}w )z|Apply 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 2+K	-11)\J
H  1$ A% "?3I//0DEF8A8!5 $81$<< (1,' !A%  
*.G'3."6CK e##$)$+'+?!+CC+q0+<BJJL9O%9 c!=>> #:181FF#g,'*$e2+t w'3v;j+HGG GgD) s   
EEc           	      v   | d   j                          | d   }|syd }|d   } || d   |d         }d}dx}}d\  }}	|d   |d	   }}
|D ]G  }|d   |d	   }	}||
k(  r|d
z  }n, ||
|      }| d   j                  |||||d       |}||z  }d
}||	}}
I  ||| d         }| d   j                  ||||	|d       y)zxSplit the storage to run of char types at the same level.

    Applies X10. See http://unicode.org/reports/tr9/#X10
    r*   r+   Nc                 *    ddgt        | |      dz     S )Nr   r   r   )max)b_lb_rs     r   calc_level_runz'calc_level_runs.<locals>.calc_level_run  s    Sz#c3-!+,,r   r   r(   r/   )r   r.   r0   r	   )soreorstartr0   length)r]   rS   )r<   r+   rn   
first_charro   rp   	run_start
run_length
curr_level	curr_type
prev_level	prev_typer@   s                r   r_   r_      s3    FOGE - qJ
.
70C
DC
CI
!J	&w/F1C	J 6 #Gc&kI
#!OJ Z8CFO""&%( C#IJ *II
)6. W\%:
;CFO 	
r   c                 `   | d   D ]  }|d   x}}|d   |d   }}| d   |||z    }|D ]-  }|d   }	|	dk(  r|x|d<   }	|	dk(  r
|d	k(  rd
|d<   |	dv r|	}|d   }/ |D ]  }|d   d	k(  sd|d<    t        dt        |      dz
        D ]T  }
||
   d   }	||
dz
     d   }||
dz      d   }|	dk(  r||cxk(  rdk(  rn nd||
   d<   |	dk(  sB||k(  sH|dv sM|||
   d<   V t        t        |            D ]j  }
||
   d   dk(  st        |
dz
  dd      D ]  }||   d   dk(  r	d||   d<    n t        |
dz   t        |            D ]  }||   d   dk(  r	d||   d<    j l |D ]  }|d   dv sd|d<    |d   }|D ]!  }|d   dk(  r
|dk(  rd|d<   |d   dv s|d   }#  |rt        | d       yy)zeResolve weak type rules W1 - W3.

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

    r*   ro   rq   rr   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_strongry   rq   rr   r+   r@   rO   idx	next_typeet_idxs                r   resolve_weak_typesr   8  s    v N*"%e*,i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c
6*IcAgv.IcAgv.ID i9&D&D%)c
6" T!*-%.c
6"	/" U$ 	CSz&!T)#C!GR4 FV}V,404ff-	
 $C!GSZ8 FV}V,404ff-		  	#C6{00"F	# %j 	*C6{d"{c'9!F6{j(!&k	*SN*` gD) r   c                    d}| d   D ]  }|d   |d   }}d|d   ig| d   |||z    z   d|d   igz   }t        |      }d	}t        |      D ]n  }	||	   }
|
d   d
v r||	}||	dz
     d   } |#||	   d   }|dv rd}|dv rd}t        ||	      D ]'  }||k(  r	|||   d<   t        ||   d         ||   d<   ) d	}p  |rt        |        y	y	)zuResolving neutral types. Implements N1 and N2

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

    r.   r*   rq   rr   r0   ro   r+   rp   N)r!   SWSr   r	   r   r   r/   )r   r;   r$   rD   )r<   rT   prev_bidi_typer   rq   rr   r+   total_chars	seq_startr   r@   next_bidi_typeseq_idxs                r   resolve_neutral_typesr     s_    Nv .%Gc(mv c%j!"guuv~67E
#$% 	
 %j	% #	%C*C6{44 $ #I%*37^F%;N(%*3Z%7N%5),%5),#(C#8 )^;5CE'N62 6J %gw 76E'N62 !%IG#	%.%` g r   c                 X   | d   D ]  }|d   |d   }}| d   |||z    }|D ]v  }|d   dv sJ dj                  |d                t        |d         d	k(  r-|d   d
k(  r|dxx   dz  cc<   J|d   d	k7  sS|dxx   dz  cc<   a|d   d
k7  sj|dxx   dz  cc<   x  |rt        | d       yy)zlResolving implicit levels (I1, I2)

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

    r*   rq   rr   r+   r0   )r   r   r|   r}   z{} not allowed herer/   r   r   r	   r   TrW   N)r6   r$   rD   )r<   rT   r   rq   rr   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                 
   t        ||dz
  d      D ]p  }dx}}t        ||dz         D ]9  }| |   }	|	d   |k\  r
||x}}|}|t        | ||dz          | ||dz    dx}}; |U|Xt        | ||dz          | ||dz    r y)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     }&6&:B? LZA6 	)G7^Fg%'>$++FT"D#08vPQ	9R0SE&D519-$((FT	) $"2(0v	1J(KE&D519%%Lr   c                    d}| d   }|ddd   D ](  }|d   dv r| d   |d<   d}|r|d   d	v r	| d   |d<   'd
}* t        |      }dx}}d}t        }	t        |      D ][  }
||
   }|d   }||kD  r|}|dz  r||	k  r|}	|d   dk(  s	|
|dz
  k(  s1|
}|d   dk(  r|dz  }t        |||||	       |
dz   }d}t        }	] |rt	        |        yy)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     sH   
 LGETrT{ ! v;*$ #<0CLLc&k\9
 #<0CL L!" %jG
 JM+W~ 4Cj \
%&M>j+;;)v;#!!3H6{c!A'z8]<L
 qJM3144 g r   c                     | d   D ]>  }|d   }t        |      st        |d         dk(  s&t        j                  ||      |d<   @ |rt	        |        yy)zHApplies 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 7d)G!5c'l!Cs!J Wg6CI7
 g r   c                       ddg t               d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                    t               }t        | t              r| j                  |      }d}n| }d}|t	        ||      }n	t
        |   }||d<   d|   |d<   t        ||||       t        ||       t        ||       t        ||       t        ||       t        ||       t        ||       |d   }	dj                  |	D 
cg c]  }
|
d   	 c}
      }|r|j                  |      }|S c c}
w )	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/
&GL$Z0GJwe< %0w&'5)GU+GU+GU#GEggE2Ss4y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   