+
+@rule ((2, 11, 13), "#'arrow = ##t -> #'bound-details #'right #'arrow = ##t")
+def conv (str):
+ str = re.sub (r"\\override\s*([a-zA-Z.]+)\s*#'arrow\s*=\s*##t",
+ r"\\override \1 #'bound-details #'right #'arrow = ##t",
+ str)
+
+ if re.search ('edge-text', str):
+ stderr_write (NOT_SMART % _ ("edge-text settings for TextSpanner."))
+ stderr_write (_ ("Use\n\n%s") %
+ "\t\\override TextSpanner #'bound-details #'right #'text = <right-text>\n"
+ "\t\\override TextSpanner #'bound-details #'left #'text = <left-text>\n")
+ return str
+
+
+@rule ((2, 11, 15), "#'edge-height -> #'bound-details #'right/left #'text = ...")
+def conv (str):
+ def sub_edge_height (m):
+ s = ''
+ for (var, h) in [('left', m.group (3)),
+ ('right', m.group (4))]:
+
+ if h and float (h):
+ once = m.group(1)
+ if not once:
+ once = ''
+
+ s += (r"%s \override %s #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }"
+ % (once, m.group (2), var, h))
+
+ s += '\n'
+
+ return s
+
+
+ str = re.sub (r"(\\once)?\s*\\override\s*([a-zA-Z.]+)\s*#'edge-height\s*=\s*#'\(([0-9.-]+)\s+[.]\s+([0-9.-]+)\)",
+ sub_edge_height, str)
+ return str
+
+
+@rule ((2, 11, 23), "#'break-align-symbol -> #'break-align-symbols")
+def conv (str):
+ str = re.sub (r"\\override\s*([a-zA-Z.]+)\s*#'break-align-symbol\s*=\s*#'([a-z-]+)",
+ r"\\override \1 #'break-align-symbols = #'(\2)", str)
+ return str
+
+
+@rule ((2, 11, 35), """scripts.caesura -> scripts.caesura.curved.
+""" + _ ("Use #'style not #'dash-fraction to select solid/dashed lines."))
+def conv (str):
+ str = re.sub (r"scripts\.caesura",
+ r"scripts.caesura.curved", str)
+
+ if re.search ('dash-fraction', str):
+ stderr_write (NOT_SMART % _ ("all settings related to dashed lines.\n"))
+ stderr_write (_ ("Use \\override ... #'style = #'line for solid lines and\n"))
+ stderr_write (_ ("\t\\override ... #'style = #'dashed-line for dashed lines."))
+ return str
+
+
+@rule ((2, 11, 38), """\\setEasyHeads -> \\easyHeadsOn, \\fatText -> \\textLengthOn,
+\\emptyText -> \\textLengthOff""")
+def conv (str):
+ str = re.sub (r"setEasyHeads", r"easyHeadsOn", str)
+ str = re.sub (r"fatText", r"textLengthOn", str)
+ str = re.sub (r"emptyText", r"textLengthOff", str)
+ return str
+
+
+@rule ((2, 11, 46), "\\set hairpinToBarline -> \\override Hairpin #'to-barline")
+def conv (str):
+ str = re.sub (r"\\set\s+([a-zA-Z]+)\s*.\s*hairpinToBarline\s*=\s*##([tf]+)",
+ r"\\override \1.Hairpin #'to-barline = ##\2", str)
+ str = re.sub (r"\\set\s+hairpinToBarline\s*=\s*##([tf]+)",
+ r"\\override Hairpin #'to-barline = ##\1", str)
+ str = re.sub (r"\\unset\s+([a-zA-Z]+)\s*.\s*hairpinToBarline",
+ r"\\revert \1.Hairpin #'to-barline", str)
+ str = re.sub (r"\\unset\s+hairpinToBarline",
+ r"\\revert Hairpin #'to-barline", str)
+ str = re.sub (r"hairpinToBarline\s*=\s*##([tf]+)",
+ r"\\override Hairpin #'to-barline = ##\1", str)
+ str = re.sub (r"\\set (de|)crescendoSpanner = #'dashed-line",
+ r"\\set \1crescendoSpanner = #'text", str)
+ return str
+
+
+@rule ((2, 11, 48), "\\compressMusic -> \\scaleDurations")
+def conv (str):
+ str = re.sub (r"compressMusic", r"scaleDurations", str)
+ return str
+
+
+@rule ((2, 11, 50), "metronomeMarkFormatter uses text markup as second argument")
+def conv (str):
+ if re.search ('metronomeMarkFormatter', str):
+ stderr_write (NOT_SMART % _ ("metronomeMarkFormatter got an additional text argument.\n"))
+ stderr_write (_ ("The function assigned to Score.metronomeMarkFunction now uses the signature\n%s") %
+ "\t(format-metronome-markup text dur count context)\n")
+ return str
+
+@rule ((2,11,50), "Fret diagram properties moved to
+fret-diagram-details")
+def conv (str):
+ fret_props = ['barre-type',
+ 'dot-color',
+ 'dot-radius',
+ 'finger-code',
+ 'fret-count',
+ 'label-dir',
+ 'number-type',
+ 'string-count',
+ 'xo-font-magnification',
+ 'mute-string',
+ 'open-string',
+ 'orientation']
+ for prop in fret_props:
+ if re.search ( prop, str):
+ stderr_write ('\n')
+ stderr_write (NOT_SMART %
+ prop + " in fret-diagram properties. Use fret-diagram-details.")
+ stderr_write ('\n')
+ return str
+
+