-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtranslit
executable file
·55 lines (44 loc) · 1.4 KB
/
translit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/python3
import sys, os, re
if len(sys.argv) < 2:
print('Usage: translit src.txt [> output.txt]')
print(' Or: cat src.txt | translit - [> output.txt]')
sys.exit(1)
def remove_uppercase (text):
def f (match):
g = match.group()
if g.isupper(): return g.title()
return g
return re.sub("\w+", f, text, flags=re.I)
def replace_keep_case (text, rule):
def f (match):
g = match.group()
if g.islower(): return rule[1].lower()
if g.istitle(): return rule[1].title()
if g.isupper(): return rule[1].upper()
return rule[1]
return re.sub(rule[0], f, text, flags=re.I)
rules_file = os.path.dirname(os.path.abspath(__file__)) + '/translit_rules'
with open(rules_file) as f:
rule_lines = f.readlines()
rules = []
for line in rule_lines:
rule_src = line.replace('\n', '').split(' -> ')
if len(rule_src) == 2 and rule_src[0].strip() != '' and rule_src[0].strip()[0] != '#':
if rule_src[1] == '[]':
rules.append([ rule_src[0].strip(), '' ])
else:
rules.append([ rule_src[0].strip(), rule_src[1].strip() ])
src_filename = sys.argv[1]
if src_filename == "-":
lines = sys.stdin.readlines()
else:
with open(src_filename) as f:
lines = f.readlines()
output = ''
for line in lines:
output_line = remove_uppercase(line)
for rule in rules:
output_line = replace_keep_case(output_line, rule)
output = output + output_line
print(output)