abcjs 6.0.0-beta.7 → 6.0.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.
Files changed (204) hide show
  1. package/.github/workflows/tests.yml +29 -0
  2. package/CODE_OF_CONDUCT.md +76 -0
  3. package/CONTRIBUTING.md +1 -0
  4. package/LICENSE.md +1 -1
  5. package/README.md +92 -3
  6. package/RELEASE.md +957 -1
  7. package/abcjs-audio.css +14 -5
  8. package/dist/.gitignore +1 -2
  9. package/dist/abcjs-basic-min.js +3 -0
  10. package/dist/abcjs-basic-min.js.LICENSE +23 -0
  11. package/dist/abcjs-basic.js +28231 -0
  12. package/dist/abcjs-basic.js.map +1 -0
  13. package/dist/abcjs-plugin-min.js +3 -0
  14. package/dist/abcjs-plugin-min.js.LICENSE +23 -0
  15. package/dist/report-basic.html +37 -0
  16. package/dist/report-before-glyph-compress.html +37 -0
  17. package/dist/report-brown-ts-target-es5.html +37 -0
  18. package/dist/report-dev-orig-no-babel.html +37 -0
  19. package/dist/report-synth.html +37 -0
  20. package/docker-build.sh +1 -0
  21. package/glyphs.json +1 -0
  22. package/index.js +27 -2
  23. package/{static-wrappers/license.js → license.js} +1 -1
  24. package/package.json +26 -29
  25. package/{src/plugin/abc_plugin.js → plugin.js} +31 -19
  26. package/src/api/abc_animation.js +1 -17
  27. package/src/api/abc_tablatures.js +144 -0
  28. package/src/api/abc_timing_callbacks.js +234 -116
  29. package/src/api/abc_tunebook.js +18 -67
  30. package/src/api/abc_tunebook_svg.js +38 -46
  31. package/src/data/abc_tune.js +232 -972
  32. package/src/data/deline-tune.js +199 -0
  33. package/src/edit/abc_editarea.js +112 -0
  34. package/src/edit/abc_editor.js +95 -221
  35. package/src/midi/abc_midi_create.js +48 -50
  36. package/src/parse/abc_common.js +0 -14
  37. package/src/parse/abc_parse.js +167 -1321
  38. package/src/parse/abc_parse_book.js +62 -0
  39. package/src/parse/abc_parse_directive.js +164 -41
  40. package/src/parse/abc_parse_header.js +116 -145
  41. package/src/parse/abc_parse_key_voice.js +26 -20
  42. package/src/parse/abc_parse_music.js +1337 -0
  43. package/src/parse/abc_tokenizer.js +21 -15
  44. package/src/parse/abc_transpose.js +3 -15
  45. package/src/parse/tune-builder.js +896 -0
  46. package/src/parse/wrap_lines.js +205 -453
  47. package/src/synth/abc_midi_flattener.js +1292 -0
  48. package/src/{midi → synth}/abc_midi_renderer.js +44 -17
  49. package/src/synth/abc_midi_sequencer.js +648 -0
  50. package/src/synth/active-audio-context.js +3 -14
  51. package/src/synth/cents-to-factor.js +10 -0
  52. package/src/synth/create-note-map.js +21 -32
  53. package/src/synth/create-synth-control.js +20 -103
  54. package/src/synth/create-synth.js +185 -77
  55. package/src/synth/download-buffer.js +7 -21
  56. package/src/synth/get-midi-file.js +13 -20
  57. package/src/synth/images/{loading.svg → loading.svg.js} +4 -0
  58. package/src/synth/images/loop.svg.js +65 -0
  59. package/src/synth/images/pause.svg.js +10 -0
  60. package/src/synth/images/play.svg.js +9 -0
  61. package/src/synth/images/{reset.svg → reset.svg.js} +5 -1
  62. package/src/synth/instrument-index-to-name.js +1 -16
  63. package/src/synth/load-note.js +37 -76
  64. package/src/synth/pitch-to-note-name.js +0 -15
  65. package/src/synth/pitches-to-perc.js +64 -0
  66. package/src/synth/place-note.js +78 -68
  67. package/src/synth/play-event.js +17 -18
  68. package/src/synth/register-audio-context.js +11 -23
  69. package/src/synth/sounds-cache.js +0 -15
  70. package/src/synth/supports-audio.js +9 -23
  71. package/src/synth/synth-controller.js +80 -49
  72. package/src/synth/synth-sequence.js +20 -34
  73. package/src/tablatures/instruments/guitar/guitar-fonts.js +19 -0
  74. package/src/tablatures/instruments/guitar/guitar-patterns.js +23 -0
  75. package/src/tablatures/instruments/guitar/tab-guitar.js +50 -0
  76. package/src/tablatures/instruments/string-patterns.js +277 -0
  77. package/src/tablatures/instruments/string-tablature.js +56 -0
  78. package/src/tablatures/instruments/tab-note.js +282 -0
  79. package/src/tablatures/instruments/tab-notes.js +41 -0
  80. package/src/tablatures/instruments/violin/tab-violin.js +47 -0
  81. package/src/tablatures/instruments/violin/violin-fonts.js +19 -0
  82. package/src/tablatures/instruments/violin/violin-patterns.js +23 -0
  83. package/src/tablatures/tab-absolute-elements.js +310 -0
  84. package/src/tablatures/tab-common.js +29 -0
  85. package/src/tablatures/tab-renderer.js +243 -0
  86. package/src/tablatures/transposer.js +110 -0
  87. package/src/test/abc_midi_lint.js +5 -22
  88. package/src/test/abc_midi_sequencer_lint.js +11 -14
  89. package/src/test/abc_parser_lint.js +136 -32
  90. package/src/test/abc_vertical_lint.js +94 -32
  91. package/src/test/rendering-lint.js +38 -5
  92. package/src/write/abc_absolute_element.js +112 -120
  93. package/src/write/abc_abstract_engraver.js +102 -253
  94. package/src/write/abc_beam_element.js +30 -290
  95. package/src/write/abc_brace_element.js +12 -121
  96. package/src/write/abc_create_clef.js +21 -32
  97. package/src/write/abc_create_key_signature.js +8 -26
  98. package/src/write/abc_create_note_head.js +107 -0
  99. package/src/write/abc_create_time_signature.js +2 -21
  100. package/src/write/abc_crescendo_element.js +3 -50
  101. package/src/write/abc_decoration.js +7 -30
  102. package/src/write/abc_dynamic_decoration.js +3 -37
  103. package/src/write/abc_ending_element.js +1 -57
  104. package/src/write/abc_engraver_controller.js +111 -234
  105. package/src/write/abc_glyphs.js +9 -19
  106. package/src/write/abc_relative_element.js +57 -97
  107. package/src/write/abc_renderer.js +10 -832
  108. package/src/write/abc_spacing.js +0 -15
  109. package/src/write/abc_staff_group_element.js +14 -349
  110. package/src/write/abc_tempo_element.js +9 -117
  111. package/src/write/abc_tie_element.js +5 -68
  112. package/src/write/abc_triplet_element.js +6 -124
  113. package/src/write/abc_voice_element.js +7 -222
  114. package/src/write/add-chord.js +103 -0
  115. package/src/write/add-text-if.js +33 -0
  116. package/src/write/bottom-text.js +79 -0
  117. package/src/write/calcHeight.js +17 -0
  118. package/src/write/classes.js +100 -0
  119. package/src/write/draw/absolute.js +68 -0
  120. package/src/write/draw/beam.js +56 -0
  121. package/src/write/draw/brace.js +106 -0
  122. package/src/write/draw/crescendo.js +38 -0
  123. package/src/write/draw/debug-box.js +8 -0
  124. package/src/write/draw/draw.js +56 -0
  125. package/src/write/draw/dynamics.js +20 -0
  126. package/src/write/draw/ending.js +46 -0
  127. package/src/write/draw/group-elements.js +66 -0
  128. package/src/write/draw/horizontal-line.js +25 -0
  129. package/src/write/draw/non-music.js +50 -0
  130. package/src/write/draw/print-line.js +24 -0
  131. package/src/write/draw/print-path.js +7 -0
  132. package/src/write/draw/print-stem.js +30 -0
  133. package/src/write/draw/print-symbol.js +59 -0
  134. package/src/write/draw/print-vertical-line.js +18 -0
  135. package/src/write/draw/relative.js +77 -0
  136. package/src/write/draw/round-number.js +5 -0
  137. package/src/write/draw/selectables.js +59 -0
  138. package/src/write/draw/separator.js +16 -0
  139. package/src/write/draw/set-paper-size.js +45 -0
  140. package/src/write/{sprintf.js → draw/sprintf.js} +0 -0
  141. package/src/write/draw/staff-group.js +226 -0
  142. package/src/write/draw/staff-line.js +9 -0
  143. package/src/write/draw/staff.js +33 -0
  144. package/src/write/draw/tab-line.js +40 -0
  145. package/src/write/draw/tempo.js +45 -0
  146. package/src/write/draw/text.js +71 -0
  147. package/src/write/draw/tie.js +97 -0
  148. package/src/write/draw/triplet.js +46 -0
  149. package/src/write/draw/voice.js +102 -0
  150. package/src/write/format-jazz-chord.js +15 -0
  151. package/src/write/free-text.js +41 -0
  152. package/src/write/get-font-and-attr.js +37 -0
  153. package/src/write/get-text-size.js +56 -0
  154. package/src/write/highlight.js +11 -0
  155. package/src/write/layout/VoiceElements.js +121 -0
  156. package/src/write/layout/beam.js +213 -0
  157. package/src/write/layout/get-left-edge-of-staff.js +56 -0
  158. package/src/write/layout/getBarYAt.js +6 -0
  159. package/src/write/layout/layout.js +94 -0
  160. package/src/write/layout/setUpperAndLowerElements.js +232 -0
  161. package/src/write/layout/staffGroup.js +146 -0
  162. package/src/write/layout/triplet.js +75 -0
  163. package/src/write/layout/voice.js +137 -0
  164. package/src/write/selection.js +188 -70
  165. package/src/write/separator.js +10 -0
  166. package/src/write/set-class.js +21 -0
  167. package/src/write/subtitle.js +12 -0
  168. package/src/write/svg.js +95 -43
  169. package/src/write/top-text.js +54 -0
  170. package/src/write/unhighlight.js +11 -0
  171. package/temp.txt +17 -0
  172. package/test.js +27 -64
  173. package/types/index.d.ts +1095 -0
  174. package/version.js +1 -1
  175. package/.babelrc +0 -5
  176. package/.eslintrc +0 -3
  177. package/.gitmodules +0 -3
  178. package/abcjs-midi.css +0 -166
  179. package/build-utils/loadPresets.js +0 -14
  180. package/build-utils/presets/webpack.analyze.js +0 -6
  181. package/build-utils/presets/webpack.optimize.js +0 -30
  182. package/build-utils/webpack.development.js +0 -14
  183. package/build-utils/webpack.production.js +0 -35
  184. package/deploy-docs.sh +0 -25
  185. package/docs/README.md +0 -33
  186. package/fix-versions.sh +0 -23
  187. package/mei.js +0 -43
  188. package/midi.js +0 -62
  189. package/src/api/abc_tunebook_midi.js +0 -116
  190. package/src/midi/abc_midi_controls.js +0 -701
  191. package/src/midi/abc_midi_flattener.js +0 -1119
  192. package/src/midi/abc_midi_js_preparer.js +0 -243
  193. package/src/midi/abc_midi_sequencer.js +0 -401
  194. package/src/midi/abc_midi_ui_generator.js +0 -86
  195. package/src/plugin/abc_plugin_midi.js +0 -220
  196. package/src/synth/images/loop.svg +0 -61
  197. package/src/synth/images/pause.svg +0 -6
  198. package/src/synth/images/play.svg +0 -5
  199. package/src/transform/abc2abc_write.js +0 -395
  200. package/static-wrappers/basic.js +0 -2
  201. package/static-wrappers/midi.js +0 -2
  202. package/static-wrappers/plugin-midi.js +0 -6
  203. package/static-wrappers/plugin.js +0 -6
  204. 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.metaText.tempo = tune.metaText.tempo;
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.metaText.unalignedWords = tune.metaText.unalignedWords;
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,7 +110,10 @@ 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);
@@ -156,7 +128,13 @@ function renderEachLineSeparately(div, tune, params, tuneNumber) {
156
128
  ep.paddingtop = 10;
157
129
  ep.paddingbottom = -20;
158
130
  }
159
- renderOne(lineEl, tunes[k], ep, tuneNumber);
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, abcString, params, Parse, engraver_controller);
250
- if (!params.oneSvgPerLine || ret.tune.lines.length < 2)
251
- renderOne(div, ret.tune, ret.revisedParams, tuneNumber);
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, ret.tune, ret.revisedParams, tuneNumber);
254
- ret.tune.explanation = ret.explanation;
255
- return ret.tune;
245
+ renderEachLineSeparately(div, tune, ret.revisedParams, tuneNumber);
246
+ tune.explanation = ret.explanation;
247
+ return tune;
256
248
  }
257
249
 
258
250
  module.exports = renderAbc;