13 if re.search (r'\\\\', str):
16 if re.match (r'^\s*\)?\s*\\[a-zA-Z]+', str):
21 durs.append(m.group(2))
24 str = re.sub ("([a-z]+[,'!? ]*)([0-9.]+)", sub_durs, str)
31 return '<%s>' % m.group (1)
39 str = re.sub (r'(\\!)\s*([a-z]+)', sub_dyn_end, str)
43 if '-)' not in slur_strs:
44 slur_strs.append ( '-)')
47 if '-\)' not in slur_strs:
48 slur_strs.append ( '-\)')
50 str = re.sub (r"\)[ ]*([a-z]+)", sub_slurs, str)
51 str = re.sub (r"\\\)[ ]*([a-z]+)", sub_p_slurs, str)
52 def sub_begin_slurs(m):
53 if '-(' not in slur_strs:
54 slur_strs.append ( '-(')
56 str = re.sub (r"([a-z]+[,'!?0-9 ]*)\(", sub_begin_slurs, str)
57 def sub_begin_p_slurs(m):
58 if '-\(' not in slur_strs:
59 slur_strs.append ( '-\(')
62 str = re.sub (r"([a-z]+[,'!?0-9 ]*)\\\(", sub_begin_p_slurs, str)
66 if s == '@STARTCRESC@':
67 slur_strs.append ("-\\<")
68 elif s == '@STARTDECRESC@':
69 slur_strs.append ("-\\>")
71 slur_strs.append ('-\\!')
74 str = re.sub (r'@STARTCRESC@', sub_dyns, str)
75 str = re.sub (r'-?\\!', sub_dyns, str)
77 def sub_articulations (m):
79 if a not in slur_strs:
83 str = re.sub (r"([_^-]\@ACCENT\@)", sub_articulations, str)
84 str = re.sub (r"([_^-]\\[a-z]+)", sub_articulations, str)
85 str = re.sub (r"([_^-][>_.+|^-])", sub_articulations, str)
89 slur_strs.append ( ' -\\)')
91 str = re.sub (r"\\\)[ ]*([a-z]+)", sub_pslurs, str)
93 suffix = string.join (slur_strs, '') + string.join (pslur_strs, '') \
94 + string.join (dyns, '')
96 return '@STARTCHORD@%s@ENDCHORD@%s%s' % (str , dur_str, suffix)
102 simstart = "\n\\simultaneous {"
115 marker_str = '%% new-chords-done %%'
117 def sub_chords (str):
118 if re.search (marker_str,str):
121 str= re.sub (r'\\<', '@STARTCRESC@', str)
122 str= re.sub (r'\\>', '@STARTDECRESC@', str)
123 str= re.sub (r'([_^-])>', r'\1@ACCENT@', str)
124 str = re.sub ('<([^<>{}]+)>', sub_chord, str)
126 str = re.sub ('<([^?])', r'%s\1' % simstart, str)
127 str = re.sub ('>([^?])', r'%s\1' % simend, str)
128 str= re.sub ('@STARTCRESC@', r'\\<', str)
129 str= re.sub ('@STARTDECRESC@', r'\\>' ,str)
130 str= re.sub ('@STARTCHORD@', chordstart, str)
131 str= re.sub ('@ENDCHORD@', chordend, str)
132 str= re.sub (r'@ACCENT@', '>', str)
135 (opts, files)= getopt.getopt( sys.argv[1:], 'e',['edit'])
138 if o == '-e' or o == '--edit':
142 str = open (a).read()
143 if re.search (str, marker_str):
146 str = sub_chords (str) + marker_str + '\n'
149 open (a + '.NEW', 'w').write (str)
150 os.rename (a, a + '~')
151 os.rename (a + '.NEW', a)