chordsheetjs 6.1.0 → 6.3.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/README.md +481 -572
- package/lib/bundle.js +15393 -0
- package/lib/index.js +6290 -216
- package/lib/index.js.map +1 -0
- package/lib/main.d.ts +1095 -0
- package/lib/main.d.ts.map +1 -0
- package/package.json +43 -21
- package/.husky/pre-commit +0 -5
- package/lib/chord.js +0 -496
- package/lib/chord_sheet/chord_lyrics_pair.js +0 -80
- package/lib/chord_sheet/chord_pro/composite.js +0 -54
- package/lib/chord_sheet/chord_pro/evaluation_error.js +0 -58
- package/lib/chord_sheet/chord_pro/literal.js +0 -42
- package/lib/chord_sheet/chord_pro/ternary.js +0 -126
- package/lib/chord_sheet/comment.js +0 -55
- package/lib/chord_sheet/line.js +0 -207
- package/lib/chord_sheet/metadata.js +0 -216
- package/lib/chord_sheet/paragraph.js +0 -88
- package/lib/chord_sheet/song.js +0 -531
- package/lib/chord_sheet/tag.js +0 -359
- package/lib/chord_sheet_serializer.js +0 -278
- package/lib/constants.js +0 -54
- package/lib/formatter/chord_pro_formatter.js +0 -184
- package/lib/formatter/html_div_formatter.js +0 -130
- package/lib/formatter/html_formatter.js +0 -44
- package/lib/formatter/html_table_formatter.js +0 -154
- package/lib/formatter/templates/html_div_formatter.js +0 -544
- package/lib/formatter/templates/html_table_formatter.js +0 -731
- package/lib/formatter/text_formatter.js +0 -184
- package/lib/helpers.js +0 -56
- package/lib/key.js +0 -386
- package/lib/normalize_mappings/enharmonic-normalize.js +0 -124
- package/lib/normalize_mappings/generate-suffix-normalize-mapping.js +0 -36
- package/lib/normalize_mappings/suffix-normalize-mapping.js +0 -914
- package/lib/note.js +0 -264
- package/lib/parser/chord_pro_parser.js +0 -64
- package/lib/parser/chord_pro_peg_parser.js +0 -2069
- package/lib/parser/chord_sheet_parser.js +0 -175
- package/lib/parser/parser_warning.js +0 -62
- package/lib/parser/ultimate_guitar_parser.js +0 -154
- package/lib/template_helpers.js +0 -98
- package/lib/utilities.js +0 -110
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports["default"] = void 0;
|
|
7
|
-
|
|
8
|
-
var _chord_lyrics_pair = _interopRequireDefault(require("../chord_sheet/chord_lyrics_pair"));
|
|
9
|
-
|
|
10
|
-
var _tag = _interopRequireDefault(require("../chord_sheet/tag"));
|
|
11
|
-
|
|
12
|
-
var _helpers = require("../helpers");
|
|
13
|
-
|
|
14
|
-
var _template_helpers = require("../template_helpers");
|
|
15
|
-
|
|
16
|
-
var _utilities = require("../utilities");
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
|
-
|
|
20
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
21
|
-
|
|
22
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
23
|
-
|
|
24
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Formats a song into a plain text chord sheet
|
|
28
|
-
*/
|
|
29
|
-
var TextFormatter = /*#__PURE__*/function () {
|
|
30
|
-
function TextFormatter() {
|
|
31
|
-
_classCallCheck(this, TextFormatter);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
_createClass(TextFormatter, [{
|
|
35
|
-
key: "format",
|
|
36
|
-
value:
|
|
37
|
-
/**
|
|
38
|
-
* Formats a song into a plain text chord sheet
|
|
39
|
-
* @param {Song} song The song to be formatted
|
|
40
|
-
* @returns {string} the chord sheet
|
|
41
|
-
*/
|
|
42
|
-
function format(song) {
|
|
43
|
-
this.song = song;
|
|
44
|
-
return [this.formatHeader(), this.formatParagraphs()].join('');
|
|
45
|
-
}
|
|
46
|
-
}, {
|
|
47
|
-
key: "formatHeader",
|
|
48
|
-
value: function formatHeader() {
|
|
49
|
-
var _this$song = this.song,
|
|
50
|
-
title = _this$song.title,
|
|
51
|
-
subtitle = _this$song.subtitle;
|
|
52
|
-
var separator = title || subtitle ? '\n' : '';
|
|
53
|
-
return [this.formatTitle(title), this.formatSubTitle(subtitle), separator].join('');
|
|
54
|
-
}
|
|
55
|
-
}, {
|
|
56
|
-
key: "formatParagraphs",
|
|
57
|
-
value: function formatParagraphs() {
|
|
58
|
-
var _this = this;
|
|
59
|
-
|
|
60
|
-
var _this$song2 = this.song,
|
|
61
|
-
bodyParagraphs = _this$song2.bodyParagraphs,
|
|
62
|
-
metadata = _this$song2.metadata;
|
|
63
|
-
return bodyParagraphs.map(function (paragraph) {
|
|
64
|
-
return _this.formatParagraph(paragraph, metadata);
|
|
65
|
-
}).join('\n\n');
|
|
66
|
-
}
|
|
67
|
-
}, {
|
|
68
|
-
key: "formatParagraph",
|
|
69
|
-
value: function formatParagraph(paragraph, metadata) {
|
|
70
|
-
var _this2 = this;
|
|
71
|
-
|
|
72
|
-
return paragraph.lines.filter(function (line) {
|
|
73
|
-
return line.hasRenderableItems();
|
|
74
|
-
}).map(function (line) {
|
|
75
|
-
return _this2.formatLine(line, metadata);
|
|
76
|
-
}).join('\n');
|
|
77
|
-
}
|
|
78
|
-
}, {
|
|
79
|
-
key: "formatLine",
|
|
80
|
-
value: function formatLine(line, metadata) {
|
|
81
|
-
var parts = [this.formatLineTop(line), this.formatLineBottom(line, metadata)];
|
|
82
|
-
return parts.filter(function (i) {
|
|
83
|
-
return i !== null;
|
|
84
|
-
}).map(function (part) {
|
|
85
|
-
return part.trimRight();
|
|
86
|
-
}).join('\n');
|
|
87
|
-
}
|
|
88
|
-
}, {
|
|
89
|
-
key: "formatTitle",
|
|
90
|
-
value: function formatTitle(title) {
|
|
91
|
-
if (title) {
|
|
92
|
-
return "".concat(title.toUpperCase(), "\n");
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return '';
|
|
96
|
-
}
|
|
97
|
-
}, {
|
|
98
|
-
key: "formatSubTitle",
|
|
99
|
-
value: function formatSubTitle(subtitle) {
|
|
100
|
-
if (subtitle) {
|
|
101
|
-
return "".concat(subtitle, "\n");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return '';
|
|
105
|
-
}
|
|
106
|
-
}, {
|
|
107
|
-
key: "formatLineTop",
|
|
108
|
-
value: function formatLineTop(line) {
|
|
109
|
-
if ((0, _utilities.hasChordContents)(line)) {
|
|
110
|
-
return this.formatLineWithFormatter(line, this.formatItemTop);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
}, {
|
|
116
|
-
key: "chordLyricsPairLength",
|
|
117
|
-
value: function chordLyricsPairLength(chordLyricsPair, line) {
|
|
118
|
-
var chords = (0, _helpers.renderChord)(chordLyricsPair.chords, line.key, line.transposeKey, this.song);
|
|
119
|
-
var lyrics = chordLyricsPair.lyrics;
|
|
120
|
-
var chordsLength = (chords || '').length;
|
|
121
|
-
var lyricsLength = (lyrics || '').length;
|
|
122
|
-
|
|
123
|
-
if (chordsLength >= lyricsLength) {
|
|
124
|
-
return chordsLength + 1;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return Math.max(chordsLength, lyricsLength);
|
|
128
|
-
}
|
|
129
|
-
}, {
|
|
130
|
-
key: "formatItemTop",
|
|
131
|
-
value: function formatItemTop(item, metadata, line) {
|
|
132
|
-
if (item instanceof _tag["default"] && item.isRenderable()) {
|
|
133
|
-
return (0, _utilities.padLeft)('', item.value);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (item instanceof _chord_lyrics_pair["default"]) {
|
|
137
|
-
var chords = (0, _helpers.renderChord)(item.chords, line.key, line.transposeKey, this.song);
|
|
138
|
-
return (0, _utilities.padLeft)(chords, this.chordLyricsPairLength(item, line));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return '';
|
|
142
|
-
}
|
|
143
|
-
}, {
|
|
144
|
-
key: "formatLineBottom",
|
|
145
|
-
value: function formatLineBottom(line, metadata) {
|
|
146
|
-
if ((0, _template_helpers.hasTextContents)(line)) {
|
|
147
|
-
return this.formatLineWithFormatter(line, this.formatItemBottom, metadata);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return null;
|
|
151
|
-
}
|
|
152
|
-
}, {
|
|
153
|
-
key: "formatLineWithFormatter",
|
|
154
|
-
value: function formatLineWithFormatter(line, formatter, metadata) {
|
|
155
|
-
var _this3 = this;
|
|
156
|
-
|
|
157
|
-
return line.items.map(function (item) {
|
|
158
|
-
return formatter.call(_this3, item, metadata, line);
|
|
159
|
-
}).join('');
|
|
160
|
-
}
|
|
161
|
-
}, {
|
|
162
|
-
key: "formatItemBottom",
|
|
163
|
-
value: function formatItemBottom(item, metadata, line) {
|
|
164
|
-
if (item instanceof _tag["default"] && item.isRenderable()) {
|
|
165
|
-
return item.value;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (item instanceof _chord_lyrics_pair["default"]) {
|
|
169
|
-
return (0, _utilities.padLeft)(item.lyrics, this.chordLyricsPairLength(item, line));
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (typeof item.evaluate === 'function') {
|
|
173
|
-
return item.evaluate(metadata);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return '';
|
|
177
|
-
}
|
|
178
|
-
}]);
|
|
179
|
-
|
|
180
|
-
return TextFormatter;
|
|
181
|
-
}();
|
|
182
|
-
|
|
183
|
-
var _default = TextFormatter;
|
|
184
|
-
exports["default"] = _default;
|
package/lib/helpers.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.renderChord = renderChord;
|
|
7
|
-
exports.transposeDistance = transposeDistance;
|
|
8
|
-
|
|
9
|
-
var _chord = _interopRequireDefault(require("./chord"));
|
|
10
|
-
|
|
11
|
-
var _utilities = require("./utilities");
|
|
12
|
-
|
|
13
|
-
var _key = _interopRequireDefault(require("./key"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
16
|
-
|
|
17
|
-
function transposeDistance(transposeKey, songKey) {
|
|
18
|
-
if (/^\d+$/.test(transposeKey)) {
|
|
19
|
-
return parseInt(transposeKey, 10);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return _key["default"].distance(songKey, transposeKey);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function chordTransposeDistance(capo, transposeKey, songKey) {
|
|
26
|
-
var transpose = -1 * (capo || 0);
|
|
27
|
-
|
|
28
|
-
if ((0, _utilities.isPresent)(transposeKey) && (0, _utilities.isPresent)(songKey)) {
|
|
29
|
-
transpose += transposeDistance(transposeKey, songKey);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return transpose;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function renderChord(chord, lineKey, transposeKey, song) {
|
|
36
|
-
var chordObj = _chord["default"].parse(chord);
|
|
37
|
-
|
|
38
|
-
var capo = song.capo,
|
|
39
|
-
songKey = song.key;
|
|
40
|
-
|
|
41
|
-
if (!chordObj) {
|
|
42
|
-
return chord;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
chordObj = chordObj.transpose(chordTransposeDistance(capo, transposeKey, songKey));
|
|
46
|
-
|
|
47
|
-
if ((0, _utilities.isPresent)(transposeKey)) {
|
|
48
|
-
chordObj = chordObj.useModifier(transposeKey.modifier);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if ((0, _utilities.isPresent)(lineKey)) {
|
|
52
|
-
chordObj = chordObj.normalize(lineKey);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return chordObj.toString();
|
|
56
|
-
}
|
package/lib/key.js
DELETED
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports["default"] = void 0;
|
|
9
|
-
|
|
10
|
-
var _note = _interopRequireDefault(require("./note"));
|
|
11
|
-
|
|
12
|
-
var _constants = require("./constants");
|
|
13
|
-
|
|
14
|
-
var _enharmonicNormalize = _interopRequireDefault(require("./normalize_mappings/enharmonic-normalize"));
|
|
15
|
-
|
|
16
|
-
var _MODIFIER_TRANSPOSITI;
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
|
-
|
|
20
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
-
|
|
22
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
23
|
-
|
|
24
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
25
|
-
|
|
26
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
27
|
-
|
|
28
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
29
|
-
|
|
30
|
-
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
|
31
|
-
|
|
32
|
-
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
33
|
-
|
|
34
|
-
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
|
35
|
-
|
|
36
|
-
function _wrapRegExp() { _wrapRegExp = function _wrapRegExp(re, groups) { return new BabelRegExp(re, void 0, groups); }; var _super = RegExp.prototype, _groups = new WeakMap(); function BabelRegExp(re, flags, groups) { var _this = new RegExp(re, flags); return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype); } function buildGroups(result, re) { var g = _groups.get(re); return Object.keys(g).reduce(function (groups, name) { return groups[name] = result[g[name]], groups; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) { var result = _super.exec.call(this, str); return result && (result.groups = buildGroups(result, this)), result; }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) { if ("string" == typeof substitution) { var groups = _groups.get(this); return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) { return "$" + groups[name]; })); } if ("function" == typeof substitution) { var _this = this; return _super[Symbol.replace].call(this, str, function () { var args = arguments; return "object" != _typeof(args[args.length - 1]) && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args); }); } return _super[Symbol.replace].call(this, str, substitution); }, _wrapRegExp.apply(this, arguments); }
|
|
37
|
-
|
|
38
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
39
|
-
|
|
40
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
41
|
-
|
|
42
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
43
|
-
|
|
44
|
-
var FLAT = 'b';
|
|
45
|
-
var SHARP = '#';
|
|
46
|
-
var MODIFIER_TRANSPOSITION = (_MODIFIER_TRANSPOSITI = {}, _defineProperty(_MODIFIER_TRANSPOSITI, SHARP, 1), _defineProperty(_MODIFIER_TRANSPOSITI, FLAT, -1), _MODIFIER_TRANSPOSITI);
|
|
47
|
-
|
|
48
|
-
var symbolKeyRegex = /*#__PURE__*/_wrapRegExp(/^([A-G])(#|b)?(m)?$/i, {
|
|
49
|
-
note: 1,
|
|
50
|
-
modifier: 2,
|
|
51
|
-
minor: 3
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
var numericKeyRegex = /*#__PURE__*/_wrapRegExp(/^(#|b)?([1-7])(m)?$/, {
|
|
55
|
-
modifier: 1,
|
|
56
|
-
note: 2,
|
|
57
|
-
minor: 3
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
var numeralKeyRegex = /*#__PURE__*/_wrapRegExp(/^(#|b)?(I{1,3}|IV|VI{0,2}|i{1,3}|iv|vi{0,2})$/, {
|
|
61
|
-
modifier: 1,
|
|
62
|
-
note: 2
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
var regexes = [symbolKeyRegex, numericKeyRegex, numeralKeyRegex];
|
|
66
|
-
|
|
67
|
-
var _set = /*#__PURE__*/new WeakSet();
|
|
68
|
-
|
|
69
|
-
var Key = /*#__PURE__*/function () {
|
|
70
|
-
function Key(_ref) {
|
|
71
|
-
var note = _ref.note,
|
|
72
|
-
_ref$modifier = _ref.modifier,
|
|
73
|
-
modifier = _ref$modifier === void 0 ? null : _ref$modifier,
|
|
74
|
-
_ref$minor = _ref.minor,
|
|
75
|
-
minor = _ref$minor === void 0 ? false : _ref$minor;
|
|
76
|
-
|
|
77
|
-
_classCallCheck(this, Key);
|
|
78
|
-
|
|
79
|
-
_classPrivateMethodInitSpec(this, _set);
|
|
80
|
-
|
|
81
|
-
this.note = note instanceof _note["default"] ? note : _note["default"].parse(note);
|
|
82
|
-
this.modifier = modifier || null;
|
|
83
|
-
this.minor = !!minor || false;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
_createClass(Key, [{
|
|
87
|
-
key: "distanceTo",
|
|
88
|
-
value: function distanceTo(otherKey) {
|
|
89
|
-
var otherKeyObj = Key.wrap(otherKey);
|
|
90
|
-
var key = this.useModifier(otherKeyObj.modifier);
|
|
91
|
-
var delta = 0;
|
|
92
|
-
|
|
93
|
-
while (!key.equals(otherKeyObj) && delta < 20) {
|
|
94
|
-
key = key.transposeUp().useModifier(otherKeyObj.modifier);
|
|
95
|
-
delta += 1;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return delta;
|
|
99
|
-
}
|
|
100
|
-
}, {
|
|
101
|
-
key: "isMinor",
|
|
102
|
-
value: function isMinor() {
|
|
103
|
-
return this.note.isMinor();
|
|
104
|
-
}
|
|
105
|
-
}, {
|
|
106
|
-
key: "clone",
|
|
107
|
-
value: function clone() {
|
|
108
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {});
|
|
109
|
-
}
|
|
110
|
-
}, {
|
|
111
|
-
key: "toChordSymbol",
|
|
112
|
-
value: function toChordSymbol(key) {
|
|
113
|
-
if (this.is(_constants.SYMBOL)) {
|
|
114
|
-
return this.clone();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
var transposeDistance = this.note.getTransposeDistance(key.minor) + (MODIFIER_TRANSPOSITION[this.modifier] || 0);
|
|
118
|
-
return key.transpose(transposeDistance).normalize().useModifier(key.modifier);
|
|
119
|
-
}
|
|
120
|
-
}, {
|
|
121
|
-
key: "toChordSymbolString",
|
|
122
|
-
value: function toChordSymbolString(key) {
|
|
123
|
-
return this.toChordSymbol(key).toString();
|
|
124
|
-
}
|
|
125
|
-
}, {
|
|
126
|
-
key: "is",
|
|
127
|
-
value: function is(type) {
|
|
128
|
-
return this.note.is(type);
|
|
129
|
-
}
|
|
130
|
-
}, {
|
|
131
|
-
key: "isNumeric",
|
|
132
|
-
value: function isNumeric() {
|
|
133
|
-
return this.is(_constants.NUMERIC);
|
|
134
|
-
}
|
|
135
|
-
}, {
|
|
136
|
-
key: "isChordSymbol",
|
|
137
|
-
value: function isChordSymbol() {
|
|
138
|
-
return this.is(_constants.SYMBOL);
|
|
139
|
-
}
|
|
140
|
-
}, {
|
|
141
|
-
key: "isNumeral",
|
|
142
|
-
value: function isNumeral() {
|
|
143
|
-
return this.is(_constants.NUMERAL);
|
|
144
|
-
}
|
|
145
|
-
}, {
|
|
146
|
-
key: "equals",
|
|
147
|
-
value: function equals(_ref2) {
|
|
148
|
-
var note = _ref2.note,
|
|
149
|
-
modifier = _ref2.modifier;
|
|
150
|
-
return this.note.equals(note) && this.modifier === modifier;
|
|
151
|
-
}
|
|
152
|
-
}, {
|
|
153
|
-
key: "toNumeric",
|
|
154
|
-
value: function toNumeric(key) {
|
|
155
|
-
if (this.isNumeric()) {
|
|
156
|
-
return this.clone();
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (this.isNumeral()) {
|
|
160
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
161
|
-
note: this.note.toNumeric()
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
var numericKey = new Key({
|
|
166
|
-
note: 1
|
|
167
|
-
});
|
|
168
|
-
var symbolKey = key.clone();
|
|
169
|
-
var reference = this.clone().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
|
|
170
|
-
|
|
171
|
-
while (!symbolKey.equals(reference)) {
|
|
172
|
-
numericKey = numericKey.transposeUp().useModifier(key.modifier);
|
|
173
|
-
symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return numericKey;
|
|
177
|
-
}
|
|
178
|
-
}, {
|
|
179
|
-
key: "toNumericString",
|
|
180
|
-
value: function toNumericString(key) {
|
|
181
|
-
return this.toNumeric(key).toString();
|
|
182
|
-
}
|
|
183
|
-
}, {
|
|
184
|
-
key: "toNumeral",
|
|
185
|
-
value: function toNumeral(key) {
|
|
186
|
-
if (this.isNumeral()) {
|
|
187
|
-
return this.clone();
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (this.isNumeric()) {
|
|
191
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
192
|
-
note: this.note.toNumeral()
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
var numeralKey = new Key({
|
|
197
|
-
note: 'I'
|
|
198
|
-
});
|
|
199
|
-
var symbolKey = key.clone();
|
|
200
|
-
var reference = this.clone().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
|
|
201
|
-
|
|
202
|
-
while (!symbolKey.equals(reference)) {
|
|
203
|
-
numeralKey = numeralKey.transposeUp().useModifier(key.modifier);
|
|
204
|
-
symbolKey = symbolKey.transposeUp().normalize().useModifier(key.modifier).normalizeEnharmonics(key);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return numeralKey;
|
|
208
|
-
}
|
|
209
|
-
}, {
|
|
210
|
-
key: "toNumeralString",
|
|
211
|
-
value: function toNumeralString(key) {
|
|
212
|
-
return this.toNumeral(key).toString();
|
|
213
|
-
}
|
|
214
|
-
}, {
|
|
215
|
-
key: "toString",
|
|
216
|
-
value: function toString() {
|
|
217
|
-
if (this.isChordSymbol()) {
|
|
218
|
-
return "".concat(this.note).concat(this.modifier || '');
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return "".concat(this.modifier || '').concat(this.note);
|
|
222
|
-
}
|
|
223
|
-
}, {
|
|
224
|
-
key: "transpose",
|
|
225
|
-
value: function transpose(delta) {
|
|
226
|
-
if (delta === 0) {
|
|
227
|
-
return this;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
var originalModifier = this.modifier;
|
|
231
|
-
var transposedKey = this.clone();
|
|
232
|
-
var func = delta < 0 ? 'transposeDown' : 'transposeUp';
|
|
233
|
-
|
|
234
|
-
for (var i = 0, count = Math.abs(delta); i < count; i += 1) {
|
|
235
|
-
transposedKey = transposedKey[func]();
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
return transposedKey.useModifier(originalModifier);
|
|
239
|
-
}
|
|
240
|
-
}, {
|
|
241
|
-
key: "transposeUp",
|
|
242
|
-
value: function transposeUp() {
|
|
243
|
-
if (this.modifier === FLAT) {
|
|
244
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
245
|
-
modifier: null
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (this.note.isOneOf(3, 7, 'E', 'B')) {
|
|
250
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
251
|
-
note: this.note.up()
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (this.modifier === SHARP) {
|
|
256
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
257
|
-
note: this.note.up(),
|
|
258
|
-
modifier: null
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
263
|
-
modifier: SHARP
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
}, {
|
|
267
|
-
key: "transposeDown",
|
|
268
|
-
value: function transposeDown() {
|
|
269
|
-
if (this.modifier === SHARP) {
|
|
270
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
271
|
-
modifier: null
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
if (this.note.isOneOf(1, 4, 'C', 'F')) {
|
|
276
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
277
|
-
note: this.note.down()
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (this.modifier === FLAT) {
|
|
282
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
283
|
-
note: this.note.down(),
|
|
284
|
-
modifier: null
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
289
|
-
modifier: FLAT
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
}, {
|
|
293
|
-
key: "useModifier",
|
|
294
|
-
value: function useModifier(newModifier) {
|
|
295
|
-
if (this.modifier === FLAT && newModifier === SHARP) {
|
|
296
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
297
|
-
note: this.note.down(),
|
|
298
|
-
modifier: SHARP
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (this.modifier === SHARP && newModifier === FLAT) {
|
|
303
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
304
|
-
note: this.note.up(),
|
|
305
|
-
modifier: FLAT
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return this.clone();
|
|
310
|
-
}
|
|
311
|
-
}, {
|
|
312
|
-
key: "normalize",
|
|
313
|
-
value: function normalize() {
|
|
314
|
-
if (this.modifier === SHARP && this.note.isOneOf(3, 7, 'E', 'B')) {
|
|
315
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
316
|
-
note: this.note.up(),
|
|
317
|
-
modifier: null
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
if (this.modifier === FLAT && this.note.isOneOf(1, 4, 'C', 'F')) {
|
|
322
|
-
return _classPrivateMethodGet(this, _set, _set2).call(this, {
|
|
323
|
-
note: this.note.down(),
|
|
324
|
-
modifier: null
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
return this.clone();
|
|
329
|
-
}
|
|
330
|
-
}, {
|
|
331
|
-
key: "normalizeEnharmonics",
|
|
332
|
-
value: function normalizeEnharmonics(key) {
|
|
333
|
-
if (key) {
|
|
334
|
-
var rootKeyString = key.minor ? "".concat(key, "m") : key.toString();
|
|
335
|
-
var enharmonics = _enharmonicNormalize["default"][rootKeyString];
|
|
336
|
-
var thisKeyString = this.toString();
|
|
337
|
-
|
|
338
|
-
if (enharmonics && enharmonics[thisKeyString]) {
|
|
339
|
-
return Key.parse(enharmonics[thisKeyString]);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
return this.clone();
|
|
344
|
-
}
|
|
345
|
-
}], [{
|
|
346
|
-
key: "parse",
|
|
347
|
-
value: function parse(keyString) {
|
|
348
|
-
for (var i = 0, count = regexes.length; i < count; i += 1) {
|
|
349
|
-
var match = keyString.match(regexes[i]);
|
|
350
|
-
|
|
351
|
-
if (match) {
|
|
352
|
-
return new Key(match.groups);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
}, {
|
|
359
|
-
key: "wrap",
|
|
360
|
-
value: function wrap(keyStringOrObject) {
|
|
361
|
-
if (keyStringOrObject instanceof Key) {
|
|
362
|
-
return keyStringOrObject;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return this.parse(keyStringOrObject);
|
|
366
|
-
}
|
|
367
|
-
}, {
|
|
368
|
-
key: "distance",
|
|
369
|
-
value: function distance(oneKey, otherKey) {
|
|
370
|
-
return this.wrap(oneKey).distanceTo(otherKey);
|
|
371
|
-
}
|
|
372
|
-
}]);
|
|
373
|
-
|
|
374
|
-
return Key;
|
|
375
|
-
}();
|
|
376
|
-
|
|
377
|
-
function _set2(attributes) {
|
|
378
|
-
return new this.constructor(_objectSpread({
|
|
379
|
-
note: this.note.clone(),
|
|
380
|
-
modifier: this.modifier,
|
|
381
|
-
minor: !!this.minor
|
|
382
|
-
}, attributes));
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
var _default = Key;
|
|
386
|
-
exports["default"] = _default;
|