]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/new-chords.py
* Documentation/user/GNUmakefile (DVIPS_PAPERSIZE): set A4 paper
[lilypond.git] / buildscripts / new-chords.py
index eb9656a8d1dc129066ab426cdca6c9ecee486794..65292b7dd96cee97f631a87cda0b685f6e75988c 100644 (file)
@@ -10,11 +10,15 @@ import os
 def sub_chord (m):
        str = m.group(1)
 
+       origstr =  '<%s>' % str
        if re.search (r'\\\\', str):
-               return '<%s>' % str
+               return origstr
+
+       if re.search (r'\\property', str):
+               return origstr
 
        if re.match (r'^\s*\)?\s*\\[a-zA-Z]+', str):
-               return '<%s>' % str
+               return origstr
 
        durs = []
        def sub_durs (m):
@@ -30,65 +34,67 @@ def sub_chord (m):
                if dur_str <> d:
                        return '<%s>' % m.group (1)
 
-
+       pslur_strs = ['']
        dyns = ['']
-       def sub_dyn_end (m):
-               dyns.append (' -\!')
-               return m.group(2)
-
-       str = re.sub (r'(\\!)\s*([a-z]+)', sub_dyn_end, str)
-
        slur_strs = ['']
-       def sub_slurs(m):
-               if '-)' not in slur_strs:
-                       slur_strs.append ( '-)')
-               return m.group(1)
-       def sub_p_slurs(m):
-               if '-\)' not in slur_strs:
-                       slur_strs.append ( '-\)')
-               return m.group(1)
-       str = re.sub (r"\)[ ]*([a-z]+)", sub_slurs, str)
-       str = re.sub (r"\\\)[ ]*([a-z]+)", sub_p_slurs, str)
-       def sub_begin_slurs(m):
-               if '-(' not in slur_strs:
-                       slur_strs.append ( '-(')
-               return m.group(1)
-       str = re.sub (r"([a-z]+[,'!?0-9 ]*)\(", sub_begin_slurs, str)
-       def sub_begin_p_slurs(m):
-               if '-\(' not in slur_strs:
-                       slur_strs.append ( '-\(')
-               return m.group(1)
-
-       str = re.sub (r"([a-z]+[,'!?0-9 ]*)\\\(", sub_begin_p_slurs, str)
-
-       def sub_dyns (m):
-               s = m.group(0)
-               if s == '@STARTCRESC@':
-                       slur_strs.append ("-\\<")
-               elif s == '@STARTDECRESC@':
-                       slur_strs.append ("-\\>")
-               elif s == r'-?\\!':
-                       slur_strs.append ('-\\!')
-               return ''
-               
-       str = re.sub (r'@STARTCRESC@', sub_dyns, str)
-       str = re.sub (r'-?\\!', sub_dyns, str)
-       
-       def sub_articulations (m):
-               a = m.group(1)
-               if a not in slur_strs:
-                       slur_strs.append (a)
-               return ''
-       
-       str = re.sub (r"([_^-]\@ACCENT\@)", sub_articulations, str)
-       str = re.sub (r"([_^-]\\[a-z]+)", sub_articulations, str)
-       str = re.sub (r"([_^-][>_.+|^-])", sub_articulations, str)
-       
-       pslur_strs = ['']
-       def sub_pslurs(m):
-               slur_strs.append ( ' -\\)')
-               return m.group(1)
-       str = re.sub (r"\\\)[ ]*([a-z]+)", sub_pslurs, str)
+
+       last_str = ''
+       while last_str <> str:
+         last_str = str
+         def sub_dyn_end (m):
+                 dyns.append (' -\!')
+                 return ' ' + m.group(2)
+
+         str = re.sub (r'(\\!)\s*([a-z]+)', sub_dyn_end, str)
+         def sub_slurs(m):
+                 if '-)' not in slur_strs:
+                         slur_strs.append ( '-)')
+                 return m.group(1)
+         def sub_p_slurs(m):
+                 if '-\)' not in slur_strs:
+                         slur_strs.append ( '-\)')
+                 return m.group(1)
+         str = re.sub (r"\)[ ]*([a-z]+)", sub_slurs, str)
+         str = re.sub (r"\\\)[ ]*([a-z]+)", sub_p_slurs, str)
+         def sub_begin_slurs(m):
+                 if '-(' not in slur_strs:
+                         slur_strs.append ( '-(')
+                 return m.group(1)
+         str = re.sub (r"([a-z]+[,'!?0-9 ]*)\(", sub_begin_slurs, str)
+         def sub_begin_p_slurs(m):
+                 if '-\(' not in slur_strs:
+                         slur_strs.append ( '-\(')
+                 return m.group(1)
+
+         str = re.sub (r"([a-z]+[,'!?0-9 ]*)\\\(", sub_begin_p_slurs, str)
+
+         def sub_dyns (m):
+                 s = m.group(0)
+                 if s == '@STARTCRESC@':
+                         slur_strs.append ("-\\<")
+                 elif s == '@STARTDECRESC@':
+                         slur_strs.append ("-\\>")
+                 elif s == r'-?\\!':
+                         slur_strs.append ('-\\!')
+                 return ''
+
+         str = re.sub (r'@STARTCRESC@', sub_dyns, str)
+         str = re.sub (r'-?\\!', sub_dyns, str)
+
+         def sub_articulations (m):
+                 a = m.group(1)
+                 if a not in slur_strs:
+                         slur_strs.append (a)
+                 return ''
+
+         str = re.sub (r"([_^-]\@ACCENT\@)", sub_articulations, str)
+         str = re.sub (r"([_^-]\\[a-z]+)", sub_articulations, str)
+         str = re.sub (r"([_^-][>_.+|^-])", sub_articulations, str)
+
+         def sub_pslurs(m):
+                 slur_strs.append ( ' -\\)')
+                 return m.group(1)
+         str = re.sub (r"\\\)[ ]*([a-z]+)", sub_pslurs, str)
 
        suffix = string.join (slur_strs, '') + string.join (pslur_strs, '') \
                 + string.join (dyns, '')
@@ -125,11 +131,12 @@ def sub_chords (str):
 
        str = re.sub ('<([^?])', r'%s\1' % simstart, str)
        str = re.sub ('>([^?])', r'%s\1' % simend,  str)
-       str= re.sub ('@STARTCRESC@', r'\\<', str)
-       str= re.sub ('@STARTDECRESC@', r'\\>' ,str)
-       str= re.sub ('@STARTCHORD@', chordstart, str)
-       str= re.sub ('@ENDCHORD@', chordend, str)
-       str= re.sub (r'@ACCENT@', '>', str)
+       str = re.sub ('@STARTCRESC@', r'\\<', str)
+       str = re.sub ('@STARTDECRESC@', r'\\>' ,str)
+       str = re.sub (r'\\context *Voice *@STARTCHORD@', '@STARTCHORD@', str)
+       str = re.sub ('@STARTCHORD@', chordstart, str)
+       str = re.sub ('@ENDCHORD@', chordend, str)
+       str = re.sub (r'@ACCENT@', '>', str)
        return str
 
 (opts, files)= getopt.getopt( sys.argv[1:], 'e',['edit'])
@@ -140,10 +147,12 @@ for (o,a) in opts:
 
 for a in files:
        str = open (a).read()
-       if re.search (str, marker_str):
+       if re.search (marker_str, str):
                continue
+
+       sys.stderr.write ("processing %s\n" %a)
        
-       str = sub_chords (str)  + marker_str
+       str = sub_chords (str)  + marker_str + '\n'
 
        if edit:
                open (a + '.NEW', 'w').write (str)
@@ -151,3 +160,21 @@ for a in files:
                os.rename (a + '.NEW', a)
        else:
                print str
+
+
+##
+## regexes for postfix slur & beam:
+##
+#PYTHON
+## ([^-])\[ *([a-z]+[!?]?[,']*[0-9:]+\.*) -> " \1 \2-["
+## ([^-])\( *([a-z]+[!?]?[,']*[0-9:]+\.*) -> "\1 \2-("
+##
+#EMACS
+## \([^-]\)\[ *\([a-z]+[!?]?[,']*[0-9:]*\.*\)
+#### ->
+## \1 \2-[
+##
+## \([^-]\)) *\([a-z]+[!?]?[,']*[0-9:]*\.*\)
+#### ->
+## \1 \2-)
+