transposerator
public ruby v1 · immutableKEYS = %W(A A# B C C# D D# E F F# G G#)def transpose(text, old_key, new_key) difference = KEYS.index(new_key) - KEYS.index(old_key) chords = Regexp.new(/(?:@)([A-Z]b?#?)(\w+)?(?:\/)?([A-Z]b?#?)?/) text.gsub(chords) do unless $3 KEYS[KEYS.index($1) + difference] + $2 else KEYS[KEYS.index($1) + difference] + '/' + KEYS[KEYS.index($3) + difference] end endendtext = "@Gadd7min13\nThis is some text\n@D/F#\nthis is some more text"puts transpose(text, 'G', 'D')