You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lexonomy_custom_editor/src/lib/structure_conversions.py

45 lines
1.6 KiB

__pragma__ ('noanno')
__pragma__ ('js', """
var fs = require('fs');
var conversion_csv = fs.readFileSync('build/conversions.csv', 'utf8');
""", None)
# above is magically read (browserify plugin) at compile time
# browserify is run from root, so we need build/ in path for this to work
# convert to useful structure
structure_conversions = None
def build_structure_conversions():
global structure_conversions
structure_conversions = []
structure_conversions_raw = [line.split(",") for line in conversion_csv.split("\n")]
for line in structure_conversions_raw:
if min(len(line[0]), len(line[1])) == 0:
continue
# header
if line[1] == "struktura":
continue
vfrom = line[0].replace("?", "\?").replace("%s", "([a-zA-Z螚ȎŠ-]+)")
vmatch = "^" + vfrom + "$"
vto = line[1].replace("<struktura>", "").replace("</struktura>", "").replace("%s", "$1").strip()
structure_conversions.append((__new__(RegExp(vmatch, 'u')),
__new__(RegExp(vfrom, 'u')),
vto))
def convert_structure(structure):
if structure_conversions is None:
build_structure_conversions()
for vmatch, vfrom, vto in structure_conversions:
if vmatch.test(structure):
# for some reason some times this fails to do correct replacement, but this helps #FML
# structure += " "
return structure.replace(vfrom, vto).strip()
return None