chordsheetjs 15.4.0 → 15.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/pdf/module.js CHANGED
@@ -302,6 +302,7 @@ const $234747a9630b4642$export$ba1aa2356c5f40b7 = 0;
302
302
  const $234747a9630b4642$export$dfea9b8ecbbb8623 = 'start_tag';
303
303
  const $234747a9630b4642$export$3d329a2c209fbc28 = 'end_tag';
304
304
  const $234747a9630b4642$export$97c0a36af1d48540 = 'auto';
305
+ const $234747a9630b4642$export$34df5089b632c747 = 'german';
305
306
 
306
307
 
307
308
  /**
@@ -1718,501 +1719,9 @@ var $a2e1bf5465822273$export$2e2bcd8739ae039 = $a2e1bf5465822273$var$enharmonics
1718
1719
 
1719
1720
 
1720
1721
 
1721
- /*
1722
- ⚠️⚠️⚠️ NOTE: this file has been generated automatically.
1723
- Please do NOT edit this file directly, but instead:
1724
- - edit the data source, located in `data/scales.ts`
1725
- - run `yarn build:code-generate` to re-generate this file.
1726
- */
1727
- const $93829257ae60df96$export$7e1516eaf3ebe01f = {
1728
- [(0, $234747a9630b4642$export$27c95a7104c1f7aa)]: {
1729
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
1730
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1731
- C: 0,
1732
- D: 2,
1733
- E: 4,
1734
- F: 5,
1735
- G: 7,
1736
- A: 9,
1737
- B: 11
1738
- },
1739
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1740
- B: 0,
1741
- C: 1,
1742
- D: 3,
1743
- E: 5,
1744
- F: 6,
1745
- G: 8,
1746
- A: 10
1747
- },
1748
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1749
- D: 1,
1750
- E: 3,
1751
- F: 4,
1752
- G: 6,
1753
- A: 8,
1754
- B: 10,
1755
- C: 11
1756
- }
1757
- },
1758
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
1759
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1760
- C: 0,
1761
- D: 2,
1762
- E: 4,
1763
- F: 5,
1764
- G: 7,
1765
- A: 9,
1766
- B: 11
1767
- },
1768
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1769
- B: 0,
1770
- C: 1,
1771
- D: 3,
1772
- E: 5,
1773
- F: 6,
1774
- G: 8,
1775
- A: 10
1776
- },
1777
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1778
- D: 1,
1779
- E: 3,
1780
- F: 4,
1781
- G: 6,
1782
- A: 8,
1783
- B: 10,
1784
- C: 11
1785
- }
1786
- }
1787
- },
1788
- [(0, $234747a9630b4642$export$539a6499f4711c57)]: {
1789
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
1790
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1791
- Do: 0,
1792
- Re: 2,
1793
- Mi: 4,
1794
- Fa: 5,
1795
- Sol: 7,
1796
- La: 9,
1797
- Si: 11
1798
- },
1799
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1800
- Si: 0,
1801
- Do: 1,
1802
- Re: 3,
1803
- Mi: 5,
1804
- Fa: 6,
1805
- Sol: 8,
1806
- La: 10
1807
- },
1808
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1809
- Re: 1,
1810
- Mi: 3,
1811
- Fa: 4,
1812
- Sol: 6,
1813
- La: 8,
1814
- Si: 10,
1815
- Do: 11
1816
- }
1817
- },
1818
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
1819
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1820
- Do: 0,
1821
- Re: 2,
1822
- Mi: 4,
1823
- Fa: 5,
1824
- Sol: 7,
1825
- La: 9,
1826
- Si: 11
1827
- },
1828
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1829
- Si: 0,
1830
- Do: 1,
1831
- Re: 3,
1832
- Mi: 5,
1833
- Fa: 6,
1834
- Sol: 8,
1835
- La: 10
1836
- },
1837
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1838
- Re: 1,
1839
- Mi: 3,
1840
- Fa: 4,
1841
- Sol: 6,
1842
- La: 8,
1843
- Si: 10,
1844
- Do: 11
1845
- }
1846
- }
1847
- },
1848
- [(0, $234747a9630b4642$export$4d318981b5a83836)]: {
1849
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
1850
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1851
- 1: 0,
1852
- 2: 2,
1853
- 3: 4,
1854
- 4: 5,
1855
- 5: 7,
1856
- 6: 9,
1857
- 7: 11
1858
- },
1859
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1860
- 7: 0,
1861
- 1: 1,
1862
- 2: 3,
1863
- 3: 5,
1864
- 4: 6,
1865
- 5: 8,
1866
- 6: 10
1867
- },
1868
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1869
- 2: 1,
1870
- 3: 3,
1871
- 4: 4,
1872
- 5: 6,
1873
- 6: 8,
1874
- 7: 10,
1875
- 1: 11
1876
- }
1877
- },
1878
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
1879
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1880
- 1: 0,
1881
- 2: 2,
1882
- 3: 3,
1883
- 4: 5,
1884
- 5: 7,
1885
- 6: 8,
1886
- 7: 10
1887
- },
1888
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1889
- 1: 1,
1890
- 2: 3,
1891
- 3: 4,
1892
- 4: 6,
1893
- 5: 8,
1894
- 6: 9,
1895
- 7: 11
1896
- },
1897
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1898
- 2: 1,
1899
- 3: 2,
1900
- 4: 4,
1901
- 5: 6,
1902
- 6: 7,
1903
- 7: 9,
1904
- 1: 11
1905
- }
1906
- }
1907
- },
1908
- [(0, $234747a9630b4642$export$1321df9b16c30c6a)]: {
1909
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
1910
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1911
- I: 0,
1912
- II: 2,
1913
- III: 4,
1914
- IV: 5,
1915
- V: 7,
1916
- VI: 9,
1917
- VII: 11
1918
- },
1919
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1920
- VII: 0,
1921
- I: 1,
1922
- II: 3,
1923
- III: 5,
1924
- IV: 6,
1925
- V: 8,
1926
- VI: 10
1927
- },
1928
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1929
- II: 1,
1930
- III: 3,
1931
- IV: 4,
1932
- V: 6,
1933
- VI: 8,
1934
- VII: 10,
1935
- I: 11
1936
- }
1937
- },
1938
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
1939
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1940
- I: 0,
1941
- II: 2,
1942
- III: 3,
1943
- IV: 5,
1944
- V: 7,
1945
- VI: 8,
1946
- VII: 10
1947
- },
1948
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1949
- I: 1,
1950
- II: 3,
1951
- III: 4,
1952
- IV: 6,
1953
- V: 8,
1954
- VI: 9,
1955
- VII: 11
1956
- },
1957
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1958
- II: 1,
1959
- III: 2,
1960
- IV: 4,
1961
- V: 6,
1962
- VI: 7,
1963
- VII: 9,
1964
- I: 11
1965
- }
1966
- }
1967
- }
1968
- };
1969
- const $93829257ae60df96$export$40141681ebb03523 = {
1970
- [(0, $234747a9630b4642$export$27c95a7104c1f7aa)]: {
1971
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
1972
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
1973
- 0: 'C',
1974
- 2: 'D',
1975
- 4: 'E',
1976
- 5: 'F',
1977
- 7: 'G',
1978
- 9: 'A',
1979
- 11: 'B'
1980
- },
1981
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
1982
- 0: 'B#',
1983
- 1: 'C#',
1984
- 3: 'D#',
1985
- 5: 'E#',
1986
- 6: 'F#',
1987
- 8: 'G#',
1988
- 10: 'A#'
1989
- },
1990
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
1991
- 1: 'Db',
1992
- 3: 'Eb',
1993
- 4: 'Fb',
1994
- 6: 'Gb',
1995
- 8: 'Ab',
1996
- 10: 'Bb',
1997
- 11: 'Cb'
1998
- }
1999
- },
2000
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
2001
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2002
- 0: 'C',
2003
- 2: 'D',
2004
- 4: 'E',
2005
- 5: 'F',
2006
- 7: 'G',
2007
- 9: 'A',
2008
- 11: 'B'
2009
- },
2010
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2011
- 0: 'B#',
2012
- 1: 'C#',
2013
- 3: 'D#',
2014
- 5: 'E#',
2015
- 6: 'F#',
2016
- 8: 'G#',
2017
- 10: 'A#'
2018
- },
2019
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2020
- 1: 'Db',
2021
- 3: 'Eb',
2022
- 4: 'Fb',
2023
- 6: 'Gb',
2024
- 8: 'Ab',
2025
- 10: 'Bb',
2026
- 11: 'Cb'
2027
- }
2028
- }
2029
- },
2030
- [(0, $234747a9630b4642$export$539a6499f4711c57)]: {
2031
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
2032
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2033
- 0: 'Do',
2034
- 2: 'Re',
2035
- 4: 'Mi',
2036
- 5: 'Fa',
2037
- 7: 'Sol',
2038
- 9: 'La',
2039
- 11: 'Si'
2040
- },
2041
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2042
- 0: 'Si#',
2043
- 1: 'Do#',
2044
- 3: 'Re#',
2045
- 5: 'Mi#',
2046
- 6: 'Fa#',
2047
- 8: 'Sol#',
2048
- 10: 'La#'
2049
- },
2050
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2051
- 1: 'Reb',
2052
- 3: 'Mib',
2053
- 4: 'Fab',
2054
- 6: 'Solb',
2055
- 8: 'Lab',
2056
- 10: 'Sib',
2057
- 11: 'Dob'
2058
- }
2059
- },
2060
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
2061
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2062
- 0: 'Do',
2063
- 2: 'Re',
2064
- 4: 'Mi',
2065
- 5: 'Fa',
2066
- 7: 'Sol',
2067
- 9: 'La',
2068
- 11: 'Si'
2069
- },
2070
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2071
- 0: 'Si#',
2072
- 1: 'Do#',
2073
- 3: 'Re#',
2074
- 5: 'Mi#',
2075
- 6: 'Fa#',
2076
- 8: 'Sol#',
2077
- 10: 'La#'
2078
- },
2079
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2080
- 1: 'Reb',
2081
- 3: 'Mib',
2082
- 4: 'Fab',
2083
- 6: 'Solb',
2084
- 8: 'Lab',
2085
- 10: 'Sib',
2086
- 11: 'Dob'
2087
- }
2088
- }
2089
- },
2090
- [(0, $234747a9630b4642$export$4d318981b5a83836)]: {
2091
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
2092
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2093
- 0: '1',
2094
- 2: '2',
2095
- 4: '3',
2096
- 5: '4',
2097
- 7: '5',
2098
- 9: '6',
2099
- 11: '7'
2100
- },
2101
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2102
- 0: '#7',
2103
- 1: '#1',
2104
- 3: '#2',
2105
- 5: '#3',
2106
- 6: '#4',
2107
- 8: '#5',
2108
- 10: '#6'
2109
- },
2110
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2111
- 1: 'b2',
2112
- 3: 'b3',
2113
- 4: 'b4',
2114
- 6: 'b5',
2115
- 8: 'b6',
2116
- 10: 'b7',
2117
- 11: 'b1'
2118
- }
2119
- },
2120
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
2121
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2122
- 0: '1',
2123
- 2: '2',
2124
- 3: '3',
2125
- 5: '4',
2126
- 7: '5',
2127
- 8: '6',
2128
- 10: '7'
2129
- },
2130
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2131
- 1: '#1',
2132
- 3: '#2',
2133
- 4: '#3',
2134
- 6: '#4',
2135
- 8: '#5',
2136
- 9: '#6',
2137
- 11: '#7'
2138
- },
2139
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2140
- 1: 'b2',
2141
- 2: 'b3',
2142
- 4: 'b4',
2143
- 6: 'b5',
2144
- 7: 'b6',
2145
- 9: 'b7',
2146
- 11: 'b1'
2147
- }
2148
- }
2149
- },
2150
- [(0, $234747a9630b4642$export$1321df9b16c30c6a)]: {
2151
- [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
2152
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2153
- 0: 'I',
2154
- 2: 'II',
2155
- 4: 'III',
2156
- 5: 'IV',
2157
- 7: 'V',
2158
- 9: 'VI',
2159
- 11: 'VII'
2160
- },
2161
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2162
- 0: '#VII',
2163
- 1: '#I',
2164
- 3: '#II',
2165
- 5: '#III',
2166
- 6: '#IV',
2167
- 8: '#V',
2168
- 10: '#VI'
2169
- },
2170
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2171
- 1: 'bII',
2172
- 3: 'bIII',
2173
- 4: 'bIV',
2174
- 6: 'bV',
2175
- 8: 'bVI',
2176
- 10: 'bVII',
2177
- 11: 'bI'
2178
- }
2179
- },
2180
- [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
2181
- [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
2182
- 0: 'I',
2183
- 2: 'II',
2184
- 3: 'III',
2185
- 5: 'IV',
2186
- 7: 'V',
2187
- 8: 'VI',
2188
- 10: 'VII'
2189
- },
2190
- [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
2191
- 1: '#I',
2192
- 3: '#II',
2193
- 4: '#III',
2194
- 6: '#IV',
2195
- 8: '#V',
2196
- 9: '#VI',
2197
- 11: '#VII'
2198
- },
2199
- [(0, $234747a9630b4642$export$1ea14522906630af)]: {
2200
- 1: 'bII',
2201
- 2: 'bIII',
2202
- 4: 'bIV',
2203
- 6: 'bV',
2204
- 7: 'bVI',
2205
- 9: 'bVII',
2206
- 11: 'bI'
2207
- }
2208
- }
2209
- }
2210
- };
2211
-
2212
-
2213
1722
 
2214
1723
  const $918eb2016ac61e41$var$regexes = {
2215
- symbol: /^(?<key>((?<note>[A-Ga-g])(?<accidental>#|b)?))(?<minor>m)?$/,
1724
+ symbol: /^(?<key>((?<note>[A-Ha-h])(?<accidental>#|b)?))(?<minor>m)?$/,
2216
1725
  solfege: /^(?<key>((?<note>Do|Re|Mi|Fa|Sol|La|Si|do|re|mi|fa|sol|la|si)(?<accidental>#|b)?))(?<minor>m)?$/,
2217
1726
  numeric: /^(?<key>(?<accidental>#|b)?(?<note>[1-7]))(?<minor>m)?$/,
2218
1727
  numeral: /^(?<key>(?<accidental>#|b)?(?<note>I{1,3}|IV|VI{0,2}|i{1,3}|iv|vi{0,2}))$/
@@ -2299,27 +1808,28 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2299
1808
  key: note,
2300
1809
  keyType: keyType,
2301
1810
  minor: minor || false,
2302
- accidental: accidental || null
1811
+ accidental: accidental || null,
1812
+ preferredNotation: keyType === (0, $234747a9630b4642$export$27c95a7104c1f7aa) && (0, $974bd1d260bb1d53$export$4da2456f0a9c9a18)(note) ? (0, $234747a9630b4642$export$34df5089b632c747) : null
2303
1813
  });
2304
1814
  }
2305
- /* eslint-disable-next-line max-lines-per-function */ static resolve({ key: key, keyType: keyType, minor: minor, accidental: accidental }) {
1815
+ /* eslint-disable-next-line max-lines-per-function */ static resolve({ key: key, keyType: keyType, minor: minor, accidental: accidental, preferredNotation: preferredNotation }) {
2306
1816
  const keyString = `${key}`;
2307
1817
  const isMinor = this.isMinor(keyString, keyType, minor);
2308
- if (keyType === (0, $234747a9630b4642$export$27c95a7104c1f7aa) || keyType === (0, $234747a9630b4642$export$539a6499f4711c57)) {
2309
- const grade = this.toGrade(keyString, accidental || (0, $234747a9630b4642$export$3fdd332fe3104970), keyType, isMinor);
2310
- if (grade !== null) return new $918eb2016ac61e41$var$Key({
2311
- grade: 0,
2312
- minor: isMinor,
2313
- type: keyType,
2314
- accidental: accidental || null,
2315
- preferredAccidental: accidental || null,
2316
- referenceKeyGrade: grade,
2317
- originalKeyString: keyString
2318
- });
2319
- }
2320
- const number = this.getNumberFromKey(keyString, keyType);
1818
+ const notation = (0, $974bd1d260bb1d53$export$9bc1c71527523e02)(keyString, preferredNotation);
1819
+ const lookupAccidental = (0, $974bd1d260bb1d53$export$7d9735233c5272d2)(keyString, accidental, notation) ?? accidental;
1820
+ const grade = keyType === (0, $234747a9630b4642$export$27c95a7104c1f7aa) || keyType === (0, $234747a9630b4642$export$539a6499f4711c57) ? (0, $974bd1d260bb1d53$export$f524439d316753cc)(keyString, lookupAccidental || (0, $234747a9630b4642$export$3fdd332fe3104970), keyType, isMinor) : null;
1821
+ if (grade !== null) return new $918eb2016ac61e41$var$Key({
1822
+ grade: 0,
1823
+ minor: isMinor,
1824
+ type: keyType,
1825
+ accidental: accidental || null,
1826
+ preferredAccidental: accidental || null,
1827
+ referenceKeyGrade: grade,
1828
+ originalKeyString: keyString,
1829
+ preferredNotation: notation
1830
+ });
2321
1831
  return new $918eb2016ac61e41$var$Key({
2322
- number: number,
1832
+ number: this.getNumberFromKey(keyString, keyType),
2323
1833
  minor: isMinor,
2324
1834
  type: keyType,
2325
1835
  accidental: accidental || null,
@@ -2343,14 +1853,6 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2343
1853
  (0, $974bd1d260bb1d53$export$b680e6b2c82f8c2f)('keyWithModifier is deprecated, use keyWithAccidental instead');
2344
1854
  return this.keyWithAccidental(key, accidental, type);
2345
1855
  }
2346
- static toGrade(key, accidental, type, isMinor) {
2347
- const mode = isMinor ? (0, $234747a9630b4642$export$f23edc19d247fd25) : (0, $234747a9630b4642$export$39615881bb0d21f6);
2348
- const grades = (0, $93829257ae60df96$export$7e1516eaf3ebe01f)[type][mode][accidental];
2349
- if (key in grades) return grades[key];
2350
- const upperCaseKey = key.toUpperCase();
2351
- if (upperCaseKey in grades) return grades[upperCaseKey];
2352
- return null;
2353
- }
2354
1856
  static isMinor(key, keyType, minor) {
2355
1857
  switch(keyType){
2356
1858
  case 'numeral':
@@ -2393,13 +1895,14 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2393
1895
  */ static distance(oneKey, otherKey) {
2394
1896
  return this.wrapOrFail(oneKey).distanceTo(otherKey);
2395
1897
  }
2396
- constructor({ grade: grade = null, number: number = null, minor: minor, type: type, accidental: accidental, referenceKeyGrade: referenceKeyGrade = null, referenceKeyMode: referenceKeyMode = null, originalKeyString: originalKeyString = null, preferredAccidental: preferredAccidental = null, explicitAccidental: explicitAccidental = false }){
1898
+ constructor({ grade: grade = null, number: number = null, minor: minor, type: type, accidental: accidental, referenceKeyGrade: referenceKeyGrade = null, referenceKeyMode: referenceKeyMode = null, originalKeyString: originalKeyString = null, preferredAccidental: preferredAccidental = null, explicitAccidental: explicitAccidental = false, preferredNotation: preferredNotation = null }){
2397
1899
  this.number = null;
2398
1900
  this.minor = false;
2399
1901
  this.referenceKeyGrade = null;
2400
1902
  this.referenceKeyMode = null;
2401
1903
  this.originalKeyString = null;
2402
1904
  this.explicitAccidental = false;
1905
+ this.preferredNotation = null;
2403
1906
  this.grade = grade;
2404
1907
  this.number = number;
2405
1908
  this.minor = minor;
@@ -2410,6 +1913,7 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2410
1913
  this.referenceKeyMode = referenceKeyMode;
2411
1914
  this.originalKeyString = originalKeyString;
2412
1915
  this.explicitAccidental = explicitAccidental;
1916
+ this.preferredNotation = preferredNotation;
2413
1917
  }
2414
1918
  distanceTo(otherKey) {
2415
1919
  const otherKeyObj = $918eb2016ac61e41$var$Key.wrapOrFail(otherKey);
@@ -2451,7 +1955,7 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2451
1955
  }
2452
1956
  calculateGradeFromNumber() {
2453
1957
  if (this.number === null) throw new Error('Cannot calculate grade, number is null');
2454
- this.grade = $918eb2016ac61e41$var$Key.toGrade(this.number.toString(), this.accidental || (0, $234747a9630b4642$export$3fdd332fe3104970), (0, $234747a9630b4642$export$4d318981b5a83836), this.isMinor());
1958
+ this.grade = (0, $974bd1d260bb1d53$export$f524439d316753cc)(this.number.toString(), this.accidental || (0, $234747a9630b4642$export$3fdd332fe3104970), (0, $234747a9630b4642$export$4d318981b5a83836), this.isMinor());
2455
1959
  this.number = null;
2456
1960
  }
2457
1961
  toChordSymbol(key, referenceKeyWasMinor = false) {
@@ -2574,13 +2078,20 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2574
2078
  if ((this.isChordSymbol() || this.isChordSolfege()) && this.referenceKeyGrade === null) throw new Error('Not possible, reference key grade is null');
2575
2079
  let { minor: minor } = this;
2576
2080
  if (this.referenceKeyMode) minor = this.referenceKeyMode === (0, $234747a9630b4642$export$f23edc19d247fd25);
2577
- return (0, $974bd1d260bb1d53$export$65f5b958d546bb3f)({
2081
+ const rendered = (0, $974bd1d260bb1d53$export$65f5b958d546bb3f)({
2578
2082
  type: this.type,
2579
2083
  accidental: this.accidental,
2580
2084
  preferredAccidental: this.preferredAccidental,
2581
2085
  grade: this.effectiveGrade,
2582
2086
  minor: minor
2583
2087
  });
2088
+ return this.applyGermanRendering(rendered);
2089
+ }
2090
+ applyGermanRendering(rendered) {
2091
+ if (this.preferredNotation !== (0, $234747a9630b4642$export$34df5089b632c747) || !this.isChordSymbol()) return rendered;
2092
+ if (this.accidental === null && this.effectiveGrade === 10) return 'B';
2093
+ if (rendered === 'B') return 'H';
2094
+ return rendered;
2584
2095
  }
2585
2096
  getNoteForNumber() {
2586
2097
  if (this.number === null) throw new Error('Not possible, grade and number are null');
@@ -2685,15 +2196,16 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2685
2196
  if (key) {
2686
2197
  // Preserve explicit accidental choices made via useAccidental()
2687
2198
  if (this.explicitAccidental) return this.clone();
2688
- const rootKeyString = $918eb2016ac61e41$var$Key.wrapOrFail(key).toString({
2199
+ const rootKeyString = (0, $974bd1d260bb1d53$export$4f126a839166f96d)($918eb2016ac61e41$var$Key.wrapOrFail(key).toString({
2689
2200
  showMinor: true
2690
- });
2201
+ }));
2691
2202
  const enharmonics = (0, $a2e1bf5465822273$export$2e2bcd8739ae039)[rootKeyString];
2692
- const thisKeyString = this.toString({
2203
+ const thisKeyString = (0, $974bd1d260bb1d53$export$4f126a839166f96d)(this.toString({
2693
2204
  showMinor: false
2694
- });
2205
+ }));
2695
2206
  if (enharmonics && enharmonics[thisKeyString]) return $918eb2016ac61e41$var$Key.parseOrFail(enharmonics[thisKeyString]).set({
2696
- minor: this.minor
2207
+ minor: this.minor,
2208
+ preferredNotation: this.preferredNotation
2697
2209
  });
2698
2210
  }
2699
2211
  return this.clone();
@@ -2710,6 +2222,7 @@ const $918eb2016ac61e41$var$PREFERS_FLAT_NUMBERS = [
2710
2222
  originalKeyString: this.originalKeyString,
2711
2223
  preferredAccidental: this.preferredAccidental,
2712
2224
  explicitAccidental: this.explicitAccidental,
2225
+ preferredNotation: this.preferredNotation,
2713
2226
  ...overwrite ? attributes : {}
2714
2227
  });
2715
2228
  }
@@ -2871,15 +2384,15 @@ function $653547310a25de1a$var$peg$parse(input, options) {
2871
2384
  chordType: "symbol"
2872
2385
  };
2873
2386
  };
2874
- const peg$c10 = /^[A-Ga-g]/;
2387
+ const peg$c10 = /^[A-Ha-h]/;
2875
2388
  const peg$c11 = peg$classExpectation([
2876
2389
  [
2877
2390
  "A",
2878
- "G"
2391
+ "H"
2879
2392
  ],
2880
2393
  [
2881
2394
  "a",
2882
- "g"
2395
+ "h"
2883
2396
  ]
2884
2397
  ], false, false);
2885
2398
  const peg$c12 = "/";
@@ -4017,19 +3530,26 @@ const $653547310a25de1a$export$98e6a39c04603d36 = $653547310a25de1a$var$peg$pars
4017
3530
  * Tries to parse a chord string into a chord
4018
3531
  * Any leading or trailing whitespace is removed first, so a chord like ` \n E/G# \r ` is valid.
4019
3532
  * @param chordString the chord string, eg `Esus4/G#` or `1sus4/#3`.
3533
+ * @param {ChordParseOptions} [options] parse options
3534
+ * @param {Notation|null} [options.notation] when `'german'`, `B` is interpreted as B-flat (grade 10)
3535
+ * and `H` as B natural (grade 11), and output renders accordingly. Defaults to English semantics where
3536
+ * `B` is B natural and `H` is accepted as an alias for it.
4020
3537
  * @returns {Chord|null}
4021
- */ static parse(chordString) {
3538
+ */ static parse(chordString, options = {}) {
4022
3539
  try {
4023
- return this.parseOrFail(chordString);
3540
+ return this.parseOrFail(chordString, options);
4024
3541
  } catch (_error) {
4025
3542
  return null;
4026
3543
  }
4027
3544
  }
4028
- static parseOrFail(chordString) {
3545
+ static parseOrFail(chordString, options = {}) {
4029
3546
  const trimmedChord = chordString.trim();
4030
3547
  try {
4031
3548
  const ast = (0, $653547310a25de1a$export$98e6a39c04603d36)(trimmedChord);
4032
- return new $5e3a0c5a6197f95b$var$Chord(ast);
3549
+ return new $5e3a0c5a6197f95b$var$Chord({
3550
+ ...ast,
3551
+ notation: options.notation ?? null
3552
+ });
4033
3553
  } catch (error) {
4034
3554
  const errorObj = error;
4035
3555
  throw new (0, $b490d52fdfaddd6b$export$2e2bcd8739ae039)(`Failed parsing '${trimmedChord}': ${errorObj.message}`);
@@ -4286,7 +3806,7 @@ const $653547310a25de1a$export$98e6a39c04603d36 = $653547310a25de1a$var$peg$pars
4286
3806
  return this.suffix === otherChord.suffix && this.optional === otherChord.optional && (0, $918eb2016ac61e41$export$2e2bcd8739ae039).equals(this.root, otherChord.root) && (0, $918eb2016ac61e41$export$2e2bcd8739ae039).equals(this.bass, otherChord.bass);
4287
3807
  }
4288
3808
  static determineRoot(options) {
4289
- const { root: root, base: base, accidental: accidental, suffix: suffix, chordType: chordType } = options;
3809
+ const { root: root, base: base, accidental: accidental, suffix: suffix, chordType: chordType, notation: notation } = options;
4290
3810
  if (root) return root;
4291
3811
  if (!base) return null;
4292
3812
  if (!chordType) throw new Error('Can\'t resolve at this point without a chord type');
@@ -4294,11 +3814,12 @@ const $653547310a25de1a$export$98e6a39c04603d36 = $653547310a25de1a$var$peg$pars
4294
3814
  key: base,
4295
3815
  keyType: chordType,
4296
3816
  minor: (0, $974bd1d260bb1d53$export$51fabfbeed747719)(base, chordType, suffix ?? null),
4297
- accidental: accidental ?? null
3817
+ accidental: accidental ?? null,
3818
+ preferredNotation: notation ?? null
4298
3819
  });
4299
3820
  }
4300
3821
  static determineBass(options) {
4301
- const { bass: bass, bassBase: bassBase, bassAccidental: bassAccidental, chordType: chordType } = options;
3822
+ const { bass: bass, bassBase: bassBase, bassAccidental: bassAccidental, chordType: chordType, notation: notation } = options;
4302
3823
  if (bass) return bass;
4303
3824
  if (!bassBase) return null;
4304
3825
  if (!chordType) throw new Error('Can\'t resolve at this point without a chord type');
@@ -4306,7 +3827,8 @@ const $653547310a25de1a$export$98e6a39c04603d36 = $653547310a25de1a$var$peg$pars
4306
3827
  key: bassBase,
4307
3828
  accidental: bassAccidental ?? null,
4308
3829
  minor: false,
4309
- keyType: chordType
3830
+ keyType: chordType,
3831
+ preferredNotation: notation ?? null
4310
3832
  });
4311
3833
  }
4312
3834
  isMinor() {
@@ -5376,11 +4898,529 @@ const $7ec1df4bbc0938c9$var$mapping = {
5376
4898
  var $7ec1df4bbc0938c9$export$2e2bcd8739ae039 = $7ec1df4bbc0938c9$var$mapping;
5377
4899
 
5378
4900
 
4901
+ /*
4902
+ ⚠️⚠️⚠️ NOTE: this file has been generated automatically.
4903
+ Please do NOT edit this file directly, but instead:
4904
+ - edit the data source, located in `data/scales.ts`
4905
+ - run `yarn build:code-generate` to re-generate this file.
4906
+ */
4907
+ const $93829257ae60df96$export$7e1516eaf3ebe01f = {
4908
+ [(0, $234747a9630b4642$export$27c95a7104c1f7aa)]: {
4909
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
4910
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
4911
+ C: 0,
4912
+ D: 2,
4913
+ E: 4,
4914
+ F: 5,
4915
+ G: 7,
4916
+ A: 9,
4917
+ B: 11
4918
+ },
4919
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
4920
+ B: 0,
4921
+ C: 1,
4922
+ D: 3,
4923
+ E: 5,
4924
+ F: 6,
4925
+ G: 8,
4926
+ A: 10
4927
+ },
4928
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
4929
+ D: 1,
4930
+ E: 3,
4931
+ F: 4,
4932
+ G: 6,
4933
+ A: 8,
4934
+ B: 10,
4935
+ C: 11
4936
+ }
4937
+ },
4938
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
4939
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
4940
+ C: 0,
4941
+ D: 2,
4942
+ E: 4,
4943
+ F: 5,
4944
+ G: 7,
4945
+ A: 9,
4946
+ B: 11
4947
+ },
4948
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
4949
+ B: 0,
4950
+ C: 1,
4951
+ D: 3,
4952
+ E: 5,
4953
+ F: 6,
4954
+ G: 8,
4955
+ A: 10
4956
+ },
4957
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
4958
+ D: 1,
4959
+ E: 3,
4960
+ F: 4,
4961
+ G: 6,
4962
+ A: 8,
4963
+ B: 10,
4964
+ C: 11
4965
+ }
4966
+ }
4967
+ },
4968
+ [(0, $234747a9630b4642$export$539a6499f4711c57)]: {
4969
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
4970
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
4971
+ Do: 0,
4972
+ Re: 2,
4973
+ Mi: 4,
4974
+ Fa: 5,
4975
+ Sol: 7,
4976
+ La: 9,
4977
+ Si: 11
4978
+ },
4979
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
4980
+ Si: 0,
4981
+ Do: 1,
4982
+ Re: 3,
4983
+ Mi: 5,
4984
+ Fa: 6,
4985
+ Sol: 8,
4986
+ La: 10
4987
+ },
4988
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
4989
+ Re: 1,
4990
+ Mi: 3,
4991
+ Fa: 4,
4992
+ Sol: 6,
4993
+ La: 8,
4994
+ Si: 10,
4995
+ Do: 11
4996
+ }
4997
+ },
4998
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
4999
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5000
+ Do: 0,
5001
+ Re: 2,
5002
+ Mi: 4,
5003
+ Fa: 5,
5004
+ Sol: 7,
5005
+ La: 9,
5006
+ Si: 11
5007
+ },
5008
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5009
+ Si: 0,
5010
+ Do: 1,
5011
+ Re: 3,
5012
+ Mi: 5,
5013
+ Fa: 6,
5014
+ Sol: 8,
5015
+ La: 10
5016
+ },
5017
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5018
+ Re: 1,
5019
+ Mi: 3,
5020
+ Fa: 4,
5021
+ Sol: 6,
5022
+ La: 8,
5023
+ Si: 10,
5024
+ Do: 11
5025
+ }
5026
+ }
5027
+ },
5028
+ [(0, $234747a9630b4642$export$4d318981b5a83836)]: {
5029
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5030
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5031
+ 1: 0,
5032
+ 2: 2,
5033
+ 3: 4,
5034
+ 4: 5,
5035
+ 5: 7,
5036
+ 6: 9,
5037
+ 7: 11
5038
+ },
5039
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5040
+ 7: 0,
5041
+ 1: 1,
5042
+ 2: 3,
5043
+ 3: 5,
5044
+ 4: 6,
5045
+ 5: 8,
5046
+ 6: 10
5047
+ },
5048
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5049
+ 2: 1,
5050
+ 3: 3,
5051
+ 4: 4,
5052
+ 5: 6,
5053
+ 6: 8,
5054
+ 7: 10,
5055
+ 1: 11
5056
+ }
5057
+ },
5058
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5059
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5060
+ 1: 0,
5061
+ 2: 2,
5062
+ 3: 3,
5063
+ 4: 5,
5064
+ 5: 7,
5065
+ 6: 8,
5066
+ 7: 10
5067
+ },
5068
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5069
+ 1: 1,
5070
+ 2: 3,
5071
+ 3: 4,
5072
+ 4: 6,
5073
+ 5: 8,
5074
+ 6: 9,
5075
+ 7: 11
5076
+ },
5077
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5078
+ 2: 1,
5079
+ 3: 2,
5080
+ 4: 4,
5081
+ 5: 6,
5082
+ 6: 7,
5083
+ 7: 9,
5084
+ 1: 11
5085
+ }
5086
+ }
5087
+ },
5088
+ [(0, $234747a9630b4642$export$1321df9b16c30c6a)]: {
5089
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5090
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5091
+ I: 0,
5092
+ II: 2,
5093
+ III: 4,
5094
+ IV: 5,
5095
+ V: 7,
5096
+ VI: 9,
5097
+ VII: 11
5098
+ },
5099
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5100
+ VII: 0,
5101
+ I: 1,
5102
+ II: 3,
5103
+ III: 5,
5104
+ IV: 6,
5105
+ V: 8,
5106
+ VI: 10
5107
+ },
5108
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5109
+ II: 1,
5110
+ III: 3,
5111
+ IV: 4,
5112
+ V: 6,
5113
+ VI: 8,
5114
+ VII: 10,
5115
+ I: 11
5116
+ }
5117
+ },
5118
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5119
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5120
+ I: 0,
5121
+ II: 2,
5122
+ III: 3,
5123
+ IV: 5,
5124
+ V: 7,
5125
+ VI: 8,
5126
+ VII: 10
5127
+ },
5128
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5129
+ I: 1,
5130
+ II: 3,
5131
+ III: 4,
5132
+ IV: 6,
5133
+ V: 8,
5134
+ VI: 9,
5135
+ VII: 11
5136
+ },
5137
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5138
+ II: 1,
5139
+ III: 2,
5140
+ IV: 4,
5141
+ V: 6,
5142
+ VI: 7,
5143
+ VII: 9,
5144
+ I: 11
5145
+ }
5146
+ }
5147
+ }
5148
+ };
5149
+ const $93829257ae60df96$export$40141681ebb03523 = {
5150
+ [(0, $234747a9630b4642$export$27c95a7104c1f7aa)]: {
5151
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5152
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5153
+ 0: 'C',
5154
+ 2: 'D',
5155
+ 4: 'E',
5156
+ 5: 'F',
5157
+ 7: 'G',
5158
+ 9: 'A',
5159
+ 11: 'B'
5160
+ },
5161
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5162
+ 0: 'B#',
5163
+ 1: 'C#',
5164
+ 3: 'D#',
5165
+ 5: 'E#',
5166
+ 6: 'F#',
5167
+ 8: 'G#',
5168
+ 10: 'A#'
5169
+ },
5170
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5171
+ 1: 'Db',
5172
+ 3: 'Eb',
5173
+ 4: 'Fb',
5174
+ 6: 'Gb',
5175
+ 8: 'Ab',
5176
+ 10: 'Bb',
5177
+ 11: 'Cb'
5178
+ }
5179
+ },
5180
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5181
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5182
+ 0: 'C',
5183
+ 2: 'D',
5184
+ 4: 'E',
5185
+ 5: 'F',
5186
+ 7: 'G',
5187
+ 9: 'A',
5188
+ 11: 'B'
5189
+ },
5190
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5191
+ 0: 'B#',
5192
+ 1: 'C#',
5193
+ 3: 'D#',
5194
+ 5: 'E#',
5195
+ 6: 'F#',
5196
+ 8: 'G#',
5197
+ 10: 'A#'
5198
+ },
5199
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5200
+ 1: 'Db',
5201
+ 3: 'Eb',
5202
+ 4: 'Fb',
5203
+ 6: 'Gb',
5204
+ 8: 'Ab',
5205
+ 10: 'Bb',
5206
+ 11: 'Cb'
5207
+ }
5208
+ }
5209
+ },
5210
+ [(0, $234747a9630b4642$export$539a6499f4711c57)]: {
5211
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5212
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5213
+ 0: 'Do',
5214
+ 2: 'Re',
5215
+ 4: 'Mi',
5216
+ 5: 'Fa',
5217
+ 7: 'Sol',
5218
+ 9: 'La',
5219
+ 11: 'Si'
5220
+ },
5221
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5222
+ 0: 'Si#',
5223
+ 1: 'Do#',
5224
+ 3: 'Re#',
5225
+ 5: 'Mi#',
5226
+ 6: 'Fa#',
5227
+ 8: 'Sol#',
5228
+ 10: 'La#'
5229
+ },
5230
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5231
+ 1: 'Reb',
5232
+ 3: 'Mib',
5233
+ 4: 'Fab',
5234
+ 6: 'Solb',
5235
+ 8: 'Lab',
5236
+ 10: 'Sib',
5237
+ 11: 'Dob'
5238
+ }
5239
+ },
5240
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5241
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5242
+ 0: 'Do',
5243
+ 2: 'Re',
5244
+ 4: 'Mi',
5245
+ 5: 'Fa',
5246
+ 7: 'Sol',
5247
+ 9: 'La',
5248
+ 11: 'Si'
5249
+ },
5250
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5251
+ 0: 'Si#',
5252
+ 1: 'Do#',
5253
+ 3: 'Re#',
5254
+ 5: 'Mi#',
5255
+ 6: 'Fa#',
5256
+ 8: 'Sol#',
5257
+ 10: 'La#'
5258
+ },
5259
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5260
+ 1: 'Reb',
5261
+ 3: 'Mib',
5262
+ 4: 'Fab',
5263
+ 6: 'Solb',
5264
+ 8: 'Lab',
5265
+ 10: 'Sib',
5266
+ 11: 'Dob'
5267
+ }
5268
+ }
5269
+ },
5270
+ [(0, $234747a9630b4642$export$4d318981b5a83836)]: {
5271
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5272
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5273
+ 0: '1',
5274
+ 2: '2',
5275
+ 4: '3',
5276
+ 5: '4',
5277
+ 7: '5',
5278
+ 9: '6',
5279
+ 11: '7'
5280
+ },
5281
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5282
+ 0: '#7',
5283
+ 1: '#1',
5284
+ 3: '#2',
5285
+ 5: '#3',
5286
+ 6: '#4',
5287
+ 8: '#5',
5288
+ 10: '#6'
5289
+ },
5290
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5291
+ 1: 'b2',
5292
+ 3: 'b3',
5293
+ 4: 'b4',
5294
+ 6: 'b5',
5295
+ 8: 'b6',
5296
+ 10: 'b7',
5297
+ 11: 'b1'
5298
+ }
5299
+ },
5300
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5301
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5302
+ 0: '1',
5303
+ 2: '2',
5304
+ 3: '3',
5305
+ 5: '4',
5306
+ 7: '5',
5307
+ 8: '6',
5308
+ 10: '7'
5309
+ },
5310
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5311
+ 1: '#1',
5312
+ 3: '#2',
5313
+ 4: '#3',
5314
+ 6: '#4',
5315
+ 8: '#5',
5316
+ 9: '#6',
5317
+ 11: '#7'
5318
+ },
5319
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5320
+ 1: 'b2',
5321
+ 2: 'b3',
5322
+ 4: 'b4',
5323
+ 6: 'b5',
5324
+ 7: 'b6',
5325
+ 9: 'b7',
5326
+ 11: 'b1'
5327
+ }
5328
+ }
5329
+ },
5330
+ [(0, $234747a9630b4642$export$1321df9b16c30c6a)]: {
5331
+ [(0, $234747a9630b4642$export$39615881bb0d21f6)]: {
5332
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5333
+ 0: 'I',
5334
+ 2: 'II',
5335
+ 4: 'III',
5336
+ 5: 'IV',
5337
+ 7: 'V',
5338
+ 9: 'VI',
5339
+ 11: 'VII'
5340
+ },
5341
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5342
+ 0: '#VII',
5343
+ 1: '#I',
5344
+ 3: '#II',
5345
+ 5: '#III',
5346
+ 6: '#IV',
5347
+ 8: '#V',
5348
+ 10: '#VI'
5349
+ },
5350
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5351
+ 1: 'bII',
5352
+ 3: 'bIII',
5353
+ 4: 'bIV',
5354
+ 6: 'bV',
5355
+ 8: 'bVI',
5356
+ 10: 'bVII',
5357
+ 11: 'bI'
5358
+ }
5359
+ },
5360
+ [(0, $234747a9630b4642$export$f23edc19d247fd25)]: {
5361
+ [(0, $234747a9630b4642$export$f0f7b592ea674eb2)]: {
5362
+ 0: 'I',
5363
+ 2: 'II',
5364
+ 3: 'III',
5365
+ 5: 'IV',
5366
+ 7: 'V',
5367
+ 8: 'VI',
5368
+ 10: 'VII'
5369
+ },
5370
+ [(0, $234747a9630b4642$export$f5b1d6b4244c9536)]: {
5371
+ 1: '#I',
5372
+ 3: '#II',
5373
+ 4: '#III',
5374
+ 6: '#IV',
5375
+ 8: '#V',
5376
+ 9: '#VI',
5377
+ 11: '#VII'
5378
+ },
5379
+ [(0, $234747a9630b4642$export$1ea14522906630af)]: {
5380
+ 1: 'bII',
5381
+ 2: 'bIII',
5382
+ 4: 'bIV',
5383
+ 6: 'bV',
5384
+ 7: 'bVI',
5385
+ 9: 'bVII',
5386
+ 11: 'bI'
5387
+ }
5388
+ }
5389
+ }
5390
+ };
5391
+
5379
5392
 
5380
5393
 
5381
5394
  function $974bd1d260bb1d53$export$79570e60478bce41(value, functions) {
5382
5395
  return functions.reduce((acc, fn)=>fn(acc), value);
5383
5396
  }
5397
+ function $974bd1d260bb1d53$export$4da2456f0a9c9a18(key) {
5398
+ return key === 'H' || key === 'h';
5399
+ }
5400
+ function $974bd1d260bb1d53$export$59c434f66823d8be(key) {
5401
+ if (key === 'H') return 'B';
5402
+ if (key === 'h') return 'b';
5403
+ return key;
5404
+ }
5405
+ function $974bd1d260bb1d53$export$4f126a839166f96d(keyString) {
5406
+ return keyString.startsWith('H') ? `B${keyString.slice(1)}` : keyString;
5407
+ }
5408
+ function $974bd1d260bb1d53$export$7d9735233c5272d2(key, accidental, notation) {
5409
+ if (notation === (0, $234747a9630b4642$export$34df5089b632c747) && accidental === null && (key === 'B' || key === 'b')) return 0, $234747a9630b4642$export$1ea14522906630af;
5410
+ return null;
5411
+ }
5412
+ function $974bd1d260bb1d53$export$9bc1c71527523e02(keyString, explicit) {
5413
+ if (explicit) return explicit;
5414
+ return $974bd1d260bb1d53$export$4da2456f0a9c9a18(keyString) ? (0, $234747a9630b4642$export$34df5089b632c747) : null;
5415
+ }
5416
+ function $974bd1d260bb1d53$export$f524439d316753cc(key, accidental, type, minor) {
5417
+ const grades = (0, $93829257ae60df96$export$7e1516eaf3ebe01f)[type][minor ? (0, $234747a9630b4642$export$f23edc19d247fd25) : (0, $234747a9630b4642$export$39615881bb0d21f6)][accidental];
5418
+ const lookupKey = type === (0, $234747a9630b4642$export$27c95a7104c1f7aa) ? $974bd1d260bb1d53$export$59c434f66823d8be(key) : key;
5419
+ if (lookupKey in grades) return grades[lookupKey];
5420
+ const upperCaseKey = lookupKey.toUpperCase();
5421
+ if (upperCaseKey in grades) return grades[upperCaseKey];
5422
+ return null;
5423
+ }
5384
5424
  function $974bd1d260bb1d53$export$d332d76d125f0cbe(line) {
5385
5425
  return line.items.some((item)=>item instanceof (0, $f7a904d05353aafa$export$2e2bcd8739ae039) && !!item.chords);
5386
5426
  }
@@ -16171,8 +16211,13 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16171
16211
  /**
16172
16212
  * Deserializes a song that has been serialized using {@link serialize}
16173
16213
  * @param {object} serializedSong The serialized song
16214
+ * @param {object} [options] Deserialization options
16215
+ * @param {Notation|null} [options.notation] When `'german'`, chord strings on the song are eagerly
16216
+ * parsed with German notation (`B` = B-flat, `H` = B natural) so the preference survives transpose
16217
+ * and re-serialization. Defaults to English semantics.
16174
16218
  * @returns {Song} The deserialized song
16175
- */ deserialize(serializedSong) {
16219
+ */ deserialize(serializedSong, options = {}) {
16220
+ this.notation = options.notation ?? null;
16176
16221
  this.parseAstComponent(serializedSong);
16177
16222
  return this.song;
16178
16223
  }
@@ -16216,7 +16261,11 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16216
16261
  }
16217
16262
  parseChordLyricsPair(astComponent) {
16218
16263
  const { chord: chord, chords: chords, lyrics: lyrics, annotation: annotation, isRhythmSymbol: isRhythmSymbol } = astComponent;
16219
- return new (0, $f7a904d05353aafa$export$2e2bcd8739ae039)(chord ? new (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039)(chord).toString() : chords, lyrics, annotation, null, isRhythmSymbol || false);
16264
+ const chordString = chord ? new (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039)(chord).toString() : chords;
16265
+ const eagerChord = this.notation && chordString ? (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039).parse(chordString, {
16266
+ notation: this.notation
16267
+ }) : null;
16268
+ return new (0, $f7a904d05353aafa$export$2e2bcd8739ae039)(eagerChord ? eagerChord.toString() : chordString, lyrics, annotation, eagerChord, isRhythmSymbol || false);
16220
16269
  }
16221
16270
  parseTag(astComponent) {
16222
16271
  const { name: name, value: value, location: { offset: offset = null, line: line = null, column: column = null } = {}, chordDefinition: chordDefinition, attributes: attributes, selector: selector, isNegated: isNegated } = astComponent;
@@ -16252,6 +16301,7 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16252
16301
  constructor(){
16253
16302
  this.song = new (0, $7860c26c4d50915f$export$2e2bcd8739ae039)();
16254
16303
  this.songBuilder = new (0, $2d76e00ddf5bf382$export$2e2bcd8739ae039)(this.song);
16304
+ this.notation = null;
16255
16305
  }
16256
16306
  }
16257
16307
  var $2a399cf90c614489$export$2e2bcd8739ae039 = $2a399cf90c614489$var$ChordSheetSerializer;
@@ -20759,6 +20809,9 @@ const $83ef44d1c655983d$export$98e6a39c04603d36 = $83ef44d1c655983d$var$peg$pars
20759
20809
  * followed by * a space is treated as a soft line break
20760
20810
  * @param {ChordProParserOptions.chopFirstWord} options.chopFirstWord=true If true, only the first lyric
20761
20811
  * word is paired with the chord, the rest of the lyric is put in a separate chord lyric pair
20812
+ * @param {Notation|null} [options.notation] When `'german'`, every chord in the song is parsed using
20813
+ * German notation (`B` = B-flat, `H` = B natural) and rendered accordingly. Defaults to English
20814
+ * semantics where `B` is B natural and `H` is accepted as an alias for it.
20762
20815
  * @see https://peggyjs.org/documentation.html#using-the-parser
20763
20816
  * @returns {Song} The parsed song
20764
20817
  */ parse(chordSheet, options) {
@@ -20766,7 +20819,9 @@ const $83ef44d1c655983d$export$98e6a39c04603d36 = $83ef44d1c655983d$var$peg$pars
20766
20819
  tracer: new (0, $bc1f0a456822da26$export$2e2bcd8739ae039)(),
20767
20820
  ...options
20768
20821
  });
20769
- this.song = new (0, $2a399cf90c614489$export$2e2bcd8739ae039)().deserialize(ast);
20822
+ this.song = new (0, $2a399cf90c614489$export$2e2bcd8739ae039)().deserialize(ast, {
20823
+ notation: options?.notation ?? null
20824
+ });
20770
20825
  return this.song;
20771
20826
  }
20772
20827
  }
@@ -22206,15 +22261,15 @@ function $eb3fc6c8a187cee1$var$peg$parse(input, options) {
22206
22261
  chordType: "symbol"
22207
22262
  };
22208
22263
  };
22209
- const peg$c71 = /^[A-Ga-g]/;
22264
+ const peg$c71 = /^[A-Ha-h]/;
22210
22265
  const peg$c72 = peg$classExpectation([
22211
22266
  [
22212
22267
  "A",
22213
- "G"
22268
+ "H"
22214
22269
  ],
22215
22270
  [
22216
22271
  "a",
22217
- "g"
22272
+ "h"
22218
22273
  ]
22219
22274
  ], false, false);
22220
22275
  const peg$c73 = "/";
@@ -37181,7 +37236,7 @@ const $7c59209366f6488e$var$endSectionTags = {
37181
37236
  var $7c59209366f6488e$export$2e2bcd8739ae039 = $7c59209366f6488e$var$UltimateGuitarParser;
37182
37237
 
37183
37238
 
37184
- var $3e7872a494b653a9$export$2e2bcd8739ae039 = '15.4.0';
37239
+ var $3e7872a494b653a9$export$2e2bcd8739ae039 = '15.5.0';
37185
37240
 
37186
37241
 
37187
37242