utkarsh2299's picture
Upload 55 files
76690c5 verified
import sys
class TableEntry:
def __init__(self):
self.tamil = ""
self.english = ""
def is_d_v(character, d_v):
return character in d_v
def is_non_printable(character):
return character in {'\n', '\r', '\t', ' '}
def transliterate(token, tamil_map):
for entry in tamil_map:
if token == entry.tamil:
return entry.english
print(f"No English character in the map file for {token}")
return None
def main():
if len(sys.argv) == 2:
map_file = open(sys.argv[1], "r")
input_text = sys.stdin
output_text = sys.stdout
elif len(sys.argv) == 4:
map_file = open(sys.argv[1], "r")
input_text = open(sys.argv[2], "r")
output_text = open(sys.argv[3], "w")
else:
print("./tamil_english map_file or\n./tamil_english map_file input output")
return 3
tamil_map = []
n_characters = 0
for line in map_file:
if line[0] == '#':
continue
tamil, english = line.split()
entry = TableEntry()
entry.tamil = tamil
entry.english = english
tamil_map.append(entry)
n_characters += 1
d_v = ['\u0BBE', '\u0BBF', '\u0BC0', '\u0BC1', '\u0BC2', '\u0BC6', '\u0BC7', '\u0BC8', '\u0BCA', '\u0BCB', '\u0BCC']
vowels = ['\u0B85', '\u0B86', '\u0B87', '\u0B88', '\u0B89', '\u0B8A', '\u0B8E', '\u0B8F', '\u0B90', '\u0B92', '\u0B93', '\u0B94', '\u0B83']
character_previous = ''
character = input_text.read(1)
character_next = input_text.read(1)
while character:
pos = input_text.tell()
if is_non_printable(character):
print(f"\nNon Printable\tSS{character}SS")
output_text.write(character)
elif is_d_v(character, vowels):
if character == '\u0B83' and character_next == '\u0BAA':
token = character
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
output_text.write(character_transliterated)
else:
token = character
input_text.seek(pos)
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
output_text.write(character_transliterated)
else:
if character_next == '\u0BCD':
token = character + character_next
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
output_text.write(character_transliterated)
elif is_d_v(character, d_v):
token = character
input_text.seek(pos)
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
output_text.write(character_transliterated)
elif not is_d_v(character_next, d_v):
token = character
input_text.seek(pos)
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
if token == character_transliterated:
output_text.write(character_transliterated)
else:
output_text.write(character_transliterated + "a")
elif is_d_v(character_next, d_v):
token = character
input_text.seek(pos)
character_transliterated = transliterate(token, tamil_map)
if character_transliterated is not None:
output_text.write(character_transliterated)
character = character_next
character_next = input_text.read(1)
if __name__ == "__main__":
main()