o
    Ni                    @   s>  d dl mZ d dl mZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZ d dl mZ  ddl!Z!ddl"Z"dd
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 d! Z.d"d# Z/d$d% Z0d&d' Z1d(d) Z2d*d+ Z3d,d- Z4d.d/ Z5d0d1 Z6d2d3 Z7d4d5 Z8d6d7 Z9d8d9 Z:d:d; Z;d<d= Z<d>d? Z=d@dA Z>dBdC Z?ddEdFZ@dGdH ZAddIdJZBddKdLZCddMdNZDddOdPZEdQdR ZFdSdT ZGdUdV ZHdWdX ZIdYdZ ZJd[d\ ZKd]d^ ZLdd_d`ZMdadb ZNdcdd ZOdedf ZPdgdh ZQdidj ZRdkdl ZSdmdn ZTdodp ZUdqdr ZVdsdt ZWdudv ZXdwdx ZYdydz ZZd{d| Z[d}d~ Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Zxdd Z{dd Z|dd Z}ddÄ Z~ddń ZddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd 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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*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZÐdNdO ZĐdPdQ ZŐdRdS ZƐdTdU ZǐdVdW ZȐdXdY ZɐdZd[ Zʐd\d] Zːd^d_ Z̐d`da Z͐dbdc Zΐddde Zϐdfdg ZАdhdi Zѐdjdk ZҐdldm ZӐdndo ZԐdpdq ZՐdrds Z֐dtdu Zאdvdw Zؐdxdy Zِdz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d Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdd Zdd Zdd Zd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d Zdd Zdd ZdddZddÐdĄZdŐdƄ ZdǐdȄ Z d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ݐdބ Zdߐd Zd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d Zdd Zdd Zd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d Z$dddZ%dddZ&d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( Z0d)d* Z1d+d, Z2d-d. Z3d/d0 Z4d1d2 Z5d3d4 Z6d5d6 Z7d7d8 Z8d9d: Z9d;d< Z:d=d> Z;d?d@ Z<dAdB Z=dCdD Z>dEdF Z?dGdH Z@ddIdJZAdKdL ZBdMdN ZCdOdP ZDdQdR ZEdSdT ZFddVdWZGdXdY ZHdZd[ ZId\d] ZJd^d_ ZKd`da ZLdbdc ZMddde ZNdfdg ZOdhdi ZPddkdlZQddmdnZRdodp ZSdqdr ZTdsdt ZUdudv ZVdwdx ZWdydz ZXd{d| ZYd}d~ ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd ZhdS (     )
GeneralMap)	ScriptMap    )Avestan)AhomTamil	MalayalamGurmukhiOriya
SaurashtraSinhalaUrdu
DevanagariChakmaLimbuTakriTamilExtendedKannada)	TibetanThaiPhagsPaZanabazarSquareBurmese
KhamtiShanKhmerBalineseJavanese
ConvertFixN c                 C   s0   |  dd dd dd dd dd} | S )Nu   r   u   ׌u   ʻʻu   ׍u   ˂replace)Strnglangage r$   L/home/ubuntu/.local/lib/python3.10/site-packages/aksharamukha/PostProcess.pydefault   s   r&   c                 C   s   | dd}d|v rt||dd}d|v rt||dd}d|v r't||dd}|tjvr7| d	d
 dd}n
| d	d dd}| dd}|S )Nu   ͏r   romanNumeralsTreverseindicNumeralsFromanFullStopu   │   ।u   ┃   ॥|||u   ●.)r!   RetainIndicNumeralsRetainDandasIndicGMTransliteration)srctgtr"   nativize
preoptionspostoptionsr$   r$   r%   defaultPost   s   
r:   c                 C      |  dd} |  dd} | S )Nu   𑉁u   𑈵𑈦𑈭u   𑉀u   𑈂r    r"   r$   r$   r%   	KhojkiRRI9      r=   c                 C      |  dd} | S )Nu   𑈈𑈶u   𑈿r    r<   r$   r$   r%   KhojkiQa?      r@   c                 C   s8   d d}d d}t||D ]
\}}| ||} q| S )Nu   𑝁 𑝂 𑝃 𑝄 𑝅 𑝆 u   𑜄 𑜌 𑜓 𑜔 𑜃 𑜎)splitzipr!   )r"   palinonPalipnpr$   r$   r%   removePaliAhomD   s
   

rI   c                 C   r?   )Nu   ඁu   ංr    r<   r$   r$   r%   SinhalaChandrbinduAnusvaraM   rA   rJ   c                 C   s$   dd l }|d| } | dd} | S )Nr   NFDu   ˚u   ˙)unicodedata	normalizer!   r"   rL   r$   r$   r%   LoCMarc8R   s   rO   c                 C   r?   )Nu   m͏nr    r<   r$   r$   r%   AnusvaraAsNX      rQ   c                 C   s   ddl m} || d} | S )Nr   )
PreProcessT)r   rS   RemoveSchwaHindi)r"   PrePr$   r$   r%   ShowSchwaHindi]      rV   c                 C   r?   )Nu   ಁu   ಀr    r<   r$   r$   r%   KannadaSpacingCandrabindub   rA   rX   c                 C   6   dd ttjd d }td| d d| } | S )N(r.   r   )u	   ರ್(?=u	   ರ‍್joinr3   CrunchSymbols
Consonantsresubr"   ListCr$   r$   r%   KannadaNotRephag      rd   c                 C   rY   )NrZ   r.   r   r[   u   (?<!್)ನ್(?!u   ೝr\   rb   r$   r$   r%   KannadaNakaraPollun   re   rf   c                 C   r?   )Nu   ఼r   r    r<   r$   r$   r%   TeluguRemoveNuktau   rA   rg   c                 C   r?   )Nu   ॒​r   r    r<   r$   r$   r%   TeluguRemoveAeAoz   rA   rh   c                 C   rY   )NrZ   r.   Telugur[   u   (?<!్)న్(?!u   ౝr\   rb   r$   r$   r%   TeluguNakaraPollu   re   rj   c                 C      | S Nr$   r<   r$   r$   r%   syriacVowelsBelow      rm   c                 C   rk   rl   r$   r<   r$   r$   r%   syriacWesternOToU   rn   ro   c                 C   rk   rl   r$   r<   r$   r$   r%   olddogra   rn   rp   c                 C   s2   g d}|D ]
\}}|  ||} q|  dd} | S )N))bu   ḃ)rG   u   ṗ)ku   k̇)   ḵrr   )vrq   )frG   )   ꞉   ̇u   š̪u   śu   š̮   š)rz   u   s̀)   ā   å)eu   ȩ)   ōu   ŵ)   ūu   ẇ)   ̽   °)   ĕu   ḝ   °̇   ̇°r    r"   replacementsxyr$   r$   r%   ISO259Target   s
   r   c                 C   sj   g d}|D ]
\}}|  ||} q|  dd} d| v r-|  dd dd d	d
 dd} |  dd} | S )N))rt      ḇ)ru      p̄)d   ḏ)u   ḏ꞉r   )g   ḡ)u   ḡ꞉r   )t   ṯ)u   ṯ꞉r   rx   ry   )r~      ô)or~   )r      û)r   r   u   ĕ꞉u   ꞉ĕ   ׎r   r   r   r   r   r   r   r   r   r    r   r$   r$   r%   HebrewSBLTarget   s   $r   c                 C   sL   | d7 } |  dd dd dd} |  dd d	d d
d dd} | S )Nr   r   u   d꞉r   u   t꞉r   u   g꞉r   r   r   r   r    r<   r$   r$   r%   removetddash   s   $r   c                 C   rk   rl   r$   r<   r$   r$   r%   ISO259Source   rn   r   c                 C   rk   rl   r$   r<   r$   r$   r%   ISO233Source   rn   r   c                 C   rk   rl   r$   r<   r$   r$   r%   HebrewSBLSource   rn   r   c                 C   rk   rl   r$   r<   r$   r$   r%   PersianDMGSBLSource   rn   r   c                 C   &   g d}|D ]
\}}|  ||} q| S )N)j   ǧ)r   r   )   ḧu   ẗ)   ḫu   ẖ)u   a̮u   ỳ)   ˀu   ˈ)u   aⁿ   á)u   iⁿ   í)u   uⁿ   ú)   ā̂u   ʾâr   r   r    r   r$   r$   r%   ISO233Target      r   c                 C   r?   )Nar   r    r<   r$   r$   r%   
inherentAO   rA   r   c                 C   r?   )Nu   র   ৰr    r<   r$   r$   r%   BengaliOldRA   rA   r   c                 C   r   )N)	)r   u   ẕ)   ḍu   ż)r   u   s̱r   )r      ʼ)   ʔr   )u   ȳye)r   r{   r   r    r   r$   r$   r%   PersianDMGTarget      r   semiticc                 C   s   dd tj d }t|d d| } |dkr| dd} |dkr)td	d
| } ntd	d| } tdd| } tdd| } |dkrJtdd| } ntdd| } |dkrZt| d	} |dkretdd| } |dkrptdd| } tdd| } | S )NrZ   r.   r[      (ʾ)   \1āindic   ʾār      ʾr      â
   (a̮|ā̮)r{   	   ˀ?ā̮̂   ʼā   [ˀʔ]r   u   [ˀ]r   u   ʼʾr      (ā)([iau])(ⁿ)\2\3r]   r3   SemiticConsonantsr`   ra   r!   LatnInitialVowelsr"   targetconsr$   r$   r%   arabizeLatn   s(   
r   c                 C   s,   t dd| } t dd| } | dd} | S )Nu   (?<!্)যz@#$   য়u   যr`   ra   r!   r<   r$   r$   r%   BengaliSwitchYaYYa"  s   r   c                 C   s*   dd tj d }t|d d| } | S )NrZ   r.   r[   r   r   )r]   r3   r   r`   ra   r   r$   r$   r%   AlephMaterLectionis*  s   r   c                 C   s   dd tj d }t|d d| } |dkr| dd} td	d
| } tdd	| } tdd| } tdd| } |dkrDtdd| } |dkrLt| } tdd| } | S )NrZ   r.   r[   r   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   r   r   r   r$   r$   r%   urduizeLatn3  s   r   c                 C   sh   dd tj d }|dkr*tdd| } tdd| } td	d
| } tdd| } |dkr2t| } | S )NrZ   r.   r[   r   r   u   ʾar   r      êu   ʾeu   ē̂u   ʾē)r]   r3   r   r`   ra   r   r   r$   r$   r%   syricizeLatnO  s   r   c                 C   s   |dkr	t | d} | S )Nr   r   )r   )r"   r   r$   r$   r%   hebraizeLatn_  s   
r   c                 C   (   |  dd dd dd dd} | S )	Nrt   r   u   ġr   r   rs   ru   r   r    r<   r$   r$   r%   syriacRomang  s   $r   c                 C      |  dd dd} | S )Nr   r      ʿ   ʽr    r<   r$   r$   r%   alephAyinLatnAlternatem     r   c                 C   r   )Nr   r   r   u   ʕr    r<   r$   r$   r%   alephAyinLatnAlternate2s  r   r   c                 C   s    |  dd dd dd} | S )N   ڨ   ج   ڤ   ف   پr    r<   r$   r$   r%   ArabRemoveAdditionsy     r   c                 C       |  dd dd dd} | S )Nr      غr   r   r      بr    r<   r$   r$   r%   arabicRemoveAdditionsPhonetic     r   c                 C   sH   |  dd dd dd dd dd d	d
 dd dd} | S )N   ṭr      ḥhr   zr      ẓwrt   r   r      ṣsr    r<   r$   r$   r%   removeSemiticLetters  s   *r   c                 C   "   g d}|D ]}|  |d} q| S )N)   ַ   ָ   ִu   ִי   ֻu   ׂu   ׁ   ֶ   ֵ   ֹ   וֹu   ֱu   ֲu   ֳu   ּ   ְ   ׇr   r    )r"   nikkudsnikkudr$   r$   r%   removeNikkud  s   r   c                 C   sV   d d}d d}t||D ]\}}| ||| } q| dd} tdd| } | S )Nu1   â ā̂ î ī̂ û ū̂ ê ē̂ âŷ ô ō̂ âŵrB   u    a ā i ī u ū e ē aŷ o ō aŵ   ̂r   r   )rC   rD   r!   r`   ra   )r"   
initLetterinitVow
nonInitVowr   r   r$   r$   r%   r     s   

r   c                 C   r?   )Nu   ̰r   r    r<   r$   r$   r%   removeMajliyana  rA   r   c                 C   r?   )Nu   ݁r   r    r<   r$   r$   r%   removeRukkaka  rA   r   c                 C   r?   )Nu   ݂r   r    r<   r$   r$   r%   removeQussaya  rA   r  c                 C   s    t dd| } t dd| } | S )Nu   [ܼܸܹܲܵܿ]r   u   [ّܰܶܺܽܳ]r`   ra   r<   r$   r$   r%   removeVowelsSyriac  s   r  c                 C   r   )N)   ْ   َ   ِ   ُr   r    )r"   	diacrtics	diacriticr$   r$   r%   removeDiacriticsArabic     r
  c                 C      t dd| } | S )Nu
   (ْ)(\W|$)\2r  r<   r$   r$   r%   removeSukunEnd     r  c                 C   r   )Nr   r   u   گr   r    r<   r$   r$   r%   persianPaGaFaJa  r   r  c                 C   rk   rl   r$   r<   r$   r$   r%   removeDiacriticsPersian  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   removeDiacriticsSyriac  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   useKtivMale  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   PhoneticMapping  rn   r  c                 C   r?   )Nr   r   r    r<   r$   r$   r%   ArabicGimelGaGha  rA   r  c                 C   r?   )Nr   r   r    r<   r$   r$   r%   ArabicGimelPaBa  rA   r  c           	      C   s   |  dd} tjdd tjdd  tjdd  }d|}td	| d
d| } d}g d}t||D ]\}}|  || |} q6dd}dd}|  dd} t||D ]\}}|  d| |} qX|  dd} |  dd} |  dd} | S )N   ʻr                   !   u   (်)(္)([])r   u   ္)   ျ   ြu   ွu   ှu9   အော် အော အိ အီ အု အူ အေrB   u   ဪ ဩ ဣ ဤ ဥ ဦ ဧr      ’u   ုဣu   ိုu   ’အu   အu   ့်u   ့်)r!   r   ConsonantMapr]   r`   ra   rD   rC   )	r"   yrvhyrvhPatvirsubyrvhsubr   r   vowDepvowIndepr$   r$   r%   BurmeseRomanLoCSource  s"   *


r)  c                 C   s(   dd l }|dd| } |dd| } | S )Nr   z(\p{L}\p{M}*) (\p{L})\1\2)regexra   )r"   r+  r$   r$   r%   removeSegmentSpacesBurmese  s   r,  c                 C   r?   N   ᩮᩣ   ᩰr    r<   r$   r$   r%   UseAlternateo1$  rA   r0  c                 C   r?   )Nr/  r.  r    r<   r$   r$   r%   UseAlternateo2*  rA   r1  c                 C   rk   rl   r$   r<   r$   r$   r%   ThamLoCRomanLoCTarget0     r2  c                 C   r;   )Nu   ᩿u   ᩠u	   ᩱᨿ᩺u	   ᩱ᩠ᨿr    r<   r$   r$   r%   ThamLoCRomanLoCSource3  s   r4  c                 C   s>   dd l }|d| } tdd| } | dd} | dd} | S )	Nr   NFCu@   (ʹ)(′?)(?=[aāiīuūẏȳeoăáâààáéíóúàèìòùă])r  u   oḥu   oaḥz  rB   )rL   rM   r`   ra   r!   rN   r$   r$   r%   KhmerLoCRomanLoCTarget=  s   r6  c                 C   s   d ttjd}d ttjd}d ttjd}tjd }t	dd| } t	d| d d | d | d	 d
| } t	dd| } t	dd| } | 
|d} | S )Nr.   r   r   u   (់)(.)\2\1rZ   r[   z)(u   )?([៎៏])z\1\4\2\3u.   ([ងញមបយរវ])(៉)([ិឹីឺ])u   \1ុ\3u"   ([សហអ])(៊)([ិឹីឺ])r   )r]   r3   r^   r_   
VowelSignsCombiningSignsr   	ViramaMapr`   ra   r!   )r"   rc   ListVListAvirr$   r$   r%   KhmerLoCRomanLoCSourceM  s   
*r>  c                 C   s    t dd| } t dd| } | S )Nu   (ʻ)([̢̐])r7  u   (ō)([̢̐]?)(ʻ)r*  r  r<   r$   r$   r%   ShanLoCRomanLoCTargetg  s   r?  c                 C   s   t jdd t jdd  }d}g d}t||D ]\}}| || |} q| dd} | dd	} | d
d	} | dd} d}g d}g d}t||D ] \}	}
	 td| d d |	 d d | d d|
 d | } qM| S )Nr  r  r  r  u   ်)r  r   u   ႂr   r!  r   r  u   ͮu   ႂ်un   [ၵၶၷꧠငၸꧡꩡꧢၺꩦꩧꩨꩩꧣတထၻꩪၼပၽၿꧤမယရလဝသႁꩮၹၾႀဢ])u   ႃu   ႄu   ေ)u   ၢu   ႅu   ဵrZ   r[   \1\3)r   r"  rD   r!   r`   ra   )r"   yrvr=  yrvsubr   r   r   openclosedr   cr$   r$   r%   ShanLoCRomanLoCSourcem  s    8rG  c                 C   sT   |  dd} |  dd} |  dd} ddd	d
d}| D ]
\}}|  ||} q| S )Nu   ˳u   ʹu   auʻu   oʻr   u   ʺu   ၏u   ၌u   ၍u   ၎)ze*zn*zr*zl*)r!   items)r"   
chars_misclatburr$   r$   r%   BurmeseRomanLoCTarget  s   rL  c                 C   sr   |  dd} ddttjtdd d }ddtj d }t|d | d d	| } td
| d d	| } | S )Nr   r   rZ   r.   Tkeyr)   r[   u   (?![꞉ʰ])(?!z\1au   (꞉)(?!ʰ)(?!)	r!   r]   sortedr3   r   lenSemiticVowelsr`   ra   )r"   consonantsAll	vowelsAllr$   r$   r%   insertARomanSemitic  s   rT  c                 C   s   d}t dd| } d|v r+ddtttjdtdd	 d
 }t || d d| } t dd| } t dd| } g d}|D ]
\}}| ||} q?| dd} | S )Nr   u	   ō̂̄̂u   ō̂ArabrZ   r.   RomanSemiticTrM  r[   r@  u   \1꞉u   âQr   aQQa))u   ʾQāu   ā̂Q)u   ʾQiu   îQ)u   ʾQīu   ī̂Q)u   ʾQuu   ûQ)u   ʾQūu   ū̂Q)u   ʾQeu   êQ)u   ʾQēu   ē̂Q)u   ʾQou   ôQ)u   ʾQōu   ō̂Q)r   sQ)r   u   ʾQ)r   tQ)r   hQ)r   dQ)u   p̣pQ)   žu   šQ)r^  zQ)r   u   jʰQ)r   u   dʰQ)r   u   tʰQ)r   vQu   ̽̽)	r`   ra   r]   rO  r3   r^   r_   rP  r!   )r"   Targetr=  rR  SemiticIndicr   ir$   r$   r%   FixSemiticRoman  s   &rd  c                 C   r?   )Nu   أu   اr    r<   r$   r$   r%   ArabAtoAleph  s   re  c                 C   rk   rl   r$   r<   r$   r$   r%   estrangelasyriac  rn   rf  c                 C   rk   rl   r$   r<   r$   r$   r%   easternsyriac  rn   rg  c                 C   rk   rl   r$   r<   r$   r$   r%   westernsyriac  rn   rh  c                 C   rk   rl   r$   r<   r$   r$   r%   kawitan  rn   ri  c                 C   rk   rl   r$   r<   r$   r$   r%   	sundapura  rn   rj  c                 C   r   )N)
)zR^iRRi)zR^IRRiir   r   rm  )Aaa)Iii)Uuu)Chchh)kShr   )Mz.mr    )r"   pairsReadabler   r   r$   r$   r%   readableItrans  r   ry  c                 C   s   t | } tdd| } | S )Nu   (m̐|ṃ|ṁ)   ̃)AnusvaratoNasalASTISOr`   ra   r<   r$   r$   r%   
NasalTilde  s   r|  c                 C   rk   rl   r$   r<   r$   r$   r%   siddhamBija  rn   r}  c                 C   rk   rl   r$   r<   r$   r$   r%   verticalKana  rn   r~  c                 C   rk   rl   r$   r<   r$   r$   r%   verticalSiddham  rn   r  c                 C   rk   rl   r$   txtr$   r$   r%   vtobJapanese  rn   r  c                 C   r?   )Nu   𐼽u   𐽀r    r<   r$   r$   r%   SogdReshAyin   rA   r  c                 C   r?   )Nu   𐼓u   𐼘r    r<   r$   r$   r%   SogoReshAyinDaleth&  rA   r  c                 C      |  ddS )Nr   r   r    r<   r$   r$   r%   arabPaFa,     r  c                 C   r  )Nu   چu   سr    r<   r$   r$   r%   	arabChaSa2  r  r  c                 C   r  )Nu   עׄu   גr    r<   r$   r$   r%   	gainGimel7     r  c                 C   r  )Nu   תu   ת̈r    r<   r$   r$   r%   	tavTwodot;  r  r  c                 C   r  )Nu   תׄu   ת֒r    r<   r$   r$   r%   tavThreedot?  r  r  c                 C   r  )N   קu   ק̈r    r<   r$   r$   r%   r  C  r  c                 C   sX   |  dd dd} |  dd} |  dd} |  d	d
} tdd| } tdd| } | S )Nsisuxizizuxiyiixifyfuxnyenixez(?<![sc])huhoxuz(?<![sc])hyehixer!   r`   ra   r  r$   r$   r%   	tokushuonG  s   r  c           	      C   s  ddl m} dd l}ddlm}m} ||| d}|dd}|| dd	}||dd
}t	
dd|}t	
dd|}|dddddddddddd}|dddddd d!d"d#d$}|d%d&d'd(d)d*}|d+d,}|d-d.}d/|v r|d0d1}|d2d3d4d5d6d5d7d3}|d8d9d:d;d<d=d>d?d@dA}|dBdCdDdE}|dFdGdHdI}|dJdKdLdMdNdO}|dPdQ}|dRdSdTdU}|dVdW}|st	
dXdY|}t	
dZd[|}t	
d\d]|}t	
d^d_|}t|}n(|d`dadbddcd}|dddedPdfdgdh}|didj}|dVdk}|dlkr||}t	
dmdn|}t	
dodp|}|s\t|}||}t	
dqdn|}t	
drdp|}|svt|}||}|dsdt}|dukr|dvdwdxdydzd{d|d}d~d}|dddddddddd}||}t	
ddn|}t	
dodp|}|st|}||}t	
dqdn|}t	
drdp|}|st|}||}||d	d}|S )Nr   )
kana2romanr   )PostOptionsConvertri   u   ˆr   ISOInter	RomanKanaz([aiueo])\1Hz\1\1h\1z
([aiueo])Hz\1h\1GknkGgngJcncJjnjmbnbmprH   nnnnnrF  chchchcchshshsshmmnm,u   、u   u   。u   u   。。JJnnnyJnyr  rt   rq   trtordrdorDrTrtyatiyadyadiyasyasuyashyashuyachyachuyadidexidudoxutitexitutoxumyemixepyepixebyebixer   ixevyevuxixevyvuxysheshixeu	   (r)(r゚)u   rur゚u   (r゚)(r゚)u   rr゚u   (k゚)(k゚)u   kk゚u   ([rk])(゚)([aieou])z\1\3\2u   r゚ru   k゚k゚u   k゚r  rc  r}   wuuwouxoshieHiraganaz%(k|g|ch|j|p|b|m|y|r|w|sh|s|h|z|f)(\1)z\1uz	(d|t)(\1)z\1oz!(k|g|ch|j|p|b|m|y|r|sh|s|h|z|f|v)z(d|t)u   う゛u   ゔKatakanaro  za-rq  zi-eeze-oozo-rs  zu-u   a゚au   a゚-u   i゚iu   i゚-u   e゚eu   e゚-u   o゚ou   o゚-u   u゚uu   u゚-z%(k|g|ch|j|p|b|m|y|r|sh|s|h|z|f|v)(\1))aksharamukha.ScriptMap.NonIndicr  pykakasir   r  r  convertScriptr!   lowerr`   ra   r  to_hiraganato_katakana)	r5   r6   r  r7   r9   r  r  r  r  r$   r$   r%   JapanesePostProcessS  s~   4,$,





,,


r  c                 C   r  )Nz\Bar   r  r<   r$   r$   r%   urduRemoveInherent  r  r  c                 C   sD   dd g d d }t|d d d d d| } | dd	} | S )
NrZ   r.   )r   r   r   r   r   r   r   r   r[      וu   (?!ּ)u   \1בu   בֺu   בֹ)r]   r`   ra   r!   )r"   shortVowelsr$   r$   r%   HebrewVetVav  s   r  c                 C   rk   rl   r$   r<   r$   r$   r%   devanagariuttara  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   devanagarinepali  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   devanagaribalbodh  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   devanagarijain  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   HiraganaaunotDipthong  rn   r  c                 C   rk   rl   r$   r<   r$   r$   r%   IASTISONasalTilde  rn   r  c                 C      |  dd dd} | S )N   כּr     ךּr    r<   r$   r$   r%   HeberewQoph  r   r  c                 C   r  )Nu	   (?<!ו)ֹr   r  r<   r$   r$   r%   HebewShortO  r  r  c                 C      |  dd} |  dd} | S )Nr   u   אr   r    r<   r$   r$   r%   HebrewKatevMalei  r>   r  c                 C   s&  g d}g d}d d}ddttjd| g d |  d	 }g d
}ddg d
dg  d	 }|D ]}td| d	 d d | d	 d| } q7t||D ]\}}	td| d	 | d d d |	d d | } qR|D ]
}| |d |} qp| dd} | dd} | dd} ddg}
| S )N)u   ךu   םu   ןu   ףu   ץu   ףּr  )u   כu   מu   נu   פu   צu   פּr  u   ב,ח,ע,צ,ש,תr  rZ   r.   Hebrew)   ׳u   יr  r[   )r   r   r   r   r   r   r   r   r  u   (׳?)(?!u   \1\2הʾu   הr   r   r   u   ְ׳הʾu   ְ׳u   וֹהʾr   r   u   וּ)	rC   r]   r3   r^   r_   r`   ra   rD   r!   )r"   finals	finalCons	otherConsrR  r  shortVowelsRr   ru   rF  uVowelsr$   r$   r%   HebrewnonFinalShort  s"   
,(0r
  c                 C   
   t | dS )Nr   )NasalToAnusvarar<   r$   r$   r%   DevanagariAnusvara   s   
r  c                 C   r?   )Nu   ॐu   ꣽr    r<   r$   r$   r%   jainomDevangari$  rA   r  c                 C   r?   )Nu   ਁu   ਂr    r<   r$   r$   r%   GurmukhiCandrabindu)  rA   r  c                 C   r?   )N   ṃ   ṁr    r<   r$   r$   r%   mDotAboveToBelow/  rA   r  c                 C   r?   )Nr  r  r    r<   r$   r$   r%   mDotBelowToAbove5  rA   r  c                 C   r   )Nu   ēr}   r~   r   r    r<   r$   r$   r%   noLongEO<  r   r  c                 C   r  )Nu8   ([ഖഗഘഛഝഠഡഢഥദധഫബഭ])([ുൂ])   \1‍\2r  r<   r$   r$   r%   TamilStyleUUCoreA  r  r  c                 C   s.   t dd| } t dd| } t dd| } | S )Nu   ([ജശഷസഹ])([ുൂ])r  u   (ശ്ര)([ുൂ])u   (ശ്‍ര)([ുൂ])r  r<   r$   r$   r%   TamilStyleUUOtherF  s   r  c                 C   s2  d ttjd}d ttjd}tdd| } tdd| } tdd| } tdd| } tdd| } | d	d
} | dd} | dd} | dd} | dd} | dd} | dd} | dd} | dd} td| d d d d| } tdd| } tdd | } td!d| } | d"d#} | S )$Nr.   r   u   (ஆவ|ாவ)லu   \1ளuH   (்ரவா|்ரவ|ர|பவ|வி|ரா|ஷ்க|த⁴வ)லu   (யா|யாம|கோம)லu   (மௌ)லu   ([\s^])(ந)லu   கலத்ரu   களத்ரu   ஶீதலu   ஶீதளu   ஸுதலu   ஸுதளu   காலிu   காளிu   காலீu   காளீu   கலேவரu   களேவரu   ப³ஹுலu   ப³ஹுளu   கஶ்மலu   கஶ்மளu   ([கத])()?u	   ([³⁴])u   லu	   \1\2\3ளu   (ஜு)லu   (து)லசிu   \1ளசிu   (ரிம)லu	   ள்யu	   ல்ய)r]   r3   r^   r8  r_   r`   ra   r!   )r"   ListVSrc   r$   r$   r%   ContextualLLaN  s,   r  c                 C   s<   t dd| } t dd| } t dd| } t dd| } | S )Nu   ன   நu   ந்([\.।॥,!-])u   ன்\1u
   ந்(\s)u   ந்$u   ன்r  r<   r$   r$   r%   FinalNNaj  s
   r  c           	      C   s   d d}tjd }|D ]e}tdd|}d|d v s'd|d v s'd	|d v rO|d }|d d }|d d }ttjd
D ]}| || | || | } q>| ||} dD ]}tdd|}| || || } qW| dd} q| S )Nu	  ഩഖ
ഩഗര
ഩകുല
ഩഗ്‌ഩ
ഩക്ഷത്‌ര
ഩടരാജ
ഩടീ
ഩദീ
ഩന്‌ദഩ
ഩപുംസക
ഩഭ**
ഩമ**
ഩമശ്‌
ഩമസ്‌
ഩമാമ
ഩമാമി
ഩമാമോ
ഩമുചി
ഩമോ
ഩമോനമ
ഩമോനമോ
ഩമോസ്‌തു
ഩമോസ്‌തുതേ
ഩമഃ
ഩയഩ
ഩര**
ഩരക
ഩര്‌തക
ഩര്‌തഩ
ഩര്‌മദ
ഩല**
ഩലിഩ
ഩവ**
ഩവീഩ
ഩവ്‌യ
ഩശ്‌**
ഩഷ്‌ട
ഩാരായണ
ഩാഗ
ഩാടക
ഩാഡീ
ഩാട്‌യ
ഩാഡ്‌യ
ഩാഥ
ഩാദ
ഩാരത
ഩാഩാ***
ഩാഩ്‌യ**
ഩാഩൃത
ഩാഭ
ഩാമ
ഩായക
ഩായികാ
ഩാരദ
ഩാരസിംഹ
ഩാരി
ഩാരീ
ഩാവ***
ഩാശ
ഩാസിക
ഩിഗമ
ഩികട
ഩികര
ഩികാമ
ഩികായ
ഩിഖില
ഩികുഞ്‌ജ
ഩിഘൂഩ
ഩികേത
ഩിഗ്‌രഹ
ഩിഗൃഹ
ഩികൃന്‌ത
ഩിഗ്‌രന്‌ത
ഩിക്ഷിപ
ഩിക്ഷേപ
ഩിഘ്‌ഩ
ഩിജ
ഩിദര്‌ശ
ഩിതമ്‌ബ
ഩിതര
ഩിദാഘ
ഩിദാഩ
ഩിതാന്‌ത
ഩിധാഩ
ഩിധായ
ഩിധ
ഩിധേഹി
ഩിദ്‌ര
ഩിത്‌യ
ഩിന്‌ദാ
ഩിബദ്‌ധ
ഩിബധ്‌
ഩിബന്‌ധഩ
ഩിപട
ഩിപതിത
ഩിപത്‌യ
ഩിപപാത
ഩിപാതിത
ഩിപാത്‌യ
ഩിപുണ
ഩിബോധ
ഩിഭൃത
ഩിമഗ്‌ഩ
ഩിമിത്‌ത
ഩിമിഷ
ഩിയത
ഩിയന്‌ത
ഩിയന്‌ത്‌ര
ഩിയമ
ഩിയുക്‌ത
ഩിയുജ്‌യ
ഩിയോ
ഩിര
ഩിര്‌
ഩിലയ
ഩിവര്‌
ഩിവസ
ഩിവാര
ഩിവാസ
ഩിവിഷ്‌ട
ഩിവേദ
ഩിവേശ
ഩിവൃ
ഩിശ
ഩിശ്‌
ഩിഷ
ഩിഷ്‌
ഩിസ
ഩിസ്‌
ഩിഹിത
ഩിഃശ
ഩിഃഷ
ഩിഃസ
ഩീച
ഩീതി
ഩീര
ഩീല
ഩൂതഩ
ഩൂപുര
ഩേത്‌ര
ഩേയ**
ഩൈമിത്‌ത
ഩൈമിഷ
ഩൈരാശ്‌യ
ഩൈരൃത
ഩൈവേദ്‌യ
ഩൈഷ്‌
ഩ്‌യായ
ഩ്‌യാസ
ഩ്‌യൂഩ
ഩൃ
r   u   ^ഩ   ന   ²   ³   ⁴r   )u	   ഩാമu   ഩരu   ഩ്‌നu   ന്‌ന	rC   r   r:  r`   ra   r3   r^   r8  r!   )	r"   listDentalNar=  wordNnawordNanumberwordNnaNwordNaNvowr$   r$   r%   TamilpredictDentaNaExtendeds  s*      
$r+  c           
      C   s  d d}tjd }d}|D ]v}tdd|}d|d v s)d	|d v s)d
|d v rQ|d }|d d }|d d }ttjdD ]}	| ||	 | ||	 | } q@| ||} dD ]}tdd|}td| d | | d d| | | } qY| dd} | dd} q| S )Nu	  னக²
னக³ர
னகுல
னக்³ன
னக்ஷத்ர
னடராஜ
னடீ
னதீ³
னந்த³ன
னபும்ʼஸக
னப⁴**
னம**
னமஶ்
னமஸ்
னமாம
னமாமி
னமாமோ
னமுசி
னமோ
னமோநம
னமோநமோ
னமோஸ்து
னமோஸ்துதே
னம꞉
னயன
னர**
னரக
னர்தக
னர்தன
னர்மத³
னல**
னலின
னவ**
னவீன
னவ்ய
னஶ்**
னஷ்ட
னாராயண
னாக³
னாடக
னாடீ³
னாட்ய
னாட்³ய
னாத²
னாத³
னாரத
னானா***
னான்ய**
னான்ருʼத
னாப⁴
னாம
னாயக
னாயிகா
னாரத³
னாரஸிம்ʼஹ
னாரி
னாரீ
னாவ***
னாஶ
னாஸிக
னிக³ம
னிகட
னிகர
னிகாம
னிகாய
னிகி²ல
னிகுஞ்ஜ
னிகூ⁴ன
னிகேத
னிக்³ரஹ
னிக்³ருʼஹ
னிக்ருʼந்த
னிக்³ரந்த
னிக்ஷிப
னிக்ஷேப
னிக்⁴ன
னிஜ
னித³ர்ஶ
னிதம்ப³
னிதர
னிதா³க⁴
னிதா³ன
னிதாந்த
னிதா⁴ன
னிதா⁴ய
னித⁴
னிதே⁴ஹி
னித்³ர
னித்ய
னிந்தா³
னிப³த்³த⁴
னிப³த்⁴
னிப³ந்த⁴ன
னிபட
னிபதித
னிபத்ய
னிபபாத
னிபாதித
னிபாத்ய
னிபுண
னிபோ³த⁴
னிப்⁴ருʼத
னிமக்³ன
னிமித்த
னிமிஷ
னியத
னியந்த
னியந்த்ர
னியம
னியுக்த
னியுஜ்ய
னியோ
னிர
னிர்
னிலய
னிவர்
னிவஸ
னிவார
னிவாஸ
னிவிஷ்ட
னிவேத³
னிவேஶ
னிவ்ருʼ
னிஶ
னிஶ்
னிஷ
னிஷ்
னிஸ
னிஸ்
னிஹித
னி꞉ஶ
னி꞉ஷ
னி꞉ஸ
னீச
னீதி
னீர
னீல
னூதன
னூபுர
னேத்ர
னேய**
னைமித்த
னைமிஷ
னைராஶ்ய
னைர்ருʼத
னைவேத்³ய
னைஷ்
ன்யாய
ன்யாஸ
ன்யூன
ன்ருʼr  r   u   ²³⁴ஃஅஆஇஈஉஊஎஏஐஒஓஔகஙசஜஞடணதநனபமயரறலளழவஷஸஹாிீுூெேைொோௌ்ௗ   ^னr  r  r   r!  r"  r   )u	   னாமu   னர([z])(r[   r@  u	   ன்நu	   ந்நu   னாம்னu   நாம்னr#  )
r"   r$  r=  	Tamillistr%  r&  r'  r(  r)  r*  r$   r$   r%   TamilpredictDentaNa"  s.      
$,r/  c                 C   s   t jd }t jd }| dd} td| d d| } | |d |d } | dd	} td
| d d| } | |d	 |d } td| d d| } | d|d } td| d d| } | d|d } | S )Nr   r   u   𑜢u   𑜣u
   (𑜣)(.)(r[   u   𑜢\2\3u   𑜤u   𑜥u
   (𑜥)(.)(u   𑜤\2\3u   (𑜦𑜧)(.)(u   𑜦\2\3u   𑜦𑜪𑜧u   𑜧u   (𑜦𑜡)(.)(u   𑜨\2\3u   𑜦𑜪𑜡u   𑜨)r   r:  AyogavahaMapr!   r`   ra   )r"   r=  anur$   r$   r%   
AhomClosed  s   

r2  c                 C   rk   rl   r$   r<   r$   r$   r%   TeluguTamilZha  rn   r3  c                 C   s(   |  dd} |  dd} |  dd} | S )Nu	   ఱ్ఱu	   ౘ్ౘu	   ట్రu   ండ్రu	   న్ఱr    r<   r$   r$   r%   TeluguTamilRra     r4  c                 C   s  |  dd} |  dd} |  dd} |  dd} td	d
| } |  dd} tdd| } tdd| } tdd| } t| d} |  dd} |  dd} tdd| } |  dd} |  dd} |  dd} |  dd} |  d d!} td"d#| } td$d%| } td&d'| } | S )(Nu   ท   ดu   พ   บ   ึ   ิํ   ํu   งฺu   (ฺ)([ยรลวห])u   ͜\2   หฺu   ห͜u   ([ยรลวห])͜\1u   \1ฺ\1u   (า)(.)(ฺ)u	   ็\1\2\3u   ([เโ])(.)(.)(ฺ)u   \1\2็\3\4Fu   ะ͜   ͜u   ะ็u   ็u!   ([เโไ])(.)(͜)(.)([ะั])z\1\2\3\4u   คu   ก̥u   ชu   จ̥   งu   งํu   ะงํ͜	   ังํu"   ([เโไ])(งํ)([าัะ])u   \1ง\2u   ([เโไ])(งํ)u   \1งu   (งํ)([าัะ])u   ง\2)r!   r`   ra   ThaiTranscriptionr<   r$   r$   r%   ThaiNativeConsonants  s,   
r@  c                 C   s(   t tjtjD ]
\}}| ||} q| S rl   )rD   r   
NumeralMapr   r!   )r"   r   r   r$   r$   r%   KhamiShanMyanmarNumerals  s   rB  c                 C   r?   )Nu   ရu   ꩳr    r<   r$   r$   r%   KhamtiShanRa      rC  c                 C   rk   rl   r$   r<   r$   r$   r%   granthafinal&  rn   rE  c                 C   r;   )N..r-   r0   r,   r    r<   r$   r$   r%   
Dot2Dandas*  r>   rG  c                 C   r;   )NrF  r/   r0   r.   r    r<   r$   r$   r%   	Dot2Pipes0  r>   rH  c                 C   sn   t jd }t jd }| || d} dttjd}t	d| d d| } t	d	d
| } t	dd| } | S )Nr   r   :r.   r   z(:)(r[   r7  u	   (\s)(ன)u   \1நr,  r  )
r   r:  r"  r!   r]   r3   r^   r8  r`   ra   )r"   r=  har  r$   r$   r%   SaurastraHaaruColon6  s   

rK  c                 C   s   t jd }t jd }t jd }t jd }dttjtj tj	 dt j
d g }td| d tj d | d d	 | d d
| | } td| d tj d | d d	 | d d
| | } tdd| } tdd| } tdd| } t| } | S )N      r      r.   r   rZ   r[   r  r*  u   (ന്‌)(?![തഥദധ])u	   ഩ്‌u
   (\s)ഩ്u   \1ന്‌u   ^ഩ്u	   ന്‌)r   r"  SouthConsonantMapr:  r]   r3   r^   Vowelsr8  r_   SignMapr`   ra   VedicSvarasr+  r"   nannar=  tar;  r$   r$   r%   TamilExtendedNNAE  s   



,88rW  c                 C   s    t dtjd  d d| } | S )Nz(.)r   r@  )r`   ra   r   r:  r<   r$   r$   r%   TakriRemoveGeminationY  r   rX  c                 C   s   dd ttjddg  d }dd ttjd d }t|d | d| } td| d	| } td
d| } | dd} | dd} | dd} | dd} | dd} | S )NrZ   r.   	Mongolianu   ᠠr[   ?\1\2 u   (᠎ᠠ)z\1 \2u   ᠠ u   ᠠ᠋ u   ᠣᠸᠠ᠋u	   ᠣᠸᠠu   ᠣᠸᠸᠠ᠋u   ᠣᠸᠸᠠu    ᠎u   ᠎u    ​r   u    ᢁu   ᢁ)r]   r3   r^   rP  r_   r`   ra   r!   )r"   vowels
consonantsr$   r$   r%   MongolianSyllabize_  s   "r^  c                 C   s4  dd ttjd d }dd ttjdg d  d }dd ttjddg  d }dd ttjddg  d }dd dd	 td
dD g d  d }t	|| d d| } t	|d| } t	|d| } t	d| d| } t	d| d| } t	d| d| } t	|d| } | 
dd} | S )NrZ   r.   r   r[   )u   ཨ   ཅ   ཆ   ཇ   ཇྷu   ྀ   ྂc                 S   s   g | ]}t |d  qS )P   )chr.0r   r$   r$   r%   
<listcomp>s  s    z$TibetanSyllabize.<locals>.<listcomp>i@  ih  )u   ྻu   ྺu   ྼrZ  u   \1\2་u   \1་   ་r@  u   ་་)r]   r3   r^   rP  r_   r8  r9  ranger`   ra   r!   )r"   r\  r]  
vowelsignscombiningSignsListSubCr$   r$   r%   TibetanSyllabizen  s   $""*rn  c                 C   s$  dd ttjd d }dd ttjdddg  d }dd ttjd d }dd ttjd d }dd g d d }t|| d d	| } t|d
| } td| d| } td| d| } tdd| } t|d
| } tdd| } t|d
| } td| d| } | S )NrZ   r.   Soyombor[   u   𑩐u   𑪃)u   𑪊u   𑪋u   𑪌u   𑪍u   𑪎u   𑪏u   𑪐u   𑪑u   𑪒u   𑪓u   𑪔rZ  r[  z\1 rB   r@  u   𑪙 u   𑪙u    𑪘u   𑪘z( )z\2 )	r]   r3   r^   rP  r_   r8  r9  r`   ra   )r"   r\  r]  rk  rl  finr$   r$   r%   SoyomboSyllabize  s   $rq  c                 C   r  )Nu   𑚸u   𑚋r    r<   r$   r$   r%   TakriArchaicKha  r  rr  c                 C   s>   dd ttjd d }td| d| } | dd} | S )	NrZ   r.   ri   r[   u   ర్u   ర్‍\1u   ్ర్‍u	   ్ర్)r]   r3   r^   r_   r`   ra   r!   )r"   r]  r$   r$   r%   
TeluguReph  s   rs  c                 C   rk   rl   r$   r<   r$   r$   r%   
PhagsPaTib  rn   rt  c                 C   rk   rl   r$   r<   r$   r$   r%   PhagsPaSeal  rn   ru  c                 C   s   t | d} | dd} | S )Nr      ംu	   മ്‌)AnusvaraToNasalr!   r<   r$   r$   r%   TamilExtendedAnusvara  s   
rx  c                 C   sL   |  dd} |  dd} |  dd} |  dd} |  dd} |  d	d
} | S )Nr   oazoa'r}   aezae'aeaer  oaoar  r    r<   r$   r$   r%   RomanReadableLongEO  s   r}  c                 C   r?   )Nu   ఀu   ఁr    r<   r$   r$   r%   TeluguArasunnaChandrabindu  rA   r~  c                 C   4   g d}g d}t ||D ]
\}}| ||} q| S )N)u   𑲂u   𑲃u   𑲄)u   𑱶u   𑱷u   𑱸rD   r!   )r"   	tsaSeriesjaSereisr   r   r$   r$   r%   MarchenSanskritPalatals  
   r  c                 C   r  )N)u   𑩵u   𑩶u   𑩷)u   𑩡u   𑩢u   𑩣r  r"   r  caSeriesr   r   r$   r$   r%   SoyomboSanskritPalatals  r  r  c                 C   4   g d}g d}t ||D ]
\}}| ||} q| S )N)r_  r`  ra  rb  )u   ཙu   ཚu   ཛu   ཛྷr  )r"   r  r  r   r   r$   r$   r%   TibetanSanskritPalatals  r  r  c                 C   r  )N)u   𑨣u   𑨤u   𑨥)u   𑨐u   𑨑u   𑨒r  r  r$   r$   r%   ZanabazarSanskritPalatals  r  r  c                 C   rk   rl   r$   r<   r$   r$   r%   SoyomboFinals  rn   r  c                 C   r  )N)u   𑩼𑪙u   𑩽𑪙u   𑪁𑪙)u   𑪆u   𑪇u   𑪉r  )r"   viraConinitialr   r   r$   r$   r%   SoyomboInitials  r  r  c                 C   r?   )NrB   u   𑩁r    r<   r$   r$   r%   ZanzabarSpaceTsheg  rA   r  c                 C   r?   )NrB   u   𑪚r    r<   r$   r$   r%   SoyomboSpaceTscheg  rA   r  c                 C   r?   )Nr      ৎr    r<   r$   r$   r%   KhandaTaRomanLoC  rA   r  c                 C   r?   )Nrt   r   r    r<   r$   r$   r%   RomanLoCVaWa  rR   r  c                 C   r?   )Nr   shr    r<   r$   r$   r%   RomanLoCSasha  rR   r  c                 C   s   |  dd} |  dd} | S )N   ḻ   l̳   l̤r    r<   r$   r$   r%   RomanLoCSLaDotLaUnderscore  r>   r  c                 C   r?   )Nr  r  r    r<   r$   r$   r%   RomanLoCLaUnderscoreDoubleDot  rA   r  c                 C   s(   |  dd} |  dd} |  dd} | S )Nr   r  r     ḷr  r  r    r<   r$   r$   r%   HindiMarathiRomanLoCFix  r5  r  c                 C   sN   d}t d|| } t d|| } t d|| } t d|| } t d|| } | S )Nu   𑤿u    (𑤐𑤾)(?=[𑤌𑤍𑤎𑤏])u   (𑤕𑤾)(?=[𑤑𑤒𑤓])u   (𑤚𑤾)(?=[𑤖𑤘𑤙])u    (𑤟𑤾)(?=[𑤛𑤜𑤝𑤞])u    (𑤤𑤾)(?=[𑤠𑤡𑤢𑤣])r  )r"   	homoNasalr$   r$   r%   DivesAkuruHomoOrganNasal  s   r  c                 C   sD   |  dd} dd}dd}t||D ]
\}}|  ||} q| S )N   𑤥   𑤦u0   𑤀 𑤁 𑤂 𑤃 𑤄 𑤅 𑤆 𑤆𑤵 𑤉rB   uL   𑤥 𑤥𑤰 𑤥𑤱 𑤥𑤲 𑤥𑤳 𑤥𑤴 𑤥𑤵 𑤥𑤷 𑤥𑤸)r!   rC   rD   )r"   r*  vowyrt   r  r$   r$   r%   DivesAkuruAlternateIndVowels*  s   

r  c                 C   r?   )Nr  r  r    r<   r$   r$   r%   UseAlternateYA8  rA   r  c                 C   s   d}d}dd ttjtj | d }dd ttj| d }d}td| d d | | d d | d	 | |d
 | } | S )NKawiu   𑼂rZ   r.   r[   u   𑽂(()*z)?)r@  )r]   r3   r^   r_   rP  VowelSignsNVr`   ra   )r"   r6   rephar   vowsr=  r$   r$   r%   KawiMoveRepha=  s   ":r  c                 C   r?   )Nu   𑼿u   𑼾𑼾r    r<   r$   r$   r%   KawiAltAiAUI  rD  r  c                 C   r   )Nu   𑼅u   𑼄𑼴u   𑼇u   𑼆𑼴u   𑼉u   𑼈𑼴r    r<   r$   r$   r%   KawiDecomposedVowelO  r   r  c                 C   r?   )Nu   𑼙𑽂𑼛u   𑼳r    r<   r$   r$   r%   KawiArchaicJNAT  rR   r  c                 C   r?   )Nu	   ꦗ꧀ꦚu   ꦘr    r<   r$   r$   r%   JavaneseArchaicJNAX  rR   r  c                 C   r  )N)u   ꦄꦶu   ꦄꦷu   ꦄꦸu   ꦄꦹu   ꦄꦽu   ꦄ꧀ꦉꦴu   ꦄ꧀ꦭꦼu   ꦄ꧀ꦭꦼꦴu   ꦄꦺu   ꦄꦻu	   ꦄꦺꦴu	   ꦄꦻꦴ)u   ꦆu   ꦇu   ꦈu   ꦈꦴu   ꦉu   ꦉꦴu   ꦊu   ꦋu   ꦌu   ꦍu   ꦎu   ꦎꦴr  r"   vowelsAr\  rt   vAr$   r$   r%   JavaneseAvowels\  r  r  c                 C   s.   t dd| } t dd| } t dd| } | S )Nu   tʹ(?!s)r   u   nʹ(?!y)rP   j_hjhr  r<   r$   r$   r%   TibetanLoCRomanLoCFixe  s   r  c                 C   r?   )Njnyr  r    r<   r$   r$   r%   JavaneseSimplifiedl  rR   r  c                 C   rk   rl   r$   r<   r$   r$   r%   BalineseSimplifiedp  r3  r  c                 C   r   Nr   r   u   ng̈u   ‘r    r<   r$   r$   r%   BalineseRomanLoCFixs  r   r  c                 C   r   r  r    r<   r$   r$   r%   JavaneseRomanLoCFixx  r   r  c                 C   r?   )Nu	   ᬚ᭄ᬜu   ᭌr    r<   r$   r$   r%   BalineseArchaicJNA}  rR   r  c                 C   s   d| d }dd ttj| d }dd ttj| d }ttj|d }t|d | d d | | d d | d d| } dd	 ttj|d d
  d }t|d | d d| } | S )NrZ   r[   r.   r   r  r  z\2\4\6\1[r      ]r7  )	r]   r3   r^   r_   r  viramar`   ra   r9  )r"   r6   rephr  r   r  r=  candAnur$   r$   r%   BalineseJavaneseMoveRepha  s   6$r  c                 C      t | ddS )Nr   u   ꦂr  r<   r$   r$   r%   JavaneseMoveRepha  r  r  c                 C   r  )Nr   u   ᬃr  r<   r$   r$   r%   BalineseMoveRepha  r  r  c                 C   r  )N)u   ᬅᬶu   ᬅᬷu   ᬅᬸu   ᬅᬹu   ᬅᬺu   ᬅᬻu   ᬅ᭄ᬮᭂu   ᬅ᭄ᬮᭃu   ᬅᬾu   ᬅᬿu   ᬅᭀu   ᬅᭁ)u   ᬇu   ᬈu   ᬉu   ᬊu   ᬋu   ᬌu   ᬍu   ᬎu   ᬏu   ᬐu   ᬑu   ᬒr  r  r$   r$   r%   BalineseAvowels  r  r  c                 C   J   t dd| } t dd| } t dd| } t dd| } t d	d
| } | S )Nu   (m̆|ṃ)(k|g)   ṅ\2u   (m̆|ṃ)(c|j)   ñ\2u   (m̆|ṃ)(ṭ|ḍ)   ṇ\2u   (m̆|ṃ)(t|d)n\2u   (m̆|ṃ)(p|b)m\2r  r<   r$   r$   r%   GurmukhiRomanLoCFix  s   r  c                 C   r   )	Nu   gḧu   g̳h̳u   ṭ̈u   t̤u   s̈u   s̤r   u   h̤r    r<   r$   r$   r%   DevanagariRomanLoCFix  s   r  c                 C   r;   )N   ṟṟ   ṯṯu   ŭu   ȧr    r<   r$   r$   r%   MalayalamRomanLoCFix  rW   r  c                 C   r?   )N   nṟ   nṯr    r<   r$   r$   r%   MalayalamNTA  rR   r  c                 C   r;   )Nr  r  r  r  r    r<   r$   r$   r%   MalayalamTTNTA  rW   r  c                 C   r  )Nu
   (n̆)(k|g)r  u
   (n̆)(c|j)r  u   (n̆)(ṭ|ḍ)r  u
   (n̆)(t|d)r  u
   (m̆)(p|b)r  r  r<   r$   r$   r%   SinhalaSannakaNasalization     r  c                 C   sJ   t dd| } t dd| } t dd| } t dd| } t dd| } | S )Nu
   (m̐)(k|g)u   n̐\2u
   (m̐)(c|j)u   (m̐)(ṭ|ḍ)u
   (m̐)(t|d)u
   (m̐)(p|b)r  r<   r$   r$   r%   RomanLoCChandrabindu  r  r  c                 C   r  )Nu   (ṃ|ṁ)(k|g)r  u   (ṃ|ṁ)(c|j)r  u   (ṃ|ṁ)(ṭ|ḍ)r  u   (ṃ|ṁ)(t|d)r  u   (ṃ|ṁ)(p|b)r  r  r<   r$   r$   r%   r{    r  r{  c                 C   sR   g d}|D ]}|  |d} qg d}g d}t||D ]
\}}|  ||} q| S )N)u   ̱   ̆u   ̣   ͟u   ̤r  rw   u   ́rz  u   ̐r  r   u   ̄r   )u   а̄u   ӣu   ӯu   ӗ)u   аu   иu   уu   э)r!   rD   )r"   
diacriticsdiavowelDiavowelr   r   r$   r$   r%   removeDiacritics  s   r  c                 C   r?   Nri  rB   r    r<   r$   r$   r%   ranjanalantsa  rR   r  c                 C   r?   )Nri  u   ࿎ r    r<   r$   r$   r%   ranjanawartu  rR   r  c                 C   rk   rl   r$   r<   r$   r$   r%   TaiKuen  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   
TaiThamLao  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   
egrantamil  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   tibetandbumed  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   oldtamilortho  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   nepaldevafont  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   granthaserif  r3  r  c                 C   s   dd tttjdtjd d  tdd d }dd tttjdtj	 dg tdd d }t
| dd	} | d
d} | dd} | dd} td| d d | d d d| } | dd} | dd} | dd} | S )NrZ   r.   r   r   TrM  r[      𑄳r(   u   𑄤u   𑅇u   𑄡u   𑄠u   𑄧r   r  u   |ʾu   \1𑄧r   u   𑄂   𑄴)r]   rO  r3   r^   r_   r   VowelMaprP  r8  r:  ChakmaGeminationr!   r`   ra   )r"   listClistVr$   r$   r%   
ChakmaPali  s   42&r  c                 C   sj   t | } | dd} t| dd} | dd} | dd} | d	d
} tdd| } | dddd} | S )Nu   ังu	   ังฺTanusvaraChangeu   ะํr:  u   ะั   ัu   ะ๎   ๎u5   ([เโไ])(.๎)([ยรลวศษสหฬ])ะ\1\2\3   าํ   ำr9  r8  )ThaiSajjhayaOrthographyr!   r?  r`   ra   r<   r$   r$   r%   ThaiSajjhayawithA!  s   r  c                 C   s   t | dd} tdd| } | S )NLaoPali)Scriptu   ([ເໂໄ])(.)(໎)\2\3\1)r  r`   ra   r<   r$   r$   r%   LaoSajjhaya0  s   r  c                 C   s   t | } | dd} | dd} tj| dd} | dd} | d	d
} | dd} | dd} | dd} tdd| } | dd} | dd} | S )N   ໎r  u   ັງu	   ັງ຺Tr  u   ະໍu   ໍu   ະັ   ັu   ະ๎   ະ໌   ໌u   ະົu   ົu5   ([ເໂໄ])(.๎)([ຍຣລວຨຩສຫຬ])ະr     າໍ   ຳ)r  r!   CFLaoPaliTranscriber`   ra   r<   r$   r$   r%   LaoSajjhayawithA7  s   r  c                 C   r?   )Nu   𑖲u   𑗜r    r<   r$   r$   r%   UseAlternateVSUP  rA   r	  c                 C   r?   )Nu   𑖳u   𑗝r    r<   r$   r$   r%   UseAlternateVSUUU  rA   r
  c                 C   r?   )Nu   𑖄u   𑗛r    r<   r$   r$   r%   UseAlternateUZ  rA   r  c                 C   r?   )N   𑖂u   𑗘r    r<   r$   r$   r%   UseAlternateI1_  rA   r  c                 C   r?   )Nr  u   𑗙r    r<   r$   r$   r%   UseAlternateI2d  rA   r  c                 C   r?   )Nu   𑖃u   𑗚r    r<   r$   r$   r%   UseAlternateIIi  rA   r  c                 C   r?   )Nu   𑍗u   𑍌r    r<   r$   r$   r%   GranthaOldaun  rA   r  c                 C   r?   )Nu   ऍu   ॲr    r<   r$   r$   r%   DevanagariACandras  rA   r  c                 C   s*   t dd| } | dd} | dd} | S )NuC   ([𑣔𑣕𑣌𑣋𑣏𑣎𑣒𑣑𑣕𑣔𑣘𑣗𑣛])(‍)(𑣙)r@  u   𑣝u   𑣞   ‍r   r   r<   r$   r$   r%   WarangCitiModernOrthogaphyx  s   r  c                 C   sV   dd tttjdtjd d  tdd d }t	d| d d	| } t
| } | S )
NrZ   r.   r   r   TrM  r[   u   𑄴(u   𑄳\1)r]   rO  r3   r^   r_   r   r  rP  r`   ra   r  )r"   r  r$   r$   r%   ChakmaEnableAllConjuncts  s   4r  Fc                 C   s:  dd ttjd d }d}d}d}dd tttjdtdd	 d }|syt|| d
 | d
| d | } t|| d
 | | d
| | d | } t|| d
 | | d
| | d | } t|| | | |d
 | d | } | S t|| | d
| d
 d | } t|| | d
| d
 | | } | S )NrZ   r.   r   r[   u   ([𑄴𑄳])r  r  TrM  r@  rA  r  )	r]   r3   r^   r_   rO  r  rP  r`   ra   )r"   r)   rc   virsvirExpvirDepr;  r$   r$   r%   r    s   &"**&""r  c                 C   r  )N)u   𑄃𑄨u   𑄃𑄪u   𑄃𑄬)u   𑄄u   𑄅u   𑄆r  )r"   	vowelDepA
vowelIndepr   r   r$   r$   r%   ChakmaVowelsIndependent  r  r  c                 C   s   dd ttjdddg  d }dd ttjdddg  d }dd ttjdddg  d }t|| | d| } td| d | d	| } t|| | d
| } | S )NrZ   r.   Multaniu   𑊓u   𑊍r[   z\1\3z{2,})r@  r*  )r]   r3   r^   
Charactersr_   rP  r`   ra   )r"   ListAllrc   r;  r$   r$   r%   MultaniAbjad  s   $$$r  c                 C   sX   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } | S )Nu   ຕ([ເແໂໄ]?)ຕu   ດ\1ຕu   ຕ([ເແໂໄ]?)ຖu   ດ\1ຖu   ທ([ເແໂໄ]?)ທu   ດ\1ທu   ສ([ເແໂໄ]?)ສu   ດ\1ສu   ປ([ເແໂໄ]?)ປu   ບ\1ປu   ພ([ເແໂໄ]?)ພu   ບ\1ພr  r<   r$   r$   r%   	LaoNative  s   r  c                 C   s   d ttjtj tj d}|sJ| dd} | dd} d ttjtj tj d}td| d d	 d
| } td| d d d| } | S | dd} | dd} | dd	} | dd} | S )Nr.   	Sundaneseu   ᮪ᮙu   ᮬu   ᮪ᮝu   ᮭrZ   r[   u   ᮊ᮪u   \1ᮾu   ᮙ᮪u   \1ᮿu   ᮾu   ᮿ)	r]   r3   r^   r_   rP  r  r!   r`   ra   )r"   r)   rc   r$   r$   r%   SundaneseHistoricConjuncts  s     r!  c                    sj   t jd   fdddd dD D }g d}t||D ]\}}| d| |} | d| d	| } q| S )
Nr   c                    s   g | ]}|  qS r$   r$   rf  r=  r$   r%   rh        z$LimbuSpellingSaI.<locals>.<listcomp>c                 S      g | ]}t j| qS r$   )r   r"  rf  r$   r$   r%   rh        )r      rN  rL           r  )u   ᤰ   ᤱu   ᤳu   ᤴu   ᤵu   ᤶu   ᤷu   ᤸu   ᤺u   ᤺ᤢu   ᤢ)r   r:  rD   r!   )r"   FCons	FinalConsr   r   r$   r"  r%   LimbuSpellingSaI  s   
r-  c                 C   rk   rl   r$   r<   r$   r$   r%   siddhammukta  r3  r.  c                 C   rk   rl   r$   r<   r$   r$   r%   	tradOrtho  r3  r/  c                 C   rk   rl   r$   r<   r$   r$   r%   	siddhamap  r3  r0  c                 C   r?   )Nu   𑈺rB   r    r<   r$   r$   r%   KhojkiRetainSpace  rA   r1  c                 C   r?   )Nu   𑱃rB   r    r<   r$   r$   r%   BhaiksukiRetainSpace  rA   r2  c                 C   r?   )Nu   ⸱rB   r    r<   r$   r$   r%   KaithiRetainSpace  rA   r3  c                 C   r  )N)u   எ்u   ெ்u   ஒ்u	   ெ்ா   எ   ெ   ஒ   ொ)r4  r5  r6  r7  u   ஏu   ேu   ஓu   ோr  )r"   OldEONewEOr   r   r$   r$   r%   MedievalTamilOrthography  r  r:  c                 C   rk   rl   r$   r<   r$   r$   r%   AmbigousTamilOrthography 	  rn   r;  c                 C   s4   g d}g d}t ||D ]
\}}| ||} q| S )N)u   𑐓u   𑐙u   𑐤u   𑐪u   𑐭u   𑐯)u   𑐴𑑂𑐒u   𑐴𑑂𑐘u   𑐴𑑂𑐣u   𑐴𑑂𑐩u   𑐴𑑂𑐬u   𑐴𑑂𑐮r  )r"   murmurconnshr   r   r$   r$   r%   NewaMurmurConsonants	  r  r>  c                 C   s   |  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd
} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} | S )Nu   𑘂u   𑘃u   𑘅u   𑘄u   𑘱u   𑘲u   𑘴u   𑘳u   𑘆u   𑘨𑘲u   𑘇u   𑘈u   𑘩𑘲u   𑘉u   𑘵u   𑘿𑘨𑘲u   𑘶u   𑘷u   𑘿𑘩𑘲u   𑘸r    r<   r$   r$   r%   ModiRemoveLong	  s   r?  c                 C   @   |  dd} |  dd} |  dd} |  dd} |  d	d
} | S )Nu   ऎu   ए़u   ऒu   ओ़u   ॆu   े़u   ॊu   ो़rv   u   ःr    r<   r$   r$   r%   LimbuDevanagariConvention	     rA  c                 C   sl   |s|  dd} |  dd} |  dd} |  dd} | S |  dd} |  dd} |  dd} |  dd} | S )	Nu   𑧚u   𑧤u   𑧛u   𑧤𑧚u   𑧜u   𑧤𑧑u   𑧝u   𑧤𑧜r    r"   r)   r$   r$   r%   NandinagariPrishtamatra(	  s   rD  c                 C   sl   |s|  dd} |  dd} |  dd} |  dd} | S |  dd} |  dd} |  dd} |  dd} | S )	Nu   ेu   ॎu   ैu   ॎेu   ोu   ॎाu   ौu   ॎोr    rC  r$   r$   r%   DevanagariPrishtamatra7	  s   rE  c                 C   r  )Nu   ޱu   ނr    r<   r$   r$   r%   ThaanaRemoveHistoricalE	  r  rF  c                 C   r  )Nu   ୱu   ଵr    r<   r$   r$   r%   
OriyaVaAltH	  r  rG  c                 C   s$   |s
|  dd} | S |  dd} | S )Nu   ੍ਯu   ੵr    rC  r$   r$   r%   GurmukhiYakaashK	  s
   rH  c                 C   sH   dd tttjd d }td| d| } td| d| } | S )NrZ   r.   r   r[   u   (?<!്)ർu   ൎ\1u   (?<!്)ര്)r]   rO  r3   r^   r_   r`   ra   rb   r$   r$   r%   dotRephS	  s    rI  c                 C   r?   )Nrv   u   𑌃r    r<   r$   r$   r%   TamilGranthaVisarga[	  rA   rJ  c                 C   r;   )Nu   ൗu   ൌu   ഈu   ൟr    r<   r$   r$   r%   archaicAIAU`	  r>   rK  c                 C   r;   )Nu   ഩr  u	   ന‍്   ൻr    r<   r$   r$   r%   MalayalamremoveHistoricalf	  r>   rM  c                 C   r   )N))u   ᤉu   ᤈ)u   ᤊu   ᤏ)u   ᤚu   ᤙ)u   ᤲr*  r    r"   removePairsr   r   r$   r$   r%   LimburemoveHistoricall	  r   rP  c                 C   s   |  dd} t| d} | S )Nrv  u   ഀr   )r!   InsertGeminationSignr<   r$   r$   r%   MalayalamPrakritt	  s   
rR  c                 C   sV   |  dd} t| d} d}tdd t|| | } d}tdd t|| | } | S )	Nu   𑌂u   𑌀Granthau   \s𑌂.c                 S      |  |t|dS NrS  r!   ReverseGeminationSignr   mr$   r$   r%   <lambda>	      z GranthaPrakrit.<locals>.<lambda>u	   𑍍𑌂.c                 S   rT  rU  rV  rX  r$   r$   r%   rZ  	  r[  )r!   rQ  	functoolsreducer`   findall)r"   patr$   r$   r%   GranthaPrakrit{	  s   
r`  c                 C   r   )N))u   ꫢu   ꯆ)u   ꫣ   ꯅ)u   ꫤu   ꯇ)u   ꫥu   ꯊ)u   ꫦu   ꯗ)u   ꫧu   ꯙ)u   ꫨra  )u   ꫩ   ꯁ)u   ꫪrb  )u   ꫵu   ꯍ꯭)u   ꯑꫫu   ꯏ)u   ꯑꫬu   ꯎ)u   ꫫu   ꯤ)u   ꫬu   ꯨr    rN  r$   r$   r%   MeeteiMayekremoveHistorical	  r   rc  c                 C   r  )Nu   ௐu	   ஓம்r    r<   r$   r$   r%   TamilOmDisable	  r  rd  c                 C   r  )N   ஶu   ஸ²r    r<   r$   r$   r%   TamilSHADisable	  r  rf  c                 C   s^  t jd }t jd }t jd }t jd }dttjtj tj	 dt j
d ddd	d
g }td| d	 tj d | d	 d | | d	 d| | } td| d	 tj d | d	 d | | d	 d| | } tdtj d | d	 d | | d	 d| | } tdtj d | d	 d | | d	 d| | } td| d	 d| } | S )NrL  rM  r   rN  r.   r   rZ   z\(r[   z\)r  r*  u   (²|³|⁴)u   (?<=ஶ்ரீ)(ன)(?!r  )r   r"  rO  r:  r]   r3   r^   rP  r8  r_   rQ  r!   r`   ra   rR  rS  r$   r$   r%   TamilNaToNNa	  s   



<<<44rg  c              	   C   s\  g d}dd ttjddg  d }tjd }tjd | tjd	 | tjd
 | tjd | tjd | dg}tjdd tjdd
  tjdd  tjdd tjdd  tjdd  dg tjdd tjdd tjdd
  tjdd  tjdd tjdd  tjdd tjdd  tjdd  dg g}|stt	|D ]J}t
|tj d ||  d d d ||  d d||  | } t
|tj d ||  d d d ||  d | d d d||  | } qt
dd| } | S |rt||D ]\}	}
| |	|
d } q| S t||D ]\}	}
| |	|
} q | S )N   ൺrL     ർ   ൽ   ൾu	   ഩ‍്rZ   r.   r      ഽr[   r      rL  r)  r  u   ഩ്
   rN  r(  r  r  r'  u   റr     r   (?![r   r  r*  z(?=([z\4u   (?<!ത്)ˍu   ˍ)r]   r3   r^   CharactersNVr   r:  r"  rO  rj  rP  r`   ra   rR  rD   r!   )r"   r)   preserveChillusrc   r=  ConVirCListrc  r   r   r$   r$   r%   MalayalamChillu	  s<   "
(.(.	BP
rw  c                 C   sz   g d}g d}dd ttjddg  d }tjd }t||D ]\}}td	| d | d
 | d || } q#| S )N)u   ൔu   ൕu   ൖu   ൿ)u   മ്u   യ്u   ഴ്u   ക്rZ   r.   r   rm  r[   r   (?<!r  )	r]   r3   r^   rr  r   r:  rD   r`   ra   )r"   
chilluArchchilluArchhVirrc   r=  r  chvirr$   r$   r%   historicChillu	  s   "
(r|  c                 C   r?   )N   ്u   ഻r    r<   r$   r$   r%   MalayalamLineVirama	  s   r~  c                 C   r?   )Nr}  u   ഼r    r<   r$   r$   r%   MalayalamCircVirama	  rA   r  c                 C   s
  t t j|d t t j|d  }dt t j|}dt t j|}dt t j|}dt t jt j t j t j |}t	d| d d | d d | d d| | } t	d| d d | d d | d d | d d | d d| d | } | S )	Nr   r.   rZ   r[   r  r*  rx  z\3\4)
r3   r^   r8  r]   r_   rP  r  r9  r`   ra   )r"   ra  r=  rc   r;  r  r  r$   r$   r%   RemoveSchwa	  s   $&2Nr  c                    s   t t j d } fdddD }|t d  t d  } fdddD } fd	dd
D }tdd| d d | d d t j  d | } tt	|D ]"}td||  d d | d d ||  d t j  d | } qS| S )Nr   c                       g | ]
}t d  | qS r"  r3   
CrunchListrf  ra  r$   r%   rh  
      z(InsertGeminationSign.<locals>.<listcomp>r   r        ro     rN     r'     r&  	   rn  rL  r(  r  r)  r  r  r        r  rO  NuktaConsonantMapc                    r  r  r  rf  r  r$   r%   rh  
  r  
r   rM                    rp     c                    r  r  r  rf  r  r$   r%   rh  
  r  r   r  r  r  ro  r  rN  r  r'  r  r&  r  rn  rL  r(  rZ   r.   r[   r@  rA  )
r3   r^   r8  r  r`   ra   r]   
Geminationrj  rP  r"   ra  r=  ConUnAspConAspConOthrsrc  r$   r  r%   rQ  
  s   6BrQ  c                    s   t t j d } fdddD }|t d  t d  } fdddD } fd	dd
D } dkr<| dd} tdt j   d d d| d d| d | } t	t
|D ]}tdt j   d d ||  d || | d | } q]| S )Nr   c                    r  r  r  rf  r  r$   r%   rh  
  r  z)ReverseGeminationSign.<locals>.<listcomp>r  rO  r  c                    r  r  r  rf  r  r$   r%   rh  
  r  r  c                    r  r  r  rf  r  r$   r%   rh  
  r  r  r	   u	   ੱਸ਼਼u   ਸ਼਼੍ਸ਼਼rZ   r[   r.   r  )r3   r^   r8  r  r!   r`   ra   r  r]   rj  rP  r  r$   r  r%   rW  
  s   6:rW  c                 C   s   t jd }d}dttjddd dD  t jd g t jd g t jd	 g }dttjdttjd }t	d
t jd	  d | d | d d| | } t	d
| d d
 | d d| | } | S )Nr      ੰr.   r	   c                 S   r$  r$   )r	   r  rf  r$   r$   r%   rh  ,
  r%  z&GurmukhiTippiBindu.<locals>.<listcomp>)r   r  r&  rM  r&  rZ   r[   r  r@  )
r	   r0  r]   r3   r^   r_   VowelSignMaprP  r`   ra   )r"   BindiTippi	ListTippiCharr$   r$   r%   GurmukhiTippiBindu)
  s   



"0&r  c                 C   sR   t jd }t jd }t jd }d}d}| || || } | || || } | S )NrL  r(  r   u   ੱr  )r	   r"  r:  r!   )r"   rP   rY  r=  Addakr  r$   r$   r%   GurmukhiTippiGemination9
  s   


r  c                 C   s   |  dd} t| } | S )Nu	   ্‌বu   ্ব)r!   khandatabatovar<   r$   r$   r%   BengaliConjunctVBI
  s   r  c                 C   r   )N   ৎব	   ত্বu	   ৎ‌বr    r<   r$   r$   r%   r  P
  r>   r  c                 C   sL   |  dd dd} |  dd} tdd| } td	d
| } |  dd} | S )Nu   ৰুu	   ৰ‌ুu   ৰূu	   ৰ‌ূu   ্ৰu	   ্‌ৰu   (ৰ)(্)([রয])u	   \1‍\2\3u
   (ৰ)(্)u   \1\2‌u   র্‌ৰu	   ৰ্ৰr  r<   r$   r$   r%   BengaliRaBaV
  s   r  c                 C   sn   d}d ttj|td|d g dg }ddg}|D ]\}}td| d	 tj | d
| | } q| S )NBengalir.   rQ  r   r   )u   ডu   ড়)u   ঢu   ঢ়rZ   r[   r*  )r]   r3   r^   r  r  r`   ra   rR  )r"   ra  rc   r   r   r   r$   r$   r%   BengaliIntervocalicDDAe
  s   ,&r  c                    s   t t j d }d}t t j d }d fdddD g d }|sKtd	| d
 d | d
 d | d
 d | d
 || } | dd} | S | ||| } | S )NrN  r  r   r.   c                    r  r  r  rf  r  r$   r%   rh  v
  r  zKhandaTa.<locals>.<listcomp>)rN  r  rL  r  r(  r  r)  r  )u   বr   r   rx  r[   rZ   r  u   ৎˍ)r3   r^   r_   r8  r]   r`   ra   r!   )r"   ra  r)   rV  khandatar=  rc   r$   r  r%   KhandaTaq
  s    :r  c           	   
      s   fdddD }d td dd d td dd	 d td d
d d td dd d td dd g}dd ttj  d }ttj d }ttj d }tt|D ]V}t	
|tj d | d d ||  d d | d d ||  d d| d | } t	
|tj d | d d ||  d d | d d ||  d d| d | } qmtjD ]}| || || } q| S )Nc                       g | ]}t t j | qS r$   r3   r^   r_   rf  r  r$   r%   rh  
      z#NasalToAnusvara.<locals>.<listcomp>r&  r  rn  rL  r(  r.   r"  r   r&  r  r  ro  rn  rN  rL  r'  r(  rZ   r[   r   rx  r*  \5)r]   r3   r  r^   r  r8  r9  rj  rP  r`   ra   rR  VedicSvarasListr!   )	r"   ra  ListNrc   ListCAllr=  Anurc  svarar$   r  r%   r  
  s    TV
r  c              
      sT  t d d } fdddD }dt d dd dt d d	d
 dt d dd dt d dd dt d dd g}t t j d }t t j d }tt|D ]@}t	d| d t j
 d ||  d | d || | d | }  dkrt	dt j
 d d ||  d || | d | } qg| S )NNuktaMapr   c                    r  r$   r  rf  r  r$   r%   rh  
  r  z#AnusvaraToNasal.<locals>.<listcomp>r  r.   r"  r&  r  r  ro  rn  rN  rL  r'  r(  r   rZ   r[   z)(?!r   r   u   (ம்)u   (ʼ)z\2\4)r3   r  r]   r^   r8  r9  rj  rP  r`   ra   rR  )r"   ra  nuktar  rc   r=  r  rc  r$   r  r%   rw  
  s    @4rw  c           
   	   C   s  dd ttjd d }dd dD }d tjdd	 d tjd
d d tjdd d tjdd d tjdd g}dd dD }d tjd	d d tjdd g}tjd }tjd	 }g d}tt	|D ]}	t
d| d d ||	  d ||	 | d | } qstt	|D ]9}	t
|tj d | d d d | d | d d ||	  d d | d d ||	  d d| d | } q| S )NrZ   r.   r   r[   c                 S   r$  r$   r   r"  rf  r$   r$   r%   rh  
  r%  z*MalayalamAnusvaraNasal.<locals>.<listcomp>r  r   r   r  r  ro  rn  rN  rL  r'  rp  c                 S   r$  r$   r  rf  r$   r$   r%   rh  
  r%  )r&  r(  r&  r(  rh  r  rx  (?<![r0   z])(?<!r*  r  )r]   r3   r^   r  r   r"  r:  r0  rj  rP  r`   ra   rR  )
r"   r  
ListNNasal
ListCNasalListNAnuListCAnur=  r  rt  rc  r$   r$   r%   MalayalamAnusvaraNasal
  s(   

4pr  c           	      C   s   t d|d t d|d  }t d|d }t d|d }dt t j|}d|dd	d
ddg}ddt t j| d }t|t j d | d d | d d | d d| | } t jD ]}| 	|| || } qd| S )Nr"  r(  r:  r   r0  r   r.   ri  rL  rj  rk  rl  rZ   r[   rx  r  r*  )
r3   r  r]   r^   r  r`   ra   rR  r  r!   )	r"   ra  rw  r=  Anusvararc   rt  r  r  r$   r$   r%   MToAnusvara
  s    <
r  c                 C   r  )Nr
   YYAEverywherer<   r$   r$   r%   OriyaYYA
     
r  c                 C   r  )Nr  r  r<   r$   r$   r%   
BengaliYYA
  r  r  c                 C   s0   t d|d }t d|d }| ||} | S )Nr"  r  r  r  r3   r  r!   )r"   ra  YaYYar$   r$   r%   r  
  s   r  c                 C   s
  t d|d }dt t j|t d|d g dg }ddt t j| d }t d	|d
 }t t j|d }dt d	|dd
 }|dv rtd| d t j	 | d| | } |dv rn| 
|| || } |dkr| 
dd} | 
|| d| } 	 | S )Nr  r  r.   rQ  r   r   rZ   r[   r"  r  )Assameser  r
   r   r*  )r  r  r   u   𑄠𑄡u   𑄠𑄠r  )r3   r  r]   r^   r  r  r8  r`   ra   rR  r!   )r"   ra  r  rc   ListSr  r=  	ListVargar$   r$   r%   YaToYYa
  s   ,$
r  c                 C   s>   t t j|d }t t j|d }|dkr	 | ||} | S )Nr  r  r  )r3   r^   r_   r!   )r"   ra  vabar$   r$   r%   VaToBa5  s   r  c                 C   r?   )Nr  r  r    )r"   ra  r$   r$   r%   tbadiffB  rD  r  c                 C   s`   t d|dd }|s| d|d } | d|d } | S | |d d} | |d d} | S )NrQ  r   rM  rF  r0   r   r  )r"   ra  r)   Dandasr$   r$   r%   r2   H  s   r2   c                 C   sj   t d|}t dd}|s#t||D ]\}}td| || } q| S t||D ]
\}}| ||} q(| S NrA  r  z(?<!h)r3   r  rD   r`   ra   r!   )r"   ra  r)   NativeNumeralsArabicNumeralsr   r   r$   r$   r%   r1   T     r1   c                 C   sj   t d|}t dd}|s#t||D ]\}}td| || } q| S t||D ]
\}}| ||} q(| S r  r  )r"   ra  r)   r  r  r   r   r$   r$   r%   RetainRomanNumeralsa  r  r  c                 C   rk   rl   r$   r<   r$   r$   r%   r*   n  r3  r*   c                 C   rk   rl   r$   r<   r$   r$   r%   r+   q  r3  r+   c                 C   rk   rl   r$   r<   r$   r$   r%   indicDandast  r3  r  c                 C   rk   rl   r$   r<   r$   r$   r%   r'   w  r3  r'   c                 C   r  Nri   r2   r<   r$   r$   r%   RetainTeluguDandaz  r  r  c                 C   r  r  r1   r<   r$   r$   r%   RetainTeluguNumerals}  r  r  c                 C   r  Nr   r  r<   r$   r$   r%   RetainTamilDanda  r  r  c                 C   r  r  r  r<   r$   r$   r%   RetainTamilNumerals  r  r  c                 C   r  Nr   r  r<   r$   r$   r%   RetainKannadaDanda  r  r  c                 C   r  r  r  r<   r$   r$   r%   RetainKannadaNumerals  r  r  c                 C   r  Nr   r  r<   r$   r$   r%   RetainMalayalamDanda  r  r  c                 C   r  r  r  r<   r$   r$   r%   RetainMalayalamNumerals  r  r  c                 C   r  )NGujaratir  r<   r$   r$   r%   RetainGujaratiDanda  r  r  c                 C   r  )Nr	   r  r<   r$   r$   r%   RetainGurmukhiNumerals  r  r  c                 C   r@  )Nu   ᮪ᮻu   ᮢᮩu   ᮪ᮼu   ᮣᮩu   ᮻu   ᮛᮩu   ᮼu   ᮜᮩu   ᮽu   ᮘr    r<   r$   r$   r%   SundaneseRemoveHistoric  rB  r  c                 C   s$   t jd }d}td| || } | S )Nr  u   ବu   (?<!୍))r
   r"  r`   ra   )r"   r  OriyaVar$   r$   r%   r    s   
r  c                 C      t jD ]}| |d} q| S Nr   )r3   DiacriticsRemovabler!   r"   r   r$   r$   r%   RemoveDiacritics     
r  c                 C   r  r  )r3   DiacriticsRemovableTamilr!   r  r$   r$   r%   RemoveDiacriticsTamil  r  r  c                 C   r  )N)   ¹r  r!  r"  )   ₁   ₂   ₃   ₄r  )r"   SuperScript	SubScriptr   r   r$   r$   r%   TamilSubScript  s
   r   c                    s   t dd d fdddD }dg d}td| d	 d
 | d	 d| } ddlm} || d} td| d	 d| } | S )Nr"  r   r.   c                    s   g | ]} | qS r$   r$   rf  CMr$   r%   rh    r#  z&TamilAddFirstVarga.<locals>.<listcomp>)r   r  ro  rN  r'  )r  r!  r"  r  r  r  rZ   r[   r  u   \1¹r   r   u   ¹(?=r   )r3   r  r]   r`   ra   r   r   ShiftDiacritics)r"   ConUnVoicedSuperSubScriptr   r$   r  r%   TamilAddFirstVarga  s   "r  c                 C   sJ   d dd dD }tjd }tjd }td| d | | d	| } | S )
Nr.   c                 S   r$  r$   )r   r"  rf  r$   r$   r%   rh    r%  z"SaurashtraHaru.<locals>.<listcomp>)rL  r(  r)  r  r   r  rZ   r[   u   \1ꢴ)r]   r   r:  r"  r`   ra   )r"   rc   r=  rJ  r$   r$   r%   SaurashtraHaru  s
   

r  c                 C   s   t jd }dt jdd }td| d d | d d| } td|d  d d | d d d	 d d |d  d d
| } | t jd t jd  t jd  d} | t jd | t jd  t jd | d	 t jd  } | dd} | dd} | S )Nr   r.   r  r  rZ   r[   r  r  r  z
\1\3\2\3\4r  r  u   ඥr     ර‍්‍යu	   ර්යu   ර්‍රu	   ර්ර)r   r:  r]   r"  r`   ra   r!   )r"   r=  YRr$   r$   r%   SinhalaDefaultConjuncts  s   
"B&8r
  c                 C   r?   )Nr  r  r    r<   r$   r$   r%   IASTPali  rA   r  c                 C   r?   )Nu   л̤u   л̣r    r<   r$   r$   r%   CyrillicPali  rA   r  c                 C   s   t jt jd g }t jd }d}g d}|D ]\}}| || | ||  || | | ||  } q|D ]}| |d | | |d | | | } q5|D ]}|D ]}| || | || | | } qRqN| dd} | S )Nr   r  ))r   r  )r  r  )r  r  )ro  r  )rN  r  )rN  r  )r  r  )r  r  )rL  r  )rL  r  )rL  r  )rL  r  r)  r  u   ර්‍ය)r   r"  rO  r:  r!   )r"   rc   r=  ZWJ
conjoiningr   r   r$   r$   r%   SinhalaConjuncts  s   
2*"r  c                 C   sz   t jdd t jdd  t jdd  t jdd  }t jt j }t||D ]\}}|s4| ||} q'| ||} q'| S )Nro  r  r  r  r  )r   r  r  SouthVowelMapSouthVowelSignMaprD   r!   )r"   r)   EOLongEOShortr   r   r$   r$   r%   SinhalaPali  s   8r  c                 C   r?   )Nz\u064F\u0648u   وٗr    r<   r$   r$   r%   UrduAlternateUU  rA   r  c                 C   r?   )Nu   ྃrc  r    r<   r$   r$   r%   TibetanNada  rA   r  c                 C   r?   r  r    r<   r$   r$   r%   TibetanTsheg  rA   r  c                 C      |  tjd d} | S )Nr   r   )r!   r   r:  r<   r$   r$   r%   TibetanRemoveVirama#     r  c                 C   s2   t | d} | dd} | dd} | dd} | S )Nr   u   ཪྺu   རྦu   བྺu   བྦu   ྦྺu   ྦྦ)r  r!   r<   r$   r$   r%   TibetanRemoveBa(  s
   
r  Tc                 C   s2  |  dd} dttj|td|dd  }|dkr6dttj|td|dd  g d }|d	krRdttj|td|dd  g d
 }|d d }dttj|}td|d }	dtd|dd |	g }
dtd|dd td|d d   }td|d }td|d }td|d }|rt| |} |s|dkrt	d| d d | d d |	 d d| } |  dd dd} |dkr|  dd } |r|  |||	 } t	d!| d d | d d" |
 d d#| | } t	d| d d$ | d d |	 d% || } |  |d& |	 |d& |	 } t	d| d d' |	 d( |d) | } dttjd}t	d| d d |	 d d | d d* d+| } t	|d | d |d# | } |  |	d} |  |d, d-} | S dttj|}td|d }t	d| d d. | d | d | d d#|	 | } |d	krt	d/| d d0 | d | d#| } t	d| d d1 | d | d#| } |  d2d} | S t	d3| d d4 | d | d#| } t	d| d d5 | d | d#| } t	|	d6 d7| } t	|	d8 d8| } | S )9Nr   r   r.   r  r   r   r   )u   ฮr7  u   ฝr6  Lao)   ດ   ບu   ຟr:  r  r  r  r  SinhalaVowelSignMapr0  r"  r&  r-  r  rZ   r[   r  r  r  r8  r9  r  r  r  r  rq  r@  z(?=())u   หz(.)(u   )([รล])z\2\3\4u
   ([รล])\3\1\2\4u   รu   รรr  u   (?<!ໂ)(?<!ແ)(?<!ເ)(u   (?<!ເ)u   (?<!າ|ໂ|ແ|ເ)u   ຺ຳu   (?<!โ)(?<!แ)(?<!เ)(u   (?<!เ)u   (?<!า|โ|แ|เ)u   รฺรฺu   รฺr;  )
r!   r]   r3   r^   r_   r  r  rw  r`   ra   )r"   r  shortA
shortAconjr)   r  r   consnAlistVSr=  AIUVirEAIOr  r  vowAconsswapconsOnlyaVowr$   r$   r%   ThaiLaoTranscription1  s^   (00 .
.2.&26
&&&&r-  c                 C   s   t | } | dd} | S )Nr  r  )r  r  r!   r<   r$   r$   r%   LaoTranscription  s   
r.  c                 C   r?   )Nu   ห์   ะr    r<   r$   r$   r%   ThaiVisargaSaraA  rA   r0  c                 C   r?   )N   ᩤ   ᩣr    r<   r$   r$   r%   ThamTallADisable  rA   r3  c                 C   s   d g d}t| |} | S )Nr.   )u   ᨧu   ᨻu   ᩁu   ᨽ)r]   FixTallA)r"   	TallAConsr$   r$   r%   ThamTallAOthers  s   
r6  c                 C   sr   t dd| } t dd| } | dd} t dd| } t| } | d	d
} | dd} | dd} | dd} | S )Nu&   (຺)([ໂເໄ]?)([ຍຣລວຫ])u   ͜\2\3u%   ([ຍຣລວຫ])͜([ໂເໄ]?)\1u	   \1຺\2\1u   ຫ຺u   ຫ͜u   ([ຍຣລວຫ])͜\1u   \1຺\1u   ະ͜r<     ງu   ງໍu   ທr  u   ພr  )r`   ra   r!   r.  r<   r$   r$   r%   LaoPhonetic  s   r8  c                    s   d}d t t j d } fdddD }|dg } fddd	D }td
| d d
 d| d d | d d| d | } tt|D ]#}td
| d d
 ||  d d | d d||  | d | } qH| S )Nu   [ർൎ]r   r   c                    r  r  r  rf  r  r$   r%   rh    r  z(RephaDoubleMalayalam.<locals>.<listcomp>)r   r  r  r  ro  r  rN  r  r'  r  r&  r  rn  rL  r(  r  r  r  r  u   ളc                    r  r  r  rf  r  r$   r%   rh    r  )	r   rM  r  r  r  r  r  r  rp  rZ   r[   r.   r  r*  r  r@  )r3   r^   r8  r`   ra   r]   rj  rP  )r"   r  r=  r  r  rc  r$   r  r%   RephaDoubleMalayalam  s   
<Dr9  c                 C   r?   )Nu   𑠨u   𑠋r    r<   r$   r$   r%   DograShaKha  rA   r:  c                 C   st   t dd| } ddttjddg  d }t dd| } t d	d| } t d
| d| } t d
| d| } | S )Nu   (ᩘ)(.)r7  rZ   r.   TaiThamr1  r[   u   (ᩘ)([ᩕᩖ])u   (ᩘ)(᩠.)u   (ᩘ))r`   ra   r]   r3   r^   r8  )r"   r;  r$   r$   r%   ThamShiftMaiKangLai  s   "r<  c                 C   s0  d ttjd}ddg}d}d}td| d d	 | d
 | d| } td	| d | d d	 | d
 | d| } td	| d | d d | d d	 | d
 | d| } td	| d d	 d | d d	 | d
 | d| } dd g d d }td| d d| } td| d d| } | S )Nr.   r;  u   ᩕu   ᩖu   ᩮr2  u	   (?<!᩠)(r[   rZ   z?)u   \1\2ᩤu   )(᩠)(u   \1\2\3\4ᩤu   (᩠)(u   \1\2\3\4\5\6ᩤu	   \1\2\3ᩤr-  r   )	u   ᨥu   ᨫu   ᨬu   ᨰu   ᨸu   ᩈu   ᨿu   ᩇu   ᨹr  u   (᩠)u   (ᩮᩤ)u
   \1\2ᩮᩣu   (ᩤ)u   \1\2ᩣr\   )r"   r5  rc   SubEAA
reverseSubr$   r$   r%   r4    s   &.:8r4  r   c                 C   s2  t | d} t | d} t | } |dkr| dd} |dkr%| dd} dttj|td|d	d
  }dtd|dd td|d d   }t	
d| d d | d d | d d d| } |dkrod}|dkrud}t	
d| d d | d d | d d d| } t	
d| d d d | d | d| } t	
|d d | d d | d d| } t	
|d d | d d d| } t	
d| d d d | d d | d d| } |dkr| dd } t	
d!d"| } |dkr| d#d$} | d%d&} | dd'} t	
d(d"| } | d)d*} | S )+NTr   u   ฺ   ์r  u   ຺r.   r  r   r   r   r  r  r  r   r  r  rZ   r[   u   (์)u	   \1ั\2\3u   ([ยรลวศษสหฬ])u   ([ຍຣລວຨຩສຫຬ])r-  z]?)u	   \1๎\3\4u   (๎)r@  u	   \1์\3\1r"  u   ง์r=  u   (ั)(.)(๎)r   r  r  u   ງ์r7  r  u   (ັ)(.)(๎)r  r   )r  ThaiReverseVowelSignsThaiDigraphConjunctsr!   r]   r3   r^   r_   r  r`   ra   )r"   r  r   r(  cons_othersr$   r$   r%   r    s:   
(.22**"2
r  c                 C   sP   t | d} t | d} t | } t| ddd|d} | dd} | dd	} | S )
NTr   r/  r  r  u   ะ์rA  u   ะงังr>  )r  rB  rC  r-  r!   )r"   r  r$   r$   r%   r?  ,  s   
r?  c                 C   sn  g d}d ttjd| }d ttjd}d ttjtj d| ddg }tjd d }tjd d }tjd }tjd }tjd	 }	tjd }
tjd
 }tjd }tjd }tjd }tjd }tjd }tjd }d tjd tjd g}tjd }tjd }d tjdd tjdd  }| |
| d| } t	
|d | | d d | d d| } t	
d| d d | d |d | } t	
d|	 d d | d d| } t	
d| d d | d d| } t	
d| d | d d | d d| } t	
d| d d d  | d d d | d! d d"| } t	
d| d d d | d d d"| } | S )#N)   𐬳u   𐬲   𐬝   𐬒   𐬣rF  r.   r   u   𐬄u   𐬅r  r&  r   r   r  r  rN  r  r  rL  r(  r  rn  r  rH  r-  r  r  r[   u   𐬆\1rZ   r  z(?=rG  rE  u   \1𐬡r  r!  rF  )r]   r3   r^   r_   rP  r   r  r"  r!   r`   ra   )r"   	extraConsrc   r;  r<  rq  rs  rc  r   khangayar  rV  thadharT  makbrU  shaVelarDentalr$   r$   r%   AvestanConventionsO  s<   &












"*&""*:*rS  c                 C   r?   r-  r    r<   r$   r$   r%   TaiThamO  rA   rT  c                 C   r?   )Nu   ᩘu   ᩙr    r<   r$   r$   r%   TaiThamHighNga  rA   rU  c                 C   s   t dd| } dS )Nu   (.)(ᩘ)r7  Vinodhr  r<   r$   r$   r%   TaiThamMoveNnga  r  rW  c                 C   r   )N)r  r  r  r  u   ٘r   r    )r"   ShortVowelsr*  r$   r$   r%   UrduRemoveShortVowels  r  rY  c                 C   rk   rl   r$   r<   r$   r$   r%   
LatinPipes  s   rZ  c                 C   s   t d|d }dt t j|}dt t j|}dt t j|}td| d d | d d d	| | } | 	d
d	dd
	dd
} | S )Nr:  r   r.   z(?<!( |r!  rZ   r[   z(?= )r  rB   r   u   ᠂u   ᠃)
r3   r  r]   r^   r_   rP  r  r`   ra   r!   )r"   ra  r=  rc   r;  r  r$   r$   r%   PhagsPaRearrange  s   *r[  c                    st   t jdd t jd d  }t jd   fddt jdd t jd d  D }t||D ]
\}}| ||} q-| S )Nr  r  r   r   c                    s   g | ]} | qS r$   r$   rf  r   r$   r%   rh    r#  z%DevanagariAVowels.<locals>.<listcomp>r  )r   r  r  r  r  rD   r!   )r"   	oldVowels
newAVowelsr   r   r$   r\  r%   DevanagariAVowels  s   
*r_  c                 C   s   |  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd } | S )!Nu   ̃ku   ŋku   ̃gu   ŋgu   ̃cu   ɲcu   ̃ju   ɲju   ̃t̪u   n̪t̪u   ̃d̪u   n̪d̪u   ̃ɖu   ɳɖu   ̃ʈu   ɳʈu   ̃ːku   ːŋku   ̃ːgu   ːŋgu   ̃ːcu   ːɲcu   ̃ːju   ːɲju   ̃ːt̪u   ːn̪t̪u   ̃ːd̪u   ːn̪d̪u   ̃ːɖu   ːɳɖu   ̃ːʈu   ːɳʈr    r<   r$   r$   r%   AnusvaraToNasalIPA  s"   r`  c                 C   r?   )N   ×r   r    r<   r$   r$   r%   IPARemoveCross  rD  rb  c                 C   rk   rl   r$   r<   r$   r$   r%   ChakmaAVowels  rn   rc  c                 C   sX   t jdd }g d}t||D ]\}}| d| |} qtd|d  d d| } | S )Nr  r  )u   𑨻u   𑨼u   𑨽u   𑨾u   𑩇u	   (?<!𑩇)r   u   𑨺)r   r"  rD   r!   r`   ra   )r"   yrlvyrlv_subr   r   r$   r$   r%   ZanabazarSquareContextual  s   rf  c                 C   r;   )Nu   𑨄𑨊u   𑨇u   𑨆𑨊u   𑨈r    r<   r$   r$   r%   ZanabazarSquareAiAu  r>   rg  c                 C   r  )Nr   u   𑨳)r!   r   r:  r<   r$   r$   r%   ZanabazarSquareMongolianFinal  r  rh  c                 C   r  )Nr   r   u   ˮr    r<   r$   r$   r%   TamilRemoveApostrophe  r   ri  c                 C   r   )N)r  r!  r"  r  r  r  r  r  r   r    )r"   numeralsnumr$   r$   r%   TamilRemoveNumbers  r  rl  c                 C   r?   )Nu   𑐟𑑂u   𑐟𑑂‍r    r<   r$   r$   r%   NewaSpecialTa  rD  rm  c                 C   s(   |  dd} t| d} |  dd} | S )Nre  u   ஷ²r   u   ஷ்²ரீu   ஶ்ரீ)r!   r  r  r<   r$   r$   r%   TamilDisableSHA  s   rn  c                 C   sL   |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} | S )Nr>  X@X@r}   Or   r    r<   r$   r$   r%   swapEe     rq  c                 C   sL   |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} | S )Nz^ero  r}   r>  z^or   rp  r    r<   r$   r$   r%   swapEeItrans  rr  rs  c                 C   s(   t ddd | } t ddd | } | S )NuO   (\A\w)|(?<!\.\w)([\.?!]\s*)\w|\w(?:\.\w)|(
)\w|(
("|\“|'|\‘))\w|(?<=\w\.)\wc                 S   s   |    S rl   )groupupperr   r$   r$   r%   rZ  ,  s    z$capitalizeSentence.<locals>.<lambda>z(@)(.)c                 S   s   |   d  S )Nr   )groupsru  rv  r$   r$   r%   rZ  /  s    r  r<   r$   r$   r%   capitalizeSentence%  s   	rx  c                 C   r?   )Nu   𑐬𑑂u   𑐬𑑂‍r    r<   r$   r$   r%   NewaDisableRepha3  rA   ry  )r   )r   )F)FF)FT)r   )T(i  r   r   r3   r   aksharamukha.ScriptMap.Romanr    aksharamukha.ScriptMap.MainIndicr   r   r   r	   r
   r   r   r   r   r   r   r   r   r    aksharamukha.ScriptMap.EastIndicr   r   r   r   r   r   r   r   r   r   r  r`   r\  r&   r:   r=   r@   rI   rJ   rO   rQ   rV   rX   rd   rf   rg   rh   rj   rm   ro   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r  r  r)  r,  r0  r1  r2  r4  r6  r>  r?  rG  rL  rT  rd  re  rf  rg  rh  ri  rj  ry  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r+  r/  r2  r3  r4  r@  rB  rC  rE  rG  rH  rK  rW  rX  r^  rn  rq  rr  rs  rt  ru  rx  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r!  r-  r.  r/  r0  r1  r2  r3  r:  r;  r>  r?  rA  rD  rE  rF  rG  rH  rI  rJ  rK  rM  rP  rR  r`  rc  rd  rf  rg  rw  r|  r~  r  r  rQ  rW  r  r  r  r  r  r  r  r  rw  r  r  r  r  r  r  r  r  r2   r1   r  r*   r+   r  r'   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r  r  r  r  r  r  r-  r.  r0  r3  r6  r8  r9  r:  r<  r4  r  r?  rS  rT  rU  rW  rY  rZ  r[  r_  r`  rb  rc  rf  rg  rh  ri  rl  rm  rn  rq  rs  rx  ry  r$   r$   r$   r%   <module>   s  @,
		
	.	
	'	
 	p	 0 4"
												- D		

	U4#0