Skip to content

Commit

Permalink
Fix some tablature bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
paulrosen committed Jan 15, 2023
1 parent 9838f6e commit 5897add
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/tablatures/tab-absolute-elements.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ function cloneAbsolute(absSrc) {
if (returned.abcelem.el_type === "note")
returned.abcelem.el_type = 'tabNumber';
}
// TODO-PER: This fixes the classes because the element isn't created at the right time.
absSrc.cloned = returned
return returned;
}

Expand Down
4 changes: 4 additions & 0 deletions src/write/classes.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ Classes.prototype.generate = function (c) {
return "";
var ret = [];
if (c && c.length > 0) ret.push(c);
if (c === "tab-number") // TODO-PER-HACK! straighten out the tablature
return ret.join(' ')
if (c === "text instrument-name")
return "abcjs-text abcjs-instrument-name"
if (this.lineNumber !== null) ret.push("l"+this.lineNumber);
if (this.measureNumber !== null) ret.push("m"+this.measureNumber);
if (this.measureNumber !== null) ret.push("mm"+this.measureTotal()); // measureNumber is null between measures so this is still the test for measureTotal
Expand Down
8 changes: 8 additions & 0 deletions src/write/draw/absolute.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ function drawAbsolute(renderer, params, bartop, selectables, staffPos) {
}
var g = elementGroup.endGroup(klass, params.type);
if (g) {
// TODO-PER-HACK! This corrects the classes because the tablature is not being created at the right time.
if (params.cloned) {
params.cloned.overrideClasses = g.className.baseVal
}
if (params.overrideClasses) {
var type = g.classList && g.classList.length > 0 ? g.classList[0] + ' ' : ''
g.setAttribute("class", type + params.overrideClasses)
}
if (isTempo) {
params.startChar = params.abcelem.startChar;
params.endChar = params.abcelem.endChar;
Expand Down
1 change: 1 addition & 0 deletions tests/all.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</head>
<body>
<div id="mocha"></div>
<div id="warnings"></div>
<div id="paper"></div>
<div id="paper2"></div>
<div id="midi"></div>
Expand Down
1 change: 1 addition & 0 deletions tests/tablature.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</head>
<body>
<div id="mocha"></div>
<div id="warnings"></div>
<div id="paper"></div>
<script src="../node_modules/chai/chai.js"></script>
<script src="../node_modules/mocha/mocha.js"></script>
Expand Down
25 changes: 24 additions & 1 deletion tests/visual/tablature.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,14 @@ describe("Tablature", function () {
}
];

var badTuningParams = [
{
instrument: 'guitar',
label : 'Guitar (%T)',
tuning: ['D', 'A', 'D', 'G', 'A', 'd'],
}
];

var violinParams = [
{
instrument: 'violin',
Expand Down Expand Up @@ -638,6 +646,11 @@ describe("Tablature", function () {
]
]

// TODO-PER: Eventually the tablature should support strings being tuned out of order (like a uke or banjo)
var badTuning = "X:1\n" +
"K:C\n" +
"D, A, D G B e"

var staffPlacement = "X:1\n" +
"%%score (1 | 2)\n" +
"L:1/4\n" +
Expand Down Expand Up @@ -829,6 +842,11 @@ describe("Tablature", function () {
chai.assert.equal(parseInt(x,10), 33, "Not enough left margin for instrument name")
})

it("bad-tuning", function () {
var visualObj = doRender(badTuning, badTuningParams)
chai.assert.equal(visualObj[0].warnings, "Invalid string Instrument tuning : D string lower than A string")
});

it("subtitle", function() {
// Just see it not crash
var visualObj = doRender(subTitle, violinParams)
Expand Down Expand Up @@ -879,7 +897,12 @@ function doRender(abc, tabParams, params) {
}
}
var visualObj = abcjs.renderAbc("paper", abc, options );
return visualObj;
if (visualObj[0].warnings) {
var el = document.querySelector("#warnings")
if (el)
el.innerHTML = visualObj[0].warnings.join(",")
}
return visualObj;
}

function getTabStaff(staffs, number) {
Expand Down

0 comments on commit 5897add

Please sign in to comment.