From 2f561e5047a6a3be0c43ab98aa39d6997c434857 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sat, 10 Jan 2026 10:24:12 -0600 Subject: [PATCH] Replace toScaleDegree with parseSpelledPitchOrScaleDegree to support chord charts written in key signature or numbers. --- src/pco_chordspkg/ast.nim | 4 ++-- src/pco_chordspkg/notation.nim | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/pco_chordspkg/ast.nim b/src/pco_chordspkg/ast.nim index 8fbdb1c..d54318a 100644 --- a/src/pco_chordspkg/ast.nim +++ b/src/pco_chordspkg/ast.nim @@ -186,12 +186,12 @@ proc parseChord*( let bass = if m.get.captures.contains(4) and m.get.captures[4].len > 0: - some(toScaleDegree(ctx.curKey, parseSpelledPitch(m.get.captures[4]))) + some(parseSpelledPitchOrScaleDegree(ctx.curKey, m.get.captures[4])) else: none[ScaleDegree]() return some(ChordChartChord( original: some(chordValue), - root: toScaleDegree(ctx.curKey, parseSpelledPitch(m.get.captures[0])), + root: parseSpelledPitchOrScaleDegree(ctx.curKey, m.get.captures[0]), flavor: flavor, bass: bass)) diff --git a/src/pco_chordspkg/notation.nim b/src/pco_chordspkg/notation.nim index 16de130..3f70bfd 100644 --- a/src/pco_chordspkg/notation.nim +++ b/src/pco_chordspkg/notation.nim @@ -314,6 +314,16 @@ func toScaleDegree*(k: Key, sp: SpelledPitch): ScaleDegree = ]# +func parseSpelledPitchOrScaleDegree*(key: Key, str: string): ScaleDegree = + try: + let pitch =parseSpelledPitch(str) + return toScaleDegree(key, pitch) + except: + try: return parseScaleDegree(str) + except: + raise newException(ValueError, + str & " is not a recognized pitch or scale degree") + func transpose*(k: Key, steps: int): Key = Key(