
    yXhS                        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                                          g dz   Z ee                                          ddgz   Zd Zej        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,dS )0z&bidirectional algorithm implementation    Ndeque)OptionalUnion)bidirectionalmirrored   )MIRRORED)LALR>   c                     | dz   dz  S )Nr	    xs    `/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/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  FTc                   	 t           j        }t          j                    d         d         }|                    d| d           |rL|                    d| d         z             |                    d                    | d                              |r;|                    d	                    t          | d
                                        |rd}| d         D ]}|dk    r||d         z  }|dz  }|                    |dz              d                    d                    d | d         D                                 }|                    |           d | d         D             }t          d          D ]A		rdnd}|                    |d                    	fd|D                       z             @dS dS )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 : {}
 c                 8    g | ]}t          |d                    S )level)str.0_chs     r   
<listcomp>z!debug_storage.<locals>.<listcomp>W   s$    ;;;3SW;;;r   c                 D    g | ]}|d                               d          S )typer&   )ljustr2   s     r   r5   z!debug_storage.<locals>.<listcomp>[   s*    CCC3#f+##A&&CCCr   z                %s
z  Res. types  : %s
c                      g | ]
}|         S r   r   )r3   _tis     r   r5   z!debug_storage.<locals>.<listcomp>_   s    *B*B*BR2a5*B*B*Br   N)	sysstderrinspectstackwriteformatlistjoinrange)
storage	base_infor+   r*   r=   calleroutputr4   _typesr;   s
            @r   debug_storagerJ   >   s    ZF]__Q"F
LL!v!!!""" I+gl.CCDDD+227:3FGGHHH K+2243H3HIIJJJ E#7# 	 	Cd{{#d)##Vd]###'..rww;;''*:;;;0
 0
   	VCC''2BCCCq 	E 	EA/0L++6LFLL"''*B*B*B*B6*B*B*B"C"CCDDDD%E E 	E 	Er   returnc                 
   d}d}| D ]w}t           r*t          t          |          cxk    rt          k    rn n|}3|r||z   }d}|r|                                rd} n"t          |          }|dv rd} n|dk    rd} nx|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_surrogater4   	bidi_types         r   get_base_levelrV   b   s     JN   	#3s88EEEE~EEEEE N 	# 3&C"N  	CKKMM 	JE!#&&	##JE#JE 
 
r   c                 P   d}|d         }| D ]}t           r*t          t          |          cxk    rt          k    rn n|}3|r||z   }d}|r|                                rdnt          |          }|d                             ||||d           |rt          |d           dS dS )	z_Get the paragraph base embedding level and direction,
    set the storage to the array of charsFr(   r   r+   )r,   r0   r7   origT)rF   N)rM   rN   rO   rP   rQ   r   appendrJ   )rR   rE   rS   debugrT   r(   r4   rU   s           r   get_embedding_levelsr[      s     N&J  
 
 	#3s88EEEE~EEEEE N 	# 3&C"N'QCKKMMQCC}S?Q?Q	Y	RR	
 	
 	
 	
  /g....../ /r   c                    dx}}d}t                      }| d         }| d         D ]}|d         }t                              |d          \  }	}
|	rX|dk    r|dz  }7 |	|          }|t          k     r|                    ||f           ||
}}i|t          dz
  k    r|dz  }}|dz  }|t
          vr||d	<   |dk    r||d<   |d
k    r8|r|dz  }|r|t          dz
  k    r|dz  }|r|                                \  }}|dk    r'|                                 dx}}| d         x}|d	<   d}
d | d         D             | d<   t          |            |rt          | d           dS dS )z|Apply X1 to X9 rules of the unicode algorithm.

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

    r   r   r(   r+   r7   )NNr	   r   r0   r    r!   c                 0    g | ]}|d          t           v|S )r7   )
X9_REMOVEDr2   s     r   r5   z0explicit_embed_and_overrides.<locals>.<listcomp>   s-       3v;j+H+H+H+H+Hr   Tr*   N)
r   X2_X5_MAPPINGSgetEXPLICIT_LEVEL_LIMITrY   
X6_IGNOREDpopclearcalc_level_runsrJ   )rE   rZ   overflow_counteralmost_overflow_counterdirectional_overridelevelsembedding_levelr4   rU   
level_funcoverride	new_levels               r   explicit_embed_and_overridesro      s,    232.WWF l+Ow 2+ 2+K	-11)\JJ
H -	+  1$$ A% "
?33I///0DEFFF8A8!5 $81$<<< (1,'' !A%   
**.G'3.."6CK e### I$)$$+I'+?!+CCC+q0++ I<BJJLL9O%9 c!!=>> #:181FF#g,'*$ w'  GG G *gD))))))* *r   c           	         | d                                           | d         }|sdS d }|d         } || d         |d                   }d}dx}}d\  }}	|d         |d	         }}
|D ]X}|d         |d	         }	}||
k    r|d
z  }n6 ||
|          }| d                             |||||d           |}||z  }d
}||	}}
Y ||| d                   }| d                             ||||	|d           dS )zxSplit the storage to run of char types at the same level.

    Applies X10. See http://unicode.org/reports/tr9/#X10
    r*   r+   Nc                 8    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(   r0   )r   r.   r7   r	   )soreorstartr7   length)re   rY   )rE   r+   ru   
first_charrv   rw   	run_start
run_length
curr_level	curr_type
prev_level	prev_typer4   s                r   rf   rf      s    FOGE  - - - qJ
..
70C
D
DC
CI
!J	&w/F1C	J 6 6 #Gc&kI
##!OJJ .Z88CFO""&%(    C#IJ *II

 .W\%:
;
;CFO 	
 	
    r   c                 B   | d         D ]}|d         x}}|d         |d         }}| d         |||z            }|D ]6}|d         }	|	dk    r|x|d<   }	|	dk    r|d	k    rd
|d<   |	dv r|	}|d         }7|D ]}|d         d	k    rd|d<   t          dt          |          dz
            D ]n}
||
         d         }	||
dz
           d         }||
dz            d         }|	dk    r||cxk    rdk    rn nd||
         d<   |	dk    r||k    r|dv r|||
         d<   ot          t          |                    D ]}
||
         d         dk    rvt          |
dz
  dd          D ] }||         d         dk    rd||         d<     t          |
dz   t          |                    D ] }||         d         dk    rd||         d<     |D ]}|d         dv rd|d<   |d         }|D ]+}|d         dk    r|dk    rd|d<   |d         dv r|d         },|rt          | d           dS dS )zeResolve weak type rules W1 - W3.

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

    r*   rv   rx   ry   r+   r7   NSMENr   AN)r   r   r   r   r	   ESCSr   r   ET)r   r   r   ONr   r#   Tr_   N)rD   lenrJ   )rE   rZ   runprev_strongr   rx   ry   r+   r4   rU   idx	next_typeet_idxs                r   resolve_weak_typesr   8  s&    v N* N*"%e*,iGc(mv !78 	$ 	$C
 FIE!!*33Fi
 D  [D%8%8"F ,,,'FII  	" 	"C6{d""!F
 CJJN++ 	/ 	/Cc
6*IcAgv.IcAgv.ID  i9&D&D&D&D&D&D&D&D&D%)c
6" T!!**--%.c
6" U$$ 	 	CSz&!T))#C!GR44  FV}V,4404ff--#C!GSZZ88  FV}V,4404ff--  	# 	#C6{000"F
 %j 	* 	*C6{d""{c'9'9!F6{j((!&k	*  *gD))))))* *r   c                     d}| d         D ]}|d         |d         }}d|d         ig| d         |||z            z   d|d         igz   }t          |          }d	}t          |          D ]}	||	         }
|
d         d
v r||	}||	dz
           d         }*|e||	         d         }|dv rd}|dv rd}t          ||	          D ]8}||k    r|||         d<   t          ||         d                   ||         d<   9d	}|rt          |            d	S d	S )zuResolving neutral types. Implements N1 and N2

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

    r.   r*   rx   ry   r7   rv   r+   rw   N)r!   SWSr   r	   r   r   r0   )r   rD   r$   rJ   )rE   rZ   prev_bidi_typer   rx   ry   r+   total_chars	seq_startr   r4   next_bidi_typeseq_idxs                r   resolve_neutral_typesr     s    Nv .% .%Gc(mv c%j!"guuv~567E
#$% 	
 %jj	%% #	% #	%C*C6{444 $ #I%*37^F%;N(%*3Z%7N%55),%55),#(C#8#8  )^;;5CE'N622 6J %gw 76 6E'N622 !%IG#	%J  g r   c                    | d         D ]}|d         |d         }}| d         |||z            }|D ]}|d         dv s#J d                     |d                               t          |d                   d	k    r:|d         d
k    r|dxx         dz  cc<   e|d         d	k    r|dxx         dz  cc<   |d         d
k    r|dxx         dz  cc<   |rt          | d           dS dS )zlResolving implicit levels (I1, I2)

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

    r*   rx   ry   r+   r7   )r   r   r   r   z{} not allowed herer0   r   r   r	   r   Tr_   N)rA   r$   rJ   )rE   rZ   r   rx   ry   r+   r4   s          r   resolve_implicit_levelsr     sD    v & &Gc(mv !78 	& 	&Cv;"8888%,,S[99 988 $CL11S88 v;#%%LLLA%LLLL[C''LLLA%LLL v;#%%LLLA%LLL%	&(  *gD))))))* *r   c                 H   t          ||dz
  d          D ]}dx}}t          ||dz             D ]J}| |         }	|	d         |k    r
||x}}|} |(t          | ||
 dz                      | ||
 dz   <   dx}}K|&|$t          | ||
 dz                      | ||
 dz   <   dS )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   Nr0   )rD   reversed)
r+   
line_startline_endhighest_levellowest_odd_levelr0   _start_endrun_idxrun_chs
             r   reverse_contiguous_sequencer     s    }&6&:B?? L LZA66 	) 	)G7^Fg%''>$++FTT"DD#08vPQ	?Q9R0S0SE&D519,-$((FT $"2(0v	7I1J(K(KE&D519$%%L Lr   c                    d}| d         }|ddd         D ]4}|d         dv r| d         |d<   d}|r|d         d	v r| d         |d<   2d
}5t          |          }dx}}d}t          }	t          |          D ]p}
||
         }|d         }||k    r|}|dz  r||	k     r|}	|d         dk    s	|
|dz
  k    r4|
}|d         dk    r|dz  }t          |||||	           |
dz   }d}t          }	q|rt	          |            dS dS )zL1 and L2 rulesTr+   Nr   rX   )r!   r   r(   r0   )r   r   Fr   r   r!   r	   )r   rb   rD   r   rJ   )rE   rZ   should_resetr+   r4   max_lenr   r   r   r   r   
char_levels               r   reorder_resolved_levelsr     s   
 LGETTrT{ ! ! v;*$$ #<0CLLL 	!c&k\99
 #<0CLL LL%jjG
 JM+W~~ 4 4Cj \
%%&M> 	*j+;;;)v;#!!3!3H6{c!!A'z8]<L  
 qJM3 g r   c                     | d         D ]J}|d         }t          |          r1t          |d                   dk    rt          j        ||          |d<   K|rt	          |            dS dS )zHApplies L4: mirroring

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

    r+   r,   r0   r   N)r   r$   r
   ra   rJ   )rE   rZ   r4   unichars       r   apply_mirroringr   O  s     w 7 7d)G 	7!5c'l!C!Cs!J!J Wg66CI 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   utf-8str_or_bytesencodingrS   r)   rZ   c                 D   t                      }t          | t                    r|                     |          }d}n| }d}|t	          ||          }nt
          |         }||d<   d|         |d<   t          ||||           t          ||           t          ||           t          ||           t          ||           t          ||           t          ||           |d         }	d                    d	 |	D                       }
|r|
                    |          }
|
S )
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.

    TFNr(   r#   r)   r+   r.   c                     g | ]
}|d          S )r,   r   r2   s     r   r5   zget_display.<locals>.<listcomp>  s    222Ss4y222r   )r   
isinstancebytesdecoderV   PARAGRAPH_LEVELSr[   ro   r   r   r   r   r   rC   encode)r   r   rS   r)   rZ   rE   rR   was_decodedr(   r+   displays              r   get_displayr   k  s=   ,  !!G ,&& ""8,,#D,77

%h/
&GL$Z0GJwe<<< %000w&&&'5)))GU+++GU+++GU###GEgg22E22233G +..**Nr   )FTF)F)FF)r   FNF)-__doc__r>   r<   collectionsr   typingr   r   unicodedatar   r   mirrorr
   r1   r   
StrOrBytesr   rb   r   r   r`   rB   keysrc   r^   r$   
maxunicoderM   rN   rP   rJ   intrV   r[   ro   rf   r   r   r   r   r   r   r   boolr   r   r   r   <module>r      s  $ ) (  



       " " " " " " " " / / / / / / / /      3:
 !!,,      
 $%$%	  T.%%''((+=+=+==
T.%%''((D%=8
   >U"!- !E !E !E !EH* * * * * *Z/ / / /2M* M* M* M*`= = =@X* X* X* X*v9 9 9x* * *DL L L<= = =@  $   "6 666 6 sm	6
 6 6 6 6 6 6 6r   