soundchanger/soundchanger.py
2023-01-29 10:05:48 +09:00

33 lines
928 B
Python

import re
class Change:
"""
Instantiates a string representation of a sound change.
"""
def __init__(self, change):
self.parse(change)
def __repr__(self):
return f"{self.b}>{self.a}/{self.f}_{self.t}"
def parse(self, change):
if '/' in change:
_change, _env = change.split('/')
else:
_change = change
_env = '_'
self.b, self.a = _change.split('>')
self.f, self.t = _env.split('_')
if self.f.startswith("{") and self.f.endswith("}"):
self.f = self.f[1:-1].split(',')
self.f = f"[{''.join(self.f)}]"
if self.t.startswith("{") and self.t.endswith("}"):
self.t = self.t[1:-1].split(',')
self.t = f"[{''.join(self.t)}]"
def sub(self, string):
return re.sub(f"(?<={self.f}){self.b}(?={self.t})", f"{self.a}", f"#{string}#").strip('#')