#------------------------------
# How to write the sandhi rules
#------------------------------
# Lines beginning with a # or empty lines are skipped
# Each line should contain one rule
# (Can be written in devanagari easier to read/check for a human)
# Each rule is typically left_1 + left_2 = right_1 / right_2 / ...
# left_1 and left_2 can specify lists. These will be 
# expanded by the parser to generate a product of all possible combinations
# E.g. [अ, इ, उ, ऋ][ ङ्, ञ्, न्] + [अ, आ, इ, ई, उ, ऊ, ऋ, ॠ, ए, ऐ, ओ, औ]
# right uses Python's format string specification to refer to
# elements from the left expression. 
# Note that even a single character on the left is treated as a list, so be 
# careful with indexing in the right expression.
# E.g. एचोऽयवायावः / यान्तवान्तादेशः would be specified as 
# ए + [आ, इ, ई, उ, ऊ, ऋ, ॠ, ऌ, ए, ऐ, ओ, औ] = अय्{1} (the ए would be considered as list 0)
# Multiple right expressions can be specified by separating them with "/"
# Spaces at the beginning and end of expressions are stripped,
# but if they appear inside an expression, they will be preserved
# E.g. the space in अ {1}  for एचोऽयवायावः + लोपः शाकल्यस्य will be retained
# mAheswara-sutra pratyAhAras can be included in the rules by preceding them with a *
# To exclude certain varnas from a pratyAhAra, you can use set notation
# E.g. [*अच् - इई] 
# Note that pratyAhAras with vowels will be expanded to include dIrghas as well

# श्चुत्वसन्धिः
# स्तोः श्चुना श्चुः (८.४.४०) + शात् (८.४.४४)
स् + [श्, च्, छ्, ज्, झ्, ञ्] = श्{1}
त् + [श्, च्, छ्, ज्, झ्, ञ्] = च्{1}
थ् + [श्, च्, छ्, ज्, झ्, ञ्] = छ्{1}
द् + [श्, च्, छ्, ज्, झ्, ञ्] = ज्{1}
ध् + [श्, च्, छ्, ज्, झ्, ञ्] = झ्{1}
न् + [श्, च्, छ्, ज्, झ्, ञ्] = ञ्{1}
[च्, छ्, ज्, झ्, ञ्] + त् = {0}च्
[च्, छ्, ज्, झ्, ञ्] + थ् = {0}छ्
[च्, छ्, ज्, झ्, ञ्] + द् = {0}ज्
[च्, छ्, ज्, झ्, ञ्] + ध् = {0}झ्
[च्, छ्, ज्, झ्, ञ्] + न् = {0}ञ्

# ष्टुत्वसन्धिः
# ष्टुना ष्टुः (८.४.४१) + तोः षि (८.४.४३)
# FIXME 
# What about न पदान्ताट्टोरनाम्  ८.४.४२) + अनाम्नवतिनगरीणामिति वक्तव्यम् (वा) ?
# Maybe we just live with the incorrect splits that should get filtered out by the next level?
स् + [ष्, ट्, ठ्, ड्, ढ्, ण्] = ष्{1}
# Need to handle जश्त्वसन्धिः
त् + [ट्, ठ्, ड्, ढ्, ण्] = ट्{1} / ड्{1}
थ् + [ट्, ठ्, ड्, ढ्, ण्] = ठ्{1} / ड्{1}
द् + [ट्, ठ्, ड्, ढ्, ण्] = ड्{1} 
ध् + [ट्, ठ्, ड्, ढ्, ण्] = ढ्{1} / ड्{1}
न् + [ ट्, ठ्, ड्, ढ्, ण्] = ण्{1} / ड्{1}
[ष्, ट्, ठ्, ड्, ढ्, ण्] + त् = {0}ट्
[ष्, ट्, ठ्, ड्, ढ्, ण्] + थ् = {0}ठ्
[ष्, ट्, ठ्, ड्, ढ्, ण्] + द् = {0}ड्
[ष्, ट्, ठ्, ड्, ढ्, ण्] + ध् = {0}ढ्
[ष्, ट्, ठ्, ड्, ढ्, ण्] + न् = {0}ण्

# जश्त्वसन्धिः
# झलां जशोऽन्ते (८.२.३९)
[क्, ख्, ग्, घ्] + [*अश्] = ग्{1}
[च्, छ्, ज्, झ्] + [*अश्] = ज्{1}
[ट्, ठ्, ड्, ढ्, ष्]  + [*अश्] = ड्{1}
[त्, थ्, द्, ध्] + [*अश्]  = द्{1}
[प्, फ्, ब्, भ्] + [*अश्]  = ब्{1}
# वाऽवसाने (८.४.५३)
[क्, ख्, ग्, घ्] +  = {0} / ग्
[च्, छ्, ज्, झ्] + = {0} / ज्
[ट्, ठ्, ड्, ढ्] + = {0} / ड्
[त्, थ्, द्, ध्] +  =  {0} / द्
[प्, फ्, ब्, भ्] + = {0} / ब्
ष् + = ट् / ड्

# चर्त्वसन्धिः
# खरि च (८.४.५५)
[क्, ख्, ग्, घ्] + [*खर्] = क्{1}
[च्, छ्, ज्, झ्] + [*खर्] = च्{1}
[ट्, ठ्, ड्, ढ्]  + [*खर्] = ट्{1}
[त्, थ्, द्, ध्] + [*खर्]  = त्{1}
[प्, फ्, ब्, भ्] + [*खर्] = प्{1}

# अनुनासिकसन्धिः
# यरोऽनुनासिकेऽनुनासिको वा (८.४.४५)
[क्, ख्, ग्, घ्] + [*ञम्] = ङ्{1} / {0}{1}
[च्, छ्, ज्, झ्] + [*ञम्] = ञ्{1} / {0}{1}
[ट्, ठ्, ड्, ढ्]  + [*ञम्] = ण्{1} / {0}{1}
[त्, थ्, द्, ध्] + [*ञम्] = न्{1} / {0}{1}
[प्, फ्, ब्, भ्] + [*ञम्] = म्{1} / {0}{1}

# अनुस्वारः
# मोऽनुस्वारः (८.३.२३)
म् + [*हल्] = ं {1} / ं{1}
# Skipping नश्चापदान्तस्य झलि since we don't care about internal sandhis

# परसवर्णः
# मोऽनुस्वारः (८.३.२३) + अनुस्वारस्य ययि परसवर्णः (८.४.५८) + वा पदान्तस्य (८.४.५९) 
[म्, ं] + [क्, ख्, ग्, घ्, ङ्] = ङ्{1} / {0}{1}
[म्, ं] + [च्, छ्, ज्, झ्, ञ्]  = ञ्{1} / {0}{1}
[म्, ं] + [ट्, ठ्, ड्, ढ्, ण्]  = ण्{1} / {0}{1}
[म्, ं] + [त्, थ्, द्, ध्, न्]  = न्{1} / {0}{1}
[म्, ं] + [प्, फ्, ब्, भ्, म्] = म्{1} / {0}{1}
[म्, ं] + [य्, व्, ल्] = {1}ँ{1}

# तोर्लि (८.४.६०)
[त्, थ्, द्, ध्] + ल् = ल्ल्
न् + ल् = ल्ँल्

# ङमुडागमः
# ङमोः ह्रस्वादचि ङमुण् नित्यम् ८.३.३२
[अ, इ, उ, ऋ][*ङम्] + [*अच्] = {0}{1}{1}{2}
# For म् just split. This is a very common split, so including it
म् + [*अल्] = म्{1}

# पूर्वसवर्णः
# झयो होऽन्यतरस्याम् ८.४.६२
[क्, ख्, ग्, घ्] + ह् = ग्घ् / ग्ह्
[च्, छ्, ज्, झ्]  + ह् = ज्झ् / ज्ह्
[ट्, ठ्, ड्, ढ्] + ह् = ड्ढ् / ड्ह्
[त्, थ्, द्, ध्] + ह् = द्ध् / द्ह्
[प्, फ्, ब्, भ्] + ह् = ब्भ् / ब्ह्

# NOTE: Commenting this as it can lead to unnecessary splits
#  उदः स्थास्तम्भोः पूर्वस्य ८.४.६१ + झरो झरि सवर्णे (८.४.६५)
# उत् +स्थ् = उत्थ्
# उत् + स्तम्भ् = उत्तम्भ्

# छत्वसन्धिः
# शश्छोऽटि - ८.४.६३
[*झय्] + श्[*अट्] = {0}छ्{2} / {0}श्{2}
# तवर्गः undergoes श्चुत्व as well. चर्त्व also in the case of द्
[त्, द्] + श्[*अट्] = च्छ्{2} / च्श्{2}
# शि तुक् - ८.३.३१ (वा) +‌ श्चुत्वम्  +‌ झरो झरि सवर्णे (वा) 
[न्] + श्[*अट्]  =  {0}{1}{2} / {0} {1}{2} / ञ्छ्{2} / ञ् छ्{2} / ञ्च्छ्{2} / ञ् च्छ्{2}   

# नश्छव्यप्रशान्
न् + [च्, छ्] = ँश्{1} / ंश्{1}
न् + [ट्, ठ्] = ँष्{1} / ंष्{1}
न् + [त्, थ्] = ँस्{1} / ंस्{1}

# Skipping समः सुटि ८.३.५ etc.

# तुगागमः
# छे च ६.१.७१ + दीर्घात् ६.१.७२  
[*अच्] + छ् = {0}च्छ् / {0} च्छ्
# पदान्ताद्वा ६.१.७३
[आ, ई, ऊ, ॠ] + छ् = {0}छ् / {0} छ्

#‌ द्वित्वम्
#‌ अचो रहाभ्यां द्वे ८.४.४६
#‌ अनचि च  ८.४.४७
#‌ Have to split into multiple rules to handle जश्त्वम् 
# rutvam, Visarga etc. This points to the need to 
# have multistage rules, perhaps?

[*अच्][र्, ह् ] +  [*यम् ] = {0}{1}{2} / {0}{1}{2}{2}
[*अच्][र्, ह् ] +  [*जश् ] = {0}{1}{2} / {0}{1}{2}{2}
[*अच्][र्, ह् ] +  घ्  = {0}{1}{2} / {0}{1}ग्घ्
[*अच्][र्, ह् ] +  झ्   = {0}{1}{2} / {0}{1}ज्झ् 
[*अच्][र्, ह् ] +  ढ्  = {0}{1}{2} / {0}{1}ड्ढ्
[*अच्][र्, ह् ] +  ध्  = {0}{1}{2} / {0}{1}द्ध्
[*अच्][र्, ह् ] +  भ्  = {0}{1}{2} / {0}{1}ब्भ्

[*इच्]स् +  [*यम् ] = {0}र्{2} / {0}र्{2}{2}
[*इच्]स् +  [*जश् ] = {0}र्{2} / {0}र्{2}{2}
[*इच्]स् +  घ्  = {0}र्{2} / {0}र्ग्घ्
[*इच्]स् +  झ्   = {0}र्{2} / {0}र्ज्झ् 
[*इच्]स् +  ढ्  = {0}र्{2} / {0}र्ड्ढ्
[*इच्]स् +  ध्  = {0}र्{2} / {0}र्द्ध्
[*इच्]स् +  भ्  = {0}र्{2} / {0}र्ब्भ्

# Catch all, to catch the default split
# since our input does not have any spaces
[*अय्] +  = {0}
# [*अल्] +  = {0}
[ं] +  = {0}

# Some combined rules
त् + ज् = ज्ज्
