o
    ±N i1'  ã                   @   s†   d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	m
Z
 G dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ dƒZdS )é    )Úunicode_literalsN)Úunichré   )ÚBaseTransliterator)Úngram_contextÚWXc                       ó,   e Zd ZdZd‡ fdd„	Zd	dd„Z‡  ZS )
Ú
Ind2Targetz3Transliterates text from Indic to Roman/Urdu scriptFc                    sd   t t| ƒ ||||¡ ttjƒ| _t d| j	 ¡| _
d| _|dvr0td|d}|j| _d| _d S d S )Nú([^a-zA-Z%s]+)F)ÚengÚurdÚwx2utf©ÚorderÚlangT)Úsuperr	   Ú__init__ÚsetÚstringÚascii_lettersÚlettersÚreÚcompileÚesc_chÚ	non_alphaÚ	_to_indicr   r   Ú_to_utf)ÚselfÚsourceÚtargetÚdecoderÚbuild_lookupÚwxp©Ú	__class__© úS/home/ubuntu/.local/lib/python3.10/site-packages/indictrans/script_transliterate.pyr      s   ý
ýzInd2Target.__init__é   c                 C   sÈ   |}|sdS |d | j kr|dd … S |d | jvr'| jdkr%| | j¡S |S || jv r1| j| S d |¡}t dd|¡}| j	sF| 
dd	¡}t| ¡ ƒ}|  ||¡}| j	rZ|  |¡}| jrb|| j|< |S )
NÚ r   r   r   ú z ([VYZ])ú\1z aÚa)r   r   r   Ú	translateÚ	punkt_tblÚlookupÚjoinr   Úsubr   Úreplacer   ÚsplitÚpredictr   r!   ©r   ÚwordÚk_bestÚowordÚ
word_featsÚt_wordr%   r%   r&   Ú
case_trans    s,   





zInd2Target.case_trans©F©r'   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r:   Ú__classcell__r%   r%   r#   r&   r	      s    r	   c                       s4   e Zd ZdZd
‡ fdd„	Zdd„ Zddd	„Z‡  ZS )Ú
Rom2Targetz.Transliterates text from Roman to Indic scriptFc                    s:   t t| ƒ ||||¡ t d¡| _ttjd d… ƒ| _	d S )Nz	([^a-z]+)é   )
r   rC   r   r   r   r   r   r   r   r   ©r   r   r   r    r!   r#   r%   r&   r   ;   s   ýzRom2Target.__init__c                 C   s–   |  dd¡}t dd|¡}|  dd¡}|  dd¡}|  d	d
¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}|S )z"temporary fix for misfitted matrasÚaMMÚaMmz([AEIOUeiou])MMz\1MÚMMÚMÚnMÚnnÚxMÚdanz([DPK])([Mz])z\1Z\2z([rm])Mz\1nz([gw])Mz\1afz\bMÚfz\bzÚnz([bcdhjklpstvy])Mz\1aM)r1   r   r0   ©r   Útextr%   r%   r&   Úhandle_matraC   s   zRom2Target.handle_matrar'   c                    s  |}|sdS |d ˆ j vr|S |ˆ jv r7ˆ jdkrˆ j| S ˆ jdkr+ˆ  ˆ j| ¡S ‡ fdd„ˆ j| D ƒS t dd|¡}d	 |¡}t d
d|¡}t| 	¡ dd}ˆ  
||¡}ˆ jdkrˆ jdkrmˆ  |¡}ˆ  |¡}n‡ fdd„|D ƒ}‡ fdd„|D ƒ}ˆ jr‡|ˆ j|< |S )Nr(   r   r   Úviterbic                    ó   g | ]}ˆ   |¡‘qS r%   ©Ú
wx_process©Ú.0Úw©r   r%   r&   Ú
<listcomp>^   ó    z)Rom2Target.case_trans.<locals>.<listcomp>z([a-z])\1\1+z\1\1r)   z([bcdgjptsk]) hz\1hé   ©rO   c                    rT   r%   )rR   rW   rZ   r%   r&   r[   i   r\   c                    rT   r%   rU   rW   rZ   r%   r&   r[   j   r\   )r   r.   r   ÚdecoderV   r   r0   r/   r   r2   r3   rR   r!   r4   r%   rZ   r&   r:   R   s2   








zRom2Target.case_transr;   r<   )r>   r?   r@   rA   r   rR   r:   rB   r%   r%   r#   r&   rC   9   s
    rC   c                       r   )
Ú
Urd2Targetz5Transliterate text from Persio-Arabic to Indic scriptFc              	      st   t t| ƒ ||||¡ t d¡| _tttt	t
tdƒtdƒƒƒt	t
tdƒtdƒƒƒ t	t
tdƒtdƒƒƒ ƒƒ| _d S )Nu   ([^Ø¡-ØºÙ-ÙŠÙ´-Û“Ù‹Ù‘Ù°]+)u   Ø¡u   Ø»u   Ùu   Ù‹u   Ù´u   Û”)r   r`   r   r   r   r   r   Úmapr   ÚlistÚrangeÚordr   rE   r#   r%   r&   r   r   s   ýÿÿþÿzUrd2Target.__init__r'   c                    sî   |}|sdS |d ˆ j vr| ˆ j¡S |ˆ jv r;ˆ jdkr"ˆ j| S ˆ jdkr/ˆ  ˆ j| ¡S ‡ fdd„ˆ j| D ƒS d |¡}| dd	¡}t	| 
¡ d
d}ˆ  ||¡}ˆ jdkrmˆ jdkrdˆ  |¡}n	‡ fdd„|D ƒ}ˆ jru|ˆ j|< |S )Nr(   r   r   rS   c                    rT   r%   rU   rW   rZ   r%   r&   r[   Š   r\   z)Urd2Target.case_trans.<locals>.<listcomp>r)   u    Ú¾u   Ú¾r]   r^   c                    rT   r%   rU   rW   rZ   r%   r&   r[   “   r\   )r   r,   r-   r.   r   r_   rV   r/   r1   r   r2   r3   r!   r4   r%   rZ   r&   r:   ~   s,   







zUrd2Target.case_transr;   r<   r=   r%   r%   r#   r&   r`   p   s    r`   c                   @   s`   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )Ú	Ind2IndRBz)Transliterates text bewteen Indic scriptsc                 C   sX   || _ || _td| j dj| _td| jdj| _d| _t 	d¡| _
t 	d| j ¡| _d S )NÚutf2wxr   r   ú z([a-zA-Z]+)r
   )r   r   r   rf   Úget_wxr   Úget_utfr   r   r   Ú
mask_romanr   )r   r   r   r%   r%   r&   r   ›   s   zInd2IndRB.__init__c                 C   s8   | j dkr|S | dd¡}| dd¡}t dd|¡}|S )NÚbenÚYr(   ÚvÚbz([oe])([^V])z\1V\2)r   r1   r   r0   rP   r%   r%   r&   Ú_to_ben¤   s   
zInd2IndRB._to_benc                 C   s:   | j dkr|S | jdkr|S | dd¡}t dd|¡}|S )NÚgujÚoriÚVr(   z	([^lOE])Yr*   ©r   r   r1   r   r0   rP   r%   r%   r&   Ú_to_guj¬   s   

zInd2IndRB._to_gujc                 C   sD   | j dkr|S | jdv r|S | dd¡}| jdkr t dd|¡}|S )NÚkan)ÚmalÚtamÚzrI   Úhinú	([^lrY])Yr*   rs   rP   r%   r%   r&   Ú_to_kanµ   s   


zInd2IndRB._to_kanc                 C   sb   | j dkr|S | jdv r|S | dd¡}| jdkr|S | dd¡}| jdv r(|S t d	d
|¡}|S )Nrv   )rw   ÚtelÚZr(   ru   rx   rI   ©rq   Úpanrk   rz   r*   rs   rP   r%   r%   r&   Ú_to_mal¿   s   



zInd2IndRB._to_malc                 C   sF   | j dkr|S | dd¡}| dd¡}| jdv r|S t dd|¡}|S )	Nrq   rr   r(   rm   rn   )ru   rk   r   z([^l])Yr*   ©r   r1   r   r   r0   rP   r%   r%   r&   Ú_to_oriÍ   s   

zInd2IndRB._to_oric                 C   s¢   | j dkr|S | dd¡}| dd¡}| dd¡}t dd	|¡}t d
d|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}| jdv rOt dd|¡}|S )Nrw   r}   r(   ÚJÚjÚqÚruz[CS]Úcz[zM]rN   z[bBP]Úpz[dDT]Útz[gGK]Úkz[xXW]rY   )rp   ry   z
([^nrlY])Yr*   )r   r1   r   r0   r   rP   r%   r%   r&   Ú_to_tam×   s   

zInd2IndRB._to_tamc                 C   sP   | j dks|S | dd¡}| jdv r|S t dd|¡}| jdkr&| dd	¡}|S )
Nr|   r}   r(   r~   z([^lr])Yr*   ry   rx   rI   r   rP   r%   r%   r&   Ú_to_telç   s   


zInd2IndRB._to_telc                 C   s„   | j dkr| dd¡}n| j dkr| dd¡}| dd¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|S )	Nr   u   à©±r(   rk   u   à§°u   à¦°u   à§±u   à¦¬)	r   r1   ro   rt   r{   r€   r‚   r‹   rŒ   rP   r%   r%   r&   Úapply_rulesò   s   








zInd2IndRB.apply_rulesc                 C   s¤   g }| j  d| j |¡}| d¡}|D ]9}| j |¡}tƒ }|D ]&}|s%q |d | jkr5||dd… 7 }q |  |¡}|  |¡}||  |¡7 }q | 	|¡ qd 
|¡S )z-Rule based transliteration b/w Indic scripts.z%s\1Ú
r   r   N)rj   r0   r   r2   r   Ústrrh   r   ri   Úappendr/   )r   rQ   r   ÚsentÚt_sentr5   Úwxr%   r%   r&   Úrtrans  s"   



zInd2IndRB.rtransN)r>   r?   r@   rA   r   ro   rt   r{   r€   r‚   r‹   rŒ   r   r”   r%   r%   r%   r&   re   ™   s    		

re   )Ú
__future__r   r   r   Úsixr   Úbaser   Ú_utilsr   r   r	   rC   r`   re   r%   r%   r%   r&   Ú<module>   s   )7)