summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorDavid Kastrup <dak@gnu.org>2013-03-07 00:23:16 +0100
committerDavid Kastrup <dak@gnu.org>2015-05-17 23:46:44 +0200
commit94644b3a701073c99eabb88d95b20cd3f3ac5af0 (patch)
treef4d355b8e0a1585482c702c6476d99cd0458d3a7 /python
parent5910bd4b7113bc614136480740c53866f3c6c69a (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.py32
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,