]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4372: convert-ly misses some bflat -> b-flat
authorDavid Kastrup <dak@gnu.org>
Sun, 10 May 2015 14:03:42 +0000 (16:03 +0200)
committerDavid Kastrup <dak@gnu.org>
Sat, 16 May 2015 08:23:14 +0000 (10:23 +0200)
In python/convert-rules.py, using '\b' for note name boundaries turns
out to be too audacious since bflat4 is one word.  A proper solution
would be to match the variable wordsyntax and let the match expression
use a replacement function that triggers on the right words.  However,
such a large number of matches would be expensive.  So instead we are
using positive lookahead and lookbehind expressions to get reasonably
good matches.

python/convertrules.py

index 0df4b09b1d735a863bd8d4bdd76a66e6a35bfc66..05beeec455de0c524d3821c6172d4b1d0af90a0a 100644 (file)
@@ -3723,11 +3723,24 @@ 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 (r'\b([a-g])((?:sharp){1,2}|(?:flat){1,2})\b',r'\1-\2', str)
+    str = re.sub ('(' + before_id + r'[a-g])((?:sharp){1,2}|(?:flat){1,2})'
+                  + after_id, r'\1-\2', str)
     str = re.sub (r'\\shiftOff\b', r'\\undo\\shiftOn', str)
     return str