o
    Ni!                    @   sV  d dl mZ ddl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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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	 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% Z3dd'd(Z4dd)d*Z5dd+d,Z6dd-d.Z7dd/d0Z8dd1d2Z9dd3d4Z:dd5d6Z;dd7d8Z<dd9d:Z=dd;d<Z>dd=d>Z?dd?d@Z@ddAdBZAddCdDZBddEdFZCddGdHZDddIdJZEddKdLZFddMdNZGddOdPZHddQdRZIddSdTZJddVdWZKddXdYZLddZd[ZMdd\d]ZNdd^d_ZOdd`daZPddbdcZQddddeZRddfdgZSddhdiZTddjdkZUddldmZVddndoZWddpdqZXddrdsZYddtduZZddvdwZ[ddxdyZ\ddzd{Z]dd|d}Z^dd~dZ_dddZ`dddZadddZbdddZcdddZddddZedddZfdddZgdddZhdddZidddZjdddZkdddZldddZmdd ZndddZodddZpdddZqdddZrdddZsdddZtdddZudddZvdddZwdddZxdddZydddZzdddZ{dddZ|dddZ}dddZ~dddZdddZdddĄZdddƄZdddȄZdddʄZddd̄Zddd΄ZdddЄZddd҄ZdddԄZdddքZddd؄ZdddڄZddd܄ZdddބZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZddd ZdddZdddZdS (	     )
GeneralMap    )AvestanIAST)AhomTamilTamilGranthaLimbuMeeteiMayekUrduLepchaChakmaKannadaGurmukhiNewa)LaoTaiThamTibetanBurmeseKhmerBalineseJavaneseThai	SundanesePhagsPaChamThaanaRejangZanabazarSquareMakasarKawiPostProcessNc                 C   s    t | d t |d krdS dS )Nr   )len)xy r'   K/home/ubuntu/.local/lib/python3.10/site-packages/aksharamukha/ConvertFix.pylenSort   s   r)   c                 C   s   |  dd} |  dd} | S )Nu   ଂu   ଙ୍u   ଃu   ହ୍replaceStrngr'   r'   r(   OriyaIPAFixPre   s   r.   c                 C   s   dd ttjd d }td| d d| } td| d d	| } td| | d d| } td| | d d	| } td| | | d d| } td| | | d d	| } | S )
N(|IPA)^   (ə)u   \1ʌz(\s)u   \1\2ʌ)joinGMCrunchSymbols
Consonantsresub)r-   
consonantsr'   r'   r(   SinhalaIPAFix   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} |  dd} | S )N   əu   ɔju   d͡ʒu   ẏu   kʂu   kʰu   ʂu   s̪u   ʃu   ʋu   u̯u   t͡su   t͡ʃu   ɪiu   iːu   uːuu   eːeu   oːou   ɾɨu   ɾuu   ɾɨːu   lɨluu   lɨːr*   r,   r'   r'   r(   OriyaIPAFix)   s$   rD   c                 C   s   |  dd} |  dd} |  dd} |  dd} |  dd	} td
|}g d}|D ]}|D ]}|  || || } q.q*|  d	d} |  dd} |  dd} | S )N{\m+}   ꣳ\m++   ꣴ\m+\`\_\''\"AyogavahaMap)rK   rM   \'   ᳚rO      ॑   ॒r+   r6   
CrunchList)r-   Source	AyogavahaSvarasr%   r&   r'   r'   r(   VedicSvarasLatinIndic@   s   rX   c                 C   s@   |  dd} |  dd} |  dd} |  dd} |  d	d
} | S )NrP   rM   rQ   rO   rR   rK   rF   rI   rH   rG   r*   r,   r'   r'   r(   VedicSvarsIndicLatinY   s   rY   c                 C   sT   |  dd dd dd} td|d }|  d	d
} |  dd} td|}| S )NrM      ↑↑rK      ↓rO      ↑rN   r   rG   rH   rI   rF   rS   )r-   TargetanurV   r'   r'   r(   VedicSvarasOthersb   s   r_   c                 C   s   |  dd} |  dd} |  dd} |  dd} |  d	d
} |dks&|dkr2|  dd} |  dd} td|}g d}|D ]}|D ]}|  || || } qBq>| S )NrO      ̍rM      ̎rK      ̱rG      gͫ̄rI      gͫISOISOPaliu   \’’   \’rN   r`   ra   rb   rS   r-   r]   rV   rW   r%   r&   r'   r'   r(   VedicSvarasDiacrticsl   s   rj   c                 C   s   |  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} |  dd
} td|}g d}|D ]}|D ]}|  || || } q:q6| S )NrO   r`   rM   ra   rK   rb   u   \м++   г͡мu   \м+   г͜мrG   rI   rN   rh   rS   ri   r'   r'   r(   VedicSvarasCyrillic   s   rm   c                 C   sX   |  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} |  dd
} | S )Nr`   rO   ra   rM   rb   rK   rc   rG   rd   rI   rk   rl   r*   r,   r'   r'   r(   VedicSvarasNonDiacritic   s   rn   c                    s
  d}d}d ttj|dddd}d ttj|dddd}d td	g|}d td
g|}tdg|d }d tdg|d tdg|d  }	tdg|  d }
d  fdddD dddd}|dv r| 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!| } td| d | d d| } | ||} | |d} | |d} | S )"Nu      ṿr0   r3   z\^.z\. 	ViramaMapNuktaMapVowelMapr         ConsonantMap    c                    s   g | ]} | qS r'   r'   ).0r?   
TargetConsr'   r(   
<listcomp>       z"FixRomanOutput.<locals>.<listcomp>)
r   ru         
                  r   re   rf   Titusr@   u   ŭz(?<=r2   r/   z_\1u   (?<=ṿu   ṿ))(z\1_\3z)(?=z_\2\2\1)r5   r6   r7   
VowelSignsr+   Vowelsr9   r:   )r-   r]   SchwaDepVVowelSignList	VowelListViramaNuktaVowelAVowelIUConsH	UnAspConsr'   rz   r(   FixRomanOutput   s.   $$*(&"*&r   c                 C   s@  |  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} |  dd} |  dd} g d}g d}||v rCt| |} | S |dkrc|  dd dd dd} |  dd} |  dd} | S |dksk|dkr|  dd dd dd} |  dd} |  dd} | S ||v r	 | S |dkrt| |} | S t| |} | S )NrE   rI   rJ   rK   rL   rM   u   \\мu   \мz\\mz\mz\\'rO   z\\"z\\_)r   IASTPalire   r   rf   )HKItransVelthuisSLP1WXr1   rZ   r[   r\   rG   rc   rd   RomanReadableRomanColloquialrq   ggumgumRussianCyrillic)r+   rj   rm   r_   )r-   r]   vedicDiacRomanvedicnonDiacRomanr'   r'   r(   FixVedic   s>   


r   c                 C   s  |  dd} t| |} |dv r!|  dd dd dd	 d
d} |dkr-|dkr-t| } |dkr5t| } |dkr=t| } |dkrEt| } |dkrMt| } |dkrUt| } |dkr]t| } |dkret	| } |dkrt
| } |dkr|  dd dd dd} |dkr|dkr|  dd dd dd} |dkr|  dd} tdd| } |  d d! d"d# d$d} |d%kr|  d&d'} t| } |d(ks|d)kr|  d*d+} |  d,d-} |d.ks|d/kr|  d0d1} |  d2d1} |  d*d3} |  d,d4} |d5ks|d6kr|  d7d1} |d8kr|  d9d1} |d:krt| } |d;kr"t| } |d6kr5td<d=| } td>d?| } |d@kr;	 |dAv rK|dBkrK|  dCdD} | S )EN   ʽrq   r   u   uʼ   üu   ūʼu   ǖu   aʼ   öu   āʼu   ȫSinhalar1   Santalir   SoraSompeng
WarangCitiWanchoMror   r   tthddhzh'r   Oriyakshr%   zx(?=[aeiou])jnygyshszr'Bengalizm'ngr   r   a_iu   aïa_uu   aüre   rf   rg   rO   u   \’ʽza:iza:ur   r   z\.aAksharaaz\a;HanifiRohingya	Mongolianz([aAiIuUeo])(RR)(i|I)z\1R_L\3z([aAiIuUeo])(LL)(i|I)z\1L_L\3RomanSemitic)r   re   	Malayalamu   ṯu   ṟ)r+   r   r<   FixIPA
FixSantali
FixAvestanFixSoraSompengFixWarangCiti	FixWanchoFixMroFixRomanReadabler9   r:   FixRomanColloquialFixHanifiRohingyaFixMongolianr-   rU   r]   r'   r'   r(   PostFixRomanOutput
  st   
$




r   c                 C   sD   |  dd} zt d| dd  | |} W | S  ty!   Y | S w )Nu   ˞rq   Fix-_)r+   globalsKeyErrorr   r'   r'   r(   FixSemiticOutputc  s   r   c                 C   s   t d|d }| |d |} zt d|  | } W n	 ty$   Y nw | dd} t| |dd} g d	}||vrL| d
d} | dd} | dd} | S )Nrr   r   r   r   r   rq   Freverse)Assameser   
DevanagariGujaratir   r   r   r   r   TeluguTamilExtendedGranthaSharadarR   r[   rP   rZ   rQ   r\   )r6   rT   r+   r   r   ShiftDiacritics)r-   rU   r]   virvedicScriptsr'   r'   r(   FixIndicOutputo  s   r   Fc                 C   s  dd ttjddg  d }dd ttjddg  d }|sMtd| | d| } td	d
| } tdd
| } tdd
| } tdd| } | S g d}dd |ddg  d }t|d d
| } t|d d
| } t|d d
| } t|d d
| } | S )Nr/   r0   Hebrew   ּr2   )?   (׳)z\3\2\1
   (וֹ)(׳)r   
   (וּ)(׳)   (׳)(ַ)\1)   ְ   ֱ   ֲ   ֳ   ִ   ֵ   ֶ   ַ   ָ   ֹ   ֺ   ֻ   ׇr      וֹ   וּ)r5   r6   r7   r   r9   r:   )r-   rU   r   
vowelsignsvowelsigns2vowelsvowelsRr'   r'   r(   FixHebr  s    ""r   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g  d }dd ttjdddg  d }dd ttjdg d	  d }dd ttjdg d
  d }g d}g d}	dd}
dd ttjd|	 |
 dg  d }|s| dd} | dd} | dddd} tdd| } tdd| } t|d | 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)| } td*| d+| } td,d-| } td.d-| } | d/d0d1d2d3d4} dd g d5 d }dd g d6dg  d }t	||	D ]"\}}t|d | d | d7 d | d8 d'| d9 d: | } q@td;| d8 d+| } | d<d=} | d>d?} | d@dA} | dBd} n~g dC}dd |dDdEg  d }t	|	|D ]\}}| ||} qt|dF d#| } | dGdH} | dIdH} | dJdKdLdMdNd} tdO| d d| } tdP| d d| } tdQ| | d d| } | dRdS} tdTdU| } tdVdU| } | dWdXdYdZd[d\d]d^} td_d`| } | dadb} tdcd>| } t|d" d#| } | dddd} tddde| } tdfdg| } tdh| di| } tdj| dk d@| } tdld>| } tdmd@| } tdnd>| } | dodM} tdp| d d| } t|d | d dq| } | drd} ds| v r| dsd} | dtdu} nUtdv| dw dx| } tdydz| } t|d{ du d d d' d| du d d}| } t|dw d d' d d~ d| } t|dw | dw d~ d}| } | dtdu} | ddu} tdd| } | dsd} | S )Nr/   r0   r   r2   u   צּu   גּr   r   )r   r      ׁ)r   r   r      ׳)   כu   מu   נu   פu   צ   פּu   כּ)u   ךu   םu   ןu   ףu   ץu   ףּu   ךּu   ב,ח,ע,צ,ש,ת,r   r   rq      ʾu
   ג׳ְג׳u   גּ׳u
   צ׳ְצ׳u   צּ׳u   מְʼ([גדזטכצקת])u   נְ\1u   מְʼu   מְ(?!u   \1ַ\2u   ַּu   ַּu   ַַu   ְַּu   ְּr   r   r   r   r   r   u   (ַ)\2u   (ַ)(ּ)\2\3u*   ([ושרקסנמליזטײהגדת])(ְ)\1u   \1ּu   (שׁ)(ְ)\1u
   כְּכּu   קּu
   פְּפּr   u
   בְּבּu   בּ)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r      יr   r   u   (׳?)u   |י|ו)z\3z\4u   (?<!ה)(ְ)(׳?)(?!u   װֹu   וֺu   װu   וu   ײr     ʼ)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   u
   ([ּׁׂ])u   אֲu   אַu   עֲr   r   r   r   r   u   (?<=[ֵֶַָֹ])([א])(?!u   (?<=[ִֵֶַָֹֻ])([ה])(?!u   (?<=[ֵֶ])([י])(?!u   הּu   הu   ([שרקסנמליזט])(ּ)u   \1ְְ\1u   ([דתצה])(ּ)u   תu   טu   חr   u   עu   אu   שׂu   סu   ש(?![ׂׄ])u   שׁu   ׁׁr   u   ב(?!ּ)u   צ(?!׳)u   טְְסu   (\s|^|\.|,|א)(וֹ|וּ)u   א\1\2u   (וּ)u   װְװ\2u   י(?=u   |ַ)u   ו(?=[ְִֵֶַָׇֺֻ]|ַ)u   (?<!ִ)(י)u   (ו)(?![ֹֺּ])r   u   [א](?!u   \1ְ\2u   אְu   ௞u   ְְr   z(\s|\.|,|^)u   (ְ)u   \1\2ֶu   (ּ)(ְ)u   \1ֶu   (ְr   u   \1\2\3ֶz(?!(\s|\.|
|,|$))u   \1ֶ\3u   ְֶu   (?<![אע])ַ)
r5   r6   r7   r   r8   splitr+   r9   r:   zip)r-   r   r   r;   vowelsignsAvowelsignsADvowelsignsADShinvowelsignsADShinG	finalConsfinals	otherConsconsonantsAllshortVowels	vowelsAllcfr   r   r'   r'   r(   	FixHebrew  s   $"$$$
*>$
."r  c                 C   s   dd ttjd d }dd ttjd d }|sgtd| d| } td| d| } t|| | | d d| } t|| | d d	| } t|d
 | d d| } | dd} | dd} | S tdd| } | S )Nr/   r0   r   r2   u   (᠋)r  u   (ᢀ)z
\5\1\2\3\4z\4\1\2\3?\3\1\2u    ʼ   ​r  u   (ᠠ)(?!᠋)u   \1᠋)r5   r6   r7   r   r8   r9   r:   r+   )r-   r   r   r;   r'   r'   r(   r   _  s   r   c           	      C   s$  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 }d td	d
 ttjd}|szt|| d| } t|d d| } t|d d| } t|d d| } | dd} | dd} | dd} nid}td| | d| } t|| | d| } t|ddd d| } t|ddd d| } | dd} tdd| } | dd} | dd} t|d d | } t|d d!| } | dd} | d"d#} |st	g d$g d%D ]
\}}| ||} q| S t	g d$g d%D ]\}}| ||} q| S )&Nr/   r0   r   u   𐴗u   𐴙r2   r   rq   c                 S   s   d|  d S )N(?<!r2   r'   )r%   r'   r'   r(   <lambda>|  s    z#FixHanifiRohingya.<locals>.<lambda>u   𐴀\1r   u   \1𐴧u   𐴀𐴟u   \1𐴗u   𐴀𐴞u   \1𐴙u   𐴤\u   𐴥u   𐴤/u   𐴦r   u   𐴢u   ([𐴤𐴥𐴦])u   (𐴀)\1\3\2u   𐴀u
   \1𐴀𐴟u
   \1𐴀𐴞u   (.)𐴧z\1\1u   \1𐴖ʾu   \1𐴘ʾu   𐴜u   𐴖r  r  ;u   ،u   ؟u   ؛)
r5   r6   r7   r8   r   mapr9   r:   r+   r	  )	r-   r   consListvowListvowListNotAconsListLookBehindtonesr%   r&   r'   r'   r(   r   v  s@   $$r   c                 C   s   dd ttjd d }|sA| dd} | dd} | d	d
} t|d d| } td| d| } td| d d| } | S | dd} | dd} | d
d	} | dd} | dd} | dd} | S )Nr/   r0   MasaramGondir2   u   𑴌𑵅𑴪u   𑴮u   𑴓𑵅𑴕u   𑴯u   𑴛𑵅𑴦u   𑴰u   𑵅𑴦u   \1𑵇u   𑴦𑵅u   𑵆\1u   𑵅(?!u   𑵄u   𑵇u   𑵆u   𑵅)r5   r6   r7   r8   r+   r9   r:   r-   r   r!  r'   r'   r(   FixMasaramGondi  s    r(  c                 C   st   dd ttjd d }|s7tdd| } tdd| } | dd	} | d
d	} td| d d	| } | S 	 | S )Nr/   r0   GunjalaGondir2   u   (𑵺ʾ)([𑵻𑵼𑶀𑶁])u   𑶕\1u   (𑵺ʿ)([𑵽𑵾𑶂𑶃])r  rq      ʿu   𑶗(?!)r5   r6   r7   r8   r9   r:   r+   r'  r'   r'   r(   FixGunjalaGondi  s   r+  c                 C   s|  g d}g d}dd ttjd d }|si| dd} td	| d d
| } tdd| } d| v r\t||D ]\}}t|d | d || } q9td| d d| } | dd} td| d d| } | S | dd} | dd} tdd| } g d}g d}t||D ]
\}}| ||} qg d}	g d}
t|	|
D ]
\}}| ||} qt||D ]
\}}| ||} q| S )N)u   𑩞𑪙u   𑩜𑪙u   𑩠𑪙u   𑩭𑪙u   𑩯𑪙u   𑩲𑪙u   𑩴𑪙   𑩼𑪙   𑩽𑪙   𑩿𑪙   𑪁𑪙)u   𑪊u   𑪋u   𑪌u   𑪍u   𑪎u   𑪏u   𑪐u   𑪑u   𑪒   𑪓u   𑪔r/   r0   Soyombor2   u   𑩜𑪙𑪀u   𑪃u   𑩿𑪙(?=   𑪈u   (?<!𑪙)(.)𑪙\1u   \1𑪘r  r  u   𑪈(?!r0  rq   u   𑪙(?!u   𑪚 u   (.)𑪘u   \1𑪙\1)r,  r-  r/  r.  )u   𑪆u   𑪇u   𑪉r2  )u   𑩵u   𑩶u   𑩷)u   𑩡u   𑩢u   𑩣)r5   r6   r7   r8   r+   r9   r:   r	  )r-   r   finVirfinr!  r%   r&   viraConinitial	tsaSeriescaSeriesr'   r'   r(   
FixSoyombo  s8   r:  c                 C      t | |} | S N)KharoshthiNumeralsr-   r   r'   r'   r(   FixKharoshthi     
r?  c                 C   s   d d}d d}|s,t||D ]\}}| d| |} q| dd} | dd} | S g d}g d}t||D ]
\}}| ||} q9t||D ]\}}| |d| } qI| S )	Nu   𑱲 𑱳 𑱴 𑱵 𑱶 𑱷 𑱸 𑱹 𑱺 𑱻 𑱼 𑱽 𑱾 𑱿 𑲀 𑲁 𑲂 𑲃 𑲄 𑲅 𑲆 𑲇 𑲉 𑲊 𑲋 𑲌 𑲍 𑲎r3  u   𑲒 𑲓 𑲔 𑲕 𑲖 𑲗 𑲘 𑲙 𑲚 𑲛 𑲜 𑲝 𑲞 𑲟 𑲠 𑲡 𑲢 𑲣 𑲤 𑲥 𑲦 𑲧 𑲩 𑲪 𑲫 𑲬 𑲭 𑲮r  rq   r*  )u   𑲂u   𑲃u   𑲄)u   𑱶u   𑱷u   𑱸)r  r	  r+   )r-   r   subjoinCons	subjoinedr%   r&   r8  jaSereisr'   r'   r(   
FixMarchen  s   

rD  c                 C   sd   g d}g d}g d}|s t ||D ]
\}}| ||} q| S t ||D ]
\}}| ||} q%| S )N)u   𖩎u   𖩙u   𖩚u   𖩛u   𖩜u   𖩞)u   𖩃𖩢u   𖩌𖩢u   𖩍𖩢u   𖩍𖩣u   𖩉𖩢u   𖩀𖩢)u   𖩃u   𖩌   𖩍rE  u   𖩉u   𖩀r	  r+   )r-   r   	extraconsconsnormaldig
consnormalr%   r&   r'   r'   r(   r   $  s   r   c           
      C   sx  g d}g d}g d}g d}g d}g d}|stt ||D ]
\}}	| |	|} qt ||D ]\}}	| |d |	} q/| dd} t ||D ]\}}	| |d	 |	} qG| d	d
} | dd} | dd} | dd} | dd} | S t ||D ]
\}}	| ||	} qyt ||D ]\}}	| |	|d } qt ||D ]\}}	| |	|d	 } q| dd} | dd} | dd} | S )N)u   𞋬u   𞋭u   𞋮u   𞋯)rK   z\-z\!z\;)u   𞋦u   𞋧u   𞋨u   𞋪)   𞋕u   𞋛   𞋀u   𞋞)u   𞋢u   𞋣u   𞋤u   𞋥)rJ  rK  u   𞋁u   𞋜r*  u   𞋉r  u   𞋝u   𞋋𞋗u   𞋡u   𞋋𞋎u   𞋠u   𞋓Øu   𞋒   Ørq   rF  )
r-   r   	tonemarkstonewrinasalization	nasvowels	AnusvarasAnusvaraVowelsr%   r&   r'   r'   r(   r   3  s<   r   c                 C   sV   |s	 | S |  dd} |  dd} |  dd} |  dd} |  d	d} |  d
d} | S )Nu   𑗜u   𑖲u   𑗝u   𑖳u   𑗛u   𑖄u   𑗘u   𑖂u   𑗙u   𑗚u   𑖃r*   r>  r'   r'   r(   
FixSiddhamc  s   
rS  c                 C   $   |s
|  dd} | S |  dd} | S )Nr3  u   𑱃r*   r>  r'   r'   r(   FixBhaiksukiq  
   rU  c                 C   s\   g d}g d}|st ||D ]
\}}| ||} q| S t ||D ]
\}}| ||} q!| S )N)u   𑊽u   𑋃u   𑋉u   𑋕)u   ˍ𑊼u   ˍ𑋂u   ˍ𑋈u   ˍ𑋔rF  r-   r   sindhisindhiapproxr%   r&   r'   r'   r(   FixKhudawadiy  s   rZ  c                 C   s   t | d|} tjd }d}g d}g d}|sC| || |} t| dd} t| dd} |D ]}|D ]}| || || } q3q/| S t| d} t| d} | ||| } | dd} | d	d
} |D ]}|D ]}| || || } qiqe| S )Nr   r   u   (ஆ))rQ   rR   rP   )r  u   ˮ   ꞉Tu   ஷ²u   ஶu   𑌃r[  )CorrectRuLur   SignMapr+   r"   RetainDandasIndicRetainIndicNumerals)r-   r   avaavaA	VedicSignTamilDiacriticr%   r&   r'   r'   r(   FixTamil  s0   
rd  c                 C   s   |s	 | S |  dd} | S )Nu   ଵu   ୱr*   r>  r'   r'   r(   FixOriya  s
   re  c                 C   s   t | d|} tjd }d}|sB| || |} t| d} t| dd} ddtj	 d }t
|d d	 d
tjd  d | } | S t| d} | ||| } t| d} | S )Nr   r      (ਆ)T([rq   ])   ੱ(.)\1\2r  )r\  r   r]  r+   r"   InsertGeminationSignr_  r5   r6   VedicSvarasListr9   r:   rr   ReverseGeminationSignr-   r   r`  ra  Vedicompr'   r'   r(   FixGurmukhiLoC  s   
$rq  c                 C   s   t | d|} tjd }d}|sB| || |} t| d} t| dd} ddtj	 d }t
|d d	 d
tjd  d | } | S t| d} | ||| } t| d} | dd} | dd} | dd} t| d} | S )Nr   r   rf  Trg  rq   rh  ri  rj  rk  r  u   ੰਨu	   ਨ੍ਨu   ੰਮu	   ਮ੍ਮu   ੰu   ਂ)r\  r   r]  r+   r"   rl  r_  r5   r6   rm  r9   r:   rr   rn  GurmukhiYakaashro  r'   r'   r(   FixGurmukhi  s$   
$rs  c                    s   t d|d t d|d t t j|dd }d  fdd|D  fd	d|D  }t|t t j|dd
 D ]\}}|sL| ||} q?| ||} q?| S )Nrw         rv      r  c                       g | ]}|   qS r'   r'   ry   r%   )aprar'   r(   r|         zCorrectRuLu.<locals>.<listcomp>c                    rw  r'   r'   rx  )ry  lar'   r(   r|     r{  r   )r6   rT   r7   r   r	  r   r+   )r-   r]   r   uuuruConsr%   r&   r'   )ry  r|  rz  r(   r\    s   ($r\  c                 C   s   d ttj|}d tj}|s/td| d d | d d| } |dkr-| dd} | S |dkr9| dd} td| d d | d d| } | S )Nr0   r/   r2   r   r   u   ³்u   ்³)r5   r6   r7   r   
Diacriticsr9   r:   r+   )r-   r]   r   VSDiacr'   r'   r(   r     s   ""r   c                 C   s|   |s&|  dd} |  dd} |  dd} tjD ]}|  d| |d } q| S tjD ]}|  |d d| } q)|  dd	} | S )
Nu   ക്‌ഷu	   ക്ഷu   ശ്‌രu   ശ്‍രu   ൗu   ൌ   ‌u   ്u   ്‌)r+   r6   rm  )r-   r   svarar'   r'   r(   FixTamilExtended  s   

r  c                 C   s  d ttjd}d tjdd tjdd  }tjdd tjdd  }|std	| d
 d	 | d
 d| } td	| d
 d	 |d  d
 dtjd  d tjd  | } td	| d
 d	 |d  d
 dtjd  d tjd  | } td	| d
 d	 |d  d
 dtjd  d t	j
d  | } td| d
 d d| } | S tdtjd  d	 | d
 tjd  d|d  | } tdtjd  d	 | d
 tjd  d|d  | } tdtjd  d	 | d
 t	j
d  d|d  | } td| d
 d	 | d
 d| } | S )Nr0   r   	      r   r      ru   r/   r2   u   ​‌‍‌\2\1u   ​‌‍‌r   u   (​‌‍‌.)(u   (்ˆ)\2\3\1r  u   ​(r   )r5   r6   r7   r8   r   VowelSignMapSouthVowelSignMapr9   r:   r   SouthConsonantMap)r-   r   ListCListEAIListOAUr'   r'   r(   FixTamilGrantha   s   "">>>666"r  c                 C      t | |ddS )NKhmerLoC)target)FixKhmerr>  r'   r'   r(   FixKhmerLoC;     r  r   c                 C   s   d ttj|}d ttj|}d ttj|}tjd }tjd }|sRt	
|d | d d| } t	
d| d d d | d d	| } | d
d} | S | d|} t	
|d d| } t	
d| d d || d | } | dd
} | S )Nr0   rt  r   r/   r2   u   ្\1u	   (?<!្)(u   ្u   \2៌u   ិំu   ឹu   (?=[ឫឬឭឮ])u   ៌r   )r5   r6   r7   r8   r   CombiningSignsr   rw   rr   r9   r:   r+   )r-   r   r  r  ListVListArz  r   r'   r'   r(   r  ?  s   

&"r  c                 C   s   |s(|  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} | S |  dd} |  dd} |  d
d	} |  dd} |  dd} |  dd} |  dd} |  dd} | S )N   ်ရ   ြ   ်ယ   ျ   ်ဝ   ွ   ြျ   ျြ   ွျ   ျွ   ႂြ   ြွu   ꩳ   ရ   ြႂu   ်ꩳr*   r>  r'   r'   r(   FixKhamtiShanZ  s"   r  c                 C   s   |s.|  dd} |  dd} |  dd} |  dd} |  d	d
} |  dd} |  dd} | S |  dd} |  d
d	} |  dd} |  dd} |  dd} |  dd} | S )Nu   ်ꩺr  r  r  r     ႂr  r  r  r  r  r  u   ႂျu	   ်၀ျr*   r>  r'   r'   r(   FixTaiLaingq  s    r  c                 C   s   |s6|  dd} |  dd} |  dd} tdd| } |  d	d
} |  dd} |  dd} tdd| } | S tdd| } |  d
d	} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} |  dd} | S )Nr  r  r  r  r  r     (ှ)([ျြွ])r   r  r  r  r     ွြr  u   သျʽ?ျu   သျ်ယ   ([ျြွ])(ှ)r     ှu   ်ႁr+   r9   r:   r>  r'   r'   r(   FixShan  s(   r  c                 C   sx  g d}|D ]
\}}|  ||} qt| |} |  dd} |D ]
\}}|  ||} q|  dd} g d}g d}|st||D ]
\}}|  ||} q>|  dd} t|D ]\}}t|D ]\}	}
|  ||
 || ||	  } q[qSt|D ](\}}|  |d	 || d	 } |  d
| d
||  } |  d| d||  } qs| S |  dd} t||D ]
\}}|  ||} q|  dd} | S )N))u   ငu   ၚ)u   ဉ   ည)u   ဈu   ၛr     u	   ည္ည)u   ္နu   ္မu   ္လ)u   ၞu   ၟu   ၠu   ၠြu   ြၠr  u   ရ်u   ၚ်u	   ်ရၠu	   ၠ်ရ   ္u   ်)r+   
FixBurmeser	  	enumerate)r-   r   pairsr%   r&   medials_cons_monmedials_monr?   med1r>   med2medr'   r'   r(   FixMon  s8   
r  c                 C   s  d ttjd}tjd }tjd }tjd }tjdd tjdd  tjd	d
  }g d}d dd dD }|s\t	d| d | d d| } t	dtjd  d d d d d| d | } t	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| } t	d| d d | d | d| } t
||D ]\}	}
t	d |	 |
| } qt	d!d"| } t	d#d$| } t	d%d&| } t	d'd(| } | d)d*} | d+d,} | d-d.} | d/d0} | d1d2} t	d3| d d4| } | d5d6} | d7d8} | d9d:} t	d;d<| } | d=d>} | d?d@} | dAd:} | dBdC} | dDdE} | S t	dFd<| } | d>d=} | d@d?} | d:dA} | d*d)} | d,d+} | d0d/} | d.d-} | d|} | dG|} | tjd | | tjd | } | dH| | dH| } t
||D ]\}	}
| |
||	 } q| S )INr0   r   r   r     ru        rx   !   )r  r  r  r  c                 S      g | ]}t j| qS r'   )r   rw   rx  r'   r'   r(   r|         zFixBurmese.<locals>.<listcomp>)r   ru   rv   r   r   r  u   (?<!ာ)r/   r2   u   ္\1rv   r  r   r  u
   (ရ)(္)u	   (?<!္)(?)u   \1\2ါu   )(္)(u   \1\2\3\4ါu   (္)(u   \1\2\3\4\5\6ါu   (?<=်္)(u   (?<!်)္u   ျါu   ျာu   (?<!ဂ)ြါu   ြာu	   ျေါu	   ျောu   (?<!ဂ)ြေါu	   ြောu	   သ္သu   ဿu	   ဉ္ဉr  u   ˳u   ့u   ့်u   ့်u   ာ္u   ာ်u   (ရ်္င်္)(u   ရ်္င္\2u   ါ္u   ါ်u	   ်္ယr  u   ြ်္ဝr  r  r   r  r  r  r  r  u   ရျu   ရ်္ယu   ငျu   င်္ယr  u   ါr  )r5   r6   r7   r8   r   rr   r  rw   r9   r:   r	  r+   )r-   r   r  r   AAEyrvhyrvhsub	TallAConsr%   r&   r'   r'   r(   r    sh   


*0&.:&$r  c           	      C   s   t t j|d }t t j|d }dt t j|}dt t j|}dt t j|}|sQtd| d | d | d d | | d d| | } | S | 	||| } | S )Nr   rt  r0   r/   r2   r   )
r6   r7   r   r8   r5   r   VowelSignsNVr9   r:   r+   )	r-   ScriptRephar   r   rz  r  r  ListVSr'   r'   r(   AddRephaB  s   :r  c                 C      |s
t | d} | S 	 | S )NTagbanwar"   rl  r>  r'   r'   r(   FixTagbanwaU  
   r  c                 C   r  )NBuhidr  r>  r'   r'   r(   FixBuhid]  r  r  c                 C   s   |s(|  dd} |  dd} |  dd} |  dd} t| d	} |  d
d} | S |  dd} |  dd} |  dd} |  dd} | S )Nu   ᨂʾᨀu   ᨃu   ᨆʾᨄu   ᨇu   ᨊʾᨑu   ᨋu   ᨎʾᨌu   ᨏBugineser  rq   )r+   r"   rl  r>  r'   r'   r(   FixBuginesee  s   r  c                 C   s\   d}t | d||} |s	 | S | dd} g d}g d}t||D ]
\}}| ||} q!| S )Nu   ᬃr      ᭌ	   ᬚ᭄ᬜ)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   r  vowelsAr   vvAr'   r'   r(   FixBalinesez  s   r  c                 C   s  d}d ttj|dg }d ttj|}d ttj|}ttj|d }ttj|d }ttj|d }d}	d}
|sxt|d	 | d
 |	d | } t|	| d| } t|	| d| } td| d d	 | d
 d| } | S d}t|d d| } t|d d| } t|d d| } t|d d| } t|d d| } | 	|	|} | 	dd} t|	|| } td|| | } td|| | } td|| | } | S )N
DivesAkurur0   u   𑤦rt  r  r   u   𑤾   𑼴r/   r2   r   u   𑥂u   𑥀u	   (?<!𑤾)u   𑥁\1u   𑤿u   (?=[𑤌𑤍𑤎𑤏])u   𑤐𑤾u   (?=[𑤑𑤒𑤓])u   𑤕𑤾u   (?=[𑤖𑤘𑤙])u   𑤚𑤾u   (?=[𑤛𑤜𑤝𑤞])u   𑤟𑤾u   (?=[𑤠𑤡𑤢𑤣])u   𑤤𑤾u   𑤥u   𑥁)
r5   r6   r7   r8   r   r  viramar9   r:   r+   )r-   r   r  r  r  r  rz  yar   combViraVS	homoNasalr'   r'   r(   FixDivesAkuru  s8   "r  c                 C   s  d}d ttj|}d ttj|}d ttj|}tjd }tjd }d}d}	d}
d}|st	
|d | d	 d
| } t	
d| d d | d	 d| } d g d}t	
d| d	 d |
 d | d| } t	
d| d | d	 d |
 d | d| } t	
d| d | d	 d | d	 d |
 d | d| } d g d}t	
d| d	 d d| | } | S | d|} | d|| } | |	|} | dd} | ddddd d!} | d"d#} | S )$Nr    r0   rt  r   r  u   𑼵u   𑼾r/   r2   u   𑽂\1u	   (?<!𑽂)u   𑽂u   𑼂\1)   𑼦u   𑼖u   𑼜u
   (?<!𑽂)(r  u   \1\2𑼵u   )(𑽂)(u   \1\2\3\4𑼵u   (𑽂)(u   \1\2\3\4\5\6𑼵)u   𑼚r  u   𑼧u   𑼫u   𑼱u   (𑼵)rk  u   𑼂u   𑼳u   𑼙𑽂𑼛u   𑼄𑼴u   𑼅u   𑼆𑼴u   𑼇u   𑼈𑼴u   𑼉u   𑼾𑼾u   𑼿)r5   r6   r7   r8   r   r  r    rw   rr   r9   r:   r+   )r-   r   r  r  r  r  rz  r   r  aVSAltr  r  r  postBaseConsr'   r'   r(   FixKawi  s6   

"&.:r  c                 C   s   d}t jd }t jd t jd }}d\}}t| d||} |s/| || ||| |} | S | dd} | d	|} | ||| ||| } | d
d} g d}g d}	t|	|D ]
\}
}| ||
} q\| S )Nu   ꦂr   rt  r  )u   ꦿu   ꦾr   u   ꦘu	   ꦗ꧀ꦚu   ꦬr  r  )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   rr   rw   r  r+   r	  )r-   r   r  r   rz  r  SubRaSubYar  r   r  r  r'   r'   r(   FixJavanese  s"   
r  c                 C      t d| |S )Nr   FixUrduShahmukhir>  r'   r'   r(   FixUrdu     r  c                 C   r  )N	Shahmukhir  r>  r'   r'   r(   FixShahmukhi  r  r  c                    s  | dd}ttj d } fddg dttdd D }|td	  td
  }dg d}d}d}d}d}	tj	d }
|s#ddttj  d }ddttj
  d }ddttj |g  d }ddttj  d }td| d|}d}d}t|| d| d |}t|| 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 d|}dttj  |d}dtjd tjd  }| ||	}td|	 d d d| | d ||}td|	 d d | d |d |}td|	 d d | d |d |}| d|	 d| } fdddD }d d |D }tdd| d d | d d dtj   |}td!d"|}| d#d$}| d%d&}| d'd(}| d)d*}| d+d,}| d-d.}| d/d0}| d1d2}| d3d2}td| d4 d5|}td| d6 d5|}td| d7 d8|}| d9d:}| d;d<}td| d= d>|}td| d? d@|}| dAd:}| dBdC}| dDdE} dFkr!tdGdH|}n	 | dJdK}tdLdM|}| dNdO} dFkrCtdPdQ|}| dEdD}ttj }| dRdS}| dTdS}| dUdV}| dWdV}| dXdY}| dZdY}| d[dY}| d\d]}| d^dY}| d_d`}| dadb}| ddc| }| d0dc| | }| ddc}| ddde}| dfdg}| dhd}tdidj|}td| dk dj|}tdldm|}dn|v r{| ded`}| dEdo}|D ]7}| | |d|}| |d` |de }| |de d |de dp d }| |de d |de dp d }q| |dq dq| }| dq| d` dq| de }| dq| de d dq| de dp d }| dq| de d dq| de dp d }| || |}| drds}| |	|}| dnd}nddg dt}ddde|g}| |	|}dttj  |d}td| d d | d d| d |}td| d d | d d | d d| d |}td| d du d| d |}dttj }|sn	 t||}|S )vNr   rq   r   c                       g | ]
}t d  | qS rw   r6   rT   rx  r]   r'   r(   r|   !      z$FixUrduShahmukhi.<locals>.<listcomp>)r   ru   r~   r   r   r   r   r   r   r   rv   r           r  r  r  NuktaConsonantMapr0   )   ْ   َ   ِ   ُr  u   یu   وu   ےr/   r2   u   (ںʽ?)u   ن٘\2u   ءu   ئr   r  r  r  r   z(?=r  c                    r  r  r  rx  r  r'   r(   r|   T  r  )
r      rv     r  r              c                 S   s   g | ]}| d dqS )r  rq   r*   rx  r'   r'   r(   r|   U  r{  u   (.)(ّ)(ھ)r  u   ےےu   یےu   ےیu   ییu   ےْu   یْu   ءاِیu   ئِیu   ءاےu   ئےu   ءایu   ئیu   ءاوu   ؤu   ءاُوu   ؤُu   ءاُu	   )(اُو)u   \1ؤُu   )(اُ)u   )(او)u   \1ؤu   ءاِu   ئِu   ئِءآu   ئِاu   )(اِ)u   \1ئِu   )(ا)(ے|ی)u   \1ئ\3u   ئِئu   ئِؤu   ئِوu   ࣇu   لؕr  u   (ن|م|ی|ر|ل|و)(ْ)(ہ)u   \1ھTu   ن٘u   ںu   (\s)ھu   \1ہu   ۓu   _ےu   (ن|م|ی|ر|ل|و)(ھ)u   \1ْہu   صu   سu   ثu   حu   ہu   ۃu   ذu   زu   ضu   ظu   طu   تu   ژu   عu   اَu   ًu   نْr   u   یٰu   اu   كu   کu   يu   (ھ)(ّ)r   u   )(ّ)u   (.)(ّ)u   \1ْ\1   ʻʻu   لَؕr  u   ھu   اَےu   اے)r  r  r  z(_))r+   r6   r7   r   listrangerT   r5   r   r  r   r8   r9   r:   rN   
GeminationPersoArabicPuntuation)r]   r-   r   r   ConUnAspShortVowelsar  vayaBigAar  r  ListVSAr  	hamzaFull
hamzaChairAyogaConAsp
ConUnAsp_ar  ShortVowelsR
longVowelsListCRVowelVSr'   r  r(   r    s   $
"."B,&&6


 $((*6"

	r  c                 C   st   |st g dg dD ]
\}}| ||} q| dd} | S t g dg dD ]
\}}| ||} q'| dd} | S )Nr  r  rp   u   ۔rF  )r-   r   r%   r&   r'   r'   r(   r	    s   r	  c                 C   s  d ttjd}d ttjd}d}|sKt| d} td| d d| } | 	dd} t
g dg d	D ]
\}}| 	||} q8| 	d
d} | S | 	dd} | 	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 | d  d d!| } td"| d# d$ d% | d d&| } t| d} | 	dd
} t
g dg d	D ]
\}}| 	||} q| S )'Nr0   r   u   އu   (ަ)(?=())rq   r  r  r     ʔu   އްu   ޢu   ޡu   ތu   ޥu   ވu   ޠu   ޟu   ސu   ޞu   ޜu   ށu   ޛu   ދu   ޘu   ޙu   ހr/   u   ަr2   r  u   |ަu   \1ްr  z)(?<!u   ʽʽʽr   u   ަ\1)r5   r6   r7   r8   r   r"   rl  r9   r:   r+   r	  rn  )r-   r   r  r  aBaser%   r&   r'   r'   r(   	FixThaana+  s:   .&r  c                 C   s$   |s
|  dd} | S |  dd} | S )Nu	   ꢒ꣄ꢰu   ꢒ꣄‍ꢰu   ꢴu   ꣄ꢲr*   r>  r'   r'   r(   FixSaurashtraW  rV  r  c                 C   r  )NF)
swapNative)
FixTibetanr>  r'   r'   r(   FixTibetanLoC_  r  r!  Tc                 C   s$  dd t ddD }dd t ddD }g d}g d}|sitdd	| } t||D ]
\}}| ||} q*t||D ]
\}}| ||} q:| d
d} | dd} | dd} | dd} | dd} | dd} |rg d}	g d}
t|	|
D ]
\}}| ||} qyt||D ]
\}}| ||} qt||D ]
\}}| ||} qtg dg dD ]
\}}| ||} q| dd
} | dd} | dd} | dd} | dd} | dd} | dd} tdd| } |r| dd } | d!d"} | d#d$} | d%d&} | dd} | d'd(} | S ))Nc                 S   s   g | ]}t jd  t| qS )r   )r   rr   chrrx  r'   r'   r(   r|   d  s    zFixTibetan.<locals>.<listcomp>i@  ih  c                 S   s   g | ]}t |d  qS )P   )r"  rx  r'   r'   r(   r|   e  r{  )u   ཝྭu   ཡྱu   རྱu   རྭu   ྺྭ)u   ཝྺu   ཡྻu   ཪྻu   ཪྺu   ྺྺu
   ([ྈྉ])u   \1྄r3  u   ་u   ཛྷ༹u   ཞr/   u   ༺r2   u   ༻{u   ༼}u   ༽)
u   གྷu   ཌྷu   དྷu   བྷu   ཛྷu   ྒྷu   ྜྷ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   u   ཇྷr&  u   ཇu   ཛu   ཅu   ཙu   ཆu   ཚu   འu   ཨ)r  r9   r:   r	  r+   )r-   r   r  r  ListSubCSubCSubMinCr%   r&   AspirateDecomAspirateAtomicr'   r'   r(   r   c  sV   r   c                 C   s2  d tttj|dd ttj|dd   tdd}d ttj|}ttj|d  d }d ttj||g }|dkrX|d	7 }d ttj|g d
 }|dkrjd ttj|g d }ttj|d }|st	
d| d | d d| } | S t	
d| d d | d d| } | S )Nr0   r  r   r   Tkeyr   r   r   u   |ใ)u   ฮu   บu   ฝu   ดu   ฦu   ฤr   )   ດ   ບ   ຟr/   r   r2   r   )r5   sortedr6   r7   r  r$   r8   r   r  r9   r:   )r-   r  r   EAIOconsr  consar'   r'   r(   ReverseVowelSigns  s   <"r5  c                 C   s   |s=|  dd} t| |} tdd| } tdd| } tdd| } td	d| } |  d
d} |  dd} |  dd} | S tdd| } tdd| } tdd| } tdd| } t| |} |  dd} | S )Nu   โu   เาu   (.ฺ)(.ฺ)(ใ)r  u   (.ฺ)(ใ)r   u   ((.ฺ)+)(เ)z\3\1u   (.ฺ)?(.)(ฺร)u	   เอาu   โอu	   เอำu   เาอํu	   โอํu   (ใ)(.ฺ)(.ฺ)r  u   (ใ)(.ฺ)u   (ฺร)(.ฺ)?(.)u   (เ)((.ฺ)+))r+   ThaiReverseVowelSignsr9   r:   r>  r'   r'   r(   FixKhomThai  s$   


r7  c                 C   sJ   t | |} t| |} d| v r#t| dddd} | dd} | dd} | S )	Nr  r   u   ะu   ัTrq   u	   หฺ์u   ห์)r6  ThaiDigraphConjunctsr"   ThaiLaoTranscriptionr+   r>  r'   r'   r(   FixThai  s   

r:  c                 C   s@   t | d|} |s| dddd} | S | dddd} | S )Nr   u   าํu   ำu   ิํu   ึ)r5  r+   r>  r'   r'   r(   r6    s   r6  c                 C   sZ   t | d|} d| v rt| d} | dd} | dd} |s%| dd} | S | dd} | S )	NLaoPalir  Trq   u	   ຫ຺໌u   ຫ໌   າໍ   ຳ)r5  LaoPaliTranscriber+   r>  r'   r'   r(   
FixLaoPali  s   
r?  c                 C   s   d tj}d g d}d}|s8t| d} | dddd} td| d	 d | d
 d d| | } | S td| d	 d | d
 | d| } | S )Nr0   )u   𑻳u   𑻴u   𑻵u   𑻶u   𑻲r   r  rq   r   r/   r2   r   r   rk  z\1\2\1)r5   r   rw   r"   rl  r+   r9   r:   )r-   r   r  r  Ankar'   r'   r(   
FixMakasar	  s   *&rA  c           	      C   s  g d}d ttjd| }d ttjd}tjd }tjd }tjd d }tjd d }|s| dd	} | d
d} t	
d| d d d | d d | d d| | } t	
d| d d d | d d | d d| | } | tjd d d} | |d d} | dddd} | dd} | dd} | dd} | S | d	d} | dd
} | ||||} | dtjd d } | dtjd } | dtjd } | d tjd! } | d|d } | dd} | dd} | dd} | S )"N)   𐬳   𐬲   𐬝   𐬒   𐬣rD  r0   r   r  r  ru   rv   u   𐬀𐬩u   𐬄u   𐬁𐬩u   𐬅((r2   r/   r  r   r   r*  rD  u   𐬡u   𐬰ʿrC  u   𐬱ʿu   𐬢ʿu   𐬤u	   𐬁_𐬋u   𐬃rq   rF  rE  r   rB  r  )r5   r6   r7   r8   r   r   rw   rt   r+   r9   r:   )	r-   r   	extraConsr  r  r  r  iiuur'   r'   r(   r     s>   

66r   c                 C   s   |r|  dd} |  dd} |  dd} |  dd} |s5|  dd} |  dd} |  dd} td	d
| } t| d|} t| |} |sP|  dd} |  dd
} | S |  dd} |  dd} |  dd} |  dd} | S )Nr.  u   ທr/  u   ປr0  u   ພu   ັu   ະu   (?<!ດ)(?<!ບ)(?<!ຟ)rq   r   r<  r=  u   u   ຺u   ຺u	   ຺ະu   u	   ອ຺ົu   ອົ)r+   r9   r:   r5  LaoTranscriber>  r'   r'   r(   FixLaoN  s*   
rL  c                 C   s`  d tjdd }d ttjd}d ttjddd ttjddd	  }d tjd
d	 }tjd }|st	d| d d | d d | d d | d d| } t	d| d d | d d | d d | d d| } t	d| d d | d d | d d | d d| } | S t	d| d d | d d | d d| } | S )Nrq   r  r   r0   r   r  r  rx   r     r   z(?<=\s)(r2   r/   rg  rh  z\3\1\2\4r  )
r5   r   r  r6   r7   r8   rw   rr   r9   r:   )r-   r   r2  r3  yrlvhr   r   r'   r'   r(   r8  x  s   2
:::.r8  c                 C   s   t | |} t| |} | S r<  )OldPersianSyllableOldPersianNumeralr>  r'   r'   r(   FixOldPersian  s   

rQ  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 }g d}	d}
dd ttjd d }|sn| dddddd} t|| | || |	 D ]
\}}| ||} qbnUtdd| } t|| || D ]
\}}| ||} q~t|
d d| } t|
d d| } t|d d| } t|
d d | } td!d |	 d" d d#| } | dd} |s	 | S 	 | S )$Nc                 S      g | ]}|d  qS u   𐎡r'   rx  r'   r'   r(   r|     r}   z&OldPersianSyllable.<locals>.<listcomp>)   𐎭   𐎶   𐎩   𐎺   𐎫   𐎴   𐎼c                 S   rR  )u   _𐎡r'   rx  r'   r'   r(   r|     r}   c                 S   rR  rS  r'   rx  r'   r'   r(   r|     r}   )u   𐎮u   𐎷u   𐎪u   𐎻rX  rY  rZ  c                 S   rR  u   𐎢r'   rx  r'   r'   r(   r|     r}   )rT  rU     𐎣   𐎥rX  rY  rZ  c                 S   rR  )u   _𐎢r'   rx  r'   r'   r(   r|     r}   c                 S   rR  r[  r'   rx  r'   r'   r(   r|     r}   )u   𐎯u   𐎸u   𐎤u   𐎦u   𐎬u   𐎵u   𐎽c                 S   rR  )u   <𐎠r'   rx  r'   r'   r(   r|     r}   )	rT  rU  r\  r]  rV  rW  rZ  rY  rX  u8   ([𐎧𐎨𐏂𐎰𐎱𐎳𐎲𐎹𐎾𐎿𐏀𐏁𐏃])r/   r0   
OldPersianr2   r3  u   𐏐r   rq   <u   𐎻(?!𐎡)u   𐎻𐎡u
   (𐎠𐎡)z\1<\2u
   (𐎠𐎢)u   𐎠u   \1_𐎠u   ([𐎡𐎢])z\1_\2rg  rh  u	   \1<𐎠\2)r5   r6   r7   r8   r+   r	  r9   r:   )r-   r   IConsICons_ISyllUConsUCons_USyllAConsASyllSylAlphar  r%   r&   r'   r'   r(   rO    s:   " 	rO  c                 C   s@  d}d}d}d}d}t tttd| dd}|s|D ]b}t|d	 }	t||	d	  d
 }
t||	d	  |
d
  d }t||	d	  |
d
  |d  d }t||	d	  |
d
  |d  |d  }||	 ||
  ||  ||  ||  }| t||} q| S | |d} | |d} | |d} | |d} | |d} | S )Nu   𐏑u   𐏒u   𐏓u   𐏔u   𐏕\d+Tr   d   r   r   ru   1#2#10#20#100#)r1  r   intr9   findallr+   str)r-   r   OneTwoTenTwentyHundredNumbersnumhNtWtNt2n1perNumr'   r'   r(   rP    s,   $((rP  c                 C   s   t tttd| dd}|s |D ]}| t|t|} q| S d}d}d}d}d}d	}	d
}
d}| |d} | |d} | |d} | |d} | |d} | |	d} | |
d} | |d} | S )Nri  Tr      𐩀   𐩁   𐩂   𐩃   𐩄   𐩅   𐩆   𐩇rk  rl  z3#z4#rm  rn  ro  z1000#)r1  r   rp  r9   rq  r+   rr  kharoshthiNumber)r-   r   rx  ry  onetwothreefourtentwentyhundredthousandr'   r'   r(   r=    s,   r=  c                 C   s  d}d}d}d}d}d}d}d}t | }	d	}
t |	d
 }|dkr.|dkr*|
t|7 }
|
|7 }
t |	|d
  d }|dkrJ|dkrF|
t|7 }
|
|7 }
t |	|d
  |d  d }|dkrb|
|| 7 }
t |	|d
  |d  |d  d }|dkr|dkr|
t|7 }
|
|7 }
t |	|d
  |d  |d  |d  }|dkr|dkr|
|7 }
|
S |dkr|
|7 }
|
S |dkr|
|7 }
|
S |dkr|
|7 }
|
S |dkr|
|| 7 }
|
S |dkr|
|| 7 }
|
S |dkr|
|| 7 }
|
S |dkr|
|| 7 }
|
S |dkr|
|| | 7 }
|
S )Nr  r  r  r  r  r  r  r  rq   i  r   r   rj  r   r   ru   r  rv   r~   rv  r   r   r  )rp  r  )r-   r  r  r  r  r  r  r  r  ry  kharnumthouhundtwentennonesr'   r'   r(   r  	  sr   $(


r  c                 C   sl   t | } |st | dd} | dd} | dd} | S t | d} | dd} | dd} | dd} | S )	Nr   Tu	   ජ්ඤu   ඥu
   (අ)(අ)u   (ආ)   ‍rq   )r"   SinhalaDefaultConjunctsr_  r+   r>  r'   r'   r(   
FixSinhala9	  s   

r  c                 C   sH   |s|  dd} |  dd} | S |  dd} |  dd} |  dd} | S )Nu   ᱹᱸu   ᱺu   ᱻᱸu   ᱸᱻu   ᱽ   ’r*   r>  r'   r'   r(   r   N	  s   r   c                 C   s   dd ttjd d }|s!t|d d| } | dd} | S dd ttjd d }t|d	 | d d
| } | dd} | dd} | dd} | S )Nr/   r0   r   r2   r4   r   r=   u   𑃦𑃨r  u   \1əu
   𑃔ə𑃨u
   𑃔𑃨əu   ə𑃨u   𑃨)r5   r6   r7   r8   r9   r:   r+   r   r-   r   r  r  r'   r'   r(   r   Y	  s   
r   c                 C   s  |s|  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} |  dd} |  dd} |  dd} |  dd} |  dd} |  d d!} |  dd} | S 	 | S )"N\nr  ([aiueo])nj([aeiou])\1ny\2(\W)nj([aeiou])^nj([aeiou])ny\1njnjnnyMkngkMgnggMcnjcMjnjjMdndMtntMbmbMpmpMu   m͏'nkr   ncnjjnjr   r  r>  r'   r'   r(   r   k	  s0   r   c                 C   s  |s|  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} |  dd} |  dd} |  dd} |  dd} |  dd} |  d d!} |  dd} |  d"d# d$d#} | S 	 | S )%Nr  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  u   m͏r  r   r  r  r  r   'rq   r   r  r>  r'   r'   r(   r   	  s2   r   c                 C   sl  dd ttjd d }dd ttjddg  d }|s_t|| d| } t|d d| } t|d	 d
| } t|d d| } | dd} | dd} | dd} | dd} | S |  } | dd} | dd} t|d	 d| } tdd| } t|d | d d| } tdd| } | dd} | dd} td| d| } | dd} | dd} | S ) Nr/   r0   r   r2   r  u   \1‍\2u   (𑣁𑣙ʾ)u   \1½u   (𑣁)r   u   (𑣀)r  rq   u   𑣟ʿu   𑣙𑣗   ½u   𑣁r*     ×u
   (ʿ)(𑣁)u   \1𑣁½r  u   \1𑣁uC   ([𑣔𑣕𑣌𑣋𑣏𑣎𑣒𑣑𑣕𑣔𑣘𑣗𑣛])(‍)(𑣙)u   \1Ö\3   Öu
   (𑣁)(ʿ)r  u   𑣁ʻu   𑣁½u
   𑣁𑣙ʾ)	r5   r6   r7   r8   r   r9   r:   r+   lowerr  r'   r'   r(   r   	  s2   "r   c                 C   s*   t | |} |r| dd} | dd} | S )Nr     ᤹r[  r  )FixLimbur+   r>  r'   r'   r(   FixLimbuLoC	  s
   
r  c           	         s  t jd   fdddd dD D }g d}t||D ]\}}|s)| ||} q| ||} qdttjtj tj	 d} fd	dd
d dD D }g d}|rlt
dd| d d d| } t
dd| } n| dd} t||D ]"\}}|st
d| d d d | d d| | } qw| ||} qw|s| dd} | dd} | dd} | S | dd} | dd} | dd} | S )Nr   c                       g | ]} | qS r'   r'   rx  r   r'   r(   r|   	  r}   zFixLimbu.<locals>.<listcomp>c                 S   r  r'   r	   rw   rx  r'   r'   r(   r|   	  r  r  rt  r  )u   ᤩu   ᤪu   ᤫr0   r	   c                       g | ]}|  qS r'   r'   rx  r  r'   r(   r|   	  r}   c                 S   r  r'   r  rx  r'   r'   r(   r|   	  r  )r   rv   r   r  r   r  rt  ru  )u   ᤰu   ᤱu   ᤳu   ᤴu   ᤵu   ᤶu   ᤷu   ᤸr/   r2   u   (?=[ᤕᤖᤘ])u   \1‌us   ([ᤀᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏᤐᤑᤒᤓᤔᤕᤖᤗᤘᤚᤛᤜᤠᤣᤥᤧᤨᤩᤪᤫ])᤺u   \1꞉r[  u   ᤺u   (᤺?)rk  r  r  !u   ᥄r  u   ᥅)r	   rr   r	  r+   r5   r6   r7   r8   r   r  r9   r:   )	r-   r   SConsSubConsr%   r&   signAllFCons	FinalConsr'   r  r(   r  	  s6   
  ,
r  c                 C   s  g d}g d}|s]|  dd} t||D ]
\}}|  ||} q|  dd} |  dd} |  dd	} |  d
d} |  dd} dttjd}td| d d d| } |  dd} | S |  dd} tj	| dd} |  dd} |  dd} t||D ]
\}}|  ||} q{| S )N)u   ॻu   ॼu   ॾu   ॿ)u   ˍगu   ˍजu   ˍडu   ˍबr  u   ॽu   ज़़u   ॹu   श़u   ऱ्u	   ऱ्‌u   ऱ्‌यu	   ऱ्यu   ऱ्‌हu	   ऱ्हr0   r   r/   r2   r  u   \1ऺu   ाʼu   ऻu   ॔rq   Tr   )
r+   r	  r5   r6   r7   r8   r9   r:   r"   DevanagariPrishtamatra)r-   r   SindhiSindhiApproxr%   r&   r  r'   r'   r(   FixDevanagari$
  s,   
	r  c                 C   rT  )Nr3  u   ⸱r*   r>  r'   r'   r(   	FixKaithiX
  s
   r  c                 C   s
   t | |S r<  )rL  r>  r'   r'   r(   FixLao2a
  s   
r  c                 C   s   |s	 | S t j| dd} | S )NTr   )r"   NandinagariPrishtamatrar>  r'   r'   r(   FixNandinagarid
  s
   r  c                    s  t jd t jd   fdddd dD t jd g D }g d}t||D ]\}}|s5| ||} q(| ||} q(fd	dt jd
d D }ddg}t||D ]\}}|s`| ||} qS| ||} qSdd dD }dd dD }	|t jd
d t jdd  7 }|	t jdd t jdd  7 }	|s| t jd  } | t jd  d} ddt jt j t j	  d }
t||	D ]\}}t
|
d |  d d|  | } qn	 fdddd d D D }g d!}d|}dttjtj tj d"}t||D ]0\}}|s$t
d| d d | d d| | } qt
d#| d$ d% d&| } | ||} qdttjd"}|ss| d} t
d| d d t jd'  d d(| } | d)d*} t
d+| d$ d&| } | S | d,t jd' } | d-d.} | S )/Nr   ru  c                    s   g | ]}|   qS r'   r'   rx  r|  r   r'   r(   r|   r
  r{  zFixLepcha.<locals>.<listcomp>c                 S   r  r'   r   rw   ry   r  r'   r'   r(   r|   r
  r  )r   ru   r   r   r  rx   rv  )u   ᰁu   ᰄu   ᰏu   ᰔu   ᰖu   ᰞu   ᰒc                    r  r'   r'   rx  r  r'   r(   r|   }
  r}   r  u   ᰤu   ᰥc                 S   r  r'   r  rx  r'   r'   r(   r|   
  r  )r   ru   r  rv   r~   rv  r   r   r  r   r  r   r  r  r  r   r  r  r   r  r     rM  c                 S   s$   g | ]}t jd d t j | qS )Nr  )r   rw   rN   rx  r'   r'   r(   r|   
  s   $ )r   r   r   "   r   r   r   r   r  r   r   r   r   r  r   r   r   r   r   r   r   r   r   rt  r  r  ru   r  rv   r~   rx   rq   r/   r0   r2   r   c                    r  r'   r'   rx  r  r'   r(   r|   
  r}   c                 S   r  r'   r  r  r'   r'   r(   r|   
  r  )r   r   r  r   r  rt  ru  )u   ᰭu   ᰳu   ᰰu   ᰱu   ᰮu   ᰲu   ᰯr   rg  rh  u   (ᰶ)r   r   u   \1ᰵu	   ᰧᰶᰵu	   ᰧᰵᰶu   (ᰶ)([u   ᰵu   ᰴᰶu   ᰶᰴ)r   rr   rw   r  r	  r+   rt   rs   r5   r  r9   r:   r6   r7   r8   r   r  rN   )r-   r   conLaconLr%   r&   yryrSublistNFlistFconsAllconFinalconFfinConsListr  signVowr'   r  r(   	FixLepchan
  sZ   

*   (
 *(r  c                    s   t jd  t jd   }dttjtj tj d}|s,t	
d| d | d| } n| d|} t| |}  fd	d
t jdd D }g d}t||D ]\}}|s\| ||} qO| ||} qO| S )Nr   rt  r0   r   r/   r2   u   \1ᮁu   ᮁc                    r  r'   r'   rx  r  r'   r(   r|   
  r}   z FixSundanese.<locals>.<listcomp>r  r  )u   ᮡu   ᮢu   ᮣ)r   rr   rw   r5   r6   r7   r8   r   r  r9   r:   r+   r"   SundaneseHistoricConjunctsr	  )r-   r   rr  yrlyrlSubr%   r&   r'   r  r(   FixSundanese
  s   
 r  c                 C   s   t jd }t jd | }t jd | }dttjtj tj d}|sAt	
d| d | d| } t	
d| d | d	| } | S | d
|} | d|} | S )Nr   rt  r  r0   r   r/   r2   u   \1ꥑu   \1ꥐu   ꥑu   ꥐ)r   rr   rw   r5   r6   r7   r8   r   r  r9   r:   r+   )r-   r   r   r  nr  r'   r'   r(   	FixRejang
  s   
 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 }| 
d	d
} |sxtd| d d | d d| } | 
dd
} | 
dd} | 
dd} | 
dd} td| d d d| } | 
dd} nDtj| dd} | 
dd} | 
dd} | 
dd} | 
dd} | 
dd} | 
dd} td| d d | d d d| } | 
dd
} dd tjdd tjd d!   d }|std"| d d| } t| } | S | 
dd#} g d$}g d%}t||D ]
\}}| 
||} q| S )&Nr/   r0   r   r   Tr,  r2   u   𑄳r   rq   r  u   \1ʾu   𑄧r  u   𑄣𑄳𑄦u   𑅄u   𑄣𑄴𑄦u
   (𑄃𑄨)u   \1𑄭u   𑄬𑄃𑄨ʼu   𑅆r   u   𑄳𑄃u   𑅅u   𑄳𑄄u   𑄭   𑄃𑄨u   |ʾu   \1𑄧r  r   rt  r  u   𑄴(?=u   𑄴)r  u   𑄃𑄪u   𑄃𑄬)u   𑄄u   𑄅u   𑄆)r5   r1  r6   r7   r8   r   rt   r$   r   rr   r+   r9   r:   r"   ChakmaGeminationrw   r	  )	r-   r   listClistVyrlvn	vowelDepA
vowelIndepr%   r&   r'   r'   r(   	FixChakma
  s>   42"&*
r  c                 C   s   |r|  dtjd } | S )Nu   ṁr   )r+   r   rN   r>  r'   r'   r(   FixIAST/  s   r  c                 C   s`   d}d}|s|  ||} tdd| } |  dd} | S |  dd} |  ||} tdd| } | S )	Nu   ː̃u   ̃ːu   (.)(ː?)(h)u
   \1\2\3\1̆u   ə̸ə̸u   ɑ̷ːu   (.)(ː?)(h)\1̆z\1\2\3r  )r-   r   colon_tildetilde_colonr'   r'   r(   r   6  s   r   c                    s  t jd }dtt jtdd}dtt jtdd}dtt jtdd}t jd   fdddd dD D }g d	}d
g| }|st	||D ]
\}	}
| 
|	|
} qItd| d d | d d| } td| d d d| d d | d d | d d| } n|
dd}| 
dd} g d}|D ]
\}	}
| 
|	|
} qtdt jd  d d d|d  d d| } td| d d | d d d| d d | d d| } td| d d | d d| } t	||D ]
\}	}
| 
|
|	} qtd| d d| } td| d d d d d| } |s/| 
dd} | 
dd} td| 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 d| d d | d! d | d  d | d d d| d d | d! d"   d d#| } td| d  d | d$ d | d  d | d d d| d d | d! d"   d d%| } td| d  d | d$ d | d  d | d d d| d d | d! d"   d d%| } td| d  d | d d d| d d | d! d | d  d | d$ d"   d d#| } td| d  d | d d d| d d | d! d | d  d | d$ d"   d d#| } td| d  d | d$ d"   d d | d  d | d$ d"   d d%| } td| d  d | d$ d"   d d | d  d | d$ d"   d d%| } | 
d&d&} d'|  } |d d| }td(  d d | d   d | d  d | d$ d)| } td*| d   d | d  d | d$ d+| } | 
 d} | 
dd} | 
d,d} | 
d'd} | 
dd-} | S | 
d.d/} t	||D ]\}	}
| 
|	|
} q:td| d d d| d d" | d$ d0 | d d d| d d | d$ d | d! d  d1 | } td0| d d d| d d | d d | d d | d d d| d d" | d2 d  | } td0| d d | d d | d d d| d d" | d2 d  | } t	||D ]\}	}
| 
|
|	} q| 
dd} | 
dd} | 
d3d} | 
    } | S )4Nr   r0   Tr,  c                    r  r'   r'   rx  r  r'   r(   r|   Q  r}   zFixPhagsPa.<locals>.<listcomp>c                 S   r  r'   )r   rw   r  r'   r'   r(   r|   Q  r  r  )u   ꡨu   ꡱu   ꡧu   ꡱꡨr/   r2   r   rG  z)?)z\6\1\2\4ro   rq   u	   ꡖꡘꡟu	   ꡱꡖꡟ))u   ꡂꡜu   ṾꡂṾꡜṾ)u   ꡒꡜu   ṾꡒṾꡜṾ)u   ꡫꡜu   ṾꡫṾꡜṾ)u   ꡊꡜu   ṾꡊṾꡜṾ)u   ꡎꡜu   ṾꡎṾꡜṾrg  r   rh  z\2\3\5\1u   ṿ\1u   |ꡖ)r   r3  u   ᠂r   r   z)?))r  z\1 \8r  z\1 \4
u   ኺ᠂u)   (?:(?<!
)(?<!᠂)(?<![,\."\?\&\(\)]))(?<!z\1 \2u	   (?<!᠂)(z \1u   Ṿu    ᠂ u   ꡆu   ꡒz(((z\6z)))u   ᠃)r   rN   r5   r1  rw   r$   rt   r  rr   r	  r+   r9   r:   )r-   r   candraBindur  r  r  VirrvySubrvySubrvyEr%   r&   AspirateListCEr'   r  r(   
FixPhagsPaJ  s  


"B2@""8
888&&>2',8	r  c                 C   sd   d}|st d| d d| } t dd| } | dd} | S t d| d d| } t dd| } | S )	Nrq   u   ([aiuāīūu   ])(꞉)r   u	   (꞉)(̽)u   aʰu   ʰu	   (̽)(꞉))r9   r:   r+   )r-   rU   r   r   r'   r'   r(   FixLatn  s   r  c                 C   s8   t | |} |s
	 | S | dddd} | dd} | S )Nu   آu   آu   ـrq   u   َّu   َّ)r	  r+   r-   rU   r   r'   r'   r(   FixArab  s   
r  c                 C   s   t | |} |s
	 | S 	 | S r<  )r	  r   r'   r'   r(   FixThaa  s   
r  c                 C   s   t | ||S r<  r  r   r'   r'   r(   
FixArab_Ph  r  r  c                 C   s   t | ||} | S r<  r  r   r'   r'   r(   
FixArab_Fa  s   r  c                 C   s$   t | ||} |s|dkr	 | S 	 | S )NTyper  r   r'   r'   r(   
FixArab_Ur  s   r  c                 C   s0   |s|  dd} |  dd} | S |  dd} | S )Nu   𐎒²u   𐎝r3  u   𐎟rq   r*   r   r'   r'   r(   FixUgar  s   r  c                 C   s   |s
|  dd} | S 	 | S )Nu   𐼹²u   𐽄r*   r   r'   r'   r(   FixSogd%  r  r	  c                 C   s   t | |} |st | dd} t | dd} n$t | d} t | d} g d}g d}t||D ]
\}}| ||} q0g d}ttjdd }| S )Nr   T)u   ൔu   ൕu   ൖu   ൿ)u   മ്u   യ്u   ഴ്u   ക്)u   ൺu   ൻu   ർu   ൽu   ൾu	   ഩ‍്r   )	r"   MalayalamChillur^  r_  r	  r+   r6   r7   r  )r-   r   
chilluArchchilluArchhVirchchvirChillusAnur'   r'   r(   FixMalayalam-  s   r  c                 C   sL   |st | dd} t | dd} | S t | d} t | d} | dd} | S )Nr   Tu   ఁu   ఀ)r"   r^  r_  r+   r>  r'   r'   r(   	FixTeluguH  s   r  c                    sf   t jd   fdddd dD D }g d}t||D ]\}}|s*t||| } q| ||} q| S )Nr   c                    r  r'   r'   rx  r  r'   r(   r|   U  r}   z"FixMeeteiMayek.<locals>.<listcomp>c                 S   r  r'   )r
   rw   rx  r'   r'   r(   r|   U  r  )r   ru  r  r   r  r   rv   r  )u   ꯛu   ꯜu   ꯝu   ꯞu   ꯟu   ꯠu   ꯡu   ꯢ)r
   rr   r	  r9   r:   r+   )r-   r   r  finalCr%   r&   r'   r  r(   FixMeeteiMayekS  s   
r  c                 C   rT  )Nu   ᯙᯮu   ᯙᯯr*   r>  r'   r'   r(   FixBatakSimae  rV  r  c                    s  |  dd} ddttjd d }ddttjd d }ddttjd d }tjd  tj	d   tj	d	  } fd
dtj	dd D }g d}t
||D ]\}}	|se|  ||	} qX|  |	|} qXdd dD }
dd dD }t
|
|D ]\}}	|s|  |  |	  } q	 q fdddd dD D }g d}t
||D ]7\}}	|s|  ||	} td| d | d | d d   d| } q|  dd  } |	tjvr|  |	|} qtj	d }|s|  |  |} | S 	 | S )Nr   rq   r/   r0   r   r2   r   r  r   c                    r  r'   r'   rx  r  r'   r(   r|     r}   zFixCham.<locals>.<listcomp>r  r  )u   ꨳu   ꨴu   ꨵu   ꨶc                 S   r  r'   r   rw   rx  r'   r'   r(   r|     r  )r   r  rv  r   r   r  r  r   r  r  r   r  rM  r  c                 S   r  r'   r  rx  r'   r'   r(   r|     r  )r   ru   r~   r~   r~   r  r   r   r   r   r   r   r  r  c                    r  r'   r'   rx  r  r'   r(   r|     r}   c                 S   r  r'   r  rx  r'   r'   r(   r|     r  )r   ru   rv   r~   r   r  r   r  rt  ru  r  r  )u   ꩀu   ꩁu   ꩂu   ꩄu   ꩅu   ꩆu   ꩇu   ꩈu   ꩉu   ꩊu   ꩋu   ꩌu   ꨨu   \1ꩍu   ꩍr  )r+   r5   r6   r7   r8   r   r  r   rr   rw   r	  r9   r:   rN   )r-   r   ListCAllListVowListVowSnjar  r(  r%   r&   r  r  r  r  r'   r  r(   FixChamn  sD   
0

r  c           
         sf  t jd   fdddd dD D }ddg}t||D ]\}}|s)| ||} q| ||} q|s3n	 dttjd	}t jd
   }|st	
d| d d | d d| } t	
 d | d d| } | dd} dg d}t| |} | dd} | d d } | S d}	| dd} t	
d| d d d| | } | d } | d|	} | dd} | S )Nr   c                    r  r'   r'   rx  r  r'   r(   r|     r}   zFixTaiTham.<locals>.<listcomp>c                 S   r  r'   )r   rw   rx  r'   r'   r(   r|     r  )rt  ru  u   ᩕu   ᩖr0   r   rv   r/   r2   u   ᩘ\2u   ᩠\1u	   ᩈ᩠ᩈu   ᩔ   ᩅ   ᨴ   ᨵ   ᨣu	   ᩕ᩠ᨿu	   ᩠ᨿᩕu   ᩠ᩇu   ᩇ   ᩣu   ᩘr   u   ᩠u   ᩤ)r   rr   r	  r+   r5   r6   r7   r8   rw   r9   r:   r"   FixTallA)
r-   r   ConsSubr%   r&   r  r   r  r  r'   r  r(   
FixTaiTham  s8   
"r%  c                 C   r;  r<  )r%  r>  r'   r'   r(   
FixLaoTham  r@  r&  c                 C      t | |} dttjd}|sRd}d}dg d}td| d | d d | d	 | d
| } td| d | d d | d d | d	 | d| } | S 	 | S )Nr0   r      ᩮr!  )r  r  r  r   u   ᨷr/      )(᩠)(r2   r     \1\2\3\4ᩤ   (᩠)(   \1\2\3\4\5\6ᩤr%  r5   r6   r7   r8   r9   r:   r-   r   r  r  r  r  r'   r'   r(   
FixThamLoC     
.:r/  c                 C   r'  Nr0   r   r(  r!  r  r/   r)  r2   r  r*  r+  r,  r-  r.  r'   r'   r(   
FixLueTham  r0  r2  c                 C   r'  r1  r-  r.  r'   r'   r(   FixKhuenTham  r0  r3  c                 C   sD   ddl m} d\}}|s|| d||} | S |j| d||dd} | S )Nr   r!   u   ະu   ັr   Tr   rq   r"   r9  )r-   r   ppshortAconjAr'   r'   r(   rK  !  s   rK  c                 C   sH   ddl m} d\}}|s|j| d|||d} | S |j| d||dd} | S )Nr   r!   r4  r;  )anusvaraChangeTr   r5  )r-   r   r9  r6  r7  r8  r'   r'   r(   r>  .  s   r>  c                 C   s^   d tdgd}d}|s%td| | |d | | } tdd| } n	 t| d|} | S )	Nrq   rr   r   u   বu   (?<![রবম])r  u!   (?<![রবমভ়])(্ভ়)u   ্ব)r5   r6   r7   r9   r:   r"   KhandaTa)r-   r   r   bar'   r'   r(   
FixBengali;  s   r<  c                 C   s:   d}d}t | d|} |s| ||} | S | ||} | S )Nu   রu   ৰr   )r"   r:  r+   )r-   r   RaAssRar'   r'   r(   FixAssameseM  s   r?  c                 C   s   t | d|} dttjd}dttjdd }dtdgd}|sO| || || d } t	d| d	 d | d	 d | d	 d
| } 	 | S 	 | S )Nr   r0   r   r#   rq   rr   r  r/   r2   	   \1‌\2\3)
r"   r:  r5   r6   r7   r8   r  r+   r9   r:   )r-   r   r  r   r   r'   r'   r(   
FixSharadaZ  s   .rA  c                 C   s4   |st | dd} tdd| } | S t | d} | S )Nr   Tu   (್)([^ಫಜ])(಼)r@  )r"   r^  r9   r:   r>  r'   r'   r(   
FixKannada  s   rB  c                 C   s   |s"|  dd} |  dd} |  dd} |  dd} |  dd	} | S |  d	d} |  dd} |  dd} |  dd} |  dd} | S )
NrQ   u   ᳴rP   rF   u   𑍞rH   u   𑍟u   𑌼𑍍u   𑌼𑍍‌r*   r>  r'   r'   r(   
FixGrantha  s   rC  c                 C   s8   |s|  dd} |  dd dd} | S |  dd} | S )Nu   𑅰𑅳ʾ𑅭ʿ𑅑u   𑅶r  rq   r*  r*   r>  r'   r'   r(   FixMahajani  s   rD  c                 C   s  dd ttjd d }dtddd  d }|s<| dd} | d	d
} t|| d| } t|d d| } | S | dd} | d
d	} tj	d }tj
d }t|d d d| } td| d d| } td| d d| } | |d d} t|| d| } | S )Nr/   r0   r   r2   rN   r   u   𑜫𑜍u   𑜞u   𑜫𑜎u   𑜝r   u   (𑜦)r   u   𑜧u   (?!𑜨)u   𑜦𑜧𑜪u
   (𑜦)(.)(u   𑜦𑜧\2\3u
   (𑜨)(.)(u   𑜦𑜡\2\3u   𑜨u   𑜦𑜡𑜪)r5   r6   r7   r  rT   r+   r9   r:   r   rr   rN   )r-   r   r  r  r   r^   r'   r'   r(   FixAhom  s$   

rE  c                 C   sH   |s|  dd dd} |  dd dd} | S |  dd dd} | S )	Nr  rq   r*  u   ˍ𑊌u   𑊍u   ˍ𑊂u   𑊓u   ˍ𑊒r*   r>  r'   r'   r(   
FixMultani  s   rF  c                 C   sN   |st | dd} | dddd} | S t | d} | dddd} | S )Nr   Tu	   જ઼઼u   ૹu   શ઼)r"   r^  r+   r>  r'   r'   r(   FixGujarati  s   rG  c           
      C   s  d ttjd}tjdd }g d}tjd }|s1t|d | d d	| } | 	d
d} | S | 	dd} g d}g d}t
||D ]
\}}	| 	|	|} qDt
||D ]\}}	| 	|	d| } qT| 	d|d d } | 	dd
} | 	dd} | 	dd} | 	d|} | 	d|} | S )Nr0   r   r  r  )u   𑨻u   𑨼u   𑨽u   𑨾r   r/   r2   u   𑩇\1u   𑨋𑩇𑨯u   𑨲u   𑩁r3  )u   𑨣u   𑨤u   𑨥)u   𑨐u   𑨑u   𑨒u   𑩇u   𑨺r   u   𑨇u   𑨄𑨊u   𑨈u   𑨆𑨊u   𑨳)r5   r6   r7   r8   r   rw   rr   r9   r:   r+   r	  )
r-   r   r  yrlvyrlv_subr   r8  r9  r%   r&   r'   r'   r(   FixZanabazarSquare  s,   
rJ  c                 C   s   g d}g d}|s5t ||D ]
\}}| ||} qt| d} tdd| } | dd} | dd	} | S | d	d} t ||D ]
\}}| ||} q@| dd} td
d| } t| d} | S )N)u   𑈋u   𑈑u   𑈜u   𑈢)u   ˍ𑈊u   ˍ𑈐u   ˍ𑈖u   ˍ𑈡Khojkiu	   (𑈷)(.)r   u   𑈷𑈶u   𑈶𑈷r3  u   𑈺u	   (.)(𑈷))r	  r+   r"   rl  r9   r:   rn  rW  r'   r'   r(   	FixKhojki  s"   rL  c                 C   s6   |sd ttjd}tjd }tjd }| S 	 | S )Nr0   r   rt  r   )r5   r6   r7   r8   r   rw   rr   )r-   r   r  rz  r   r'   r'   r(   FixNewa!  s   

rM  )F)Fr   )FT)T)rq   r   r6   aksharamukha.ScriptMap.Romanr   r    aksharamukha.ScriptMap.MainIndicr   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"   r9   r)   r.   r<   rD   rX   rY   r_   rj   rm   rn   r   r   r   r   r   r   r  r   r   r(  r+  r:  r?  rD  r   r   rS  rU  rZ  rd  re  rq  rs  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   r5  r7  r:  r6  r?  rA  r   rL  r8  rQ  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/  r2  r3  rK  r>  r<  r?  rA  rB  rC  rD  rE  rF  rG  rJ  rL  rM  r'   r'   r'   r(   <module>   s  4H	
B%Y =7001i12  ,F3*	75!$6	54	
U; 		K5&

*