# keys.sed -- b for flat, w for double flat # are optional. # Can use h for bn, n for natural. # Outer address has no key changes. # Write single letters for notes in key sig. # Put @key0@ for no key change or # put @key[1-7][bs]@ ( b|s = flat|sharp ) # anywhere on first line to edit and # @key@ anywhere on last line of input to edit. # (c)2005 David Raleigh Arnold. GNU license. Enjoy! # Outer Address: /@key[0-7][bs@]/,/@key@/{ # no tabs, one space at beginning, end of line s/\t/ /g s/^ */ / s/ *$/ / #change spellings: # b and bb notes to f and ff s/\([{<| ][a-g]\)bb/\1ff/g s/\([{<| ][a-g]\)b/\1f/g # h to b-natural s/\([{<| ]\)h/\1bn/g # w to double flat ff s/\([{<| ][a-g]\)w/\1ff/g /@key[1-7][bs]@/,/@key@/{ # place marker to mark eligible notes consisting in a # single letter. s/\([{<| ]\)c\([^a-gnx]\)/\1c%flatORsharp%\2/g s/\([{<| ]\)d\([^a-gnx]\)/\1d%flatORsharp%\2/g s/\([{<| ]\)e\([^a-gnx]\)/\1e%flatORsharp%\2/g s/\([{<| ]\)f\([^a-gnx]\)/\1f%flatORsharp%\2/g s/\([{<| ]\)g\([^a-gnx]\)/\1g%flatORsharp%\2/g s/\([{<| ]\)a\([^a-gnx]\)/\1a%flatORsharp%\2/g s/\([{<| ]\)b\([^a-gnx]\)/\1b%flatORsharp%\2/g /@key7b@/,/@\/key@/b keycb /@key6b@/,/@\/key@/b keygb /@key5b@/,/@\/key@/b keydb /@key4b@/,/@\/key@/b keyab /@key3b@/,/@\/key@/b keyeb /@key2b@/,/@\/key@/b keybb /@key1b@/,/@\/key@/b keyf /@key7s@/,/@\/key@/b keycs /@key6s@/,/@\/key@/b keyfs /@key5s@/,/@\/key@/b keyB /@key4s@/,/@\/key@/b keye /@key3s@/,/@\/key@/b keya /@key2s@/,/@\/key@/b keyd /@key1s@/,/@\/key@/b keyg :keycb s/f%flatORsharp%/f%flat%/g :keygb s/c%flatORsharp%/c%flat%/g :keydb s/g%flatORsharp%/g%flat%/g :keyab s/d%flatORsharp%/d%flat%/g :keyeb s/a%flatORsharp%/a%flat%/g :keybb s/e%flatORsharp%/e%flat%/g :keyf s/b%flatORsharp%/b%flat%/g b finish :keycs s/b%flatORsharp%/b%sharp%/g :keyfs s/e%flatORsharp%/e%sharp%/g :keyB s/a%flatORsharp%/a%sharp%/g :keye s/d%flatORsharp%/d%sharp%/g :keya s/g%flatORsharp%/g%sharp%/g :keyd s/c%flatORsharp%/c%sharp%/g :keyg s/f%flatORsharp%/f%sharp%/g :finish s/%flatORsharp%//g # flat f s/%flat%/f/g # sharp s s/%sharp%/s/g } # Now outer clean up # rid of n's s/\([{<| ][a-g]\)n/\1/g # rid of markers s/@key0@//g s/@key[1-7][bs]@//g s/@key@//g }