]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 3229: Prefer \relative { ... } over \relative x'' { ... }
authorDavid Kastrup <dak@gnu.org>
Wed, 6 Mar 2013 23:23:16 +0000 (00:23 +0100)
committerDavid Kastrup <dak@gnu.org>
Sun, 17 May 2015 21:46:44 +0000 (23:46 +0200)
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

index 8dc8e9160ab887078c30a01bba3b9916df74f682..64356fa1f1f9c5e57302b06f60e97ac341158e2a 100644 (file)
@@ -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,