]> git.donarmstrong.com Git - lilypond.git/blobdiff - python/convertrules.py
Issue 4442/1: convert rule: (xxx ... parser ...) -> (xxx ... ...)
[lilypond.git] / python / convertrules.py
index 64356fa1f1f9c5e57302b06f60e97ac341158e2a..77d83ff52a5420b944858b86e1ada582b0227d0e 100644 (file)
@@ -3298,12 +3298,15 @@ def brace_matcher (n):
     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):
@@ -3665,7 +3668,7 @@ def conv(str):
 
 @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")
@@ -3743,37 +3746,76 @@ def conv(str):
                   + after_id, r'\1-\2', str)
     return str
 
-@rule ((2, 19, 21), r"""\relative x''' { y ... -> \relative { z''' ...""")
-def conv(str):
-    # If the file contains a language switch to a language where the
-    # name of c is not "c", we can't reliably convert.
-    m = re.search (r'\\language\s(?!\s*#?"(?:nederlands|deutsch|english|norsk|suomi|svenska))"', str)
-    if True: # not m:
-        def subst(m):
-            oct = (len (re.findall ("'", m.group (1) + m.group (4)))
-                      - len (re.findall (",", m.group (1) + m.group (4))))
-            if (re.search (m.group (1)[0] + r".{7,}" + m.group (3)[0],
-                          "c d e f g a bh")):
-                oct = oct - 1
-            elif (re.search (m.group (3)[0] + r".{7,}" + m.group (1)[0],
-                            "c d e f g a bh")):
-                oct = oct + 1
-            return m.expand (r"\\relative\2\3" + oct * "'" + (-oct) * ",")
-        str = re.sub (r"\\relative\s+([a-z]+[',]*)"
-                      + r"(\s+(?:@?\{|<<?|"
-                      + r"\\(?:new|context)\s+[a-zA-Z]+(?:\s*=\s*"
-                      + matchstring + r")?\s)"
-                      + r"(?:@?\{|<<?|\s|"
-                      + r"%.*\n|"
-                      + r"\\(?:new|context)\s+[a-zA-Z]+(?:\s*=\s*"
-                      + matchstring + r")?\s|"
-                      + r"\\clef\s+(?:[a-z]+\s|" + matchstring + ")|"
-                      + r"\\key\s+[a-z]+\s*\\[a-z]+\s|"
-                      + r"\\time\s+[0-9]+/[0-9]+\s|"
-                      + r"\||[rsR](?:[0-9]+\.*(?:\*[0-9]+)?)?"
-                      + r")*)([a-h][a-z]*)([',]*)",
-                      subst, str)
-    return str
+@rule ((2, 19, 22), """(define-xxx-function (parser location ...) -> (define-xxx-function (...)
+(xxx ... parser ...) -> (xxx ... ...)""")
+def conv(str):
+    def subst(m):
+        def subsub(m):
+            str = (m.group (1)
+                   + re.sub ('(?<=\s|["\\()])' + m.group (2) + r'(?=\s|["\\()])',
+                             r'(*location*)',
+                             re.sub (r'(?<=\s|["\\()])parser(?=\s|["\\()])',
+                                     r'(*parser*)', m.group (3))))
+            return str
+        return re.sub (r'(\([-a-z]+\s*\(+)parser\s+([-a-z]+)\s*((?:.|\n)*)$',
+                       subsub, m.group (0))
+    str = re.sub (r'\(define-(?:music|event|scheme|void)-function(?=\s|["(])'
+                  + paren_matcher (20) + r'\)', subst, str)
+
+    def repl (m):
+        return m.group (1) + inner (m.group (2))
+    def inner (str):
+        str = re.sub (r"(\((?:" +
+                      r"ly:parser-lexer|" +
+                      r"ly:parser-clone|" +
+                      r"ly:parser-output-name|" +
+                      r"ly:parser-error|" +
+                      r"ly:parser-define!|" +
+                      r"ly:parser-lookup|" +
+                      r"ly:parser-has-error\?|" +
+                      r"ly:parser-clear-error|" +
+                      r"ly:parser-set-note-names|" +
+                      r"ly:parser-include-string|" +
+                      r"note-names-language|" +
+                      r"display-lily-music|" +
+                      r"music->lily-string|" +
+                      r"note-name->lily-string|" +
+                      r"value->lily-string|"
+                      r"check-grob-path|" +
+                      r"event-chord-wrap!|" +
+                      r"collect-bookpart-for-book|" +
+                      r"collect-scores-for-book|" +
+                      r"collect-music-aux|" +
+                      r"collect-book-music-for-book|" +
+                      r"scorify-music|" +
+                      r"collect-music-for-book|" +
+                      r"collect-book-music-for-book|" +
+                      r"toplevel-book-handler|" +
+                      r"default-toplevel-book-handler|" +
+                      r"print-book-with-defaults|" +
+                      r"toplevel-music-handler|" +
+                      r"toplevel-score-handler|" +
+                      r"toplevel-text-handler|" +
+                      r"toplevel-bookpart-handler|" +
+                      r"book-music-handler|" +
+                      r"context-mod-music-handler|" +
+                      r"bookpart-music-handler|" +
+                      r"output-def-music-handler|" +
+                      r"print-book-with-defaults-as-systems|" +
+                      r"add-score|" +
+                      r"add-text|" +
+                      r"add-music|" +
+                      r"make-part-combine-music|" +
+                      r"make-directed-part-combine-music|" +
+                      r"add-quotable|" +
+                      r"paper-variable|" +
+                      r"make-autochange-music|" +
+                      r"context-mod-from-music|" +
+                      r"context-defs-from-music)" +
+                      r'(?=\s|[()]))(' + paren_matcher (20) + ")"
+                      r"(?:\s+parser(?=\s|[()])|\s*\(\*parser\*\))", repl, str)
+        return str
+    return inner (str)
 
 # Guidelines to write rules (please keep this at the end of this file)
 #