X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Fconvertrules.py;h=ad518547c4a093223078d7515533128cbae909ed;hb=7a696f81691477a86c029e6a4c69b8b13a729132;hp=bedfaaaf54cff148ee922d504a9e2dddb0e9c23c;hpb=873b5eed825171dec026a2d88f30ed48326e3f4b;p=lilypond.git diff --git a/python/convertrules.py b/python/convertrules.py index bedfaaaf54..ad518547c4 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -3013,6 +3013,12 @@ def conv (str): str = re.sub (r'\\(cresc|dim|endcresc|enddim)\b', r'\\deprecated\1', str) return str +@rule ((2, 13, 27), + ("interval-translate -> coord-translate")) +def conv (str): + str = re.sub ('interval-translate', 'coord-translate', str) + return str + @rule ((2, 13, 29), _ ("Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n\ \"accordion.accEtcbase\" -> \"accordion.etcbass\"")) @@ -3207,23 +3213,148 @@ def conv(str): def conv (str): return str -@rule ((2, 15, 2), +@rule ((2, 15, 7), + _ ("Handling of non-automatic footnotes.")) +def conv(str): + if re.search (r'\\footnote', str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n")) + stderr_write (UPDATE_MANUALLY) + return str + +@rule ((2, 15, 9), _ ("Change in internal property for MultiMeasureRest")) def conv (str): if re.search (r'use-breve-rest',str): - stderr_write (NOT_SMART % _("use-breve-rest. This internal property has been replaced by round-to-longer-rest and usable-duration-logs.\n")) + stderr_write ("\n") + stderr_write (NOT_SMART % "use-breve-rest.\n") + stderr_write (_ ("This internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.\n")) stderr_write (UPDATE_MANUALLY) return str -@rule ((2, 15, 8), - _ ("Handling of non-automatic footnotes.")) -def conv(str): - if re.search (r'\\footnote', str): +@rule ((2, 15, 10), + _ ("Creation of a Flag grob and moving of certain Stem properties to this grob")) +def conv (str): + str = re.sub (r"Stem\s+#'flag-style", r"Flag #'style", str) + str = re.sub (r"Stem\s+#'stroke-style", r"Flag #'stroke-style", str) + str = re.sub (r"Stem\s+#'flag", r"Flag #'print", str) + str = re.sub (r"(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'transparent\s*=\s*##t", r"\g<1>\\override Stem #'transparent = ##t\g<1>\\override Flag #'transparent = ##t", str) + str = re.sub (r"(\s+(?:\\once\s*)?)\\revert\s*Stem\s+#'transparent", r"\g<1>\\revert Stem #'transparent\g<1>\\revert Flag #'transparent", str) + str = re.sub (r"(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'stencil\s*=\s*##f", r"\g<1>\\override Stem #'stencil = ##f\g<1>\\override Flag #'stencil = ##f", str) + str = re.sub (r"(\s+(?:\\once\s*)?)\\revert\s*Stem\s+#'stencil", r"\g<1>\\revert Stem #'stencil\g<1>\\revert Flag #'stencil", str) + return str + +@rule ((2, 15, 16), r"\makeStringTuning, \contextStringTuning -> \stringTuning") +def conv (str): + str = re.sub (r"(\s+)\\contextStringTuning(\s+)#'([-a-zA-Z]+)(\s+<[^<>]+>)", + r"""\g<1>#(define \g<3> #{ \\stringTuning\g<4> #})\g<1>\\set stringTunings = #\g<3>""", + str) + str = re.sub (r""" +\\makeStringTuning(\s+)#'([-a-zA-Z]+)""", + r""" +"\g<2>" = \\stringTuning""", str) + str = re.sub (r"\\makeStringTuning(\s+)#'([-a-zA-Z]+)(\s+<[^<>]+>)", + r"#(define \g<2> #{ \\stringTuning\g<3> #})", str) + return str + +@rule ((2, 15, 17), "\\markuplines -> \\markuplist\n\ +Change Beam broken slope syntax.") +def conv (str): + str = re.sub (r""" +\\markuplines( +)([^ ].*) + \1([^ ])""", r""" +\\markuplist\g<1>\g<2> + \g<1>\g<3>""", str) + str = re.sub (r"\\markuplines", r"\\markuplist", str) + str = re.sub (r"@funindex markuplines", r"@funindex markuplist", str) + if re.search (r'consistent-broken-slope', str): stderr_write ("\n") - stderr_write (NOT_SMART % _("If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n")) + stderr_write (NOT_SMART % _("consistent-broken-slope, which is now handled through the positions callback.\n")) + stderr_write (_ ("input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n")) stderr_write (UPDATE_MANUALLY) return str +def paren_matcher (n): + # poor man's matched paren scanning, gives up + # after n+1 levels. Matches any string with balanced + # parens inside; add the outer parens yourself if needed. + # Nongreedy. + return r"[^()]*?(?:\("*n+r"[^()]*?"+r"\)[^()]*?)*?"*n + return + +def undollar_scm (m): + return re.sub (r"\$(.?)", r"\1", m.group (0)) + +def undollar_embedded (m): + str = re.sub (r"#\$", "#", m.group (1)) + # poor man's matched paren scanning after #, gives up + # after 25 levels. + str = re.sub ("#`?\("+paren_matcher (25)+"\)", undollar_scm, str) + return m.string[m.start (0):m.start (1)] + str + m.string[m.end (1):m.end (0)] + +def strip_export (str): + return re.sub (r"\(ly:export\s+(" + paren_matcher (25) + r")\)", + r"\1", str) + +def export_puller (m): + if not re.search (r"ly:export\s+", m.group (0)): + return m.group (0) + return "$" + strip_export (m.string[m.start (0)+1:m.end (0)]) + +def ugly_function_rewriter (m): + return m.string[m.start(0):m.start(1)] + strip_export (m.group (1)) + m.string[m.end(1):m.end(0)] + +should_really_be_music_function = "(?:\ +set-time-signature|empty-music|add-grace-property|\ +remove-grace-property|set-accidental-style)" + +def record_ugly (m): + global should_really_be_music_function + if not re.match (should_really_be_music_function, m.group (1)) \ + and re.search (r"ly:export\s+", m.group (2)): + should_really_be_music_function = \ + should_really_be_music_function[:-1] + "|" + m.group (1) + ")" + return m.group (0) + +@rule ((2, 15, 18), "#$ -> #, ly:export -> $") +def conv (str): + str = re.sub (r"(?s)#@?\{(.*?)#@?\}", undollar_embedded, str) + str = re.sub (r"#\(define(?:-public)?\s+\(([-a-zA-Z]+)" + + r"\b[^()]*?\)(" + paren_matcher (25) + + r")\)", record_ugly, str) + str = re.sub (r"\(define(?:-public)?\s+\(" + should_really_be_music_function + + r"\b[^()]*\)(" + paren_matcher (25) + + r")\)", ugly_function_rewriter, str) + str = re.sub (r"#(?=\(" + should_really_be_music_function + ")", "$", str) + str = re.sub (r"#\(markup\*(?=\s)", r"$(markup", str) + str = re.sub ("#\("+paren_matcher (25)+"\)", export_puller, str) + if re.search (r"\(ly:export\s+", str): + stderr_write ('\n') + stderr_write (NOT_SMART % "ly:export") + stderr_write ('\n') + return str + +@rule ((2, 15, 19), r"$(set-time-signature ...) -> \time") +def conv (str): + str = re.sub (r"\$\(set-time-signature\s+([0-9]+)\s+([0-9]+)\s*\)", + r"\\time \1/\2", str) + str = re.sub (r"\$\(set-time-signature\s+([0-9]+)\s+([0-9]+)\s+(" + + paren_matcher (5) + r")\)", r"\\time #\3 \1/\2", str) + if re.search (r"\(set-time-signature\s+", str): + stderr_write ('\n') + stderr_write (NOT_SMART % "set-time-signature") + stderr_write ('\n') + return str + +@rule ((2, 15, 20), r"$(set-accidental-style ...) -> \accidentalStyle") +def conv (str): + str = re.sub (r"\$\(set-accidental-style\s+'([-a-z]+)\)", + r'\\accidentalStyle "\1"', str) + str = re.sub (r"\$\(set-accidental-style\s+'([-a-z]+)\s+'([-A-Za-z]+)\s*\)", + r'''\\accidentalStyle #'\2 "\1"''', str) + str = re.sub (r"(@funindex\s+)set-accidental-style", + r"\1\\accidentalStyle", str) + return str # Guidelines to write rules (please keep this at the end of this file) #