diff options
author | David Kastrup <dak@gnu.org> | 2013-03-07 00:23:16 +0100 |
---|---|---|
committer | David Kastrup <dak@gnu.org> | 2015-05-17 23:46:44 +0200 |
commit | 94644b3a701073c99eabb88d95b20cd3f3ac5af0 (patch) | |
tree | f4d355b8e0a1585482c702c6476d99cd0458d3a7 /python | |
parent | 5910bd4b7113bc614136480740c53866f3c6c69a (diff) |
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.
Diffstat (limited to 'python')
-rw-r--r-- | python/convertrules.py | 32 |
1 files changed, 32 insertions, 0 deletions
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+(?:@?\{|<<?|" + + r"\\(?:new|context)\s+[a-zA-Z]+(?:\s*=\s*" + + matchstring + r")?\s)" + + r"(?:@?\{|<<?|\s|" + + r"%.*\n|" + + r"\\(?:new|context)\s+[a-zA-Z]+(?:\s*=\s*" + + matchstring + r")?\s|" + + r"\\clef\s+(?:[a-z]+\s|" + matchstring + ")|" + + r"\\key\s+[a-z]+\s*\\[a-z]+\s|" + + r"\\time\s+[0-9]+/[0-9]+\s|" + + r"\||[rsR](?:[0-9]+\.*(?:\*[0-9]+)?)?" + + r")*)([a-h][a-z]*)([',]*)", + subst, str) + return str + # Guidelines to write rules (please keep this at the end of this file) # # - keep at most one rule per version; if several conversions should be done, |