From 94644b3a701073c99eabb88d95b20cd3f3ac5af0 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Thu, 7 Mar 2013 00:23:16 +0100 Subject: [PATCH] Issue 3229: Prefer \relative { ... } over \relative x'' { ... } As a followup to the commits for issue 3245, this conversion rule replaces uses of \relative with reference pitch by those without reference pitch for a number of patterns where convert-ly can detect the first actual note reliably. The rule is prepared to skip over files containing \include or \language with a non-c-using notename language since the patterns do not work for them. However, this part of the rule is disabled in this commit as it turns out that the LilyPond code base converts well (and more thoroughly) without it. --- python/convertrules.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/python/convertrules.py b/python/convertrules.py index 8dc8e9160a..64356fa1f1 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -3743,6 +3743,38 @@ def conv(str): + after_id, r'\1-\2', str) return str +@rule ((2, 19, 21), r"""\relative x''' { y ... -> \relative { z''' ...""") +def conv(str): + # If the file contains a language switch to a language where the + # name of c is not "c", we can't reliably convert. + m = re.search (r'\\language\s(?!\s*#?"(?:nederlands|deutsch|english|norsk|suomi|svenska))"', str) + if True: # not m: + def subst(m): + oct = (len (re.findall ("'", m.group (1) + m.group (4))) + - len (re.findall (",", m.group (1) + m.group (4)))) + if (re.search (m.group (1)[0] + r".{7,}" + m.group (3)[0], + "c d e f g a bh")): + oct = oct - 1 + elif (re.search (m.group (3)[0] + r".{7,}" + m.group (1)[0], + "c d e f g a bh")): + oct = oct + 1 + return m.expand (r"\\relative\2\3" + oct * "'" + (-oct) * ",") + str = re.sub (r"\\relative\s+([a-z]+[',]*)" + + r"(\s+(?:@?\{|<