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):
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, '')
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