if re.search("(Slur|Tie)\w+#\'dash-fraction", str) \
or re.search("(Slur|Tie)\w+#\'dash-period", str):
stderr_write (NOT_SMART % "dash-fraction, dash-period")
- stderr_write (_ ("Dash parameters for slurs and ties are now in \'dash-details.\n"))
+ stderr_write (_ ("Dash parameters for slurs and ties are now in \'dash-definition.\n"))
stderr_write (UPDATE_MANUALLY)
return str
return r"[^{}]*?(?:{"*n+r"[^{}]*?"+r"}[^{}]*?)*?"*n
matchstring = r'"(?:[^"\\]|\\.)*"'
-matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z]\S*|" + matchstring + r"|\("
- + paren_matcher(20) + r"\))|" + matchstring + r"|\\[a-z_A-Z]+)")
-matchmarkup = (r'(?:\\markup\s*(?:{' + brace_matcher (20) +r'}|' +
+matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z][^ \t\n()\\]*|" + matchstring
+ + r"|#?\(" + paren_matcher(20) + r"\)|"
+ + r"-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)|"
+ + r"#(?:[tf]|\\.|@?\{" + brace_matcher (10) + r"#@?\}))|"
+ + matchstring + r"|\\[a-z_A-Z]+|[0-9]+(?:/[0-9]+)?|-[0-9]+)")
+matchmarkup = (r'(?:\\markup\s*(?:@?\{' + brace_matcher (20) +r'\}|' +
matchstring + r'|(?:\\[a-z_A-Z][a-z_A-Z-]*(?:' + matcharg +
- r')*?\s*)*(?:' + matchstring + "|{" + brace_matcher (20) +
- "}))|" + matchstring + ")")
+ r')*?\s*)*(?:' + matchstring + r"|@?\{" + brace_matcher (20) +
+ r"\}))|" + matchstring + ")")
@rule((2, 15, 25), r"\(auto)?Footnote(Grob)? -> \footnote")
def conv (str):
if m.group (1):
return m.group (0)
x = m.group (2) + m.group (4)
-
+
if m.group (3):
x = x + re.sub (r"(\s*)(" + symbol_list + ")", fn_path_replace,
m.group (3))
@rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
def conv(str):
- str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+ str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?\}",
r"\\stringTuning\1\2", str)
if re.search (r'[^-\w]staff-padding[^-\w]', str):
stderr_write (NOT_SMART % "staff-padding")
def conv (str):
return str
-# like re.sub, but if the replacement is shorter than the original and
-# the original was followed by at least two spaces, the replacement
-# will be padded in order to take the same space.
-def repadsub (regexp, repl, item):
- def myownrep (m):
- res = repl
- while not isinstance(res, str):
- res = res (m)
- res = m.expand (res)
- if m.string [m.end():m.end()+2] != " ":
- return res
- # if there are newlines in the replaced string, just pad the end
- lastnlo = str.rfind (m.string, '\n', m.start (), m.end ())
- lastnlr = str.rfind (res, '\n')
- if (lastnlo < 0) and (lastnlr < 0):
- return res + ' ' * (m.end () - m.start () - len (res))
- if (lastnlo >= 0) and (lastnlr >= 0):
- return res + ' ' * (m.end () - lastnlo - len (res) + lastnlr)
- return res
- return re.sub (regexp, myownrep, item)
-
-@rule ((2, 19, 2), r"""\lyricsto \new/\context/... -> \new/\context/... \lyricsto
-c4 ~ c2 -> c4 ~ 2""")
+@rule ((2, 19, 2), r"\lyricsto \new/\context/... -> \new/\context/... \lyricsto")
def conv (str):
word=r'(?:#?"[^"]*"|\b' + wordsyntax + r'\b)'
str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)(\\(?:new|context)\s*" + word
str = re.sub (r"(\\lyricsto\s*" + word + r"\s*)\\lyrics\b\s*",
r"\\new Lyrics \1", str)
str = re.sub (r'\\lyricmode\s*(\\lyricsto\b)', r"\1", str)
+ return str
- def repl (m):
- return m.group (1) + \
- re.sub (r"(~\s*(?:\|\s*)?)[a-z]+[',]*",
- r"\1", m.group (4))
-
- str = repadsub (r"(\s([a-z]+)([',]*)!*\?*(?:[0-9]+\.*)?)" +
- r"((?:(?:\s|[-^_]?(?:[][()]|\\[()])|[-^_](?:[0-9]+|[->.^_!]))*" +
- r"~\s*(?:\|\s*)?\2\3?[0-9]+\.*)+)",
- repl, str)
-# The above does not catch the case g4~ g since it only removes note
-# names before durations, not adding any duration. So we use a
-# different replacement for that. It matches after an initial
-# notename+duration, a sequence of either duration (left from the
-# previous step) or notename only.
-
- def repl (m):
- return m.group (1) + \
- re.sub (r"(~\s*(?:\|\s*)?)[a-z]+[',]*",
- r"\g<1>" + re.sub (r"\\", r"\\\\", m.group(4)), m.group (5))
-
- str = repadsub (r"(\s([a-z]+)([',]*)!*\?*([0-9]+\.*))" +
- r"((?:(?:\s|[-^_]?(?:[][()]|\\[()])|[-^_](?:[0-9]+|[->.^_!]))*" +
- r"~\s*(?:\|\s*)?[0-9]+\.*)*" +
- r"(?:(?:\s|[-^_]?(?:[][()]|\\[()])|[-^_](?:[0-9]+|[->.^_!]))*" +
- r"~\s*(?:\|\s*)?\2\3?))(?!\s*(?:[!?0-9',]|\\rest))",
- repl, str)
+@rule ((2, 19, 7), "keySignature -> keyAlterations")
+def conv(str):
+ str = re.sub (r'\bkeySignature\b', 'keyAlterations', str)
+ str = re.sub (r'\blastKeySignature\b', 'lastKeyAlterations', str)
+ str = re.sub (r'\blocalKeySignature\b', 'localAlterations', str)
+ return str
+@rule ((2, 19, 11), "thin-kern -> segno-kern")
+def conv(str):
+ str = re.sub (r'\bthin-kern\b', 'segno-kern', str)
+ return str
+
+# before_id is written in a manner where it will only substantially
+# (rather than as a lookbefore assertion) match material that could
+# not be part of a previous id. In that manner, one replacement does
+# not inhibit an immediately adjacent replacement.
+
+before_id = r'(?:^|(?<!\\)(?:\\\\)+|(?<=[^-_\\a-zA-Z])|(?<=[^a-zA-Z][-_]))'
+
+# after_id is a pure lookbehind assertion so its match string is
+# always empty
+
+after_id = r'(?![a-zA-Z]|[-_][a-zA-Z])'
+
+@rule ((2, 19, 16), """implicitTimeSignatureVisibility -> initialTimeSignatureVisibility
+csharp -> c-sharp""")
+def conv(str):
+ str = re.sub (r'\bimplicitTimeSignatureVisibility\b', 'initialTimeSignatureVisibility', str)
+ str = re.sub ('(' + before_id + r'[a-g])((?:sharp){1,2}|(?:flat){1,2})'
+ + after_id, r'\1-\2', str)
return str
# Guidelines to write rules (please keep this at the end of this file)