abcjs 6.4.1 → 6.4.3

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 (48) hide show
  1. package/LICENSE.md +1 -1
  2. package/RELEASE.md +46 -0
  3. package/dist/abcjs-basic-min.js +2 -2
  4. package/dist/abcjs-basic-min.js.LICENSE +1 -1
  5. package/dist/abcjs-basic.js +1271 -1179
  6. package/dist/abcjs-basic.js.map +1 -1
  7. package/dist/abcjs-plugin-min.js +2 -2
  8. package/dist/abcjs-plugin-min.js.LICENSE +1 -1
  9. package/index.js +1 -1
  10. package/license.js +1 -1
  11. package/package.json +1 -1
  12. package/plugin.js +1 -1
  13. package/src/api/abc_tunebook.js +1 -2
  14. package/src/api/abc_tunebook_svg.js +0 -1
  15. package/src/data/abc_tune.js +2 -0
  16. package/src/midi/abc_midi_create.js +22 -7
  17. package/src/parse/abc_common.js +3 -11
  18. package/src/parse/abc_parse.js +1 -1
  19. package/src/parse/abc_parse_directive.js +44 -3
  20. package/src/parse/abc_parse_header.js +6 -4
  21. package/src/parse/abc_parse_key_voice.js +10 -6
  22. package/src/parse/abc_parse_music.js +54 -22
  23. package/src/parse/tune-builder.js +675 -643
  24. package/src/synth/abc_midi_flattener.js +3 -1
  25. package/src/synth/abc_midi_sequencer.js +18 -3
  26. package/src/synth/chord-track.js +90 -18
  27. package/src/synth/create-synth-control.js +1 -2
  28. package/src/tablatures/abc_tablatures.js +184 -0
  29. package/src/tablatures/instruments/string-patterns.js +266 -268
  30. package/src/tablatures/instruments/string-tablature.js +38 -35
  31. package/src/tablatures/instruments/tab-note.js +186 -181
  32. package/src/tablatures/instruments/tab-notes.js +30 -35
  33. package/src/tablatures/instruments/tab-string.js +43 -25
  34. package/src/tablatures/render/tab-absolute-elements.js +303 -0
  35. package/src/tablatures/render/tab-renderer.js +244 -0
  36. package/src/test/abc_parser_lint.js +2 -3
  37. package/src/write/creation/abstract-engraver.js +1 -1
  38. package/src/write/creation/elements/tie-element.js +26 -0
  39. package/src/write/engraver-controller.js +1 -1
  40. package/src/write/layout/set-upper-and-lower-elements.js +8 -0
  41. package/test.js +1 -1
  42. package/types/index.d.ts +2 -2
  43. package/version.js +1 -1
  44. package/src/api/abc_tablatures.js +0 -184
  45. package/src/tablatures/instruments/tab-string-patterns.js +0 -23
  46. package/src/tablatures/tab-absolute-elements.js +0 -301
  47. package/src/tablatures/tab-common.js +0 -29
  48. package/src/tablatures/tab-renderer.js +0 -259
@@ -6,15 +6,16 @@
6
6
  */
7
7
 
8
8
  function StringTablature(numLines, lineSpace) {
9
- this.numLines = numLines;
10
- this.lineSpace = lineSpace;
11
- this.verticalSize = this.numLines * this.lineSpace;
12
- var pitch = 3;
13
- this.bar = {
14
- pitch: pitch,
15
- pitch2: lineSpace * numLines,
16
- height: 5,
17
- };
9
+ //console.log("INIT StringTablature constructor")
10
+ this.numLines = numLines;
11
+ this.lineSpace = lineSpace;
12
+ this.verticalSize = this.numLines * this.lineSpace;
13
+ var pitch = 3;
14
+ this.bar = {
15
+ pitch: pitch,
16
+ pitch2: lineSpace * numLines,
17
+ height: 5,
18
+ };
18
19
  }
19
20
 
20
21
  /**
@@ -22,35 +23,37 @@ function StringTablature(numLines, lineSpace) {
22
23
  * @param {} line
23
24
  */
24
25
  StringTablature.prototype.bypass = function (line) {
25
- var voices = line.staffGroup.voices;
26
- if (voices.length > 0) {
27
- if (voices[0].isPercussion) return true;
28
- }
29
- return false;
30
- };
26
+ //console.log("RENDER StringTablature bypass")
27
+ var voices = line.staffGroup.voices;
28
+ if (voices.length > 0) {
29
+ if (voices[0].isPercussion) return true;
30
+ }
31
+ return false;
32
+ };
31
33
 
32
34
 
33
35
  StringTablature.prototype.setRelative = function (child, relative, first) {
34
- switch (child.type) {
35
- case 'bar':
36
- relative.pitch = this.bar.pitch;
37
- relative.pitch2 = this.bar.pitch2;
38
- relative.height = this.height;
39
- break;
40
- case 'symbol':
41
- var top = this.bar.pitch2 / 2;
42
- if (child.name == 'dots.dot') {
43
- if (first) {
44
- relative.pitch = top;
45
- return false;
46
- } else {
47
- relative.pitch = top + this.lineSpace;
48
- return true;
49
- }
50
- }
51
- break;
52
- }
53
- return first;
36
+ //console.log("RENDER StringTablature setRelative")
37
+ switch (child.type) {
38
+ case 'bar':
39
+ relative.pitch = this.bar.pitch;
40
+ relative.pitch2 = this.bar.pitch2;
41
+ relative.height = this.height;
42
+ break;
43
+ case 'symbol':
44
+ var top = this.bar.pitch2 / 2;
45
+ if (child.name == 'dots.dot') {
46
+ if (first) {
47
+ relative.pitch = top;
48
+ return false;
49
+ } else {
50
+ relative.pitch = top + this.lineSpace;
51
+ return true;
52
+ }
53
+ }
54
+ break;
55
+ }
56
+ return first;
54
57
  };
55
58
 
56
59
  module.exports = StringTablature;
@@ -1,216 +1,221 @@
1
- var {noteToMidi, midiToNote} = require('../../synth/note-to-midi');
1
+ var { noteToMidi, midiToNote } = require('../../synth/note-to-midi');
2
2
 
3
3
  /**
4
4
  *
5
5
  * Note structure for Tabs
6
6
  *
7
7
  */
8
- var notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
9
8
 
10
9
 
11
10
  function TabNote(note, clefTranspose) {
12
- var pitch = noteToMidi(note)
13
- if (clefTranspose)
14
- pitch += clefTranspose
15
- var newNote = midiToNote(pitch);
16
- var isFlat = false;
17
- var isSharp = false;
18
- var isAltered = false;
19
- var natural = null;
20
- var quarter = null;
21
- var isDouble = false;
22
- var acc = 0;
23
-
24
- if (note.startsWith('_')) {
25
- isFlat = true;
26
- acc = -1;
27
- // check quarter flat
28
- if (note[1] == '/') {
29
- isFlat = false;
30
- quarter = "v";
31
- acc = 0;
32
- } else if (note[1] == '_') {
33
- // double flat
34
- isDouble = true;
35
- acc -= 1;
36
- }
37
- } else if (note.startsWith('^')) {
38
- isSharp = true;
39
- acc = +1;
40
- // check quarter sharp
41
- if (note[1] == '/') {
42
- isSharp = false;
43
- quarter = "^";
44
- acc = 0;
45
- } else if (note[1] == '^') {
46
- // double sharp
47
- isDouble = true;
48
- acc += 1;
49
- }
50
- } else if (note.startsWith('=')) {
51
- natural = true;
52
- acc = 0;
53
- }
54
- isAltered = isFlat || isSharp || (quarter != null);
55
- if (isAltered || natural) {
56
- if ((quarter != null) || (isDouble)) {
57
- newNote = note.slice(2);
58
- } else {
59
- newNote = note.slice(1);
60
- }
61
- }
62
- var hasComma = (newNote.match(/,/g) || []).length;
63
- var hasQuote = (newNote.match(/'/g) || []).length;
64
-
65
- this.pitch = pitch
66
- this.pitchAltered = 0
67
- this.name = newNote;
68
- this.acc = acc;
69
- this.isSharp = isSharp;
70
- this.isKeySharp = false;
71
- this.isDouble = isDouble;
72
- this.isAltered = isAltered;
73
- this.isFlat = isFlat;
74
- this.isKeyFlat = false;
75
- this.natural = natural;
76
- this.quarter = quarter;
77
- this.isLower = (this.name == this.name.toLowerCase());
78
- this.name = this.name[0].toUpperCase();
79
- this.hasComma = hasComma;
80
- this.isQuoted = hasQuote;
11
+ //console.log("INIT/RENDER TabNote constructor")
12
+ var pitch = noteToMidi(note)
13
+ if (clefTranspose)
14
+ pitch += clefTranspose
15
+ var newNote = midiToNote(pitch);
16
+ var isFlat = false;
17
+ var isSharp = false;
18
+ var isAltered = false;
19
+ var natural = null;
20
+ var quarter = null;
21
+ var isDouble = false;
22
+ var acc = 0;
23
+
24
+ if (note.startsWith('_')) {
25
+ isFlat = true;
26
+ acc = -1;
27
+ // check quarter flat
28
+ if (note[1] == '/') {
29
+ isFlat = false;
30
+ quarter = "v";
31
+ acc = 0;
32
+ } else if (note[1] == '_') {
33
+ // double flat
34
+ isDouble = true;
35
+ acc -= 1;
36
+ }
37
+ } else if (note.startsWith('^')) {
38
+ isSharp = true;
39
+ acc = +1;
40
+ // check quarter sharp
41
+ if (note[1] == '/') {
42
+ isSharp = false;
43
+ quarter = "^";
44
+ acc = 0;
45
+ } else if (note[1] == '^') {
46
+ // double sharp
47
+ isDouble = true;
48
+ acc += 1;
49
+ }
50
+ } else if (note.startsWith('=')) {
51
+ natural = true;
52
+ acc = 0;
53
+ }
54
+ isAltered = isFlat || isSharp || (quarter != null);
55
+ if (isAltered || natural) {
56
+ if ((quarter != null) || (isDouble)) {
57
+ newNote = note.slice(2);
58
+ } else {
59
+ newNote = note.slice(1);
60
+ }
61
+ }
62
+ var hasComma = (newNote.match(/,/g) || []).length;
63
+ var hasQuote = (newNote.match(/'/g) || []).length;
64
+
65
+ this.pitch = pitch
66
+ this.pitchAltered = 0
67
+ this.name = newNote;
68
+ this.acc = acc;
69
+ this.isSharp = isSharp;
70
+ this.isKeySharp = false;
71
+ this.isDouble = isDouble;
72
+ this.isAltered = isAltered;
73
+ this.isFlat = isFlat;
74
+ this.isKeyFlat = false;
75
+ this.natural = natural;
76
+ this.quarter = quarter;
77
+ this.isLower = (this.name == this.name.toLowerCase());
78
+ this.name = this.name[0].toUpperCase();
79
+ this.hasComma = hasComma;
80
+ this.isQuoted = hasQuote;
81
81
  }
82
82
 
83
83
  function cloneNote(self) {
84
- var newNote = self.name;
85
- var newTabNote = new TabNote(newNote);
86
- newTabNote.pitch = self.pitch;
87
- newTabNote.hasComma = self.hasComma;
88
- newTabNote.isLower = self.isLower;
89
- newTabNote.isQuoted = self.isQuoted;
90
- newTabNote.isSharp = self.isSharp;
91
- newTabNote.isKeySharp = self.isKeySharp;
92
- newTabNote.isFlat = self.isFlat;
93
- newTabNote.isKeyFlat = self.isKeyFlat;
94
- return newTabNote;
95
- }
84
+ var newNote = self.name;
85
+ var newTabNote = new TabNote(newNote);
86
+ newTabNote.pitch = self.pitch;
87
+ newTabNote.hasComma = self.hasComma;
88
+ newTabNote.isLower = self.isLower;
89
+ newTabNote.isQuoted = self.isQuoted;
90
+ newTabNote.isSharp = self.isSharp;
91
+ newTabNote.isKeySharp = self.isKeySharp;
92
+ newTabNote.isFlat = self.isFlat;
93
+ newTabNote.isKeyFlat = self.isKeyFlat;
94
+ return newTabNote;
95
+ }
96
96
  TabNote.prototype.sameNoteAs = function (note) {
97
- return note.pitch === this.pitch
97
+ //console.log("INIT TabNote sameNoteAs")
98
+ return note.pitch === this.pitch
98
99
  };
99
100
 
100
101
  TabNote.prototype.isLowerThan = function (note) {
101
- return note.pitch > this.pitch
102
+ //console.log("INIT TabNote isLowerThan")
103
+ return note.pitch > this.pitch
102
104
  };
103
105
 
104
- TabNote.prototype.checkKeyAccidentals = function(accidentals, measureAccidentals) {
105
- if (this.isAltered || this.natural)
106
- return
107
- if (measureAccidentals[this.name.toUpperCase()]) {
108
- switch (measureAccidentals[this.name.toUpperCase()]) {
109
- case "__": this.acc = -2; this.pitchAltered = -2; return;
110
- case "_": this.acc = -1; this.pitchAltered = -1; return;
111
- case "=": this.acc = 0; this.pitchAltered = 0; return;
112
- case "^": this.acc = 1; this.pitchAltered = 1; return;
113
- case "^^": this.acc = 2; this.pitchAltered = 2; return;
114
- }
115
- } else if (accidentals) {
116
- var curNote = this.name;
117
- for (var iii = 0; iii < accidentals.length; iii++) {
118
- var curAccidentals = accidentals[iii];
119
- if (curNote == curAccidentals.note.toUpperCase()) {
120
- if (curAccidentals.acc == 'flat') {
121
- this.acc = -1;
122
- this.isKeyFlat = true;
123
- this.pitchAltered = -1
124
- }
125
- if (curAccidentals.acc == 'sharp') {
126
- this.acc = +1;
127
- this.isKeySharp = true;
128
- this.pitchAltered = 1
129
- }
130
- }
131
- }
132
- }
106
+ TabNote.prototype.checkKeyAccidentals = function (accidentals, measureAccidentals) {
107
+ //console.log("RENDER TabNote checkKeyAccidentals")
108
+ if (this.isAltered || this.natural)
109
+ return
110
+ if (measureAccidentals[this.name.toUpperCase()]) {
111
+ switch (measureAccidentals[this.name.toUpperCase()]) {
112
+ case "__": this.acc = -2; this.pitchAltered = -2; return;
113
+ case "_": this.acc = -1; this.pitchAltered = -1; return;
114
+ case "=": this.acc = 0; this.pitchAltered = 0; return;
115
+ case "^": this.acc = 1; this.pitchAltered = 1; return;
116
+ case "^^": this.acc = 2; this.pitchAltered = 2; return;
117
+ }
118
+ } else if (accidentals) {
119
+ var curNote = this.name;
120
+ for (var iii = 0; iii < accidentals.length; iii++) {
121
+ var curAccidentals = accidentals[iii];
122
+ if (curNote == curAccidentals.note.toUpperCase()) {
123
+ if (curAccidentals.acc == 'flat') {
124
+ this.acc = -1;
125
+ this.isKeyFlat = true;
126
+ this.pitchAltered = -1
127
+ }
128
+ if (curAccidentals.acc == 'sharp') {
129
+ this.acc = +1;
130
+ this.isKeySharp = true;
131
+ this.pitchAltered = 1
132
+ }
133
+ }
134
+ }
135
+ }
133
136
  };
134
137
 
135
138
  TabNote.prototype.getAccidentalEquiv = function () {
136
- var cloned = cloneNote(this);
137
- if (cloned.isSharp || cloned.isKeySharp ) {
138
- cloned = cloned.nextNote();
139
- cloned.isFlat = true;
140
- cloned.isSharp = false;
141
- cloned.isKeySharp = false;
142
- } else if (cloned.isFlat || cloned.isKeyFlat ) {
143
- cloned = cloned.prevNote();
144
- cloned.isSharp = true;
145
- cloned.isFlat = false;
146
- cloned.isKeyFlat = false;
147
- }
148
- return cloned;
139
+ //console.log("TabNote getAccidentalEquiv")
140
+ var cloned = cloneNote(this);
141
+ if (cloned.isSharp || cloned.isKeySharp) {
142
+ cloned = cloned.nextNote();
143
+ cloned.isFlat = true;
144
+ cloned.isSharp = false;
145
+ cloned.isKeySharp = false;
146
+ } else if (cloned.isFlat || cloned.isKeyFlat) {
147
+ cloned = cloned.prevNote();
148
+ cloned.isSharp = true;
149
+ cloned.isFlat = false;
150
+ cloned.isKeyFlat = false;
151
+ }
152
+ return cloned;
149
153
  };
150
154
 
151
155
 
152
156
  TabNote.prototype.nextNote = function () {
153
- var note = midiToNote(this.pitch+1+this.pitchAltered)
154
- return new TabNote(note)
157
+ //console.log("INIT TabNote nextNote")
158
+ var note = midiToNote(this.pitch + 1 + this.pitchAltered)
159
+ return new TabNote(note)
155
160
  };
156
161
 
157
162
  TabNote.prototype.prevNote = function () {
158
- var note = midiToNote(this.pitch-1+this.pitchAltered)
159
- return new TabNote(note)
163
+ //console.log("TabNote prevNote")
164
+ var note = midiToNote(this.pitch - 1 + this.pitchAltered)
165
+ return new TabNote(note)
160
166
  };
161
167
 
162
- TabNote.prototype.emitNoAccidentals = function ( ) {
163
- var returned = this.name;
164
- if (this.isLower) {
165
- returned = returned.toLowerCase();
166
- }
167
- for (var ii = 0; ii < this.isQuoted; ii++) {
168
- returned += "'";
169
- }
170
- for (var jj = 0; jj < this.hasComma; jj++) {
171
- returned += ",";
172
- }
173
- return returned;
168
+ TabNote.prototype.emitNoAccidentals = function () {
169
+ //console.log("TabNote emitNoAccidentals")
170
+ var returned = this.name;
171
+ if (this.isLower) {
172
+ returned = returned.toLowerCase();
173
+ }
174
+ for (var ii = 0; ii < this.isQuoted; ii++) {
175
+ returned += "'";
176
+ }
177
+ for (var jj = 0; jj < this.hasComma; jj++) {
178
+ returned += ",";
179
+ }
180
+ return returned;
174
181
  };
175
182
 
176
183
  TabNote.prototype.emit = function () {
177
- var returned = this.name;
178
- if (this.isSharp || this.isKeySharp ) {
179
- returned = '^' + returned;
180
- if (this.isDouble) {
181
- returned = '^' + returned;
182
- }
183
- }
184
- if (this.isFlat || this.isKeyFlat) {
185
- returned = '_' + returned;
186
- if (this.isDouble) {
187
- returned = '_' + returned;
188
- }
189
- }
190
- if (this.quarter) {
191
- if (this.quarter == "^") {
192
- returned = "^/" + returned;
193
- } else {
194
- returned = "_/" + returned;
195
- }
196
- }
197
- if (this.natural) {
198
- returned = '=' + returned;
199
- }
200
- for (var ii = 1; ii <= this.hasComma; ii++) {
201
- returned += ',';
202
- }
203
-
204
- if (this.isLower) {
205
- returned = returned.toLowerCase();
206
- for (var jj = 1; jj <= this.isQuoted; jj++) {
207
- returned += "'";
208
- }
209
- }
210
- return returned;
184
+ //console.log("INIT/RENDER TabNote emit")
185
+ var returned = this.name;
186
+ if (this.isSharp || this.isKeySharp) {
187
+ returned = '^' + returned;
188
+ if (this.isDouble) {
189
+ returned = '^' + returned;
190
+ }
191
+ }
192
+ if (this.isFlat || this.isKeyFlat) {
193
+ returned = '_' + returned;
194
+ if (this.isDouble) {
195
+ returned = '_' + returned;
196
+ }
197
+ }
198
+ if (this.quarter) {
199
+ if (this.quarter == "^") {
200
+ returned = "^/" + returned;
201
+ } else {
202
+ returned = "_/" + returned;
203
+ }
204
+ }
205
+ if (this.natural) {
206
+ returned = '=' + returned;
207
+ }
208
+ for (var ii = 1; ii <= this.hasComma; ii++) {
209
+ returned += ',';
210
+ }
211
+
212
+ if (this.isLower) {
213
+ returned = returned.toLowerCase();
214
+ for (var jj = 1; jj <= this.isQuoted; jj++) {
215
+ returned += "'";
216
+ }
217
+ }
218
+ return returned;
211
219
  };
212
220
 
213
- module.exports = {
214
- 'TabNote': TabNote,
215
- 'notes': notes
216
- };
221
+ module.exports = TabNote
@@ -1,41 +1,36 @@
1
1
 
2
2
  var TabNote = require('./tab-note');
3
3
 
4
- var notes = TabNote.notes;
4
+ var notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
5
5
 
6
- function TabNotes(fromNote, toNote) {
7
- this.fromN = new TabNote.TabNote(fromNote);
8
- this.toN = new TabNote.TabNote(toNote);
6
+ function tabNotes(fromNote, toNote) {
7
+ //console.log("INIT TabNotes")
8
+ var fromN = new TabNote(fromNote);
9
+ var toN = new TabNote(toNote);
10
+ // check that toN is not lower than fromN
11
+ if (toN.isLowerThan(fromN)) {
12
+ var from = fromN.emit();
13
+ var tn = toN.emit();
14
+ return {
15
+ error: 'Invalid string Instrument tuning : ' +
16
+ tn + ' string lower than ' + from + ' string'
17
+ };
18
+ }
19
+ var buildReturned = [];
20
+ var startIndex = notes.indexOf(fromN.name);
21
+ var toIndex = notes.indexOf(toN.name);
22
+ if ((startIndex == -1) || (toIndex == -1)) {
23
+ return buildReturned;
24
+ }
25
+ var finished = false;
26
+ while (!finished) {
27
+ buildReturned.push(fromN.emit());
28
+ fromN = fromN.nextNote();
29
+ if (fromN.sameNoteAs(toN)) {
30
+ finished = true;
31
+ }
32
+ }
33
+ return buildReturned;
9
34
  }
10
35
 
11
-
12
- TabNotes.prototype.build = function () {
13
- var fromN = this.fromN;
14
- var toN = this.toN;
15
- // check that toN is not lower than fromN
16
- if (toN.isLowerThan(fromN)) {
17
- var from = fromN.emit();
18
- var tn = toN.emit();
19
- return {
20
- error: 'Invalid string Instrument tuning : ' +
21
- tn + ' string lower than ' + from + ' string'
22
- };
23
- }
24
- var buildReturned = [];
25
- var startIndex = notes.indexOf(fromN.name);
26
- var toIndex = notes.indexOf(toN.name);
27
- if ((startIndex == -1) || (toIndex == -1)) {
28
- return buildReturned;
29
- }
30
- var finished = false;
31
- while (!finished) {
32
- buildReturned.push(fromN.emit());
33
- fromN = fromN.nextNote();
34
- if (fromN.sameNoteAs(toN)) {
35
- finished = true;
36
- }
37
- }
38
- return buildReturned;
39
- };
40
-
41
- module.exports = TabNotes;
36
+ module.exports = tabNotes;
@@ -1,47 +1,65 @@
1
1
 
2
2
  var StringTablature = require('./string-tablature');
3
- var TabCommon = require('../tab-common');
4
- var TabRenderer = require('../tab-renderer');
5
- var TabStringPatterns = require('./tab-string-patterns');
3
+ var tabRenderer = require('../render/tab-renderer');
4
+ var StringPatterns = require('./string-patterns');
6
5
 
7
6
 
8
7
  /**
9
8
  * upon init mainly store provided instances for later usage
10
9
  * @param {*} abcTune the parsed tune AST tree
11
- * @param {*} tuneNumber the parsed tune AST tree
10
+ * @param {*} tuneNumber the parsed tune AST tree
12
11
  * @param {*} params complementary args provided to Tablature Plugin
13
12
  */
14
- Plugin.prototype.init = function (abcTune, tuneNumber, params, staffNumber, tabSettings) {
15
- var _super = new TabCommon(abcTune, tuneNumber, params);
16
- this.abcTune = abcTune;
17
- this._super = _super;
18
- this.linePitch = 3;
19
- this.nbLines = tabSettings.defaultTuning.length;
20
- this.isTabBig = tabSettings.isTabBig;
21
- this.tabSymbolOffset = tabSettings.tabSymbolOffset;
22
- this.capo = params.capo;
23
- this.transpose = params.visualTranspose;
24
- this.hideTabSymbol = params.hideTabSymbol;
25
- this.tablature = new StringTablature(this.nbLines,
26
- this.linePitch);
27
- var semantics = new TabStringPatterns(this, tabSettings.defaultTuning);
28
- this.semantics = semantics;
13
+ Plugin.prototype.init = function (abcTune, tuneNumber, params, tabSettings) {
14
+ //console.log("INIT AbcStringTab Plugin.init")
15
+ this.tune = abcTune;
16
+ this.params = params;
17
+ this.tuneNumber = tuneNumber;
18
+ this.inError = false;
19
+ this.abcTune = abcTune;
20
+ this.linePitch = 3;
21
+ this.nbLines = tabSettings.defaultTuning.length;
22
+ this.isTabBig = tabSettings.isTabBig;
23
+ this.tabSymbolOffset = tabSettings.tabSymbolOffset;
24
+ this.capo = params.capo;
25
+ this.transpose = params.visualTranspose;
26
+ this.hideTabSymbol = params.hideTabSymbol;
27
+ this.tablature = new StringTablature(this.nbLines, this.linePitch);
28
+ var tuning = params.tuning;
29
+ if (!tuning) {
30
+ tuning = tabSettings.defaultTuning;
31
+ }
32
+ this.tuning = tuning;
33
+ this.semantics = new StringPatterns(this);
34
+ };
35
+
36
+ Plugin.prototype.setError = function (error) {
37
+ //console.log("Plugin setError")
38
+ if (error) {
39
+ this.error = error;
40
+ this.inError = true;
41
+ if (this.tune.warnings) {
42
+ this.tune.warnings.push(error);
43
+ } else {
44
+ this.tune.warnings = [error];
45
+ }
46
+ }
29
47
  };
30
48
 
31
49
  Plugin.prototype.render = function (renderer, line, staffIndex) {
32
- if (this._super.inError) return;
33
- if (this.tablature.bypass(line)) return;
34
- var rndrer = new TabRenderer(this, renderer, line, staffIndex);
35
- rndrer.doLayout();
50
+ //console.log("RENDER AbcStringTab Plugin.render")
51
+ if (this.inError) return;
52
+ if (this.tablature.bypass(line)) return;
53
+ tabRenderer(this, renderer, line, staffIndex);
36
54
  };
37
55
 
38
- function Plugin() {}
56
+ function Plugin() { }
39
57
 
40
58
  //
41
59
  // Tablature plugin definition
42
60
  //
43
61
  var AbcStringTab = function () {
44
- return { name: 'StringTab', tablature: Plugin };
62
+ return { name: 'StringTab', tablature: Plugin };
45
63
  };
46
64
 
47
65
  module.exports = AbcStringTab;