+
+ def fixKS(m):
+ words = { '-4': "DOUBLE-FLAT",
+ '-3': "THREE-Q-FLAT",
+ '-2': "FLAT",
+ '-1': "SEMI-FLAT",
+ '0': "NATURAL",
+ '1': "SEMI-SHARP",
+ '2': "SHARP",
+ '3': "THREE-Q-SHARP",
+ '4': "DOUBLE-SHARP"}
+ parts = m.group().split("`")
+ if len(parts) != 2:
+ return m.group()
+ numbers = re.findall(r'-?\d+',parts[1])
+ if len(numbers) % 3 != 0:
+ return m.group()
+ newalterations = []
+ for i in range(len(numbers) / 3):
+ newalterations.append('(('+numbers[i*3]+' . '+numbers[i*3+1]+') . ,'+
+ words[numbers[i*3+2]]+')')
+ whitespace = '\n'+' '*(len(parts[0])+2)
+ output = parts[0]+'`('+whitespace.join(newalterations)+')'
+ return output
+
+ findKeySig = re.compile(r'\\set\s+\w+\.keySignature .*?\)\s*\)',re.DOTALL)
+ str = findKeySig.sub(fixKS,str)
+