§
    ¡”jáS  ã                   óÜ  — 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/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/bidi/algorithm.pyÚ_LEAST_GREATER_ODDr   "   s   € Ø�‰E�Q‰;Ðó    c                 ó   — | dz   dz  S )Né   éþÿÿÿr   r   s    r   Ú_LEAST_GREATER_EVENr   &   s   € Ø�‰E�R‰<Ð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
         ¦  «        ¦  «        ¦  «         |rêd}| 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$   € Ð;Ð;Ð; 3�S��W”ÑÔÐ;Ð;Ð;r   c                 óD   — g | ]}|d                                d¦  «        ‘ŒS )Útyper&   )Úljustr2   s     r   r5   z!debug_storage.<locals>.<listcomp>[   s*   € ÐCÐCÐC¨3�#�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Ð*B°R¨2¨a¬5Ð*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ÿ  ø€ õ ŒZ€FåŒ]‰_Œ_˜QÔ Ô"€FØ
‡L‚LÐ!�vÐ!Ð!Ð!Ñ"Ô"Ð"àð IØ�ŠÐ+¨g°lÔ.CÑCÑDÔDÐDØ�ŠÐ+×2Ò2°7¸:Ô3FÑGÔGÑHÔHÐHàð KØ�ŠÐ+×2Ò2µ4¸À¼Ñ3HÔ3HÑIÔIÑJÔJÐJàð EØ#ˆØ˜7Ô#ð 	ð 	ˆCØ�dŠ{ˆ{Ø˜#˜dœ)Ñ#��à˜#‘��Ø�Š�V˜d‘]Ñ#Ô#Ð#à'×.Ò.¨r¯wªwØ;Ð;¨'°'Ô*:Ð;Ñ;Ô;ñ0
ô 0
ñ ô ˆð 	�Š�VÑÔÐàCÐC°'¸'Ô2BÐCÑCÔCˆå�q‘”ð 	Eð 	EˆAØ/0ÐLÐ+Ð+Ð6LˆFØ�LŠL˜ "§'¢'Ð*BÐ*BÐ*BÐ*B¸6Ð*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 )zÙGet 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àð ð ˆåð 	#�­3¨s©8¬8ÐEÐEÒEÐEµ~ÒEÐEÐEÐEÐEØ ˆNØØð 	#Ø  3Ñ&ˆCØ"ˆNð ð 	˜CŸKšK™MœMð 	Øˆ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ð ð 
ð 
ˆÝð 	#�­3¨s©8¬8ÐEÐEÒEÐEµ~ÒEÐEÐEÐEÐEØ ˆNØØð 	#Ø  3Ñ&ˆCØ"ˆNà'ÐQ¨C¯KªK©M¬MÐQ�C�C½}È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-   € ð ð ð Ø¨3¨v¬;½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ÐÐ.ØÐÝ‰WŒW€Fð ˜lÔ+€Oà�wÔð 2+ñ 2+ˆØ˜”Kˆ	å-×1Ò1°)¸\ÑJÔJÑˆ
�Hàð -	+ð   1Ò$Ð$Ø  AÑ%Ð Øà"˜
 ?Ñ3Ô3ˆIØÕ/Ò/Ð/Ø—’˜Ð0DÐEÑFÔFÐFØ8AÀ8Ð!5��à Õ$8¸1Ñ$<Ò<Ð<ð (¨1Ñ,Ð'Ð'ð ! AÑ%Ð Ð ð ¥
Ð*Ð*Ø.��G‘Ø'¨3Ò.Ð.Ø"6�C˜‘Køð ˜eÒ#Ð#Ø#ð IØ$¨Ñ)Ð$Ð$à+ðIà'Õ+?À!Ñ+CÒCÐCà+¨qÑ0Ð+Ð+Øð IØ<B¿JºJ¹L¼LÑ9�OÐ%9øð ˜cÒ!Ð!Ø—’‘”�Ø=>Ð>Ð Ð#:Ø18¸Ô1FÐF� # g¡,Ø'*Ð$ùðð Ø˜wÔ'ðñ ô €GˆGÑõ �GÑÔÐàð *Ý�g DÐ)Ñ)Ô)Ð)Ð)Ð)ð*ð *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   € Ø�Sˆz�#˜c 3™-œ-¨!Ñ+Ô,Ð,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ˆ  € ð ˆF„O×ÒÑÔÐØ�GÔ€Eð ð Øˆð-ð -ð -ð �q”€Jà
ˆ.˜ Ô.°
¸7Ô0CÑ
DÔ
D€CØ
€CàÐ€I�
à!Ñ€J�	Ø& wÔ/°¸FÔ1C�	€Jàð 6ð 6ˆØ # G¤¨c°&¬k�Iˆ
à˜Ò#Ð#Ø˜!‰OˆJˆJà �. ¨ZÑ8Ô8ˆCØ�FŒO×"Ò"àØØ&Ø%Ø(ðð ñô ð ð ˆCØ˜Ñ#ˆIØˆJà *¨I�Iˆ
ˆ
ð ˆ.˜ W¨\Ô%:Ñ
;Ô
;€CØˆF„O×ÒàØØØØ ð	
ð 	
ñô ð ð ð 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¨(¤mˆvˆØ˜Ô  ¨°©Ð!7Ô8ˆØð 	$ð 	$ˆCð
 ˜FœˆIà˜EÒ!Ð!Ø*3Ð3��F‘˜ið
 ˜DÒ Ð  [°DÒ%8Ð%8Ø"��F‘ð Ð,Ð,Ð,Ø'�à˜FœˆIˆIð ð 	"ð 	"ˆCØ�6Œ{˜dÒ"Ð"Ø!��F‘øõ
 ˜�C ™JœJ¨™NÑ+Ô+ð 	/ð 	/ˆCØ˜cœ
 6Ô*ˆIØ˜c A™gœ vÔ.ˆIØ˜c A™gœ vÔ.ˆIà˜DÒ Ð  i°9Ð&DÐ&DÒ&DÐ&DÀÒ&DÐ&DÐ&DÐ&DÐ&DØ%)��c”
˜6Ñ"ð ˜TÒ!Ð!Ø Ò*Ð*Ø Ð-Ð-à%.��c”
˜6Ñ"øõ �˜U™œÑ$Ô$ð 	ð 	ˆCØ�SŒz˜&Ô! TÒ)Ð)Ý# C¨!¡G¨R°Ñ4Ô4ð ð �FØ˜V”} VÔ,°Ò4Ð4Ø04˜˜fœ fÑ-Ð-àÝ# C¨!¡G­S°©Z¬ZÑ8Ô8ð ð �FØ˜V”} VÔ,°Ò4Ð4Ø04˜˜fœ fÑ-Ð-àøð ð 	#ð 	#ˆCØ�6Œ{Ð0Ð0Ð0Ø"��F‘øð
 ˜%”jˆØð 	*ð 	*ˆCØ�6Œ{˜dÒ"Ð" {°cÒ'9Ð'9Ø!��F‘à�6Œ{˜jÐ(Ð(Ø! &œk�øñ	*ð ð *Ý�g DÐ)Ñ)Ô)Ð)Ð)Ð)ð*ð *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¨(¤mˆvˆð �c˜%”jÐ!Ð"Ø�gÔ˜u u¨v¡~Ð5Ô6ñ7à˜˜Eœ
Ð#Ð$ñ%ð 	õ
 ˜%‘j”jˆàˆ	Ý˜Ñ%Ô%ð #	%ð #	%ˆCØ˜”*ˆCØ�6Œ{Ð4Ð4Ð4ð Ð$Ø #�IØ%*¨3°©7¤^°FÔ%;�NøàÐ(Ø%*¨3¤Z°Ô%7�Nà%¨Ð5Ð5Ø),˜à%¨Ð5Ð5Ø),˜å#(¨°CÑ#8Ô#8ð ð ˜Ø)¨^Ò;Ð;Ø5C˜E 'œN¨6Ñ2Ð2õ 6JØ % g¤¨wÔ 7ñ6ô 6˜E 'œN¨6Ñ2Ð2ð !%�IøðG#	%ð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¨(¤mˆvˆØ˜Ô  ¨°©Ð!7Ô8ˆàð 	&ð 	&ˆCà�v”;Ð"8Ð8Ð8Ð8Ø%×,Ò,¨S°¬[Ñ9Ô9ñ 9Ô8Ð8õ $ C¨¤LÑ1Ô1°SÒ8Ð8ð �v”; #Ò%Ð%Ø˜�L�L”L AÑ%�L�L‘L�LØ˜”[ CÒ'Ð'Ø˜�L�L”L AÑ%�L�L‘Løð �v”; #Ò%Ð%Ø˜�L�L”L AÑ%�L�L‘Løð%	&ð( ð *Ý�g DÐ)Ñ)Ô)Ð)Ð)Ð)ð*ð *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 )zôL2. 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Œ %Ò'Ð'Ø�>Ø$+Ð+�F˜T˜Tà"�D�DàÐ#Ý08¸¸vÈÈÐPQÉ	Ð?QÔ9RÑ0SÔ0S�E˜& D 5¨1¡9Ð,Ñ-Ø$(Ð(�F˜Tøð Ð $Ð"2Ý(0°°vÀÀÈÁ	Ð7IÔ1JÑ(KÔ(KˆE�&˜D˜5 1™9Ð$Ñ%øð%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à�T�T�r�TŒ{ð !ð !ˆð ˆvŒ;˜*Ð$Ð$ð # <Ô0ˆC�‰LØˆLˆLØð 	!˜c &œk¨\Ð9Ð9ð
 # <Ô0ˆC�‰LˆLà ˆLˆLå�%‰jŒj€Gð
 Ð€J�Ø€MÝ+Ðå�W‰~Œ~ð 4ð 4ˆØ�CŒjˆð ˜”\ˆ
Ø˜Ò%Ð%Ø&ˆMà˜‰>ð 	*˜jÐ+;Ò;Ð;Ø)ÐàˆvŒ;˜#ÒÐ ¨°!©Ò!3Ð!3ØˆHà�6Œ{˜cÒ!Ð!Ø˜A‘�å'Ø�z 8¨]Ð<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Õ!5°c¸'´lÑ!CÔ!CÀsÒ!JÐ!JÝ œ W¨gÑ6Ô6ˆC�‰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Ð2 S�s˜4”yÐ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Ô/ˆ
à&€GˆLÑØ$ ZÔ0€GˆJÑå˜˜w¨°eÑ<Ô<Ð<Ý  ¨%Ñ0Ô0Ð0Ý�w Ñ&Ô&Ð&Ý˜' 5Ñ)Ô)Ð)Ý˜G UÑ+Ô+Ð+Ý˜G UÑ+Ô+Ð+Ý�G˜UÑ#Ô#Ð#à�GÔ€EØ�gŠgÐ2Ð2¨EÐ2Ñ2Ô2Ñ3Ô3€Gàð +Ø—.’. Ñ*Ô*ˆà€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ð �sŒmð	6ð
 ð6ð ð6ð 6ð 6ð 6ð 6ð 6r   