abcjs 6.0.0-beta.9 → 6.0.2
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/.github/workflows/tests.yml +29 -0
- package/CODE_OF_CONDUCT.md +76 -0
- package/CONTRIBUTING.md +1 -0
- package/LICENSE.md +1 -1
- package/README.md +88 -7
- package/RELEASE.md +961 -1
- package/abcjs-audio.css +14 -5
- package/dist/.gitignore +1 -2
- package/dist/abcjs-basic-min.js +3 -0
- package/dist/abcjs-basic-min.js.LICENSE +23 -0
- package/dist/abcjs-basic.js +28232 -0
- package/dist/abcjs-basic.js.map +1 -0
- package/dist/abcjs-plugin-min.js +3 -0
- package/dist/abcjs-plugin-min.js.LICENSE +23 -0
- package/index.js +27 -2
- package/{static-wrappers/license.js → license.js} +1 -1
- package/package.json +26 -29
- package/{src/plugin/abc_plugin.js → plugin.js} +31 -19
- package/src/api/abc_animation.js +1 -17
- package/src/api/abc_tablatures.js +144 -0
- package/src/api/abc_timing_callbacks.js +216 -117
- package/src/api/abc_tunebook.js +18 -67
- package/src/api/abc_tunebook_svg.js +40 -48
- package/src/data/abc_tune.js +232 -972
- package/src/data/deline-tune.js +199 -0
- package/src/edit/abc_editarea.js +112 -0
- package/src/edit/abc_editor.js +95 -221
- package/src/midi/abc_midi_create.js +48 -50
- package/src/parse/abc_common.js +0 -14
- package/src/parse/abc_parse.js +167 -1321
- package/src/parse/abc_parse_book.js +62 -0
- package/src/parse/abc_parse_directive.js +164 -41
- package/src/parse/abc_parse_header.js +116 -145
- package/src/parse/abc_parse_key_voice.js +26 -20
- package/src/parse/abc_parse_music.js +1337 -0
- package/src/parse/abc_tokenizer.js +21 -15
- package/src/parse/abc_transpose.js +3 -15
- package/src/parse/tune-builder.js +896 -0
- package/src/parse/wrap_lines.js +205 -453
- package/src/synth/abc_midi_flattener.js +1292 -0
- package/src/{midi → synth}/abc_midi_renderer.js +44 -17
- package/src/synth/abc_midi_sequencer.js +648 -0
- package/src/synth/active-audio-context.js +3 -14
- package/src/synth/cents-to-factor.js +10 -0
- package/src/synth/create-note-map.js +21 -32
- package/src/synth/create-synth-control.js +20 -103
- package/src/synth/create-synth.js +185 -77
- package/src/synth/download-buffer.js +7 -21
- package/src/synth/get-midi-file.js +13 -20
- package/src/synth/images/{loading.svg → loading.svg.js} +4 -0
- package/src/synth/images/loop.svg.js +65 -0
- package/src/synth/images/pause.svg.js +10 -0
- package/src/synth/images/play.svg.js +9 -0
- package/src/synth/images/{reset.svg → reset.svg.js} +5 -1
- package/src/synth/instrument-index-to-name.js +1 -16
- package/src/synth/load-note.js +37 -76
- package/src/synth/pitch-to-note-name.js +0 -15
- package/src/synth/pitches-to-perc.js +64 -0
- package/src/synth/place-note.js +78 -68
- package/src/synth/play-event.js +17 -18
- package/src/synth/register-audio-context.js +11 -23
- package/src/synth/sounds-cache.js +0 -15
- package/src/synth/supports-audio.js +9 -23
- package/src/synth/synth-controller.js +80 -49
- package/src/synth/synth-sequence.js +20 -34
- package/src/tablatures/instruments/guitar/guitar-fonts.js +19 -0
- package/src/tablatures/instruments/guitar/guitar-patterns.js +23 -0
- package/src/tablatures/instruments/guitar/tab-guitar.js +50 -0
- package/src/tablatures/instruments/string-patterns.js +277 -0
- package/src/tablatures/instruments/string-tablature.js +56 -0
- package/src/tablatures/instruments/tab-note.js +282 -0
- package/src/tablatures/instruments/tab-notes.js +41 -0
- package/src/tablatures/instruments/violin/tab-violin.js +47 -0
- package/src/tablatures/instruments/violin/violin-fonts.js +19 -0
- package/src/tablatures/instruments/violin/violin-patterns.js +23 -0
- package/src/tablatures/tab-absolute-elements.js +310 -0
- package/src/tablatures/tab-common.js +29 -0
- package/src/tablatures/tab-renderer.js +243 -0
- package/src/tablatures/transposer.js +110 -0
- package/src/test/abc_midi_lint.js +5 -22
- package/src/test/abc_midi_sequencer_lint.js +11 -14
- package/src/test/abc_parser_lint.js +136 -32
- package/src/test/abc_vertical_lint.js +94 -32
- package/src/test/rendering-lint.js +38 -5
- package/src/write/abc_absolute_element.js +112 -120
- package/src/write/abc_abstract_engraver.js +102 -253
- package/src/write/abc_beam_element.js +30 -290
- package/src/write/abc_brace_element.js +12 -121
- package/src/write/abc_create_clef.js +21 -32
- package/src/write/abc_create_key_signature.js +8 -26
- package/src/write/abc_create_note_head.js +107 -0
- package/src/write/abc_create_time_signature.js +2 -21
- package/src/write/abc_crescendo_element.js +3 -50
- package/src/write/abc_decoration.js +7 -30
- package/src/write/abc_dynamic_decoration.js +3 -37
- package/src/write/abc_ending_element.js +1 -57
- package/src/write/abc_engraver_controller.js +111 -234
- package/src/write/abc_glyphs.js +8 -18
- package/src/write/abc_relative_element.js +57 -97
- package/src/write/abc_renderer.js +10 -832
- package/src/write/abc_spacing.js +0 -15
- package/src/write/abc_staff_group_element.js +14 -349
- package/src/write/abc_tempo_element.js +9 -117
- package/src/write/abc_tie_element.js +5 -68
- package/src/write/abc_triplet_element.js +6 -124
- package/src/write/abc_voice_element.js +7 -222
- package/src/write/add-chord.js +103 -0
- package/src/write/add-text-if.js +33 -0
- package/src/write/bottom-text.js +79 -0
- package/src/write/calcHeight.js +17 -0
- package/src/write/classes.js +100 -0
- package/src/write/draw/absolute.js +68 -0
- package/src/write/draw/beam.js +56 -0
- package/src/write/draw/brace.js +106 -0
- package/src/write/draw/crescendo.js +38 -0
- package/src/write/draw/debug-box.js +8 -0
- package/src/write/draw/draw.js +56 -0
- package/src/write/draw/dynamics.js +20 -0
- package/src/write/draw/ending.js +46 -0
- package/src/write/draw/group-elements.js +66 -0
- package/src/write/draw/horizontal-line.js +25 -0
- package/src/write/draw/non-music.js +50 -0
- package/src/write/draw/print-line.js +24 -0
- package/src/write/draw/print-path.js +7 -0
- package/src/write/draw/print-stem.js +30 -0
- package/src/write/draw/print-symbol.js +59 -0
- package/src/write/draw/print-vertical-line.js +18 -0
- package/src/write/draw/relative.js +77 -0
- package/src/write/draw/round-number.js +5 -0
- package/src/write/draw/selectables.js +59 -0
- package/src/write/draw/separator.js +16 -0
- package/src/write/draw/set-paper-size.js +45 -0
- package/src/write/{sprintf.js → draw/sprintf.js} +0 -0
- package/src/write/draw/staff-group.js +226 -0
- package/src/write/draw/staff-line.js +9 -0
- package/src/write/draw/staff.js +33 -0
- package/src/write/draw/tab-line.js +40 -0
- package/src/write/draw/tempo.js +45 -0
- package/src/write/draw/text.js +71 -0
- package/src/write/draw/tie.js +97 -0
- package/src/write/draw/triplet.js +46 -0
- package/src/write/draw/voice.js +102 -0
- package/src/write/format-jazz-chord.js +15 -0
- package/src/write/free-text.js +41 -0
- package/src/write/get-font-and-attr.js +37 -0
- package/src/write/get-text-size.js +56 -0
- package/src/write/highlight.js +11 -0
- package/src/write/layout/VoiceElements.js +121 -0
- package/src/write/layout/beam.js +213 -0
- package/src/write/layout/get-left-edge-of-staff.js +56 -0
- package/src/write/layout/getBarYAt.js +6 -0
- package/src/write/layout/layout.js +94 -0
- package/src/write/layout/setUpperAndLowerElements.js +232 -0
- package/src/write/layout/staffGroup.js +146 -0
- package/src/write/layout/triplet.js +75 -0
- package/src/write/layout/voice.js +137 -0
- package/src/write/selection.js +188 -70
- package/src/write/separator.js +10 -0
- package/src/write/set-class.js +21 -0
- package/src/write/subtitle.js +12 -0
- package/src/write/svg.js +95 -43
- package/src/write/top-text.js +54 -0
- package/src/write/unhighlight.js +11 -0
- package/test.js +27 -64
- package/types/index.d.ts +1095 -0
- package/version.js +1 -1
- package/.babelrc +0 -5
- package/.eslintrc +0 -3
- package/.gitmodules +0 -3
- package/Dockerfile +0 -8
- package/abcjs-midi.css +0 -166
- package/build-utils/loadPresets.js +0 -14
- package/build-utils/presets/webpack.analyze.js +0 -6
- package/build-utils/presets/webpack.optimize.js +0 -30
- package/build-utils/webpack.development.js +0 -14
- package/build-utils/webpack.production.js +0 -35
- package/deploy-docs.sh +0 -25
- package/docker-compose.yml +0 -13
- package/docs/README.md +0 -33
- package/fix-versions.sh +0 -23
- package/midi.js +0 -62
- package/src/api/abc_tunebook_midi.js +0 -116
- package/src/midi/abc_midi_controls.js +0 -701
- package/src/midi/abc_midi_flattener.js +0 -1119
- package/src/midi/abc_midi_js_preparer.js +0 -243
- package/src/midi/abc_midi_sequencer.js +0 -401
- package/src/midi/abc_midi_ui_generator.js +0 -86
- package/src/plugin/abc_plugin_midi.js +0 -220
- package/src/synth/images/loop.svg +0 -61
- package/src/synth/images/pause.svg +0 -6
- package/src/synth/images/play.svg +0 -5
- package/src/transform/abc2abc_write.js +0 -395
- package/static-wrappers/basic.js +0 -2
- package/static-wrappers/midi.js +0 -2
- package/static-wrappers/plugin-midi.js +0 -6
- package/static-wrappers/plugin.js +0 -6
- package/webpack.config.js +0 -29
|
@@ -1,24 +1,12 @@
|
|
|
1
|
-
// Copyright (C) 2015-2020 Paul Rosen (paul at paulrosen dot net)
|
|
2
|
-
//
|
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
4
|
-
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
|
5
|
-
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
|
6
|
-
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
7
|
-
//
|
|
8
|
-
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
9
|
-
//
|
|
10
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
|
11
|
-
// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
12
|
-
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
13
|
-
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
14
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
15
|
-
|
|
16
1
|
var tunebook = require('./abc_tunebook');
|
|
17
2
|
var Tune = require('../data/abc_tune');
|
|
18
3
|
|
|
19
4
|
var EngraverController = require('../write/abc_engraver_controller');
|
|
20
5
|
var Parse = require('../parse/abc_parse');
|
|
21
6
|
var wrap = require('../parse/wrap_lines');
|
|
7
|
+
var parseCommon = require("../parse/abc_common");
|
|
8
|
+
// var tablatures = require('./abc_tablatures');
|
|
9
|
+
|
|
22
10
|
|
|
23
11
|
var resizeDivs = {};
|
|
24
12
|
function resizeOuter() {
|
|
@@ -40,7 +28,7 @@ try {
|
|
|
40
28
|
// if we aren't in a browser, this code will crash, but it is not needed then either.
|
|
41
29
|
}
|
|
42
30
|
|
|
43
|
-
function renderOne(div, tune, params, tuneNumber) {
|
|
31
|
+
function renderOne(div, tune, params, tuneNumber, lineOffset) {
|
|
44
32
|
if (params.viewportHorizontal) {
|
|
45
33
|
// Create an inner div that holds the music, so that the passed in div will be the viewport.
|
|
46
34
|
div.innerHTML = '<div class="abcjs-inner"></div>';
|
|
@@ -62,7 +50,7 @@ function renderOne(div, tune, params, tuneNumber) {
|
|
|
62
50
|
else
|
|
63
51
|
div.innerHTML = "";
|
|
64
52
|
var engraver_controller = new EngraverController(div, params);
|
|
65
|
-
engraver_controller.engraveABC(tune, tuneNumber);
|
|
53
|
+
engraver_controller.engraveABC(tune, tuneNumber, lineOffset);
|
|
66
54
|
tune.engraver = engraver_controller;
|
|
67
55
|
if (params.viewportVertical || params.viewportHorizontal) {
|
|
68
56
|
// If we added a wrapper around the div, then we need to size the wrapper, too.
|
|
@@ -77,8 +65,6 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
|
|
|
77
65
|
obj.formatting = tune.formatting;
|
|
78
66
|
obj.media = tune.media;
|
|
79
67
|
obj.version = tune.version;
|
|
80
|
-
obj.metaText = {};
|
|
81
|
-
obj.lines = [];
|
|
82
68
|
return obj;
|
|
83
69
|
}
|
|
84
70
|
|
|
@@ -94,14 +80,7 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
|
|
|
94
80
|
|
|
95
81
|
if (i === 0) {
|
|
96
82
|
// These items go on top of the music
|
|
97
|
-
tuneLine.
|
|
98
|
-
tuneLine.metaText.title = tune.metaText.title;
|
|
99
|
-
tuneLine.metaText.header = tune.metaText.header;
|
|
100
|
-
tuneLine.metaText.rhythm = tune.metaText.rhythm;
|
|
101
|
-
tuneLine.metaText.origin = tune.metaText.origin;
|
|
102
|
-
tuneLine.metaText.composer = tune.metaText.composer;
|
|
103
|
-
tuneLine.metaText.author = tune.metaText.author;
|
|
104
|
-
tuneLine.metaText.partOrder = tune.metaText.partOrder;
|
|
83
|
+
tuneLine.copyTopInfo(tune);
|
|
105
84
|
}
|
|
106
85
|
|
|
107
86
|
// push the lines until we get to a music line
|
|
@@ -120,17 +99,7 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
|
|
|
120
99
|
|
|
121
100
|
// These items go below the music
|
|
122
101
|
tuneLine = tunes[tunes.length-1];
|
|
123
|
-
tuneLine.
|
|
124
|
-
tuneLine.metaText.book = tune.metaText.book;
|
|
125
|
-
tuneLine.metaText.source = tune.metaText.source;
|
|
126
|
-
tuneLine.metaText.discography = tune.metaText.discography;
|
|
127
|
-
tuneLine.metaText.notes = tune.metaText.notes;
|
|
128
|
-
tuneLine.metaText.transcription = tune.metaText.transcription;
|
|
129
|
-
tuneLine.metaText.history = tune.metaText.history;
|
|
130
|
-
tuneLine.metaText['abc-copyright'] = tune.metaText['abc-copyright'];
|
|
131
|
-
tuneLine.metaText['abc-creator'] = tune.metaText['abc-creator'];
|
|
132
|
-
tuneLine.metaText['abc-edited-by'] = tune.metaText['abc-edited-by'];
|
|
133
|
-
tuneLine.metaText.footer = tune.metaText.footer;
|
|
102
|
+
tuneLine.copyBottomInfo(tune);
|
|
134
103
|
|
|
135
104
|
// Now create sub-divs and render each line. Need to copy the params to change the padding for the interior slices.
|
|
136
105
|
var ep = {};
|
|
@@ -141,22 +110,31 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
|
|
|
141
110
|
}
|
|
142
111
|
var origPaddingTop = ep.paddingtop;
|
|
143
112
|
var origPaddingBottom = ep.paddingbottom;
|
|
113
|
+
var currentScrollY = div.parentNode.scrollTop; // If there is scrolling it will be lost during the redraw so remember it.
|
|
114
|
+
var currentScrollX = div.parentNode.scrollLeft;
|
|
144
115
|
div.innerHTML = "";
|
|
116
|
+
var lineCount = 0;
|
|
145
117
|
for (var k = 0; k < tunes.length; k++) {
|
|
146
118
|
var lineEl = document.createElement("div");
|
|
147
119
|
div.appendChild(lineEl);
|
|
148
120
|
|
|
149
121
|
if (k === 0) {
|
|
150
122
|
ep.paddingtop = origPaddingTop;
|
|
151
|
-
ep.paddingbottom =
|
|
123
|
+
ep.paddingbottom = 0;
|
|
152
124
|
} else if (k === tunes.length-1) {
|
|
153
125
|
ep.paddingtop = 10;
|
|
154
126
|
ep.paddingbottom = origPaddingBottom;
|
|
155
127
|
} else {
|
|
156
128
|
ep.paddingtop = 10;
|
|
157
|
-
ep.paddingbottom =
|
|
129
|
+
ep.paddingbottom = 0;
|
|
158
130
|
}
|
|
159
|
-
|
|
131
|
+
if (k < tunes.length-1) {
|
|
132
|
+
// If it is not the last line, force stretchlast. If it is, stretchlast might have been set by the input parameters.
|
|
133
|
+
tunes[k].formatting = parseCommon.clone(tunes[k].formatting);
|
|
134
|
+
tunes[k].formatting.stretchlast = true;
|
|
135
|
+
}
|
|
136
|
+
renderOne(lineEl, tunes[k], ep, tuneNumber, lineCount);
|
|
137
|
+
lineCount += tunes[k].lines.length;
|
|
160
138
|
if (k === 0)
|
|
161
139
|
tune.engraver = tunes[k].engraver;
|
|
162
140
|
else {
|
|
@@ -166,6 +144,9 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
|
|
|
166
144
|
tune.engraver.staffgroups.push(tunes[k].engraver.staffgroups[0]);
|
|
167
145
|
}
|
|
168
146
|
}
|
|
147
|
+
if (currentScrollX || currentScrollY) {
|
|
148
|
+
div.parentNode.scrollTo(currentScrollX, currentScrollY);
|
|
149
|
+
}
|
|
169
150
|
}
|
|
170
151
|
|
|
171
152
|
// A quick way to render a tune from javascript when interactivity is not required.
|
|
@@ -195,6 +176,9 @@ var renderAbc = function(output, abc, parserParams, engraverParams, renderParams
|
|
|
195
176
|
params[key] = parserParams[key];
|
|
196
177
|
}
|
|
197
178
|
}
|
|
179
|
+
if (params.warnings_id && params.tablature) {
|
|
180
|
+
params.tablature.warning_id = params.warnings_id;
|
|
181
|
+
}
|
|
198
182
|
}
|
|
199
183
|
if (engraverParams) {
|
|
200
184
|
for (key in engraverParams) {
|
|
@@ -231,7 +215,7 @@ var renderAbc = function(output, abc, parserParams, engraverParams, renderParams
|
|
|
231
215
|
return tune;
|
|
232
216
|
}
|
|
233
217
|
else if (removeDiv || !params.oneSvgPerLine || tune.lines.length < 2)
|
|
234
|
-
renderOne(div, tune, params, tuneNumber);
|
|
218
|
+
renderOne(div, tune, params, tuneNumber, 0);
|
|
235
219
|
else
|
|
236
220
|
renderEachLineSeparately(div, tune, params, tuneNumber);
|
|
237
221
|
if (removeDiv)
|
|
@@ -246,13 +230,21 @@ function doLineWrapping(div, tune, tuneNumber, abcString, params) {
|
|
|
246
230
|
var engraver_controller = new EngraverController(div, params);
|
|
247
231
|
var widths = engraver_controller.getMeasureWidths(tune);
|
|
248
232
|
|
|
249
|
-
var ret = wrap.calcLineWraps(tune, widths,
|
|
250
|
-
|
|
251
|
-
|
|
233
|
+
var ret = wrap.calcLineWraps(tune, widths, params);
|
|
234
|
+
if (ret.reParse) {
|
|
235
|
+
var abcParser = new Parse();
|
|
236
|
+
abcParser.parse(abcString, ret.revisedParams);
|
|
237
|
+
tune = abcParser.getTune();
|
|
238
|
+
var warnings = abcParser.getWarnings();
|
|
239
|
+
if (warnings)
|
|
240
|
+
tune.warnings = warnings;
|
|
241
|
+
}
|
|
242
|
+
if (!params.oneSvgPerLine || tune.lines.length < 2)
|
|
243
|
+
renderOne(div, tune, ret.revisedParams, tuneNumber, 0);
|
|
252
244
|
else
|
|
253
|
-
renderEachLineSeparately(div,
|
|
254
|
-
|
|
255
|
-
return
|
|
245
|
+
renderEachLineSeparately(div, tune, ret.revisedParams, tuneNumber);
|
|
246
|
+
tune.explanation = ret.explanation;
|
|
247
|
+
return tune;
|
|
256
248
|
}
|
|
257
249
|
|
|
258
250
|
module.exports = renderAbc;
|