]> 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 a2aa3c076852194d3b557dea373ad0d3c8d85a65..65292b7dd96cee97f631a87cda0b685f6e75988c 100644 (file)
@@ -3,15 +3,22 @@
 import re
 import string
 import sys
+import getopt
+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):
@@ -27,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, '')
@@ -122,12 +131,50 @@ 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'])
+edit = 0
+for (o,a) in opts:
+       if o == '-e' or o == '--edit':
+               edit = 1
+
+for a in files:
+       str = open (a).read()
+       if re.search (marker_str, str):
+               continue
+
+       sys.stderr.write ("processing %s\n" %a)
+       
+       str = sub_chords (str)  + marker_str + '\n'
+
+       if edit:
+               open (a + '.NEW', 'w').write (str)
+               os.rename (a, a + '~')
+               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-)
 
-print sub_chords (open (sys.argv[1]).read())  + marker_str