abcjs-rails 1.4 → 1.5
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.
@@ -1184,7 +1184,10 @@ window.ABCJS.parse.Parse = function() {
|
|
1184
1184
|
var fraction = tokenizer.getFraction(line, i);
|
1185
1185
|
chordDuration = fraction.value;
|
1186
1186
|
i = fraction.index;
|
1187
|
-
|
1187
|
+
if (line.charAt(i) === '-' || line.charAt(i) === ')')
|
1188
|
+
i--; // Subtracting one because one is automatically added below
|
1189
|
+
else
|
1190
|
+
postChordDone = true;
|
1188
1191
|
break;
|
1189
1192
|
default:
|
1190
1193
|
postChordDone = true;
|
@@ -47,18 +47,18 @@ ABCJS.write.StaffGroupElement.prototype.finished = function() {
|
|
47
47
|
ABCJS.write.StaffGroupElement.prototype.layout = function(spacing, printer, debug) {
|
48
48
|
this.spacingunits = 0; // number of space units taken up (as opposed to fixed width). Layout engine then decides how many a pixels a space unit should be
|
49
49
|
this.minspace = 1000; // a big number to start off with
|
50
|
-
var x = printer.paddingleft;
|
50
|
+
var x = printer.paddingleft*printer.scale;
|
51
51
|
|
52
52
|
// find out how much space will be taken up by voice headers
|
53
53
|
var voiceheaderw = 0;
|
54
54
|
for (var i=0;i<this.voices.length;i++) {
|
55
55
|
if(this.voices[i].header) {
|
56
|
-
var t = printer.paper.text(100, -10, this.voices[i].header).attr({"font-size":12, "font-family":"serif"}); // code duplicated below // don't scale this as we ask for the bbox
|
56
|
+
var t = printer.paper.text(100*printer.scale, -10*printer.scale, this.voices[i].header).attr({"font-size":12*printer.scale, "font-family":"serif", 'font-weight':'bold'}); // code duplicated below // don't scale this as we ask for the bbox
|
57
57
|
voiceheaderw = Math.max(voiceheaderw,t.getBBox().width);
|
58
58
|
t.remove();
|
59
59
|
}
|
60
60
|
}
|
61
|
-
x=x+voiceheaderw*1.1; // 10% of 0 is 0
|
61
|
+
x=x+voiceheaderw*(1/printer.scale)*1.1; // 10% of 0 is 0
|
62
62
|
this.startx=x;
|
63
63
|
|
64
64
|
var currentduration = 0;
|
@@ -273,7 +273,9 @@ ABCJS.write.VoiceElement.prototype.draw = function (printer, bartop) {
|
|
273
273
|
|
274
274
|
if (this.header) { // print voice name
|
275
275
|
var textpitch = 12 - (this.voicenumber+1)*(12/(this.voicetotal+1));
|
276
|
-
|
276
|
+
var headerX = (this.startx-printer.paddingleft)/2+printer.paddingleft;
|
277
|
+
headerX = headerX*printer.scale;
|
278
|
+
printer.paper.text(headerX, printer.calcY(textpitch)*printer.scale, this.header).attr({"font-size":12*printer.scale, "font-family":"serif", 'font-weight':'bold'}); // code duplicated above
|
277
279
|
}
|
278
280
|
|
279
281
|
for (var i=0, ii=this.children.length; i<ii; i++) {
|
@@ -475,7 +477,7 @@ ABCJS.write.EndingElem.prototype.draw = function (printer, linestartx, lineendx)
|
|
475
477
|
pathString = ABCJS.write.sprintf("M %f %f L %f %f",
|
476
478
|
linestartx, printer.y, linestartx, printer.y+10);
|
477
479
|
printer.printPath({path:pathString, stroke:"#000000", fill:"#000000"}); //TODO scale
|
478
|
-
printer.printText(linestartx+5, 18.5, this.text).attr({"font-size":"
|
480
|
+
printer.printText(linestartx+5*printer.scale, 18.5, this.text).attr({"font-size":""+10*printer.scale+"px"});
|
479
481
|
}
|
480
482
|
|
481
483
|
if (this.anchor2) {
|
@@ -173,7 +173,7 @@ ABCJS.write.Layout.prototype.printABCElement = function() {
|
|
173
173
|
break;
|
174
174
|
case "part":
|
175
175
|
var abselem = new ABCJS.write.AbsoluteElement(elem,0,0);
|
176
|
-
abselem.addChild(new ABCJS.write.RelativeElement(elem.title, 0, 0, 18, {type:"text", attributes:{"font-weight":"bold", "font-size":"
|
176
|
+
abselem.addChild(new ABCJS.write.RelativeElement(elem.title, 0, 0, 18, {type:"text", attributes:{"font-weight":"bold", "font-size":""+16*this.printer.scale+"px", "font-family":"serif"}}));
|
177
177
|
elemset[0] = abselem;
|
178
178
|
break;
|
179
179
|
// case "tempo":
|
@@ -180,10 +180,10 @@ ABCJS.write.Printer.prototype.printStem = function (x, dx, y1, y2) {
|
|
180
180
|
|
181
181
|
ABCJS.write.Printer.prototype.printText = function (x, offset, text, anchor) {
|
182
182
|
anchor = anchor || "start";
|
183
|
-
var ret = this.paper.text(x, this.calcY(offset), text).attr({"text-anchor":anchor, "font-size":12});
|
184
|
-
if (this.scale!==1) {
|
185
|
-
ret.scale(this.scale, this.scale, 0, 0);
|
186
|
-
}
|
183
|
+
var ret = this.paper.text(x*this.scale, this.calcY(offset)*this.scale, text).attr({"text-anchor":anchor, "font-size":12*this.scale});
|
184
|
+
// if (this.scale!==1) {
|
185
|
+
// ret.scale(this.scale, this.scale, 0, 0);
|
186
|
+
// }
|
187
187
|
return ret;
|
188
188
|
};
|
189
189
|
|
@@ -316,12 +316,13 @@ ABCJS.write.Printer.prototype.printABC = function(abctunes) {
|
|
316
316
|
};
|
317
317
|
|
318
318
|
ABCJS.write.Printer.prototype.printTempo = function (tempo, paper, layouter, y, printer, x) {
|
319
|
+
var fontStyle = {"text-anchor":"start", 'font-size':12*printer.scale, 'font-weight':'bold'};
|
319
320
|
if (tempo.preString) {
|
320
|
-
var text = paper.text(x, y + 20, tempo.preString).attr(
|
321
|
-
x += (text.getBBox().width +
|
321
|
+
var text = paper.text(x*printer.scale, y*printer.scale + 20*printer.scale, tempo.preString).attr(fontStyle);
|
322
|
+
x += (text.getBBox().width + 20*printer.scale);
|
322
323
|
}
|
323
324
|
if (tempo.duration) {
|
324
|
-
var temposcale = 0.75;
|
325
|
+
var temposcale = 0.75*printer.scale;
|
325
326
|
var tempopitch = 14.5;
|
326
327
|
var duration = tempo.duration[0]; // TODO when multiple durations
|
327
328
|
var abselem = new ABCJS.write.AbsoluteElement(tempo, duration, 1);
|
@@ -346,19 +347,19 @@ ABCJS.write.Printer.prototype.printTempo = function (tempo, paper, layouter, y,
|
|
346
347
|
var p1 = tempopitch + 1 / 3 * temposcale;
|
347
348
|
var p2 = tempopitch + 7 * temposcale;
|
348
349
|
var dx = temponote.dx + temponote.w;
|
349
|
-
var width = -0.6;
|
350
|
+
var width = -0.6*printer.scale;
|
350
351
|
abselem.addExtra(new ABCJS.write.RelativeElement(null, dx, 0, p1, {"type":"stem", "pitch2":p2, linewidth:width}));
|
351
352
|
}
|
352
|
-
abselem.x = x;
|
353
|
+
abselem.x = x*(1/printer.scale); // TODO-PER: For some reason it scales this element twice, so just compensate.
|
353
354
|
abselem.draw(printer, null);
|
354
|
-
x += (abselem.w + 5);
|
355
|
-
text = paper.text(x, y + 20, "= " + tempo.bpm).attr(
|
356
|
-
x += text.getBBox().width + 10;
|
355
|
+
x += (abselem.w + 5*printer.scale);
|
356
|
+
text = paper.text(x, y*printer.scale + 20*printer.scale, "= " + tempo.bpm).attr(fontStyle);
|
357
|
+
x += text.getBBox().width + 10*printer.scale;
|
357
358
|
}
|
358
359
|
if (tempo.postString) {
|
359
|
-
paper.text(x, y + 20, tempo.postString).attr(
|
360
|
+
paper.text(x, y*printer.scale + 20*printer.scale, tempo.postString).attr(fontStyle);
|
360
361
|
}
|
361
|
-
y += 15;
|
362
|
+
y += 15*printer.scale;
|
362
363
|
return y;
|
363
364
|
};
|
364
365
|
|
@@ -387,22 +388,25 @@ ABCJS.write.Printer.prototype.printTune = function (abctune) {
|
|
387
388
|
this.width=this.staffwidth;
|
388
389
|
}
|
389
390
|
this.width+=this.paddingleft;
|
390
|
-
if (abctune.formatting.scale) { this.scale=abctune.formatting.scale; }
|
391
|
-
this.paper.text(this.width/2, this.y, abctune.metaText.title).attr({"font-size":20, "font-family":"serif"});
|
392
|
-
this.y+=20;
|
391
|
+
if (abctune.formatting.scale) { this.scale=abctune.formatting.scale; } else this.scale = 1;
|
392
|
+
this.paper.text(this.width*this.scale/2, this.y, abctune.metaText.title).attr({"font-size":20*this.scale, "font-family":"serif"});
|
393
|
+
this.y+=20*this.scale;
|
393
394
|
if (abctune.lines[0] && abctune.lines[0].subtitle) {
|
394
395
|
this.printSubtitleLine(abctune.lines[0]);
|
395
|
-
this.y+=20;
|
396
|
+
this.y+=20*this.scale;
|
396
397
|
}
|
397
398
|
if (abctune.metaText.rhythm) {
|
398
|
-
this.paper.text(this.paddingleft, this.y, abctune.metaText.rhythm).attr({"text-anchor":"start","font-style":"italic","font-family":"serif", "font-size":12});
|
399
|
-
!(abctune.metaText.author || abctune.metaText.origin || abctune.metaText.composer) && (this.y+=15);
|
399
|
+
this.paper.text(this.paddingleft, this.y, abctune.metaText.rhythm).attr({"text-anchor":"start","font-style":"italic","font-family":"serif", "font-size":12*this.scale});
|
400
|
+
!(abctune.metaText.author || abctune.metaText.origin || abctune.metaText.composer) && (this.y+=15*this.scale);
|
400
401
|
}
|
401
|
-
|
402
|
-
|
403
|
-
|
402
|
+
var composerLine = "";
|
403
|
+
if (abctune.metaText.composer) composerLine += abctune.metaText.composer;
|
404
|
+
if (abctune.metaText.origin) composerLine += ' (' + abctune.metaText.origin + ')';
|
405
|
+
if (composerLine.length > 0) {this.paper.text(this.width*this.scale, this.y, composerLine).attr({"text-anchor":"end","font-style":"italic","font-family":"serif", "font-size":12*this.scale});this.y+=15;}
|
406
|
+
if (abctune.metaText.author) {this.paper.text(this.width*this.scale, this.y, abctune.metaText.author).attr({"text-anchor":"end","font-style":"italic","font-family":"serif", "font-size":12*this.scale}); this.y+=15;}
|
404
407
|
if (abctune.metaText.tempo && !abctune.metaText.tempo.suppress) {
|
405
408
|
this.y = this.printTempo(abctune.metaText.tempo, this.paper, this.layouter, this.y, this, 50);
|
409
|
+
this.y += 20*this.scale;
|
406
410
|
}
|
407
411
|
this.staffgroups = [];
|
408
412
|
var maxwidth = this.width;
|
@@ -430,7 +434,7 @@ ABCJS.write.Printer.prototype.printTune = function (abctune) {
|
|
430
434
|
this.y+=ABCJS.write.spacing.STAVEHEIGHT*0.2;
|
431
435
|
} else if (abcline.subtitle && line!==0) {
|
432
436
|
this.printSubtitleLine(abcline);
|
433
|
-
this.y+=20; //hardcoded
|
437
|
+
this.y+=20*this.scale; //hardcoded
|
434
438
|
} else if (abcline.text) {
|
435
439
|
if (typeof abcline.text === 'string')
|
436
440
|
this.paper.text(100, this.y, "TEXT: " + abcline.text);
|
@@ -441,35 +445,41 @@ ABCJS.write.Printer.prototype.printTune = function (abctune) {
|
|
441
445
|
}
|
442
446
|
this.paper.text(100, this.y, "TEXT: " + str);
|
443
447
|
}
|
444
|
-
this.y+=20; //hardcoded
|
448
|
+
this.y+=20*this.scale; //hardcoded
|
445
449
|
}
|
446
450
|
}
|
447
|
-
var extraText = "";
|
451
|
+
var extraText = "";
|
452
|
+
var text2;
|
453
|
+
var height;
|
448
454
|
if (abctune.metaText.partOrder) extraText += "Part Order: " + abctune.metaText.partOrder + "\n";
|
449
|
-
|
450
|
-
|
451
|
-
|
455
|
+
if (abctune.metaText.unalignedWords) {
|
456
|
+
for (var j = 0; j < abctune.metaText.unalignedWords.length; j++) {
|
457
|
+
if (typeof abctune.metaText.unalignedWords[j] === 'string')
|
458
|
+
extraText += abctune.metaText.unalignedWords[j] + "\n";
|
459
|
+
else {
|
460
|
+
for (var k = 0; k < abctune.metaText.unalignedWords[j].length; k++) {
|
461
|
+
extraText += " FONT " + abctune.metaText.unalignedWords[j][k].text;
|
462
|
+
}
|
463
|
+
extraText += "\n";
|
464
|
+
}
|
465
|
+
}
|
466
|
+
text2 = this.paper.text(this.paddingleft*this.scale+50*this.scale, this.y*this.scale+25*this.scale, extraText).attr({"text-anchor":"start", "font-family":"serif", "font-size":17*this.scale});
|
467
|
+
height = text2.getBBox().height + 17*this.scale;
|
468
|
+
text2.translate(0,height/2);
|
469
|
+
this.y+=height;
|
470
|
+
extraText = "";
|
471
|
+
}
|
472
|
+
if (abctune.metaText.book) extraText += "Book: " + abctune.metaText.book + "\n";
|
473
|
+
if (abctune.metaText.source) extraText += "Source: " + abctune.metaText.source + "\n";
|
474
|
+
if (abctune.metaText.discography) extraText += "Discography: " + abctune.metaText.discography + "\n";
|
475
|
+
if (abctune.metaText.notes) extraText += "Notes: " + abctune.metaText.notes + "\n";
|
452
476
|
if (abctune.metaText.transcription) extraText += "Transcription: " + abctune.metaText.transcription + "\n";
|
453
|
-
if (abctune.metaText.discography) extraText += "Discography: " + abctune.metaText.discography + "\n";
|
454
477
|
if (abctune.metaText.history) extraText += "History: " + abctune.metaText.history + "\n";
|
455
|
-
|
456
|
-
|
457
|
-
for (var j = 0; j < abctune.metaText.unalignedWords.length; j++) {
|
458
|
-
if (typeof abctune.metaText.unalignedWords[j] === 'string')
|
459
|
-
extraText += abctune.metaText.unalignedWords[j] + "\n";
|
460
|
-
else {
|
461
|
-
for (var k = 0; k < abctune.metaText.unalignedWords[j].length; k++) {
|
462
|
-
extraText += " FONT " + abctune.metaText.unalignedWords[j][k].text;
|
463
|
-
}
|
464
|
-
extraText += "\n";
|
465
|
-
}
|
466
|
-
}
|
467
|
-
}
|
468
|
-
var text2 = this.paper.text(this.paddingleft, this.y+25, extraText).attr({"text-anchor":"start", "font-family":"serif", "font-size":13});
|
469
|
-
var height = text2.getBBox().height;
|
478
|
+
text2 = this.paper.text(this.paddingleft, this.y*this.scale+25*this.scale, extraText).attr({"text-anchor":"start", "font-family":"serif", "font-size":17*this.scale});
|
479
|
+
height = text2.getBBox().height;
|
470
480
|
text2.translate(0,height/2);
|
471
|
-
this.y+=25+height;
|
472
|
-
var sizetoset = {w: maxwidth*this.scale
|
481
|
+
this.y+=25*this.scale+height*this.scale;
|
482
|
+
var sizetoset = {w: (maxwidth+this.paddingright)*this.scale,h: this.y+this.paddingbottom*this.scale};
|
473
483
|
this.paper.setSize(sizetoset.w,sizetoset.h);
|
474
484
|
// Correct for IE problem in calculating height
|
475
485
|
var isIE=/*@cc_on!@*/false;//IE detector
|
data/lib/abcjs-rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abcjs-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.5'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|