chordsheetjs 15.4.0 → 15.5.1

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
  }
@@ -13959,9 +13999,12 @@ class $f5e27e8faa22bf25$var$ChordRenderer {
13959
13999
  this.transposeKey = config.transposeKey;
13960
14000
  this.useUnicodeModifier = config.useUnicodeModifier;
13961
14001
  }
13962
- render(chordString) {
13963
- const chord = (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039).parse(chordString);
13964
- if (!chord) return chordString;
14002
+ render(chordOrString) {
14003
+ if (chordOrString instanceof (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039)) return this.renderChord(chordOrString);
14004
+ const chord = (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039).parse(chordOrString);
14005
+ return chord ? this.renderChord(chord) : chordOrString;
14006
+ }
14007
+ renderChord(chord) {
13965
14008
  return (0, $974bd1d260bb1d53$export$79570e60478bce41)(chord, [
13966
14009
  (c)=>c.transpose(this.effectiveTransposeDistance),
13967
14010
  (c)=>this.accidental ? c.useAccidental(this.accidental) : c,
@@ -14369,7 +14412,8 @@ function $e2e1ea6dd3b7d2e1$export$fd31a53e6281557e(transposeKey, songKey) {
14369
14412
  }
14370
14413
  /**
14371
14414
  * Renders a chord in the context of a line and song and taking into account some options
14372
- * @param chordString The chord to render
14415
+ * @param chord The chord to render. Accepts either a {@link Chord} object (preferred \u2014 preserves
14416
+ * explicit accidental choices) or a chord string.
14373
14417
  * @param line The line the chord is in
14374
14418
  * @param song The song the line is in
14375
14419
  * @param renderKey The key to render the chord in. If not provided, the line key will be used,
@@ -14387,7 +14431,7 @@ function $e2e1ea6dd3b7d2e1$export$fd31a53e6281557e(transposeKey, songKey) {
14387
14431
  normalizeChordSuffix: true,
14388
14432
  decapo: false
14389
14433
  };
14390
- function $e2e1ea6dd3b7d2e1$export$596ec52955da9472(chordString, line, song, options = {}) {
14434
+ function $e2e1ea6dd3b7d2e1$export$596ec52955da9472(chord, line, song, options = {}) {
14391
14435
  const { renderKey: renderKey, useUnicodeModifier: useUnicodeModifier, normalizeChords: normalizeChords, normalizeChordSuffix: normalizeChordSuffix, decapo: decapo } = {
14392
14436
  ...$e2e1ea6dd3b7d2e1$var$renderChordDefaults,
14393
14437
  ...options
@@ -14404,7 +14448,7 @@ function $e2e1ea6dd3b7d2e1$export$596ec52955da9472(chordString, line, song, opti
14404
14448
  style: song.metadata.getSingle((0, $fc279350ee3ca664$export$d8cbdf44b1f66df1)),
14405
14449
  transposeKey: line.transposeKey,
14406
14450
  useUnicodeModifier: useUnicodeModifier
14407
- }).render(chordString);
14451
+ }).render(chord);
14408
14452
  }
14409
14453
  function $e2e1ea6dd3b7d2e1$export$b07b16221c14aaa(key) {
14410
14454
  const keyObj = (0, $918eb2016ac61e41$export$2e2bcd8739ae039).wrapOrFail(key);
@@ -16171,8 +16215,13 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16171
16215
  /**
16172
16216
  * Deserializes a song that has been serialized using {@link serialize}
16173
16217
  * @param {object} serializedSong The serialized song
16218
+ * @param {object} [options] Deserialization options
16219
+ * @param {Notation|null} [options.notation] When `'german'`, chord strings on the song are eagerly
16220
+ * parsed with German notation (`B` = B-flat, `H` = B natural) so the preference survives transpose
16221
+ * and re-serialization. Defaults to English semantics.
16174
16222
  * @returns {Song} The deserialized song
16175
- */ deserialize(serializedSong) {
16223
+ */ deserialize(serializedSong, options = {}) {
16224
+ this.notation = options.notation ?? null;
16176
16225
  this.parseAstComponent(serializedSong);
16177
16226
  return this.song;
16178
16227
  }
@@ -16216,7 +16265,11 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16216
16265
  }
16217
16266
  parseChordLyricsPair(astComponent) {
16218
16267
  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);
16268
+ const chordString = chord ? new (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039)(chord).toString() : chords;
16269
+ const eagerChord = this.notation && chordString ? (0, $5e3a0c5a6197f95b$export$2e2bcd8739ae039).parse(chordString, {
16270
+ notation: this.notation
16271
+ }) : null;
16272
+ return new (0, $f7a904d05353aafa$export$2e2bcd8739ae039)(eagerChord ? eagerChord.toString() : chordString, lyrics, annotation, eagerChord, isRhythmSymbol || false);
16220
16273
  }
16221
16274
  parseTag(astComponent) {
16222
16275
  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 +16305,7 @@ const $2a399cf90c614489$var$TERNARY = 'ternary';
16252
16305
  constructor(){
16253
16306
  this.song = new (0, $7860c26c4d50915f$export$2e2bcd8739ae039)();
16254
16307
  this.songBuilder = new (0, $2d76e00ddf5bf382$export$2e2bcd8739ae039)(this.song);
16308
+ this.notation = null;
16255
16309
  }
16256
16310
  }
16257
16311
  var $2a399cf90c614489$export$2e2bcd8739ae039 = $2a399cf90c614489$var$ChordSheetSerializer;
@@ -20759,6 +20813,9 @@ const $83ef44d1c655983d$export$98e6a39c04603d36 = $83ef44d1c655983d$var$peg$pars
20759
20813
  * followed by * a space is treated as a soft line break
20760
20814
  * @param {ChordProParserOptions.chopFirstWord} options.chopFirstWord=true If true, only the first lyric
20761
20815
  * word is paired with the chord, the rest of the lyric is put in a separate chord lyric pair
20816
+ * @param {Notation|null} [options.notation] When `'german'`, every chord in the song is parsed using
20817
+ * German notation (`B` = B-flat, `H` = B natural) and rendered accordingly. Defaults to English
20818
+ * semantics where `B` is B natural and `H` is accepted as an alias for it.
20762
20819
  * @see https://peggyjs.org/documentation.html#using-the-parser
20763
20820
  * @returns {Song} The parsed song
20764
20821
  */ parse(chordSheet, options) {
@@ -20766,7 +20823,9 @@ const $83ef44d1c655983d$export$98e6a39c04603d36 = $83ef44d1c655983d$var$peg$pars
20766
20823
  tracer: new (0, $bc1f0a456822da26$export$2e2bcd8739ae039)(),
20767
20824
  ...options
20768
20825
  });
20769
- this.song = new (0, $2a399cf90c614489$export$2e2bcd8739ae039)().deserialize(ast);
20826
+ this.song = new (0, $2a399cf90c614489$export$2e2bcd8739ae039)().deserialize(ast, {
20827
+ notation: options?.notation ?? null
20828
+ });
20770
20829
  return this.song;
20771
20830
  }
20772
20831
  }
@@ -21628,7 +21687,7 @@ var $9c17b505581d81bb$export$2e2bcd8739ae039 = $9c17b505581d81bb$var$ChordSheetP
21628
21687
  return '';
21629
21688
  }
21630
21689
  renderChord(item, line) {
21631
- return (0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chords, line, this.song, {
21690
+ return (0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chord ?? item.chords, line, this.song, {
21632
21691
  renderKey: this.configuration.key,
21633
21692
  normalizeChords: this.configuration.normalizeChords,
21634
21693
  normalizeChordSuffix: this.configuration.normalizeChordSuffix,
@@ -22206,15 +22265,15 @@ function $eb3fc6c8a187cee1$var$peg$parse(input, options) {
22206
22265
  chordType: "symbol"
22207
22266
  };
22208
22267
  };
22209
- const peg$c71 = /^[A-Ga-g]/;
22268
+ const peg$c71 = /^[A-Ha-h]/;
22210
22269
  const peg$c72 = peg$classExpectation([
22211
22270
  [
22212
22271
  "A",
22213
- "G"
22272
+ "H"
22214
22273
  ],
22215
22274
  [
22216
22275
  "a",
22217
- "g"
22276
+ "h"
22218
22277
  ]
22219
22278
  ], false, false);
22220
22279
  const peg$c73 = "/";
@@ -34173,7 +34232,7 @@ var $d6c38f6287712fb1$export$2e2bcd8739ae039 = ({ configuration: configuration,
34173
34232
  const cls = (0, $a2a605be2775ff64$export$986cf1257ba88b40)(item) ? c.rhythmSymbol : c.chord;
34174
34233
  return `
34175
34234
  <div class="${cls}"${(0, $a2a605be2775ff64$export$ca030c9435779e4b)(line.chordFont)}>
34176
- ${(0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chords, line, song, {
34235
+ ${(0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chord ?? item.chords, line, song, {
34177
34236
  renderKey: key,
34178
34237
  useUnicodeModifier: configuration.useUnicodeModifiers,
34179
34238
  normalizeChords: configuration.normalizeChords,
@@ -34373,7 +34432,7 @@ var $9940e2d1d4d0b0b9$export$2e2bcd8739ae039 = ({ configuration: configuration,
34373
34432
  `).else(()=>{
34374
34433
  const cls = (0, $a2a605be2775ff64$export$986cf1257ba88b40)(item) ? c.rhythmSymbol : c.chord;
34375
34434
  return `
34376
- <td class="${cls}"${(0, $a2a605be2775ff64$export$ca030c9435779e4b)(line.chordFont)}>${(0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chords, line, song, {
34435
+ <td class="${cls}"${(0, $a2a605be2775ff64$export$ca030c9435779e4b)(line.chordFont)}>${(0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(item.chord ?? item.chords, line, song, {
34377
34436
  renderKey: key,
34378
34437
  useUnicodeModifier: configuration.useUnicodeModifiers,
34379
34438
  normalizeChords: configuration.normalizeChords,
@@ -37181,7 +37240,7 @@ const $7c59209366f6488e$var$endSectionTags = {
37181
37240
  var $7c59209366f6488e$export$2e2bcd8739ae039 = $7c59209366f6488e$var$UltimateGuitarParser;
37182
37241
 
37183
37242
 
37184
- var $3e7872a494b653a9$export$2e2bcd8739ae039 = '15.4.0';
37243
+ var $3e7872a494b653a9$export$2e2bcd8739ae039 = '15.5.1';
37185
37244
 
37186
37245
 
37187
37246
 
@@ -37453,7 +37512,7 @@ var $a2a605be2775ff64$export$2e2bcd8739ae039 = {
37453
37512
  return Math.max(contentLength, lyricsLength);
37454
37513
  }
37455
37514
  renderChords(chordLyricsPair, line) {
37456
- const chords = (0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(chordLyricsPair.chords, line, this.song, {
37515
+ const chords = (0, $e2e1ea6dd3b7d2e1$export$596ec52955da9472)(chordLyricsPair.chord ?? chordLyricsPair.chords, line, this.song, {
37457
37516
  renderKey: this.configuration.key,
37458
37517
  useUnicodeModifier: this.configuration.useUnicodeModifiers,
37459
37518
  normalizeChords: this.configuration.normalizeChords,