+@rule ((2, 12, 0),
+ _ ("Syntax changes for \\addChordShape and \\chord-shape") + "\n" + \
+ _ ("bump version for release"))
+def conv(str):
+ if re.search(r'\\addChordShape', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("stringTuning must be added to \
+addChordShape call.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ raise FatalConversionError ()
+ if re.search (r'\\chord-shape', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("stringTuning must be added to \
+chord-shape call.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ raise FatalConversionError ()
+ return str
+
+@rule ((2,12,3),
+ _ ("Remove oldaddlyrics"))
+def conv(str):
+ if re.search(r'\\oldaddlyrics', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("oldaddlyrics is no longer supported. \n \
+ Use addlyrics or lyrsicsto instead.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ raise FatalConversionError ()
+ return str
+
+@rule ((2, 13, 0), _ ("keySignature property not reversed any more\n\
+MIDI 47: orchestral strings -> orchestral harp"))
+def conv(str):
+ if re.search(r'\set Staff.keySignature', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("The alist for Staff.keySignature is no \
+longer in reversed order.\n"))
+ str = str.replace('"orchestral strings"', '"orchestral harp"')
+ return str
+
+@rule ((2, 13, 1),
+ _ ("\\bar \".\" now produces a thick barline\n\
+ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n\
+Dash parameters for slurs and ties are now in dash-definition"))
+def conv(str):
+ if re.search(r'\\bar\s*"."', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("\\bar \".\" now produces a thick barline.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ str = re.sub (r'ly:hairpin::after-line-breaking', r'ly:spanner::kill-zero-spanned-time', str)
+ if re.search("(Slur|Tie)\w+#\'dash-fraction", str) \
+ or re.search("(Slur|Tie)\w+#\'dash-period", str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("Dash parameters for slurs and ties are now in \'dash-details.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ return str
+
+@rule ((2, 13, 4),
+ _ ("Autobeaming rules have changed. override-auto-beam-setting and\n\
+revert-auto-beam-setting have been eliminated. \\overrideBeamSettings has been\n\
+added. BeatGrouping has been eliminated.\n\
+Different settings for vertical layout.\n\
+ly:system-start-text::print -> system-start-text::print\n\
+Beam #'thickness -> Beam #'beam-thickness\n\
+ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n\
+ly:ambitus::print -> ambitus::print"))
+def conv(str):
+ if re.search("override-auto-beam-setting", str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\
+ Autobeam settings are now overriden with \\overrideBeamSettings.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ if re.search("revert-auto-beam-setting", str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\
+ Autobeam settings are now reverted with \\revertBeamSettings.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ str = re.sub(r"\\set\s+beatGrouping", r"\\setBeatGrouping", str)
+ if re.search(r"\w+\s*.\s*beatGrouping", str):
+ stderr_write (NOT_SMART % _("beatGrouping. \n\
+ beatGrouping with a specified context must now be accomplished with\n\
+ \\overrideBeamSettings.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ if re.search(r'alignment-offsets', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("alignment-offsets has been changed to alignment-distances: \
+you must now specify the distances between staves rather than the offset of staves.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ str = re.sub ('ly:(system-start-text::print|note-head::brew-ez-stencil|ambitus::print)',
+ '\\1', str)
+ str = re.sub ('(\\bBeam\\s+#\')(?=thickness\\b)', '\\1beam-', str)
+ return str
+