Skip to content

Commit 2652abd

Browse files
committed
chords grammar done
1 parent c3be3bb commit 2652abd

File tree

5 files changed

+52
-16
lines changed

5 files changed

+52
-16
lines changed

HarmonyDB.Theory/HarmonyDB.Theory.Chords/Constants/ChordConstants.cs

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public static class ChordConstants
2020
(ChordType.Major, "major", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
2121

2222
(ChordType.Minor, "m", MatchCase.ExactOnly, MatchAmbiguity.Safe),
23+
(ChordType.Minor, "mi", MatchCase.ExactOnly, MatchAmbiguity.Safe),
2324
(ChordType.Minor, "min", MatchCase.MatchUpperFirst, MatchAmbiguity.Safe),
2425
(ChordType.Minor, "minor", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
2526

@@ -33,14 +34,16 @@ public static class ChordConstants
3334
(ChordType.Dim7, "o", MatchCase.ExactOnly, MatchAmbiguity.Safe),
3435

3536
(ChordType.Sus2, "sus2", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
37+
(ChordType.Sus2, "s2", MatchCase.ExactOnly, MatchAmbiguity.Safe),
3638
(ChordType.Sus2, "susp2", MatchCase.ExactOnly, MatchAmbiguity.Safe),
3739

3840
(ChordType.Sus4, "sus4", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
41+
(ChordType.Sus4, "s4", MatchCase.ExactOnly, MatchAmbiguity.Safe),
3942
(ChordType.Sus4, "susp4", MatchCase.ExactOnly, MatchAmbiguity.Safe),
4043
(ChordType.Sus4, "sus", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
4144
(ChordType.Sus4, "susp", MatchCase.ExactOnly, MatchAmbiguity.Safe),
4245

43-
(ChordType.Power, "5", MatchCase.ExactOnly, MatchAmbiguity.Safe),
46+
(ChordType.Power, "5", MatchCase.ExactOnly, MatchAmbiguity.Degree),
4447
(ChordType.Power, "no3", MatchCase.ExactOnly, MatchAmbiguity.Safe),
4548
(ChordType.Power, "no3rd", MatchCase.ExactOnly, MatchAmbiguity.Safe),
4649
(ChordType.Power, "omit3", MatchCase.ExactOnly, MatchAmbiguity.Safe),
@@ -49,15 +52,18 @@ public static class ChordConstants
4952

5053
public static readonly IReadOnlyList<(ChordTypeExtension extension, string representation, MatchCase matchCase, MatchAmbiguity matchAmbiguity)> ChordTypeExtensionRepresentations =
5154
[
52-
(ChordTypeExtension.X7, "7", MatchCase.ExactOnly, MatchAmbiguity.Safe),
53-
(ChordTypeExtension.X9, "9", MatchCase.ExactOnly, MatchAmbiguity.Safe),
54-
(ChordTypeExtension.X11, "11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
55-
(ChordTypeExtension.X13, "13", MatchCase.ExactOnly, MatchAmbiguity.Safe),
55+
(ChordTypeExtension.X7, "add7", MatchCase.ExactOnly, MatchAmbiguity.Degree),
56+
(ChordTypeExtension.X7, "7", MatchCase.ExactOnly, MatchAmbiguity.Degree),
57+
(ChordTypeExtension.X9, "9", MatchCase.ExactOnly, MatchAmbiguity.Degree),
58+
(ChordTypeExtension.X11, "11", MatchCase.ExactOnly, MatchAmbiguity.Degree),
59+
(ChordTypeExtension.X13, "13", MatchCase.ExactOnly, MatchAmbiguity.Degree),
5660

57-
(ChordTypeExtension.XMaj7, "maj", MatchCase.ExactOnly, MatchAmbiguity.Safe),
5861
(ChordTypeExtension.XMaj7, "maj7", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
62+
(ChordTypeExtension.XMaj7, "maj", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
63+
(ChordTypeExtension.XMaj7, "ma7", MatchCase.ExactOnly, MatchAmbiguity.Safe),
5964
(ChordTypeExtension.XMaj7, "major7", MatchCase.MatchUpperFirst, MatchAmbiguity.Safe),
6065
(ChordTypeExtension.XMaj7, "M7", MatchCase.ExactOnly, MatchAmbiguity.Safe),
66+
(ChordTypeExtension.XMaj7, "MA7", MatchCase.ExactOnly, MatchAmbiguity.Safe),
6167
(ChordTypeExtension.XMaj7, "M", MatchCase.ExactOnly, MatchAmbiguity.Dangerous),
6268
(ChordTypeExtension.XMaj7, "7M", MatchCase.ExactOnly, MatchAmbiguity.Dangerous),
6369

@@ -84,38 +90,54 @@ public static class ChordConstants
8490

8591
(ChordTypeAdditions.No11, "no11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
8692

87-
(ChordTypeAdditions.Add2, "2", MatchCase.ExactOnly, MatchAmbiguity.Safe),
88-
(ChordTypeAdditions.Add2, "add2", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
93+
(ChordTypeAdditions.Add2, "2", MatchCase.ExactOnly, MatchAmbiguity.Degree),
94+
(ChordTypeAdditions.Add2, "add2", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
8995

90-
(ChordTypeAdditions.Add4, "4", MatchCase.ExactOnly, MatchAmbiguity.Safe),
91-
(ChordTypeAdditions.Add4, "add4", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
96+
(ChordTypeAdditions.Add4, "4", MatchCase.ExactOnly, MatchAmbiguity.Degree),
97+
(ChordTypeAdditions.Add4, "add4", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
9298

9399
(ChordTypeAdditions.Flat5, "addb5", MatchCase.ExactOnly, MatchAmbiguity.Safe),
94100
(ChordTypeAdditions.Flat6, "addb6", MatchCase.ExactOnly, MatchAmbiguity.Safe),
95101
(ChordTypeAdditions.Flat9, "addb9", MatchCase.ExactOnly, MatchAmbiguity.Safe),
96102
(ChordTypeAdditions.Flat11, "addb11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
97103
(ChordTypeAdditions.Flat13, "addb13", MatchCase.ExactOnly, MatchAmbiguity.Safe),
104+
(ChordTypeAdditions.Flat5, "add-5", MatchCase.ExactOnly, MatchAmbiguity.Safe),
105+
(ChordTypeAdditions.Flat6, "add-6", MatchCase.ExactOnly, MatchAmbiguity.Safe),
106+
(ChordTypeAdditions.Flat9, "add-9", MatchCase.ExactOnly, MatchAmbiguity.Safe),
107+
(ChordTypeAdditions.Flat11, "add-11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
108+
(ChordTypeAdditions.Flat13, "add-13", MatchCase.ExactOnly, MatchAmbiguity.Safe),
98109

99110
(ChordTypeAdditions.Sharp4, "add#4", MatchCase.ExactOnly, MatchAmbiguity.Safe),
100111
(ChordTypeAdditions.Sharp5, "add#5", MatchCase.ExactOnly, MatchAmbiguity.Safe),
101112
(ChordTypeAdditions.Sharp9, "add#9", MatchCase.ExactOnly, MatchAmbiguity.Safe),
102113
(ChordTypeAdditions.Sharp11, "add#11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
103114
(ChordTypeAdditions.Sharp13, "add#13", MatchCase.ExactOnly, MatchAmbiguity.Safe),
115+
(ChordTypeAdditions.Sharp4, "add+4", MatchCase.ExactOnly, MatchAmbiguity.Safe),
116+
(ChordTypeAdditions.Sharp5, "add+5", MatchCase.ExactOnly, MatchAmbiguity.Safe),
117+
(ChordTypeAdditions.Sharp9, "add+9", MatchCase.ExactOnly, MatchAmbiguity.Safe),
118+
(ChordTypeAdditions.Sharp11, "add+11", MatchCase.ExactOnly, MatchAmbiguity.Safe),
119+
(ChordTypeAdditions.Sharp13, "add+13", MatchCase.ExactOnly, MatchAmbiguity.Safe),
104120

105-
(ChordTypeAdditions.Add6, "6", MatchCase.ExactOnly, MatchAmbiguity.Safe),
106-
(ChordTypeAdditions.Add6, "add6", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
121+
(ChordTypeAdditions.Add6, "6", MatchCase.ExactOnly, MatchAmbiguity.Degree),
122+
(ChordTypeAdditions.Add6, "add6", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
107123

108-
(ChordTypeAdditions.Add9, "add9", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
109-
(ChordTypeAdditions.Add11, "add11", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
110-
(ChordTypeAdditions.Add13, "add13", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Safe),
124+
(ChordTypeAdditions.Add9, "add9", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
125+
(ChordTypeAdditions.Add11, "add11", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
126+
(ChordTypeAdditions.Add13, "add13", MatchCase.MatchUpperFirstOrAll, MatchAmbiguity.Degree),
111127

112128
(ChordTypeAdditions.HalfDiminished7, "ø", MatchCase.ExactOnly, MatchAmbiguity.Safe),
129+
130+
(ChordTypeAdditions.Sharp, "#", MatchCase.ExactOnly, MatchAmbiguity.DegreeAlteration),
131+
(ChordTypeAdditions.Flat, "b", MatchCase.ExactOnly, MatchAmbiguity.DegreeAlteration),
132+
(ChordTypeAdditions.Plus, "+", MatchCase.ExactOnly, MatchAmbiguity.DegreeAlteration),
133+
(ChordTypeAdditions.Minus, "-", MatchCase.ExactOnly, MatchAmbiguity.DegreeAlteration),
113134
];
114135

115136
public static readonly IReadOnlyList<(ChordTypeMeaninglessAddition meaninglessAddition, string representation)> ChordTypeMeaninglessAdditionRepresentations =
116137
[
117138
(ChordTypeMeaninglessAddition.Star, "*"),
118139
(ChordTypeMeaninglessAddition.Question, "?"),
140+
(ChordTypeMeaninglessAddition.Slash, "/"),
119141
];
120142

121143
public static readonly IReadOnlyList<string> Romans =

HarmonyDB.Theory/HarmonyDB.Theory.Chords/Models/Enums/ChordTypeAdditions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ public enum ChordTypeAdditions
3434
Sharp13 = 1 << 19,
3535

3636
HalfDiminished7 = 1 << 20,
37+
38+
Plus = 1 << 21,
39+
Minus = 1 << 22,
40+
Sharp = 1 << 23,
41+
Flat = 1 << 24,
3742
}

HarmonyDB.Theory/HarmonyDB.Theory.Chords/Models/Enums/ChordTypeMeaninglessAddition.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ public enum ChordTypeMeaninglessAddition
44
{
55
Star,
66
Question,
7+
FragmentSeparator,
8+
Slash,
79
}

HarmonyDB.Theory/HarmonyDB.Theory.Chords/Models/Enums/MatchAmbiguity.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ public enum MatchAmbiguity
44
{
55
Safe,
66
Dangerous,
7+
Degree,
8+
DegreeAlteration,
79
}

HarmonyDB.Theory/HarmonyDB.Theory.Chords/Parsers/ChordParser.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ public static class ChordParser
1313
var fragments = UnwrapParentheses(input, options);
1414
List<(ChordType? type, ChordTypeExtension? extension, ChordTypeAdditions? addition, byte? fret, ChordTypeMeaninglessAddition? meaninglessAddition, bool fromParentheses, MatchAmbiguity matchAmbiguity)> result = new();
1515

16-
foreach (var (fragment, fromParentheses) in fragments)
16+
foreach (var ((fragment, fromParentheses), i) in fragments.WithIndices())
1717
{
18+
if (i > 0)
19+
{
20+
result.Add((null, null, null, null, ChordTypeMeaninglessAddition.FragmentSeparator, true, MatchAmbiguity.Safe));
21+
}
22+
1823
var currentFragment = fragment;
1924

2025
while (true)

0 commit comments

Comments
 (0)