abcjs 6.0.0-beta.35 → 6.0.0-beta.39
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/LICENSE.md +1 -1
- package/README.md +15 -6
- package/RELEASE.md +74 -0
- package/dist/abcjs-basic-min.js +2 -2
- package/dist/abcjs-basic-min.js.LICENSE +2 -2
- package/dist/abcjs-basic.js +2599 -328
- package/dist/abcjs-basic.js.map +1 -1
- package/dist/abcjs-plugin-min.js +2 -2
- package/dist/abcjs-plugin-min.js.LICENSE +2 -2
- package/dist/report-basic.html +37 -0
- package/dist/report-before-glyph-compress.html +37 -0
- package/dist/report-brown-ts-target-es5.html +37 -0
- package/dist/report-dev-orig-no-babel.html +37 -0
- package/dist/report-synth.html +37 -0
- package/docker-build.sh +1 -0
- package/glyphs.json +1 -0
- package/index.js +23 -1
- package/license.js +1 -1
- package/package.json +2 -1
- package/plugin.js +23 -1
- package/src/api/abc_tablatures.js +144 -0
- package/src/api/abc_tunebook.js +10 -1
- package/src/api/abc_tunebook_svg.js +18 -6
- package/src/data/abc_tune.js +26 -24
- package/src/edit/abc_editor.js +29 -11
- package/src/parse/abc_parse.js +4 -2
- package/src/parse/abc_parse_directive.js +12 -6
- package/src/parse/tune-builder.js +1 -1
- package/src/synth/abc_midi_flattener.js +11 -2
- package/src/synth/abc_midi_sequencer.js +4 -1
- package/src/synth/create-synth.js +105 -34
- package/src/synth/load-note.js +34 -65
- package/src/synth/place-note.js +63 -59
- 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_parser_lint.js +3 -0
- package/src/write/abc_absolute_element.js +2 -2
- package/src/write/abc_engraver_controller.js +19 -11
- package/src/write/abc_glyphs.js +2 -0
- package/src/write/abc_relative_element.js +5 -3
- package/src/write/abc_renderer.js +5 -1
- package/src/write/draw/absolute.js +5 -1
- package/src/write/draw/draw.js +5 -6
- package/src/write/draw/non-music.js +3 -1
- package/src/write/draw/print-line.js +24 -0
- package/src/write/draw/relative.js +14 -2
- package/src/write/draw/selectables.js +9 -6
- package/src/write/draw/staff-group.js +44 -8
- package/src/write/draw/staff-line.js +3 -19
- package/src/write/draw/staff.js +15 -2
- package/src/write/draw/tab-line.js +40 -0
- package/src/write/draw/text.js +3 -0
- package/src/write/draw/voice.js +9 -1
- package/src/write/format-jazz-chord.js +2 -2
- package/src/write/layout/staffGroup.js +23 -1
- package/src/write/layout/voice.js +2 -1
- package/src/write/svg.js +2 -1
- package/temp.txt +0 -0
- package/test.js +23 -0
- package/types/index.d.ts +73 -25
- package/version.js +1 -1
|
@@ -16,7 +16,7 @@ var Classes = require('./classes');
|
|
|
16
16
|
var GetFontAndAttr = require('./get-font-and-attr');
|
|
17
17
|
var GetTextSize = require('./get-text-size');
|
|
18
18
|
var draw = require('./draw/draw');
|
|
19
|
-
var
|
|
19
|
+
var tablatures = require('../api/abc_tablatures');
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* @class
|
|
@@ -38,11 +38,11 @@ var EngraverController = function(paper, params) {
|
|
|
38
38
|
this.selectTypes = params.selectTypes;
|
|
39
39
|
this.responsive = params.responsive;
|
|
40
40
|
this.space = 3*spacing.SPACE;
|
|
41
|
-
|
|
41
|
+
this.initialClef = params.initialClef;
|
|
42
42
|
this.scale = params.scale ? parseFloat(params.scale) : 0;
|
|
43
43
|
this.classes = new Classes({ shouldAddClasses: params.add_classes });
|
|
44
44
|
if (!(this.scale > 0.1))
|
|
45
|
-
|
|
45
|
+
this.scale = undefined;
|
|
46
46
|
|
|
47
47
|
if (params.staffwidth) {
|
|
48
48
|
// Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the
|
|
@@ -88,18 +88,18 @@ EngraverController.prototype.reset = function() {
|
|
|
88
88
|
/**
|
|
89
89
|
* run the engraving process
|
|
90
90
|
*/
|
|
91
|
-
EngraverController.prototype.engraveABC = function(abctunes, tuneNumber) {
|
|
91
|
+
EngraverController.prototype.engraveABC = function(abctunes, tuneNumber, lineOffset) {
|
|
92
92
|
if (abctunes[0]===undefined) {
|
|
93
93
|
abctunes = [abctunes];
|
|
94
94
|
}
|
|
95
95
|
this.reset();
|
|
96
96
|
|
|
97
97
|
for (var i = 0; i < abctunes.length; i++) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
this.engraveTune(abctunes[i], tuneNumber);
|
|
98
|
+
if (tuneNumber === undefined)
|
|
99
|
+
tuneNumber = i;
|
|
100
|
+
this.getFontAndAttr = new GetFontAndAttr(abctunes[i].formatting, this.classes);
|
|
101
|
+
this.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);
|
|
102
|
+
this.engraveTune(abctunes[i], tuneNumber, lineOffset);
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
105
|
|
|
@@ -168,6 +168,9 @@ EngraverController.prototype.getMeasureWidths = function(abcTune) {
|
|
|
168
168
|
EngraverController.prototype.setupTune = function (abcTune, tuneNumber) {
|
|
169
169
|
this.classes.reset();
|
|
170
170
|
|
|
171
|
+
if (abcTune.formatting.jazzchords !== undefined)
|
|
172
|
+
this.jazzchords = abcTune.formatting.jazzchords;
|
|
173
|
+
|
|
171
174
|
this.renderer.newTune(abcTune);
|
|
172
175
|
this.engraver = new AbstractEngraver(this.getTextSize, tuneNumber, {
|
|
173
176
|
bagpipes: abcTune.formatting.bagpipes,
|
|
@@ -224,7 +227,7 @@ EngraverController.prototype.constructTuneElements = function (abcTune) {
|
|
|
224
227
|
abcTune.bottomText = new BottomText(abcTune.metaText, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.getTextSize);
|
|
225
228
|
};
|
|
226
229
|
|
|
227
|
-
EngraverController.prototype.engraveTune = function (abcTune, tuneNumber) {
|
|
230
|
+
EngraverController.prototype.engraveTune = function (abcTune, tuneNumber, lineOffset) {
|
|
228
231
|
var scale = this.setupTune(abcTune, tuneNumber);
|
|
229
232
|
|
|
230
233
|
// Create all of the element objects that will appear on the page.
|
|
@@ -233,8 +236,13 @@ EngraverController.prototype.engraveTune = function (abcTune, tuneNumber) {
|
|
|
233
236
|
// Do all the positioning, both horizontally and vertically
|
|
234
237
|
var maxWidth = layout(this.renderer, abcTune, this.width, this.space);
|
|
235
238
|
|
|
239
|
+
// Deal with tablature for staff
|
|
240
|
+
if (abcTune.tablatures) {
|
|
241
|
+
tablatures.layoutTablatures(this.renderer, abcTune);
|
|
242
|
+
}
|
|
243
|
+
|
|
236
244
|
// Do all the writing to the SVG
|
|
237
|
-
var ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber);
|
|
245
|
+
var ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber, lineOffset);
|
|
238
246
|
this.staffgroups = ret.staffgroups;
|
|
239
247
|
this.selectables = ret.selectables;
|
|
240
248
|
|
package/src/write/abc_glyphs.js
CHANGED
|
@@ -70,6 +70,8 @@ var spacing = require('./abc_spacing');
|
|
|
70
70
|
'clefs.F':{d:[['M',6.30,-7.80],['c',0.36,-0.03,1.65,0.00,2.13,0.03],['c',3.60,0.42,6.03,2.10,6.93,4.86],['c',0.27,0.84,0.36,1.50,0.36,2.58],['c',0.00,0.90,-0.03,1.35,-0.18,2.16],['c',-0.78,3.78,-3.54,7.08,-8.37,9.96],['c',-1.74,1.05,-3.87,2.13,-6.18,3.12],['c',-0.39,0.18,-0.75,0.33,-0.81,0.36],['c',-0.06,0.03,-0.15,0.06,-0.18,0.06],['c',-0.15,0.00,-0.33,-0.18,-0.33,-0.33],['c',0.00,-0.15,0.06,-0.21,0.51,-0.48],['c',3.00,-1.77,5.13,-3.21,6.84,-4.74],['c',0.51,-0.45,1.59,-1.50,1.95,-1.95],['c',1.89,-2.19,2.88,-4.32,3.15,-6.78],['c',0.06,-0.42,0.06,-1.77,0.00,-2.19],['c',-0.24,-2.01,-0.93,-3.63,-2.04,-4.71],['c',-0.63,-0.63,-1.29,-1.02,-2.07,-1.20],['c',-1.62,-0.39,-3.36,0.15,-4.56,1.44],['c',-0.54,0.60,-1.05,1.47,-1.32,2.22],['l',-0.09,0.21],['l',0.24,-0.12],['c',0.39,-0.21,0.63,-0.24,1.11,-0.24],['c',0.30,0.00,0.45,0.00,0.66,0.06],['c',1.92,0.48,2.85,2.55,1.95,4.38],['c',-0.45,0.99,-1.41,1.62,-2.46,1.71],['c',-1.47,0.09,-2.91,-0.87,-3.39,-2.25],['c',-0.18,-0.57,-0.21,-1.32,-0.03,-2.28],['c',0.39,-2.25,1.83,-4.20,3.81,-5.19],['c',0.69,-0.36,1.59,-0.60,2.37,-0.69],['z'],['m',11.58,2.52],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.30,1.17,-0.72,2.19,-1.89,1.89],['c',-0.99,-0.21,-1.50,-1.32,-1.02,-2.25],['c',0.18,-0.39,0.60,-0.69,1.02,-0.78],['z'],['m',0.00,7.50],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.21,0.87,-0.30,1.71,-1.14,1.89],['c',-0.87,0.21,-1.71,-0.30,-1.89,-1.14],['c',-0.21,-0.84,0.30,-1.71,1.14,-1.89],['z']],w:20.153,h:23.142},
|
|
71
71
|
'clefs.G':{d:[['M',9.69,-37.41],['c',0.09,-0.09,0.24,-0.06,0.36,0.00],['c',0.12,0.09,0.57,0.60,0.96,1.11],['c',1.77,2.34,3.21,5.85,3.57,8.73],['c',0.21,1.56,0.03,3.27,-0.45,4.86],['c',-0.69,2.31,-1.92,4.47,-4.23,7.44],['c',-0.30,0.39,-0.57,0.72,-0.60,0.75],['c',-0.03,0.06,0.00,0.15,0.18,0.78],['c',0.54,1.68,1.38,4.44,1.68,5.49],['l',0.09,0.42],['l',0.39,0.00],['c',1.47,0.09,2.76,0.51,3.96,1.29],['c',1.83,1.23,3.06,3.21,3.39,5.52],['c',0.09,0.45,0.12,1.29,0.06,1.74],['c',-0.09,1.02,-0.33,1.83,-0.75,2.73],['c',-0.84,1.71,-2.28,3.06,-4.02,3.72],['l',-0.33,0.12],['l',0.03,1.26],['c',0.00,1.74,-0.06,3.63,-0.21,4.62],['c',-0.45,3.06,-2.19,5.49,-4.47,6.21],['c',-0.57,0.18,-0.90,0.21,-1.59,0.21],['c',-0.69,0.00,-1.02,-0.03,-1.65,-0.21],['c',-1.14,-0.27,-2.13,-0.84,-2.94,-1.65],['c',-0.99,-0.99,-1.56,-2.16,-1.71,-3.54],['c',-0.09,-0.81,0.06,-1.53,0.45,-2.13],['c',0.63,-0.99,1.83,-1.56,3.00,-1.53],['c',1.50,0.09,2.64,1.32,2.73,2.94],['c',0.06,1.47,-0.93,2.70,-2.37,2.97],['c',-0.45,0.06,-0.84,0.03,-1.29,-0.09],['l',-0.21,-0.09],['l',0.09,0.12],['c',0.39,0.54,0.78,0.93,1.32,1.26],['c',1.35,0.87,3.06,1.02,4.35,0.36],['c',1.44,-0.72,2.52,-2.28,2.97,-4.35],['c',0.15,-0.66,0.24,-1.50,0.30,-3.03],['c',0.03,-0.84,0.03,-2.94,0.00,-3.00],['c',-0.03,0.00,-0.18,0.00,-0.36,0.03],['c',-0.66,0.12,-0.99,0.12,-1.83,0.12],['c',-1.05,0.00,-1.71,-0.06,-2.61,-0.30],['c',-4.02,-0.99,-7.11,-4.35,-7.80,-8.46],['c',-0.12,-0.66,-0.12,-0.99,-0.12,-1.83],['c',0.00,-0.84,0.00,-1.14,0.15,-1.92],['c',0.36,-2.28,1.41,-4.62,3.30,-7.29],['l',2.79,-3.60],['c',0.54,-0.66,0.96,-1.20,0.96,-1.23],['c',0.00,-0.03,-0.09,-0.33,-0.18,-0.69],['c',-0.96,-3.21,-1.41,-5.28,-1.59,-7.68],['c',-0.12,-1.38,-0.15,-3.09,-0.06,-3.96],['c',0.33,-2.67,1.38,-5.07,3.12,-7.08],['c',0.36,-0.42,0.99,-1.05,1.17,-1.14],['z'],['m',2.01,4.71],['c',-0.15,-0.30,-0.30,-0.54,-0.30,-0.54],['c',-0.03,0.00,-0.18,0.09,-0.30,0.21],['c',-2.40,1.74,-3.87,4.20,-4.26,7.11],['c',-0.06,0.54,-0.06,1.41,-0.03,1.89],['c',0.09,1.29,0.48,3.12,1.08,5.22],['c',0.15,0.42,0.24,0.78,0.24,0.81],['c',0.00,0.03,0.84,-1.11,1.23,-1.68],['c',1.89,-2.73,2.88,-5.07,3.15,-7.53],['c',0.09,-0.57,0.12,-1.74,0.06,-2.37],['c',-0.09,-1.23,-0.27,-1.92,-0.87,-3.12],['z'],['m',-2.94,20.70],['c',-0.21,-0.72,-0.39,-1.32,-0.42,-1.32],['c',0.00,0.00,-1.20,1.47,-1.86,2.37],['c',-2.79,3.63,-4.02,6.30,-4.35,9.30],['c',-0.03,0.21,-0.03,0.69,-0.03,1.08],['c',0.00,0.69,0.00,0.75,0.06,1.11],['c',0.12,0.54,0.27,0.99,0.51,1.47],['c',0.69,1.38,1.83,2.55,3.42,3.42],['c',0.96,0.54,2.07,0.90,3.21,1.08],['c',0.78,0.12,2.04,0.12,2.94,-0.03],['c',0.51,-0.06,0.45,-0.03,0.42,-0.30],['c',-0.24,-3.33,-0.72,-6.33,-1.62,-10.08],['c',-0.09,-0.39,-0.18,-0.75,-0.18,-0.78],['c',-0.03,-0.03,-0.42,0.00,-0.81,0.09],['c',-0.90,0.18,-1.65,0.57,-2.22,1.14],['c',-0.72,0.72,-1.08,1.65,-1.05,2.64],['c',0.06,0.96,0.48,1.83,1.23,2.58],['c',0.36,0.36,0.72,0.63,1.17,0.90],['c',0.33,0.18,0.36,0.21,0.42,0.33],['c',0.18,0.42,-0.18,0.90,-0.60,0.87],['c',-0.18,-0.03,-0.84,-0.36,-1.26,-0.63],['c',-0.78,-0.51,-1.38,-1.11,-1.86,-1.83],['c',-1.77,-2.70,-0.99,-6.42,1.71,-8.19],['c',0.30,-0.21,0.81,-0.48,1.17,-0.63],['c',0.30,-0.09,1.02,-0.30,1.14,-0.30],['c',0.06,0.00,0.09,0.00,0.09,-0.03],['c',0.03,-0.03,-0.51,-1.92,-1.23,-4.26],['z'],['m',3.78,7.41],['c',-0.18,-0.03,-0.36,-0.06,-0.39,-0.06],['c',-0.03,0.00,0.00,0.21,0.18,1.02],['c',0.75,3.18,1.26,6.30,1.50,9.09],['c',0.06,0.72,0.00,0.69,0.51,0.42],['c',0.78,-0.36,1.44,-0.96,1.98,-1.77],['c',1.08,-1.62,1.20,-3.69,0.30,-5.55],['c',-0.81,-1.62,-2.31,-2.79,-4.08,-3.15],['z']],w:19.051,h:57.057},
|
|
72
72
|
'clefs.perc':{d:[['M',5.07,-7.44],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z'],['m',6.63,0.00],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z']],w:21,h:14.97},
|
|
73
|
+
'tab.big': { d: [['M', 20.16, -21.66], ['c', 0.24, -0.09, 0.66, 0.09, 0.78, 0.36], ['c', 0.09, 0.21, 0.09, 0.24, -0.18, 0.54], ['c', -0.78, 0.81, -1.86, 1.44, -2.94, 1.71], ['c', -0.87, 0.24, -1.71, 0.24, -2.55, 0.03], ['l', -0.06, -0.03], ['l', -0.18, 0.99], ['c', -0.33, 1.98, -0.75, 4.26, -0.96, 5.04], ['c', -0.42, 1.65, -1.26, 3.18, -2.28, 4.14], ['c', -0.57, 0.57, -1.17, 0.90, -1.86, 1.08], ['c', -0.18, 0.06, -0.33, 0.06, -0.66, 0.06], ['c', -0.54, 0.00, -0.78, -0.03, -1.23, -0.27], ['c', -0.39, -0.18, -0.66, -0.39, -1.38, -0.99], ['c', -0.30, -0.24, -0.66, -0.51, -0.75, -0.57], ['c', -0.21, -0.15, -0.27, -0.24, -0.24, -0.45], ['c', 0.06, -0.27, 0.36, -0.60, 0.60, -0.66], ['c', 0.18, -0.03, 0.33, 0.06, 0.90, 0.57], ['c', 0.48, 0.42, 0.72, 0.57, 0.93, 0.69], ['c', 0.66, 0.33, 1.38, 0.21, 1.95, -0.36], ['c', 0.63, -0.60, 1.05, -1.62, 1.23, -3.00], ['c', 0.03, -0.18, 0.09, -0.66, 0.09, -1.11], ['c', 0.09, -1.56, 0.33, -3.81, 0.57, -5.49], ['c', 0.06, -0.33, 0.09, -0.63, 0.09, -0.63], ['c', -0.03, -0.03, -0.81, -0.12, -1.02, -0.12], ['c', -0.57, 0.00, -1.32, 0.12, -1.80, 0.33], ['c', -0.87, 0.30, -1.35, 0.78, -1.50, 1.41], ['c', -0.18, 0.63, 0.09, 1.26, 0.66, 1.65], ['c', 0.12, 0.06, 0.15, 0.12, 0.18, 0.24], ['c', 0.09, 0.27, 0.06, 0.57, -0.09, 0.75], ['c', -0.03, 0.06, -0.12, 0.09, -0.27, 0.15], ['c', -0.72, 0.21, -1.44, 0.15, -2.10, -0.18], ['c', -0.54, -0.27, -0.96, -0.66, -1.20, -1.14], ['c', -0.39, -0.75, -0.33, -1.74, 0.15, -2.52], ['c', 0.27, -0.42, 0.84, -0.93, 1.41, -1.23], ['c', 1.17, -0.57, 2.88, -0.90, 4.80, -0.90], ['c', 0.69, 0.00, 0.78, 0.00, 1.08, 0.06], ['c', 0.45, 0.09, 1.11, 0.30, 2.07, 0.60], ['c', 1.47, 0.48, 1.83, 0.57, 2.55, 0.54], ['c', 1.02, -0.06, 2.04, -0.45, 2.94, -1.11], ['c', 0.12, -0.09, 0.24, -0.18, 0.27, -0.18], ['z'], ['m', -5.88, 13.05], ['c', 0.21, -0.03, 0.81, 0.00, 1.08, 0.06], ['c', 0.48, 0.12, 0.90, 0.42, 0.99, 0.69], ['c', 0.03, 0.09, 0.03, 0.15, 0.00, 0.27], ['c', 0.00, 0.09, -0.03, 0.57, -0.06, 1.08], ['c', -0.09, 2.19, -0.24, 5.76, -0.39, 8.28], ['c', -0.06, 1.53, -0.06, 1.77, 0.03, 2.01], ['c', 0.09, 0.18, 0.15, 0.24, 0.30, 0.30], ['c', 0.24, 0.12, 0.54, 0.06, 1.23, -0.27], ['c', 0.57, -0.27, 0.66, -0.30, 0.75, -0.24], ['c', 0.09, 0.06, 0.18, 0.30, 0.18, 0.45], ['c', 0.00, 0.33, -0.15, 0.51, -0.45, 0.63], ['c', -0.12, 0.03, -0.39, 0.15, -0.60, 0.27], ['c', -1.17, 0.60, -1.38, 0.69, -1.80, 0.72], ['c', -0.45, 0.03, -0.78, -0.09, -1.08, -0.39], ['c', -0.39, -0.42, -0.66, -1.20, -1.02, -3.12], ['c', -0.24, -1.23, -0.36, -2.07, -0.54, -3.75], ['l', 0.00, -0.18], ['l', -0.36, 0.45], ['c', -0.60, 0.75, -1.32, 1.59, -1.95, 2.25], ['c', -0.15, 0.18, -0.27, 0.30, -0.27, 0.33], ['c', 0.00, 0.00, 0.06, 0.09, 0.15, 0.18], ['c', 0.24, 0.33, 0.60, 0.57, 1.05, 0.69], ['c', 0.18, 0.06, 0.30, 0.06, 0.69, 0.06], ['l', 0.48, 0.03], ['l', 0.06, 0.12], ['c', 0.15, 0.27, 0.03, 0.72, -0.21, 0.90], ['c', -0.18, 0.12, -0.93, 0.27, -1.41, 0.27], ['c', -0.84, 0.00, -1.59, -0.30, -1.98, -0.84], ['l', -0.12, -0.15], ['l', -0.45, 0.42], ['c', -0.99, 0.87, -1.53, 1.32, -2.16, 1.74], ['c', -0.78, 0.51, -1.50, 0.84, -2.10, 0.93], ['c', -0.69, 0.12, -1.20, 0.03, -1.95, -0.42], ['c', -0.21, -0.12, -0.51, -0.27, -0.66, -0.36], ['c', -0.24, -0.12, -0.30, -0.18, -0.33, -0.24], ['c', -0.12, -0.27, 0.15, -0.78, 0.45, -0.93], ['c', 0.24, -0.12, 0.33, -0.09, 0.90, 0.18], ['c', 0.60, 0.30, 0.84, 0.39, 1.20, 0.36], ['c', 0.87, -0.09, 1.77, -0.69, 3.24, -2.31], ['c', 2.67, -2.85, 4.59, -5.94, 5.70, -9.15], ['c', 0.15, -0.45, 0.24, -0.63, 0.42, -0.81], ['c', 0.21, -0.24, 0.60, -0.45, 0.99, -0.51], ['z'], ['m', -3.99, 16.05], ['c', 0.18, 0.00, 0.69, -0.03, 1.17, 0.00], ['c', 3.27, 0.03, 5.37, 0.75, 6.00, 2.07], ['c', 0.45, 0.99, 0.12, 2.40, -0.81, 3.42], ['c', -0.24, 0.27, -0.57, 0.57, -0.84, 0.75], ['c', -0.09, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.00, 0.18, 0.03, 0.42, 0.09], ['c', 1.23, 0.30, 2.01, 0.81, 2.37, 1.59], ['c', 0.27, 0.54, 0.30, 1.32, 0.09, 2.10], ['c', -0.12, 0.36, -0.45, 1.05, -0.69, 1.35], ['c', -0.87, 1.17, -2.10, 1.92, -3.54, 2.25], ['c', -0.36, 0.06, -0.48, 0.06, -0.96, 0.06], ['c', -0.45, 0.00, -0.66, 0.00, -0.84, -0.03], ['c', -0.84, -0.18, -1.47, -0.51, -2.07, -1.11], ['c', -0.33, -0.33, -0.45, -0.51, -0.45, -0.63], ['c', 0.00, -0.06, 0.03, -0.15, 0.06, -0.24], ['c', 0.18, -0.33, 0.69, -0.60, 0.93, -0.48], ['c', 0.03, 0.03, 0.15, 0.12, 0.27, 0.24], ['c', 0.39, 0.42, 0.99, 0.57, 1.62, 0.45], ['c', 1.05, -0.21, 1.98, -1.02, 2.31, -2.01], ['c', 0.48, -1.53, -0.48, -2.55, -2.58, -2.67], ['c', -0.21, 0.00, -0.36, -0.03, -0.42, -0.06], ['c', -0.15, -0.09, -0.21, -0.51, -0.06, -0.78], ['c', 0.12, -0.27, 0.24, -0.33, 0.60, -0.36], ['c', 0.57, -0.06, 1.11, -0.42, 1.50, -0.99], ['c', 0.48, -0.72, 0.54, -1.59, 0.18, -2.31], ['c', -0.12, -0.21, -0.45, -0.54, -0.69, -0.69], ['c', -0.33, -0.21, -0.93, -0.45, -1.35, -0.51], ['l', -0.12, -0.03], ['l', -0.06, 0.48], ['c', -0.54, 2.94, -1.14, 6.24, -1.29, 6.75], ['c', -0.33, 1.35, -0.93, 2.61, -1.65, 3.60], ['c', -0.30, 0.36, -0.81, 0.90, -1.14, 1.14], ['c', -0.30, 0.24, -0.84, 0.48, -1.14, 0.57], ['c', -0.33, 0.09, -0.96, 0.09, -1.26, 0.03], ['c', -0.45, -0.12, -0.87, -0.39, -1.53, -0.96], ['c', -0.24, -0.15, -0.51, -0.39, -0.63, -0.48], ['c', -0.30, -0.21, -0.33, -0.33, -0.21, -0.63], ['c', 0.12, -0.18, 0.27, -0.36, 0.42, -0.45], ['c', 0.27, -0.12, 0.36, -0.09, 0.87, 0.33], ['c', 0.78, 0.60, 1.08, 0.75, 1.65, 0.72], ['c', 0.45, -0.03, 0.81, -0.21, 1.17, -0.54], ['c', 0.87, -0.90, 1.38, -2.85, 1.38, -5.37], ['c', 0.00, -0.60, 0.03, -1.11, 0.12, -2.04], ['c', 0.06, -0.69, 0.24, -2.01, 0.33, -2.58], ['c', 0.06, -0.24, 0.06, -0.42, 0.06, -0.42], ['c', 0.00, 0.00, -0.12, 0.03, -0.21, 0.09], ['c', -1.44, 0.57, -2.16, 1.65, -1.74, 2.55], ['c', 0.09, 0.15, 0.18, 0.24, 0.27, 0.33], ['c', 0.24, 0.21, 0.30, 0.27, 0.33, 0.39], ['c', 0.06, 0.24, 0.00, 0.63, -0.15, 0.78], ['c', -0.09, 0.12, -0.54, 0.21, -0.96, 0.24], ['c', -1.02, 0.03, -2.01, -0.48, -2.43, -1.32], ['c', -0.21, -0.45, -0.27, -0.90, -0.15, -1.44], ['c', 0.06, -0.27, 0.21, -0.66, 0.39, -0.93], ['c', 0.87, -1.29, 3.00, -2.22, 5.64, -2.43], ['z']], w: 19.643, h: 43.325 },
|
|
74
|
+
'tab.tiny': { d: [['M', 16.02, -17.25], ['c', 0.12, -0.09, 0.15, -0.09, 0.27, -0.09], ['c', 0.21, 0.03, 0.51, 0.30, 0.51, 0.45], ['c', 0.00, 0.06, -0.12, 0.18, -0.30, 0.36], ['c', -1.11, 1.08, -2.55, 1.59, -3.84, 1.41], ['c', -0.15, -0.03, -0.33, -0.06, -0.39, -0.09], ['c', -0.06, -0.03, -0.09, -0.03, -0.12, -0.03], ['c', 0.00, 0.00, -0.06, 0.42, -0.15, 0.93], ['c', -0.33, 2.01, -0.66, 3.69, -0.84, 4.26], ['c', -0.42, 1.41, -1.23, 2.67, -2.16, 3.33], ['c', -0.27, 0.18, -0.75, 0.42, -0.99, 0.48], ['c', -0.30, 0.09, -0.72, 0.09, -1.02, 0.06], ['c', -0.45, -0.09, -0.84, -0.33, -1.53, -0.90], ['c', -0.21, -0.18, -0.51, -0.39, -0.63, -0.48], ['c', -0.27, -0.21, -0.30, -0.24, -0.30, -0.36], ['c', 0.00, -0.12, 0.09, -0.36, 0.18, -0.45], ['c', 0.09, -0.09, 0.27, -0.18, 0.36, -0.18], ['c', 0.12, 0.00, 0.30, 0.12, 0.66, 0.45], ['c', 0.57, 0.51, 0.87, 0.69, 1.23, 0.72], ['c', 0.93, 0.06, 1.68, -0.78, 1.98, -2.37], ['c', 0.09, -0.39, 0.15, -0.75, 0.18, -1.53], ['c', 0.06, -0.99, 0.24, -2.79, 0.42, -4.05], ['c', 0.03, -0.30, 0.06, -0.57, 0.06, -0.60], ['c', 0.00, -0.06, -0.03, -0.09, -0.15, -0.12], ['c', -0.90, -0.18, -2.13, 0.06, -2.76, 0.57], ['c', -0.36, 0.30, -0.51, 0.60, -0.51, 1.02], ['c', 0.00, 0.45, 0.15, 0.75, 0.48, 0.99], ['c', 0.06, 0.06, 0.15, 0.18, 0.18, 0.24], ['c', 0.12, 0.24, 0.03, 0.63, -0.15, 0.69], ['c', -0.24, 0.12, -0.60, 0.15, -0.90, 0.15], ['c', -0.36, -0.03, -0.57, -0.09, -0.87, -0.24], ['c', -0.78, -0.36, -1.23, -1.11, -1.20, -1.92], ['c', 0.12, -1.53, 1.74, -2.49, 4.62, -2.70], ['c', 1.20, -0.09, 1.47, -0.03, 3.33, 0.57], ['c', 0.90, 0.30, 1.14, 0.36, 1.56, 0.39], ['c', 0.45, 0.00, 0.93, -0.06, 1.38, -0.21], ['c', 0.51, -0.18, 0.81, -0.33, 1.41, -0.75], ['z'], ['m', -4.68, 10.38], ['c', 0.39, -0.06, 0.84, 0.00, 1.20, 0.15], ['c', 0.24, 0.12, 0.36, 0.21, 0.45, 0.36], ['l', 0.09, 0.09], ['l', -0.06, 1.41], ['c', -0.09, 2.19, -0.18, 3.96, -0.27, 5.49], ['c', -0.03, 0.78, -0.06, 1.59, -0.06, 1.86], ['c', 0.00, 0.42, 0.00, 0.48, 0.06, 0.57], ['c', 0.06, 0.18, 0.18, 0.24, 0.36, 0.27], ['c', 0.18, 0.00, 0.39, -0.06, 0.84, -0.27], ['c', 0.45, -0.21, 0.54, -0.24, 0.63, -0.18], ['c', 0.12, 0.12, 0.15, 0.54, 0.03, 0.69], ['c', -0.03, 0.03, -0.15, 0.12, -0.27, 0.18], ['c', -0.15, 0.03, -0.30, 0.12, -0.36, 0.15], ['c', -0.87, 0.45, -1.02, 0.51, -1.26, 0.57], ['c', -0.33, 0.09, -0.60, 0.06, -0.84, -0.06], ['c', -0.42, -0.18, -0.63, -0.60, -0.87, -1.44], ['c', -0.30, -1.23, -0.57, -2.97, -0.66, -4.08], ['c', 0.00, -0.18, -0.03, -0.30, -0.03, -0.33], ['l', -0.06, 0.06], ['c', -0.18, 0.27, -1.11, 1.38, -1.68, 2.01], ['l', -0.33, 0.33], ['l', 0.06, 0.09], ['c', 0.06, 0.15, 0.27, 0.33, 0.48, 0.42], ['c', 0.27, 0.18, 0.51, 0.24, 0.96, 0.27], ['l', 0.39, 0.00], ['l', 0.03, 0.12], ['c', 0.12, 0.21, 0.03, 0.57, -0.15, 0.69], ['c', -0.03, 0.03, -0.21, 0.09, -0.36, 0.15], ['c', -0.27, 0.06, -0.39, 0.06, -0.75, 0.06], ['c', -0.48, 0.00, -0.75, -0.03, -1.08, -0.21], ['c', -0.21, -0.12, -0.51, -0.36, -0.57, -0.48], ['l', -0.03, -0.09], ['l', -0.39, 0.36], ['c', -1.47, 1.35, -2.49, 1.98, -3.42, 2.13], ['c', -0.54, 0.09, -0.96, -0.03, -1.62, -0.39], ['c', -0.21, -0.15, -0.45, -0.27, -0.54, -0.30], ['c', -0.18, -0.09, -0.21, -0.21, -0.12, -0.45], ['c', 0.06, -0.27, 0.33, -0.48, 0.54, -0.48], ['c', 0.03, 0.00, 0.27, 0.09, 0.48, 0.21], ['c', 0.48, 0.24, 0.69, 0.27, 0.99, 0.27], ['c', 0.60, -0.06, 1.17, -0.42, 2.10, -1.35], ['c', 2.22, -2.22, 4.02, -4.98, 4.95, -7.59], ['c', 0.21, -0.57, 0.30, -0.78, 0.48, -0.93], ['c', 0.15, -0.15, 0.42, -0.27, 0.66, -0.33], ['z'], ['m', -3.06, 12.84], ['c', 0.27, -0.03, 1.68, 0.00, 2.01, 0.03], ['c', 1.92, 0.18, 3.15, 0.69, 3.63, 1.50], ['c', 0.18, 0.33, 0.24, 0.51, 0.21, 0.93], ['c', 0.00, 0.45, -0.06, 0.72, -0.24, 1.11], ['c', -0.24, 0.51, -0.69, 1.02, -1.17, 1.35], ['c', -0.21, 0.15, -0.21, 0.15, -0.12, 0.18], ['c', 0.72, 0.15, 1.11, 0.30, 1.50, 0.57], ['c', 0.39, 0.24, 0.63, 0.57, 0.75, 0.96], ['c', 0.09, 0.30, 0.09, 0.96, 0.00, 1.29], ['c', -0.15, 0.57, -0.39, 1.05, -0.78, 1.50], ['c', -0.66, 0.75, -1.62, 1.32, -2.61, 1.53], ['c', -0.27, 0.06, -0.42, 0.06, -0.84, 0.06], ['c', -0.48, 0.00, -0.57, 0.00, -0.81, -0.06], ['c', -0.60, -0.18, -1.05, -0.42, -1.47, -0.81], ['c', -0.36, -0.39, -0.42, -0.51, -0.30, -0.75], ['c', 0.12, -0.21, 0.39, -0.39, 0.60, -0.39], ['c', 0.09, 0.00, 0.15, 0.03, 0.33, 0.18], ['c', 0.12, 0.12, 0.27, 0.24, 0.36, 0.27], ['c', 0.96, 0.48, 2.46, -0.33, 2.82, -1.50], ['c', 0.24, -0.81, -0.03, -1.44, -0.69, -1.77], ['c', -0.39, -0.21, -1.02, -0.33, -1.53, -0.33], ['c', -0.18, 0.00, -0.21, 0.00, -0.27, -0.09], ['c', -0.06, -0.09, -0.06, -0.30, -0.03, -0.48], ['c', 0.06, -0.18, 0.18, -0.36, 0.33, -0.36], ['c', 0.39, -0.06, 0.51, -0.09, 0.72, -0.18], ['c', 0.69, -0.36, 1.11, -1.23, 0.99, -2.01], ['c', -0.09, -0.51, -0.42, -0.90, -0.93, -1.17], ['c', -0.24, -0.12, -0.60, -0.27, -0.87, -0.30], ['c', -0.09, -0.03, -0.09, -0.03, -0.12, 0.12], ['c', 0.00, 0.09, -0.21, 1.11, -0.42, 2.25], ['c', -0.66, 3.75, -0.72, 3.99, -1.26, 5.07], ['c', -0.90, 1.89, -2.25, 2.85, -3.48, 2.61], ['c', -0.39, -0.09, -0.69, -0.27, -1.38, -0.84], ['c', -0.63, -0.51, -0.63, -0.48, -0.63, -0.60], ['c', 0.00, -0.18, 0.18, -0.48, 0.39, -0.57], ['c', 0.21, -0.12, 0.30, -0.09, 0.81, 0.33], ['c', 0.15, 0.15, 0.39, 0.30, 0.54, 0.36], ['c', 0.18, 0.12, 0.27, 0.12, 0.48, 0.15], ['c', 0.99, 0.06, 1.71, -0.78, 2.04, -2.46], ['c', 0.12, -0.66, 0.18, -1.14, 0.21, -2.22], ['c', 0.03, -1.23, 0.12, -2.25, 0.36, -3.63], ['c', 0.03, -0.24, 0.06, -0.45, 0.06, -0.48], ['c', -0.06, -0.03, -0.66, 0.27, -0.90, 0.42], ['c', -0.06, 0.06, -0.21, 0.18, -0.33, 0.30], ['c', -0.57, 0.57, -0.60, 1.35, -0.06, 1.74], ['c', 0.18, 0.12, 0.24, 0.24, 0.21, 0.51], ['c', -0.03, 0.30, -0.15, 0.42, -0.57, 0.48], ['c', -1.11, 0.24, -2.22, -0.42, -2.43, -1.38], ['c', -0.09, -0.45, 0.03, -1.02, 0.30, -1.47], ['c', 0.18, -0.24, 0.60, -0.63, 0.90, -0.84], ['c', 0.90, -0.60, 2.28, -1.02, 3.69, -1.11], ['z']], w: 15.709, h: 34.656 },
|
|
73
75
|
'timesig.common':{d:[['M',6.66,-7.83],['c',0.72,-0.06,1.41,-0.03,1.98,0.09],['c',1.20,0.27,2.34,0.96,3.09,1.92],['c',0.63,0.81,1.08,1.86,1.14,2.73],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,0.00,-0.09,-0.12,-0.24,-0.27],['c',-1.02,-1.11,-2.55,-1.68,-4.08,-1.50],['c',-1.29,0.15,-2.04,0.69,-2.40,1.74],['c',-0.36,0.93,-0.42,1.89,-0.42,5.37],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.63,1.68,1.41,2.07],['c',0.81,0.39,2.16,0.45,3.18,0.09],['c',1.29,-0.45,2.37,-1.53,3.03,-2.97],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.06,0.39,-0.42,1.38,-0.69,1.89],['c',-0.96,1.80,-2.49,2.94,-4.23,3.18],['c',-0.99,0.12,-2.58,-0.06,-3.63,-0.45],['c',-0.96,-0.36,-1.71,-0.84,-2.40,-1.50],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.90,-3.45,2.01,-4.56],['c',0.69,-0.66,1.44,-1.11,2.37,-1.47],['c',0.63,-0.24,1.47,-0.42,2.22,-0.48],['z']],w:13.038,h:15.689},
|
|
74
76
|
'timesig.cut':{d:[['M',6.24,-10.44],['c',0.09,-0.06,0.09,-0.06,0.48,-0.06],['c',0.36,0.00,0.36,0.00,0.45,0.06],['l',0.06,0.09],['l',0.00,1.23],['l',0.00,1.26],['l',0.27,0.00],['c',1.26,0.00,2.49,0.45,3.48,1.29],['c',1.05,0.87,1.80,2.28,1.89,3.48],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,-0.03,-0.45,-0.51,-0.66,-0.69],['c',-0.87,-0.69,-1.83,-1.05,-2.94,-1.11],['l',-0.42,0.00],['l',0.00,7.17],['l',0.00,7.14],['l',0.42,0.00],['c',0.69,-0.03,1.23,-0.18,1.86,-0.51],['c',1.05,-0.51,1.89,-1.47,2.46,-2.70],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.03,0.24,-0.21,0.78,-0.39,1.20],['c',-0.96,2.37,-2.94,3.90,-5.13,3.90],['l',-0.30,0.00],['l',0.00,1.26],['l',0.00,1.23],['l',-0.06,0.09],['c',-0.09,0.06,-0.09,0.06,-0.45,0.06],['c',-0.39,0.00,-0.39,0.00,-0.48,-0.06],['l',-0.06,-0.09],['l',0.00,-1.29],['l',0.00,-1.29],['l',-0.21,-0.03],['c',-1.23,-0.21,-2.31,-0.63,-3.21,-1.29],['c',-0.15,-0.09,-0.45,-0.36,-0.66,-0.57],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.93,-3.45,2.04,-4.59],['c',0.42,-0.39,0.78,-0.66,1.26,-0.93],['c',0.75,-0.45,1.65,-0.75,2.61,-0.90],['l',0.21,-0.03],['l',0.00,-1.29],['l',0.00,-1.29],['z'],['m',-0.06,10.44],['c',0.00,-5.58,0.00,-6.99,-0.03,-6.99],['c',-0.15,0.00,-0.63,0.27,-0.87,0.45],['c',-0.45,0.36,-0.75,0.93,-0.93,1.77],['c',-0.18,0.81,-0.24,1.80,-0.24,4.74],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.66,1.68,1.41,2.07],['c',0.12,0.06,0.30,0.12,0.33,0.15],['l',0.09,0.00],['l',0.00,-6.96],['z']],w:13.038,h:20.97},
|
|
75
77
|
'timesig.imperfectum':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97},
|
|
@@ -82,11 +82,13 @@ RelativeElement.prototype.getChordDim = function () {
|
|
|
82
82
|
if (!this.chordHeightAbove && !this.chordHeightBelow)
|
|
83
83
|
return null;
|
|
84
84
|
// Chords are centered, annotations are left justified.
|
|
85
|
+
// NOTE: the font reports extra space to the left and right anyway, so there is a built in margin.
|
|
85
86
|
// We add a little margin so that items can't touch - we use half the font size as the margin, so that is 1/4 on each side.
|
|
86
87
|
// if there is only one character that we're printing, use half of that margin.
|
|
87
|
-
var margin = this.dim.font.size/4;
|
|
88
|
-
if (this.c.length === 1)
|
|
89
|
-
|
|
88
|
+
// var margin = this.dim.font.size/4;
|
|
89
|
+
// if (this.c.length === 1)
|
|
90
|
+
// margin = margin / 2;
|
|
91
|
+
var margin = 0;
|
|
90
92
|
|
|
91
93
|
var offset = this.type === "chord" ? this.realWidth/2 : 0;
|
|
92
94
|
var left = this.x - offset - margin;
|
|
@@ -174,7 +174,11 @@ Renderer.prototype.calcY = function(ofs) {
|
|
|
174
174
|
|
|
175
175
|
Renderer.prototype.moveY = function (em, numLines) {
|
|
176
176
|
if (numLines === undefined) numLines = 1;
|
|
177
|
-
this.y += em*numLines;
|
|
177
|
+
this.y += em * numLines;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
Renderer.prototype.absolutemoveY = function (y) {
|
|
181
|
+
this.y = y;
|
|
178
182
|
};
|
|
179
183
|
|
|
180
184
|
module.exports = Renderer;
|
|
@@ -38,7 +38,11 @@ function drawAbsolute(renderer, params, bartop, selectables, staffPos) {
|
|
|
38
38
|
selectables.add(params, g, false, staffPos);
|
|
39
39
|
} else {
|
|
40
40
|
params.elemset.push(g);
|
|
41
|
-
|
|
41
|
+
var isSelectable = false;
|
|
42
|
+
if (params.type === 'note' || params.type === 'tabNumber') {
|
|
43
|
+
isSelectable = true;
|
|
44
|
+
}
|
|
45
|
+
selectables.add(params, g, isSelectable, staffPos);
|
|
42
46
|
}
|
|
43
47
|
} else if (params.elemset.length > 0)
|
|
44
48
|
selectables.add(params, params.elemset[0], params.type === 'note', staffPos);
|
package/src/write/draw/draw.js
CHANGED
|
@@ -4,12 +4,11 @@ var nonMusic = require('./non-music');
|
|
|
4
4
|
var spacing = require('../abc_spacing');
|
|
5
5
|
var Selectables = require('./selectables');
|
|
6
6
|
|
|
7
|
-
function draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber) {
|
|
7
|
+
function draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber, lineOffset) {
|
|
8
8
|
var selectables = new Selectables(renderer.paper, selectTypes, tuneNumber);
|
|
9
9
|
renderer.moveY(renderer.padding.top);
|
|
10
10
|
nonMusic(renderer, abcTune.topText, selectables);
|
|
11
11
|
renderer.moveY(renderer.spacing.music);
|
|
12
|
-
|
|
13
12
|
var staffgroups = [];
|
|
14
13
|
for (var line = 0; line < abcTune.lines.length; line++) {
|
|
15
14
|
classes.incrLine();
|
|
@@ -20,8 +19,8 @@ function draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, se
|
|
|
20
19
|
}
|
|
21
20
|
if (staffgroups.length >= 1)
|
|
22
21
|
addStaffPadding(renderer, renderer.spacing.staffSeparation, staffgroups[staffgroups.length - 1], abcLine.staffGroup);
|
|
23
|
-
var staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables);
|
|
24
|
-
staffgroup.line = line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.
|
|
22
|
+
var staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables,line);
|
|
23
|
+
staffgroup.line = lineOffset+line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.
|
|
25
24
|
staffgroups.push(staffgroup);
|
|
26
25
|
} else if (abcLine.nonMusic) {
|
|
27
26
|
nonMusic(renderer, abcLine.nonMusic, selectables);
|
|
@@ -35,8 +34,8 @@ function draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, se
|
|
|
35
34
|
return { staffgroups: staffgroups, selectables: selectables.getElements() };
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
function engraveStaffLine(renderer, staffGroup, selectables) {
|
|
39
|
-
drawStaffGroup(renderer, staffGroup, selectables);
|
|
37
|
+
function engraveStaffLine(renderer, staffGroup, selectables,lineNumber) {
|
|
38
|
+
drawStaffGroup(renderer, staffGroup, selectables,lineNumber);
|
|
40
39
|
var height = staffGroup.height * spacing.STEP;
|
|
41
40
|
renderer.y += height;
|
|
42
41
|
return staffGroup;
|
|
@@ -4,7 +4,9 @@ var renderText = require('./text');
|
|
|
4
4
|
function nonMusic(renderer, obj, selectables) {
|
|
5
5
|
for (var i = 0; i < obj.rows.length; i++) {
|
|
6
6
|
var row = obj.rows[i];
|
|
7
|
-
if (row.
|
|
7
|
+
if (row.absmove) {
|
|
8
|
+
renderer.absolutemoveY(row.absmove);
|
|
9
|
+
} else if (row.move) {
|
|
8
10
|
renderer.moveY(row.move);
|
|
9
11
|
} else if (row.text) {
|
|
10
12
|
var x = row.left ? row.left : 0;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var sprintf = require('./sprintf');
|
|
2
|
+
var roundNumber = require("./round-number");
|
|
3
|
+
|
|
4
|
+
function printLine(renderer, x1, x2, y , klass, name ,dy ) {
|
|
5
|
+
if (!dy ) dy = 0.35;
|
|
6
|
+
var fill = renderer.foregroundColor;
|
|
7
|
+
x1 = roundNumber(x1);
|
|
8
|
+
x2 = roundNumber(x2);
|
|
9
|
+
var y1 = roundNumber(y - dy);
|
|
10
|
+
var y2 = roundNumber(y + dy);
|
|
11
|
+
var pathString = sprintf("M %f %f L %f %f L %f %f L %f %f z", x1, y1, x2, y1,
|
|
12
|
+
x2, y2, x1, y2);
|
|
13
|
+
var options = { path: pathString, stroke: "none", fill: fill };
|
|
14
|
+
if (name)
|
|
15
|
+
options['data-name'] = name;
|
|
16
|
+
if (klass)
|
|
17
|
+
options['class'] = klass;
|
|
18
|
+
var ret = renderer.paper.pathToBack(options);
|
|
19
|
+
|
|
20
|
+
return ret;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = printLine;
|
|
24
|
+
|
|
@@ -9,7 +9,7 @@ function drawRelativeElement(renderer, params, bartop) {
|
|
|
9
9
|
var y = renderer.calcY(params.pitch);
|
|
10
10
|
switch(params.type) {
|
|
11
11
|
case "symbol":
|
|
12
|
-
if (params.c===null) return null;
|
|
12
|
+
if (params.c === null) return null;
|
|
13
13
|
var klass = "symbol";
|
|
14
14
|
if (params.klass) klass += " " + params.klass;
|
|
15
15
|
params.graphelem = printSymbol(renderer, params.x, params.pitch, params.c, {
|
|
@@ -22,7 +22,19 @@ function drawRelativeElement(renderer, params, bartop) {
|
|
|
22
22
|
});
|
|
23
23
|
break;
|
|
24
24
|
case "debug":
|
|
25
|
-
params.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: ""+params.c, type: "debugfont", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim}, false);
|
|
25
|
+
params.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: "" + params.c, type: "debugfont", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim }, false);
|
|
26
|
+
break;
|
|
27
|
+
case "tabNumber":
|
|
28
|
+
var hAnchor = "middle";
|
|
29
|
+
var tabFont = "tabnumberfont";
|
|
30
|
+
var tabClass = 'tab-number';
|
|
31
|
+
if (params.isGrace) {
|
|
32
|
+
tabFont = "tabgracefont";
|
|
33
|
+
y += 2.5;
|
|
34
|
+
tabClass = 'tab-grace'
|
|
35
|
+
}
|
|
36
|
+
params.graphelem = renderText(renderer, { x: params.x, y: y, text: "" + params.c, type: tabFont, klass: renderer.controller.classes.generate(tabClass), anchor: hAnchor, centerVertically: false, dim: params.dim , cursor: 'default'}, false);
|
|
37
|
+
break;
|
|
26
38
|
case "barNumber":
|
|
27
39
|
params.graphelem = renderText(renderer, { x: params.x, y: y, text: ""+params.c, type: "measurefont", klass: renderer.controller.classes.generate('bar-number'), anchor: "middle", dim: params.dim, name: "bar-number"}, true);
|
|
28
40
|
break;
|
|
@@ -10,9 +10,9 @@ function Selectables(paper, selectTypes, tuneNumber) {
|
|
|
10
10
|
|
|
11
11
|
Selectables.prototype.getElements = function () {
|
|
12
12
|
return this.elements;
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
|
|
15
|
-
Selectables.prototype.add = function (absEl, svgEl,
|
|
15
|
+
Selectables.prototype.add = function (absEl, svgEl, isNoteOrTabNumber, staffPos) {
|
|
16
16
|
if (!this.canSelect(absEl))
|
|
17
17
|
return;
|
|
18
18
|
var params;
|
|
@@ -21,7 +21,7 @@ Selectables.prototype.add = function (absEl, svgEl, isNote, staffPos) {
|
|
|
21
21
|
else
|
|
22
22
|
params = { selectable: true, tabindex: 0, "data-index": this.elements.length};
|
|
23
23
|
this.paper.setAttributeOnElement(svgEl, params);
|
|
24
|
-
var sel = { absEl: absEl, svgEl: svgEl, isDraggable:
|
|
24
|
+
var sel = { absEl: absEl, svgEl: svgEl, isDraggable: isNoteOrTabNumber };
|
|
25
25
|
if (staffPos !== undefined)
|
|
26
26
|
sel.staffPos = staffPos;
|
|
27
27
|
this.elements.push(sel);
|
|
@@ -36,8 +36,11 @@ Selectables.prototype.canSelect = function (absEl) {
|
|
|
36
36
|
if (this.selectTypes === true)
|
|
37
37
|
return true;
|
|
38
38
|
if (this.selectTypes === undefined) {
|
|
39
|
-
// by default, only notes can be clicked.
|
|
40
|
-
|
|
39
|
+
// by default, only notes and tab numbers can be clicked.
|
|
40
|
+
if (absEl.abcelem.el_type === 'note' || absEl.abcelem.el_type === 'tabNumber') {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
41
44
|
}
|
|
42
45
|
return this.selectTypes.indexOf(absEl.abcelem.el_type) >= 0;
|
|
43
46
|
};
|
|
@@ -49,7 +52,7 @@ Selectables.prototype.wrapSvgEl = function(abcelem, el) {
|
|
|
49
52
|
elemset: [el],
|
|
50
53
|
highlight: highlight,
|
|
51
54
|
unhighlight: unhighlight
|
|
52
|
-
}
|
|
55
|
+
};
|
|
53
56
|
this.add(absEl, el, false);
|
|
54
57
|
};
|
|
55
58
|
|
|
@@ -4,8 +4,9 @@ var drawVoice = require('./voice');
|
|
|
4
4
|
var printStaff = require('./staff');
|
|
5
5
|
var printDebugBox = require('./debug-box');
|
|
6
6
|
var printStem = require('./print-stem');
|
|
7
|
+
var nonMusic = require('./non-music');
|
|
7
8
|
|
|
8
|
-
function drawStaffGroup(renderer, params, selectables) {
|
|
9
|
+
function drawStaffGroup(renderer, params, selectables,lineNumber) {
|
|
9
10
|
// We enter this method with renderer.y pointing to the topmost coordinate that we're allowed to draw.
|
|
10
11
|
// All of the children that will be drawn have a relative "pitch" set, where zero is the first ledger line below the staff.
|
|
11
12
|
// renderer.y will be offset at the beginning of each staff by the amount required to make the relative pitch work.
|
|
@@ -14,7 +15,7 @@ function drawStaffGroup(renderer, params, selectables) {
|
|
|
14
15
|
var colorIndex;
|
|
15
16
|
|
|
16
17
|
// An invisible marker is useful to be able to find where each system starts.
|
|
17
|
-
addInvisibleMarker(renderer,"abcjs-top-of-system");
|
|
18
|
+
addInvisibleMarker(renderer, "abcjs-top-of-system");
|
|
18
19
|
|
|
19
20
|
var startY = renderer.y; // So that it can be restored after we're done.
|
|
20
21
|
// Set the absolute Y position for each staff here, so the voice drawing below can just use if.
|
|
@@ -28,7 +29,7 @@ function drawStaffGroup(renderer, params, selectables) {
|
|
|
28
29
|
boxAllElements(renderer, params.voices, staff1.voices);
|
|
29
30
|
}
|
|
30
31
|
if (renderer.showDebug.indexOf("grid") >= 0) {
|
|
31
|
-
renderer.paper.dottedLine({x1: renderer.padding.left, x2: renderer.padding.left+renderer.controller.width, y1: startY, y2: startY, stroke: "#0000ff"})
|
|
32
|
+
renderer.paper.dottedLine({x1: renderer.padding.left, x2: renderer.padding.left+renderer.controller.width, y1: startY, y2: startY, stroke: "#0000ff"});
|
|
32
33
|
printDebugBox(renderer,
|
|
33
34
|
{ x: renderer.padding.left,
|
|
34
35
|
y: renderer.calcY(staff1.originalTop),
|
|
@@ -68,20 +69,40 @@ function drawStaffGroup(renderer, params, selectables) {
|
|
|
68
69
|
var topLine; // these are to connect multiple staves. We need to remember where they are.
|
|
69
70
|
var bottomLine;
|
|
70
71
|
|
|
72
|
+
var linePitch = 2;
|
|
71
73
|
var bartop = 0;
|
|
72
74
|
for (var i=0;i<params.voices.length;i++) {
|
|
73
75
|
var staff = params.voices[i].staff;
|
|
74
|
-
|
|
76
|
+
var tabName = params.voices[i].tabNameInfos;
|
|
77
|
+
renderer.y = staff.absoluteY ;
|
|
75
78
|
renderer.controller.classes.incrVoice();
|
|
76
79
|
//renderer.y = staff.y;
|
|
77
80
|
// offset for starting the counting at middle C
|
|
78
81
|
if (!params.voices[i].duplicate) {
|
|
79
82
|
// renderer.moveY(spacing.STEP, staff.top);
|
|
80
83
|
if (!topLine) topLine = renderer.calcY(10);
|
|
81
|
-
bottomLine = renderer.calcY(
|
|
84
|
+
bottomLine = renderer.calcY(linePitch);
|
|
82
85
|
if (staff.lines !== 0) {
|
|
86
|
+
if (staff.linePitch) {
|
|
87
|
+
linePitch = staff.linePitch;
|
|
88
|
+
}
|
|
83
89
|
renderer.controller.classes.newMeasure();
|
|
84
|
-
printStaff(renderer, params.startx, params.w, staff.lines);
|
|
90
|
+
var lines = printStaff(renderer, params.startx, params.w, staff.lines, staff.linePitch, staff.dy);
|
|
91
|
+
bottomLine = lines[1];
|
|
92
|
+
staff.bottomLine = bottomLine;
|
|
93
|
+
staff.topLine = lines[0];
|
|
94
|
+
// rework bartop when tabs are present with current staff
|
|
95
|
+
if (staff.hasTab) {
|
|
96
|
+
// do not link to staff above (ugly looking)
|
|
97
|
+
bartop = staff.topLine;
|
|
98
|
+
}
|
|
99
|
+
if (staff.hasStaff) {
|
|
100
|
+
// this is a tab
|
|
101
|
+
bartop = staff.hasStaff.topLine;
|
|
102
|
+
params.voices[i].barto = true;
|
|
103
|
+
params.voices[i].topLine = topLine;
|
|
104
|
+
}
|
|
105
|
+
|
|
85
106
|
}
|
|
86
107
|
printBrace(renderer, staff.absoluteY, params.brace, i, selectables);
|
|
87
108
|
printBrace(renderer, staff.absoluteY, params.bracket, i, selectables);
|
|
@@ -91,9 +112,21 @@ function drawStaffGroup(renderer, params, selectables) {
|
|
|
91
112
|
zero: renderer.y,
|
|
92
113
|
height: params.height*spacing.STEP
|
|
93
114
|
});
|
|
115
|
+
var tabNameHeight = 0;
|
|
116
|
+
if (tabName) {
|
|
117
|
+
// print tab infos on staffBottom
|
|
118
|
+
var r = { rows: [] };
|
|
119
|
+
r.rows.push({ absmove: bottomLine + 2 });
|
|
120
|
+
var leftMargin = 8;
|
|
121
|
+
r.rows.push({ left: params.startx+leftMargin, text: tabName.name, font: 'tablabelfont', klass: 'text instrument-name', anchor: 'start' });
|
|
122
|
+
r.rows.push({ move: tabName.textSize.height });
|
|
123
|
+
nonMusic(renderer, r);
|
|
124
|
+
tabNameHeight = tabName.textSize.height;
|
|
125
|
+
}
|
|
126
|
+
|
|
94
127
|
renderer.controller.classes.newMeasure();
|
|
95
128
|
if (!params.voices[i].duplicate) {
|
|
96
|
-
|
|
129
|
+
bartop = renderer.calcY(2 + tabNameHeight); // This connects the bar lines between two different staves.
|
|
97
130
|
// if (staff.bottom < 0)
|
|
98
131
|
// renderer.moveY(spacing.STEP, -staff.bottom);
|
|
99
132
|
}
|
|
@@ -101,7 +134,10 @@ function drawStaffGroup(renderer, params, selectables) {
|
|
|
101
134
|
renderer.controller.classes.newMeasure();
|
|
102
135
|
|
|
103
136
|
// connect all the staves together with a vertical line
|
|
104
|
-
|
|
137
|
+
var staffSize = params.staffs.length;
|
|
138
|
+
if (staffSize > 1) {
|
|
139
|
+
topLine = params.staffs[0].topLine;
|
|
140
|
+
bottomLine = params.staffs[staffSize - 1].bottomLine;
|
|
105
141
|
printStem(renderer, params.startx, 0.6, topLine, bottomLine, null);
|
|
106
142
|
}
|
|
107
143
|
renderer.y = startY;
|
|
@@ -1,24 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
var roundNumber = require("./round-number");
|
|
1
|
+
var printLine = require('./print-line');
|
|
3
2
|
|
|
4
|
-
function printStaffLine(renderer, x1,x2, pitch, klass, name) {
|
|
5
|
-
var dy = 0.35;
|
|
6
|
-
var fill = renderer.foregroundColor;
|
|
3
|
+
function printStaffLine(renderer, x1,x2, pitch, klass, name , dy) {
|
|
7
4
|
var y = renderer.calcY(pitch);
|
|
8
|
-
|
|
9
|
-
x2 = roundNumber(x2);
|
|
10
|
-
var y1 = roundNumber(y-dy);
|
|
11
|
-
var y2 = roundNumber(y+dy);
|
|
12
|
-
var pathString = sprintf("M %f %f L %f %f L %f %f L %f %f z", x1, y1, x2, y1,
|
|
13
|
-
x2, y2, x1, y2);
|
|
14
|
-
var options = {path:pathString, stroke:"none", fill:fill};
|
|
15
|
-
if (name)
|
|
16
|
-
options['data-name'] = name;
|
|
17
|
-
if (klass)
|
|
18
|
-
options['class'] = klass;
|
|
19
|
-
var ret = renderer.paper.pathToBack(options);
|
|
20
|
-
|
|
21
|
-
return ret;
|
|
5
|
+
return printLine(renderer,x1,x2,y,klass,name,dy);
|
|
22
6
|
}
|
|
23
7
|
|
|
24
8
|
module.exports = printStaffLine;
|
package/src/write/draw/staff.js
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
var printStaffLine = require('./staff-line');
|
|
2
2
|
|
|
3
|
-
function printStaff(renderer, startx, endx, numLines) {
|
|
3
|
+
function printStaff(renderer, startx, endx, numLines , linePitch , dy) {
|
|
4
4
|
var klass = "abcjs-top-line";
|
|
5
|
+
var pitch = 2;
|
|
6
|
+
if (linePitch) {
|
|
7
|
+
pitch = linePitch;
|
|
8
|
+
}
|
|
5
9
|
renderer.paper.openGroup({ prepend: true, klass: renderer.controller.classes.generate("abcjs-staff") });
|
|
6
10
|
// If there is one line, it is the B line. Otherwise, the bottom line is the E line.
|
|
11
|
+
var firstYLine = 0;
|
|
12
|
+
var lastYLine = 0;
|
|
7
13
|
if (numLines === 1) {
|
|
8
14
|
printStaffLine(renderer, startx,endx,6, klass);
|
|
9
15
|
} else {
|
|
16
|
+
|
|
10
17
|
for (var i = numLines - 1; i >= 0; i--) {
|
|
11
|
-
|
|
18
|
+
var curpitch = (i + 1) * pitch;
|
|
19
|
+
lastYLine = renderer.calcY(curpitch);
|
|
20
|
+
if (firstYLine == 0) {
|
|
21
|
+
firstYLine = lastYLine;
|
|
22
|
+
}
|
|
23
|
+
printStaffLine(renderer, startx, endx, curpitch, klass , null , dy) ;
|
|
12
24
|
klass = undefined;
|
|
13
25
|
}
|
|
14
26
|
}
|
|
15
27
|
renderer.paper.closeGroup();
|
|
28
|
+
return [firstYLine,lastYLine];
|
|
16
29
|
}
|
|
17
30
|
|
|
18
31
|
module.exports = printStaff;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var sprintf = require('./sprintf');
|
|
2
|
+
var roundNumber = require('./round-number');
|
|
3
|
+
var printStem = require('./print-stem');
|
|
4
|
+
|
|
5
|
+
function TabLine(renderer , klass , dx , name) {
|
|
6
|
+
this.renderer = renderer;
|
|
7
|
+
if (!dx) dx = 0.35; // default
|
|
8
|
+
this.dx = dx;
|
|
9
|
+
this.klass = klass;
|
|
10
|
+
this.name = name;
|
|
11
|
+
var fill = renderer.foregroundColor;
|
|
12
|
+
this.options = { stroke: "none", fill: fill };
|
|
13
|
+
if (name)
|
|
14
|
+
this.options['data-name'] = name;
|
|
15
|
+
if (klass)
|
|
16
|
+
this.options['class'] = klass;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
TabLine.prototype.printVertical = function (y1, y2, x) {
|
|
20
|
+
return printStem(this.renderer,
|
|
21
|
+
x,
|
|
22
|
+
this.dx,
|
|
23
|
+
y1,
|
|
24
|
+
y2,
|
|
25
|
+
this.options.klass,
|
|
26
|
+
this.options.name);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
TabLine.prototype.printHorizontal = function (x1, x2, y) {
|
|
30
|
+
x1 = roundNumber(x1);
|
|
31
|
+
x2 = roundNumber(x2);
|
|
32
|
+
var y1 = roundNumber(y - this.dx);
|
|
33
|
+
var y2 = roundNumber(y + this.dx);
|
|
34
|
+
this.options.path = sprintf("M %f %f L %f %f L %f %f L %f %f z", x1, y1, x2, y1,
|
|
35
|
+
x2, y2, x1, y2);
|
|
36
|
+
return this.renderer.paper.pathToBack(this.options);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = TabLine;
|
|
40
|
+
|
package/src/write/draw/text.js
CHANGED
|
@@ -23,6 +23,9 @@ function renderText(renderer, params, alreadyInGroup) {
|
|
|
23
23
|
console.log("Debug msg: " + params.text);
|
|
24
24
|
hash.attr.stroke = "#ff0000";
|
|
25
25
|
}
|
|
26
|
+
if (params.cursor) {
|
|
27
|
+
hash.attr.cursor = params.cursor;
|
|
28
|
+
}
|
|
26
29
|
|
|
27
30
|
var text = params.text.replace(/\n\n/g, "\n \n");
|
|
28
31
|
text = text.replace(/^\n/, "\xA0\n");
|
package/src/write/draw/voice.js
CHANGED
|
@@ -33,6 +33,14 @@ function drawVoice(renderer, params, bartop, selectables, staffPos) {
|
|
|
33
33
|
// child.elemset = drawTempo(renderer, child);
|
|
34
34
|
// break;
|
|
35
35
|
default:
|
|
36
|
+
if (params.staff.isTabStaff) {
|
|
37
|
+
child.invisible = false;
|
|
38
|
+
if ( child.type == 'bar' ) {
|
|
39
|
+
if (child.abcelem.lastBar) {
|
|
40
|
+
bartop = params.topLine;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
36
44
|
drawAbsolute(renderer, child,(params.barto || i === params.children.length - 1) ? bartop : 0, selectables, staffPos);
|
|
37
45
|
}
|
|
38
46
|
if (child.type === 'note' || isNonSpacerRest(child))
|
|
@@ -75,7 +83,7 @@ function drawVoice(renderer, params, bartop, selectables, staffPos) {
|
|
|
75
83
|
child.elemset = drawTie(renderer, child, params.startx + 10, width, selectables);
|
|
76
84
|
break;
|
|
77
85
|
default:
|
|
78
|
-
console.log(child)
|
|
86
|
+
console.log(child);
|
|
79
87
|
drawAbsolute(renderer, child, params.startx + 10, width, selectables, staffPos);
|
|
80
88
|
}
|
|
81
89
|
}
|
|
@@ -5,9 +5,9 @@ function formatJazzChord(chordString) {
|
|
|
5
5
|
for (var i = 0; i < lines.length; i++) {
|
|
6
6
|
var chord = lines[i];
|
|
7
7
|
// If the chord isn't in a recognizable format then just skip the formatting.
|
|
8
|
-
var reg = chord.match(
|
|
8
|
+
var reg = chord.match(/^([ABCDEFG][♯♭]?)?([^\/]+)?(\/[ABCDEFG][#b]?)?/);
|
|
9
9
|
if (reg)
|
|
10
|
-
lines[i] = reg[1] + "\x03" + (reg[2]?reg[2]:'') + "\x03" + (reg[3]?reg[3]:'');
|
|
10
|
+
lines[i] = (reg[1]?reg[1]:'') + "\x03" + (reg[2]?reg[2]:'') + "\x03" + (reg[3]?reg[3]:'');
|
|
11
11
|
}
|
|
12
12
|
return lines.join("\n");
|
|
13
13
|
}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
var layoutVoiceElements = require('./VoiceElements');
|
|
2
2
|
|
|
3
|
+
function checkLastBarX(voices) {
|
|
4
|
+
var maxX = 0;
|
|
5
|
+
for (var i = 0; i < voices.length; i++) {
|
|
6
|
+
var curVoice = voices[i];
|
|
7
|
+
if (curVoice.children.length > 0) {
|
|
8
|
+
var lastChild = curVoice.children.length - 1;
|
|
9
|
+
var maxChild = curVoice.children[lastChild];
|
|
10
|
+
if (maxChild.abcelem.el_type === 'bar') {
|
|
11
|
+
var barX = maxChild.children[0].x;
|
|
12
|
+
if (barX > maxX) {
|
|
13
|
+
maxX = barX;
|
|
14
|
+
} else {
|
|
15
|
+
maxChild.children[0].x = maxX;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
3
22
|
var layoutStaffGroup = function(spacing, renderer, debug, staffGroup, leftEdge) {
|
|
4
23
|
var epsilon = 0.0000001; // Fudging for inexactness of floating point math.
|
|
5
24
|
var spacingunits = 0; // number of times we will have ended up using the spacing distance (as opposed to fixed width distances)
|
|
@@ -94,6 +113,9 @@ var layoutStaffGroup = function(spacing, renderer, debug, staffGroup, leftEdge)
|
|
|
94
113
|
spacingunit=layoutVoiceElements.getSpacingUnits(staffGroup.voices[i]);
|
|
95
114
|
}
|
|
96
115
|
}
|
|
116
|
+
|
|
117
|
+
// adjust lastBar when needed (multi staves)
|
|
118
|
+
checkLastBarX(staffGroup.voices);
|
|
97
119
|
//console.log("greatest remaining",spacingunit,x);
|
|
98
120
|
spacingunits+=spacingunit;
|
|
99
121
|
staffGroup.setWidth(x);
|
|
@@ -118,7 +140,7 @@ function isSameStaff(voice1, voice2) {
|
|
|
118
140
|
return false;
|
|
119
141
|
if (!voice2 || !voice2.staff || !voice2.staff.voices || voice2.staff.voices.length === 0)
|
|
120
142
|
return false;
|
|
121
|
-
return (voice1.staff.voices[0] === voice2.staff.voices[0])
|
|
143
|
+
return (voice1.staff.voices[0] === voice2.staff.voices[0]);
|
|
122
144
|
}
|
|
123
145
|
|
|
124
146
|
module.exports = layoutStaffGroup;
|
|
@@ -51,7 +51,8 @@ function moveDecorations(beam) {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function placeInLane(rightMost, relElem) {
|
|
54
|
-
// These items are centered so figure the coordinates accordingly
|
|
54
|
+
// These items are centered so figure the coordinates accordingly.
|
|
55
|
+
// The font reports some extra space so the margin is built in.
|
|
55
56
|
var xCoords = relElem.getChordDim();
|
|
56
57
|
if (xCoords) {
|
|
57
58
|
for (var i = 0; i < rightMost.length; i++) {
|