|
|
function replacer(key, value) { |
|
|
|
|
|
if (key === 'abselem') { |
|
|
return 'abselem'; |
|
|
} |
|
|
return value; |
|
|
} |
|
|
|
|
|
describe("Tablature", function () { |
|
|
var violinAllNotes = "L:1/4\nM:4/4\nG,^G,A,^A,|B,^B,C^C|D^DE^E|F^FG^G|\n" + |
|
|
"A^AB^B|c^cd^d|e^ef^f|g^ga^a|\n" + |
|
|
"b^bc'^c'|d'^d'e'^e'|f'^f'g'^g'|_A,_B,_C_D|\n" + |
|
|
"_E_F_G_A|_B_c_d_e|_f_g_a_b|_c'_d'_e'_f'|"; |
|
|
|
|
|
var violinAllNotesOutput = [ |
|
|
|
|
|
[ |
|
|
{ "el_type": "note", "startChar": 12, "endChar": 14, "notes": [{ "num": 0, "str": 3, "pitch": "G," }] }, |
|
|
{ "el_type": "note", "startChar": 14, "endChar": 17, "notes": [{ "num": 1, "str": 3, "pitch": "^G," }] }, |
|
|
{ "el_type": "note", "startChar": 17, "endChar": 19, "notes": [{ "num": 2, "str": 3, "pitch": "A," }] }, |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 22, "notes": [{ "num": 3, "str": 3, "pitch": "^A," }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 23, "startChar": 22 }, |
|
|
{ "el_type": "note", "startChar": 23, "endChar": 25, "notes": [{ "num": 4, "str": 3, "pitch": "B," }] }, |
|
|
{ "el_type": "note", "startChar": 25, "endChar": 28, "notes": [{ "num": 5, "str": 3, "pitch": "^B," }] }, |
|
|
{ "el_type": "note", "startChar": 28, "endChar": 29, "notes": [{ "num": 5, "str": 3, "pitch": "C" }] }, |
|
|
{ "el_type": "note", "startChar": 29, "endChar": 31, "notes": [{ "num": 6, "str": 3, "pitch": "^C" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 32, "startChar": 31 }, |
|
|
{ "el_type": "note", "startChar": 32, "endChar": 33, "notes": [{ "num": 0, "str": 2, "pitch": "D" }] }, |
|
|
{ "el_type": "note", "startChar": 33, "endChar": 35, "notes": [{ "num": 1, "str": 2, "pitch": "^D" }] }, |
|
|
{ "el_type": "note", "startChar": 35, "endChar": 36, "notes": [{ "num": 2, "str": 2, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 36, "endChar": 38, "notes": [{ "num": 3, "str": 2, "pitch": "^E" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 39, "startChar": 38 }, |
|
|
{ "el_type": "note", "startChar": 39, "endChar": 40, "notes": [{ "num": 3, "str": 2, "pitch": "F" }] }, |
|
|
{ "el_type": "note", "startChar": 40, "endChar": 42, "notes": [{ "num": 4, "str": 2, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 42, "endChar": 43, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 43, "endChar": 45, "notes": [{ "num": 6, "str": 2, "pitch": "^G" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 46, "startChar": 45 } |
|
|
], |
|
|
|
|
|
[ |
|
|
{ "el_type": "note", "startChar": 47, "endChar": 48, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 48, "endChar": 50, "notes": [{ "num": 1, "str": 1, "pitch": "^A" }] }, |
|
|
{ "el_type": "note", "startChar": 50, "endChar": 51, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 51, "endChar": 53, "notes": [{ "num": 3, "str": 1, "pitch": "^B" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 54, "startChar": 53 }, |
|
|
{ "el_type": "note", "startChar": 54, "endChar": 55, "notes": [{ "num": 3, "str": 1, "pitch": "c" }] }, |
|
|
{ "el_type": "note", "startChar": 55, "endChar": 57, "notes": [{ "num": 4, "str": 1, "pitch": "^c" }] }, |
|
|
{ "el_type": "note", "startChar": 57, "endChar": 58, "notes": [{ "num": 5, "str": 1, "pitch": "d" }] }, |
|
|
{ "el_type": "note", "startChar": 58, "endChar": 60, "notes": [{ "num": 6, "str": 1, "pitch": "^d" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 61, "startChar": 60 }, |
|
|
{ "el_type": "note", "startChar": 61, "endChar": 62, "notes": [{ "num": 0, "str": 0, "pitch": "e" }] }, |
|
|
{ "el_type": "note", "startChar": 62, "endChar": 64, "notes": [{ "num": 1, "str": 0, "pitch": "^e" }] }, |
|
|
{ "el_type": "note", "startChar": 64, "endChar": 65, "notes": [{ "num": 1, "str": 0, "pitch": "f" }] }, |
|
|
{ "el_type": "note", "startChar": 65, "endChar": 67, "notes": [{ "num": 2, "str": 0, "pitch": "^f" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 68, "startChar": 67 }, |
|
|
{ "el_type": "note", "startChar": 68, "endChar": 69, "notes": [{ "num": 3, "str": 0, "pitch": "g" }] }, |
|
|
{ "el_type": "note", "startChar": 69, "endChar": 71, "notes": [{ "num": 4, "str": 0, "pitch": "^g" }] }, |
|
|
{ "el_type": "note", "startChar": 71, "endChar": 72, "notes": [{ "num": 5, "str": 0, "pitch": "a" }] }, |
|
|
{ "el_type": "note", "startChar": 72, "endChar": 74, "notes": [{ "num": 6, "str": 0, "pitch": "^a" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 75, "startChar": 74 } |
|
|
], |
|
|
|
|
|
[ |
|
|
{ "el_type": "note", "startChar": 76, "endChar": 77, "notes": [{ "num": 7, "str": 0, "pitch": "b" }] }, |
|
|
{ "el_type": "note", "startChar": 77, "endChar": 79, "notes": [{ "num": 8, "str": 0, "pitch": "^b" }] }, |
|
|
{ "el_type": "note", "startChar": 79, "endChar": 81, "notes": [{ "num": 8, "str": 0, "pitch": "c'" }] }, |
|
|
{ "el_type": "note", "startChar": 81, "endChar": 84, "notes": [{ "num": 9, "str": 0, "pitch": "^c'" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 85, "startChar": 84 }, |
|
|
{ "el_type": "note", "startChar": 85, "endChar": 87, "notes": [{ "num": 10, "str": 0, "pitch": "d'" }] }, |
|
|
{ "el_type": "note", "startChar": 87, "endChar": 90, "notes": [{ "num": 11, "str": 0, "pitch": "^d'" }] }, |
|
|
{ "el_type": "note", "startChar": 90, "endChar": 92, "notes": [{ "num": 12, "str": 0, "pitch": "e'" }] }, |
|
|
{ "el_type": "note", "startChar": 92, "endChar": 95, "notes": [{ "num": 13, "str": 0, "pitch": "^e'" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 96, "startChar": 95 }, |
|
|
{ "el_type": "note", "startChar": 96, "endChar": 98, "notes": [{ "num": 13, "str": 0, "pitch": "f'" }] }, |
|
|
{ "el_type": "note", "startChar": 98, "endChar": 101, "notes": [{ "num": 14, "str": 0, "pitch": "^f'" }] }, |
|
|
{ "el_type": "note", "startChar": 101, "endChar": 103, "notes": [{ "num": 15, "str": 0, "pitch": "g'" }] }, |
|
|
{ "el_type": "note", "startChar": 103, "endChar": 106, "notes": [{ "num": 16, "str": 0, "pitch": "^g'" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 107, "startChar": 106 }, |
|
|
{ "el_type": "note", "startChar": 107, "endChar": 110, "notes": [{ "num": 1, "str": 3, "pitch": "_A," }] }, |
|
|
{ "el_type": "note", "startChar": 110, "endChar": 113, "notes": [{ "num": 3, "str": 3, "pitch": "_B," }] }, |
|
|
{ "el_type": "note", "startChar": 113, "endChar": 115, "notes": [{ "num": 4, "str": 3, "pitch": "_C" }] }, |
|
|
{ "el_type": "note", "startChar": 115, "endChar": 117, "notes": [{ "num": 6, "str": 3, "pitch": "_D" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 118, "startChar": 117 }, |
|
|
], |
|
|
|
|
|
[ |
|
|
{ "el_type": "note", "startChar": 119, "endChar": 121, "notes": [{ "num": 1, "str": 2, "pitch": "_E" }] }, |
|
|
{ "el_type": "note", "startChar": 121, "endChar": 123, "notes": [{ "num": 2, "str": 2, "pitch": "_F" }] }, |
|
|
{ "el_type": "note", "startChar": 123, "endChar": 125, "notes": [{ "num": 4, "str": 2, "pitch": "_G" }] }, |
|
|
{ "el_type": "note", "startChar": 125, "endChar": 127, "notes": [{ "num": 6, "str": 2, "pitch": "_A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 128, "startChar": 127 }, |
|
|
{ "el_type": "note", "startChar": 128, "endChar": 130, "notes": [{ "num": 1, "str": 1, "pitch": "_B" }] }, |
|
|
{ "el_type": "note", "startChar": 130, "endChar": 132, "notes": [{ "num": 2, "str": 1, "pitch": "_c" }] }, |
|
|
{ "el_type": "note", "startChar": 132, "endChar": 134, "notes": [{ "num": 4, "str": 1, "pitch": "_d" }] }, |
|
|
{ "el_type": "note", "startChar": 134, "endChar": 136, "notes": [{ "num": 6, "str": 1, "pitch": "_e" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 137, "startChar": 136 }, |
|
|
{ "el_type": "note", "startChar": 137, "endChar": 139, "notes": [{ "num": 0, "str": 0, "pitch": "_f" }] }, |
|
|
{ "el_type": "note", "startChar": 139, "endChar": 141, "notes": [{ "num": 2, "str": 0, "pitch": "_g" }] }, |
|
|
{ "el_type": "note", "startChar": 141, "endChar": 143, "notes": [{ "num": 4, "str": 0, "pitch": "_a" }] }, |
|
|
{ "el_type": "note", "startChar": 143, "endChar": 145, "notes": [{ "num": 6, "str": 0, "pitch": "_b" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 146, "startChar": 145 }, |
|
|
{ "el_type": "note", "startChar": 146, "endChar": 149, "notes": [{ "num": 7, "str": 0, "pitch": "_c'" }] }, |
|
|
{ "el_type": "note", "startChar": 149, "endChar": 152, "notes": [{ "num": 9, "str": 0, "pitch": "_d'" }] }, |
|
|
{ "el_type": "note", "startChar": 152, "endChar": 155, "notes": [{ "num": 11, "str": 0, "pitch": "_e'" }] }, |
|
|
{ "el_type": "note", "startChar": 155, "endChar": 158, "notes": [{ "num": 12, "str": 0, "pitch": "_f'" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 159, "startChar": 158 }, |
|
|
], |
|
|
]; |
|
|
|
|
|
var violinOutOfRange = "L:1/4\nM:4/4\nF,^F,G,e'''|\n"; |
|
|
|
|
|
var violinOutOfRangeOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 12, "endChar": 14, "notes": [{ "num": "?", "str": 3, "pitch": "F," }] }, |
|
|
{ "el_type": "note", "startChar": 14, "endChar": 17, "notes": [{ "num": "?", "str": 3, "pitch": "^F," }] }, |
|
|
{ "el_type": "note", "startChar": 17, "endChar": 19, "notes": [{ "num": 0, "str": 3, "pitch": "G," }] }, |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 23, "notes": [{ "num": 36, "str": 0, "pitch": "e'''" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 24, "startChar": 23 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var violinKeySigs = "L:1/4\nM:4/4\nK:Ab\nA,B,CD|EFGA| [K:B] A,B,CD|EFGA|\n"; |
|
|
|
|
|
var violinKeySigsOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 17, "endChar": 19, "notes": [{ "num": 1, "str": 3, "pitch": "_A," }] }, |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 21, "notes": [{ "num": 3, "str": 3, "pitch": "_B," }] }, |
|
|
{ "el_type": "note", "startChar": 21, "endChar": 22, "notes": [{ "num": 5, "str": 3, "pitch": "C" }] }, |
|
|
{ "el_type": "note", "startChar": 22, "endChar": 23, "notes": [{ "num": 6, "str": 3, "pitch": "_D" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 24, "startChar": 23 }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 25, "notes": [{ "num": 1, "str": 2, "pitch": "_E" }] }, |
|
|
{ "el_type": "note", "startChar": 25, "endChar": 26, "notes": [{ "num": 3, "str": 2, "pitch": "F" }] } |
|
|
, |
|
|
{ "el_type": "note", "startChar": 26, "endChar": 27, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 27, "endChar": 28, "notes": [{ "num": 6, "str": 2, "pitch": "_A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 29, "startChar": 28 }, |
|
|
{ "el_type": "note", "startChar": 35, "endChar": 38, "notes": [{ "num": 3, "str": 3, "pitch": "^A," }] }, |
|
|
{ "el_type": "note", "startChar": 38, "endChar": 40, "notes": [{ "num": 4, "str": 3, "pitch": "B," }] }, |
|
|
{ "el_type": "note", "startChar": 40, "endChar": 41, "notes": [{ "num": 6, "str": 3, "pitch": "^C" }] }, |
|
|
{ "el_type": "note", "startChar": 41, "endChar": 42, "notes": [{ "num": 1, "str": 2, "pitch": "^D" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 43, "startChar": 42 }, |
|
|
{ "el_type": "note", "startChar": 43, "endChar": 44, "notes": [{ "num": 2, "str": 2, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 44, "endChar": 45, "notes": [{ "num": 4, "str": 2, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 45, "endChar": 46, "notes": [{ "num": 6, "str": 2, "pitch": "^G" }] }, |
|
|
{ "el_type": "note", "startChar": 46, "endChar": 47, "notes": [{ "num": 1, "str": 1, "pitch": "^A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 48, "startChar": 47 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var violinCrossTune = "L:1/4\nM:4/4\nK:A\nA,B,CD|EFGA|Bcde|fgab|\n"; |
|
|
|
|
|
var violinCrossTuneOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 16, "endChar": 18, "notes": [{ "num": 0, "str": 3, "pitch": "A," }] }, |
|
|
{ "el_type": "note", "startChar": 18, "endChar": 20, "notes": [{ "num": 2, "str": 3, "pitch": "B," }] }, |
|
|
{ "el_type": "note", "startChar": 20, "endChar": 21, "notes": [{ "num": 4, "str": 3, "pitch": "^C" }] }, |
|
|
{ "el_type": "note", "startChar": 21, "endChar": 22, "notes": [{ "num": 5, "str": 3, "pitch": "D" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 23, "startChar": 22 }, |
|
|
{ "el_type": "note", "startChar": 23, "endChar": 24, "notes": [{ "num": 0, "str": 2, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 25, "notes": [{ "num": 2, "str": 2, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 25, "endChar": 26, "notes": [{ "num": 4, "str": 2, "pitch": "^G" }] }, |
|
|
{ "el_type": "note", "startChar": 26, "endChar": 27, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 28, "startChar": 27 }, |
|
|
{ "el_type": "note", "startChar": 28, "endChar": 29, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 29, "endChar": 30, "notes": [{ "num": 4, "str": 1, "pitch": "^c" }] }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 31, "notes": [{ "num": 5, "str": 1, "pitch": "d" }] }, |
|
|
{ "el_type": "note", "startChar": 31, "endChar": 32, "notes": [{ "num": 0, "str": 0, "pitch": "e" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 33, "startChar": 32 }, |
|
|
{ "el_type": "note", "startChar": 33, "endChar": 34, "notes": [{ "num": 2, "str": 0, "pitch": "^f" }] }, |
|
|
{ "el_type": "note", "startChar": 34, "endChar": 35, "notes": [{ "num": 4, "str": 0, "pitch": "^g" }] }, |
|
|
{ "el_type": "note", "startChar": 35, "endChar": 36, "notes": [{ "num": 5, "str": 0, "pitch": "a" }] }, |
|
|
{ "el_type": "note", "startChar": 36, "endChar": 37, "notes": [{ "num": 7, "str": 0, "pitch": "b" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 38, "startChar": 37 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var violinDoubleStops = "L:1/4\nK:A\n[EE] [AA] [ee] [D^F] [E^G] [F^G] [Ac] [gb] |\n"; |
|
|
|
|
|
var violinDoubleStopsOutput = [ |
|
|
[ |
|
|
{ |
|
|
"el_type": "note", "startChar": 10, "endChar": 15, "notes": [{ "num": 7, "str": 3, "pitch": "E" }, |
|
|
{ "num": 0, "str": 2, "pitch": "E" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 15, "endChar": 20, "notes": [{ "num": 5, "str": 2, "pitch": "A" }, |
|
|
{ "num": 0, "str": 1, "pitch": "A" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 20, "endChar": 25, "notes": [{ "num": 7, "str": 1, "pitch": "e" }, |
|
|
{ "num": 0, "str": 0, "pitch": "e" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 25, "endChar": 31, "notes": [{ "num": 5, "str": 3, "pitch": "D" }, |
|
|
{ "num": 2, "str": 2, "pitch": "^F" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 31, "endChar": 37, "notes": [{ "num": 7, "str": 3, "pitch": "E" }, |
|
|
{ "num": 4, "str": 2, "pitch": "^G" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 37, "endChar": 43, "notes": [{ "num": 9, "str": 3, "pitch": "F" }, |
|
|
{ "num": 4, "str": 2, "pitch": "^G" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 43, "endChar": 48, "notes": [{ "num": 5, "str": 2, "pitch": "A" }, |
|
|
{ "num": 4, "str": 1, "pitch": "^c" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 48, "endChar": 53, "notes": [{ "num": 11, "str": 1, "pitch": "g" }, |
|
|
{ "num": 7, "str": 0, "pitch": "b" }] |
|
|
}, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 54, "startChar": 53 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var transposeDoubleStopsOutput = [ |
|
|
[ |
|
|
{ |
|
|
"el_type": "note", "startChar": 10, "endChar": 15, "notes": [{ "num": 9, "str": 3, "pitch": "^F" }, |
|
|
{ "num": 2, "str": 2, "pitch": "^F" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 15, "endChar": 20, "notes": [{ "num": 7, "str": 2, "pitch": "B" }, |
|
|
{ "num": 2, "str": 1, "pitch": "B" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 20, "endChar": 25, "notes": [{ "num": 9, "str": 1, "pitch": "^f" }, |
|
|
{ "num": 2, "str": 0, "pitch": "^f" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 25, "endChar": 31, "notes": [{ "num": 7, "str": 3, "pitch": "E" }, |
|
|
{ "num": 4, "str": 2, "pitch": "^G" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 31, "endChar": 37, "notes": [{ "num": 2, "str": 2, "pitch": "^F" }, |
|
|
{ "num": 1, "str": 1, "pitch": "^A" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 37, "endChar": 43, "notes": [{ "num": 4, "str": 2, "pitch": "G" }, |
|
|
{ "num": 1, "str": 1, "pitch": "^A" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 43, "endChar": 48, "notes": [{ "num": 7, "str": 2, "pitch": "B" }, |
|
|
{ "num": 6, "str": 1, "pitch": "^d" }] |
|
|
}, |
|
|
{ |
|
|
"el_type": "note", "startChar": 48, "endChar": 53, "notes": [{ "num": 13, "str": 1, "pitch": "a" }, |
|
|
{ "num": 9, "str": 0, "pitch": "^c'" }] |
|
|
}, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 54, "startChar": 53 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var violinUnusualAccidentals = "L:1/4\nK:C\n^/G ^^A __B _/c|\n"; |
|
|
|
|
|
var violinUnusualAccidentalsOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 10, "endChar": 14, "notes": [{ "num": "5^", "str": 2, "pitch": "^/G" }] }, |
|
|
{ "el_type": "note", "startChar": 14, "endChar": 18, "notes": [{ "num": 2, "str": 1, "pitch": "^^A" }] }, |
|
|
{ "el_type": "note", "startChar": 18, "endChar": 22, "notes": [{ "num": 0, "str": 1, "pitch": "__B" }] }, |
|
|
{ "el_type": "note", "startChar": 22, "endChar": 25, "notes": [{ "num": "3v", "str": 1, "pitch": "_/c" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 26, "startChar": 25 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var guitarCapo = "M: 2/4\n" + |
|
|
"K:F\n" + |
|
|
"|: [EE,]^FGA [B2B,]BA | [G2A,]^FE [B,B]^cBA | [G2A,]^FE [B,4^FB]:| \n"; |
|
|
|
|
|
var guitarCapoOutput = [ |
|
|
[ |
|
|
{ "el_type": "bar", "type": "bar_left_repeat", "endChar": 13, "startChar": 11 }, |
|
|
{ "el_type": "note", "startChar": 13, "endChar": 19, "notes": [{ "num": 0, "str": 5, "pitch": "E," }, { "num": 0, "str": 3, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 21, "notes": [{ "num": 2, "str": 3, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 21, "endChar": 22, "notes": [{ "num": 3, "str": 3, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 22, "endChar": 24, "notes": [{ "num": 0, "str": 2, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 30, "notes": [{ "num": 6, "str": 5, "pitch": "_B," }, { "num": 1, "str": 2, "pitch": "_B" }] }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 31, "notes": [{ "num": 1, "str": 2, "pitch": "_B" }] }, |
|
|
{ "el_type": "note", "startChar": 31, "endChar": 33, "notes": [{ "num": 0, "str": 2, "pitch": "A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 34, "startChar": 33 }, |
|
|
{ "el_type": "note", "startChar": 34, "endChar": 41, "notes": [{ "num": 5, "str": 5, "pitch": "A," }, { "num": 3, "str": 3, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 41, "endChar": 43, "notes": [{ "num": 2, "str": 3, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 43, "endChar": 45, "notes": [{ "num": 0, "str": 3, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 45, "endChar": 50, "notes": [{ "num": 6, "str": 5, "pitch": "_B," }, { "num": 1, "str": 2, "pitch": "_B" }] }, |
|
|
{ "el_type": "note", "startChar": 50, "endChar": 52, "notes": [{ "num": 2, "str": 1, "pitch": "^c" }] }, |
|
|
{ "el_type": "note", "startChar": 52, "endChar": 53, "notes": [{ "num": 1, "str": 2, "pitch": "_B" }] }, |
|
|
{ "el_type": "note", "startChar": 53, "endChar": 55, "notes": [{ "num": 0, "str": 2, "pitch": "A" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 56, "startChar": 55 }, |
|
|
{ "el_type": "note", "startChar": 56, "endChar": 63, "notes": [{ "num": 5, "str": 5, "pitch": "A," }, { "num": 3, "str": 3, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 63, "endChar": 65, "notes": [{ "num": 2, "str": 3, "pitch": "^F" }] }, |
|
|
{ "el_type": "note", "startChar": 65, "endChar": 67, "notes": [{ "num": 0, "str": 3, "pitch": "E" }] }, |
|
|
{ "el_type": "note", "startChar": 67, "endChar": 75, "notes": [{ "num": 6, "str": 5, "pitch": "_B," }, { "num": 2, "str": 3, "pitch": "^F" }, { "num": 1, "str": 2, "pitch": "_B" }] }, |
|
|
{ "el_type": "bar", "type": "bar_right_repeat", "endChar": 77, "startChar": 75 }] |
|
|
]; |
|
|
|
|
|
var twoVoices = "%%score (1 2)\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/8\n" + |
|
|
"K: Em\n" + |
|
|
"V:1\n" + |
|
|
"d|BGDg|\n" + |
|
|
"V:2\n" + |
|
|
"G|ABAB|"; |
|
|
|
|
|
var twoVoicesOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 38, "endChar": 39, "notes": [{ "num": 5, "str": 1, "pitch": "d" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 40, "startChar": 39 }, |
|
|
{ "el_type": "note", "startChar": 40, "endChar": 41, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 41, "endChar": 42, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 42, "endChar": 43, "notes": [{ "num": 0, "str": 2, "pitch": "D" }] }, |
|
|
{ "el_type": "note", "startChar": 43, "endChar": 44, "notes": [{ "num": 3, "str": 0, "pitch": "g" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 45, "startChar": 44 }, |
|
|
],[ |
|
|
{ "el_type": "note", "startChar": 50, "endChar": 51, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 52, "startChar": 51 }, |
|
|
{ "el_type": "note", "startChar": 52, "endChar": 53, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 53, "endChar": 54, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 54, "endChar": 55, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 55, "endChar": 56, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 57, "startChar": 56 }, |
|
|
], |
|
|
]; |
|
|
|
|
|
var twoStaves = "%%score 1|2\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/8\n" + |
|
|
"K: Em\n" + |
|
|
"V:1\n" + |
|
|
"d|BGDg|\n" + |
|
|
"V:2\n" + |
|
|
"G|ABAB|"; |
|
|
|
|
|
var twoStavesOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 36, "endChar": 37, "notes": [{ "num": 5, "str": 1, "pitch": "d" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 38, "startChar": 37 }, |
|
|
{ "el_type": "note", "startChar": 38, "endChar": 39, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 39, "endChar": 40, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 40, "endChar": 41, "notes": [{ "num": 0, "str": 2, "pitch": "D" }] }, |
|
|
{ "el_type": "note", "startChar": 41, "endChar": 42, "notes": [{ "num": 3, "str": 0, "pitch": "g" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 43, "startChar": 42 }, |
|
|
], |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 48, "endChar": 49, "notes": [{ "num": 3, "str": 3, "pitch": "G" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 50, "startChar": 49 }, |
|
|
{ "el_type": "note", "startChar": 50, "endChar": 51, "notes": [{ "num": 0, "str": 2, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 51, "endChar": 52, "notes": [{ "num": 0, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 52, "endChar": 53, "notes": [{ "num": 0, "str": 2, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 53, "endChar": 54, "notes": [{ "num": 0, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 55, "startChar": 54 }, |
|
|
], |
|
|
]; |
|
|
|
|
|
var skipStaff = "%%score 1|2|3\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/8\n" + |
|
|
"K: Em\n" + |
|
|
"V:1\n" + |
|
|
"d|BGDg|\n" + |
|
|
"V:2\n" + |
|
|
"G|ABAB|\n" + |
|
|
"V:3\n" + |
|
|
"G,|A,B,CD|"; |
|
|
|
|
|
var skipStaffOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 50, "endChar": 51, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 52, "startChar": 51 }, |
|
|
{ "el_type": "note", "startChar": 52, "endChar": 53, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 53, "endChar": 54, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "note", "startChar": 54, "endChar": 55, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 55, "endChar": 56, "notes": [{ "num": 2, "str": 1, "pitch": "B" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 57, "startChar": 56 }, |
|
|
], |
|
|
]; |
|
|
var skipStaffParams = [ |
|
|
{ instrument: ""}, |
|
|
{ |
|
|
instrument: 'violin', |
|
|
} |
|
|
]; |
|
|
|
|
|
var guitarParams = [ |
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label : 'Guitar (%T)', |
|
|
tuning: ['D,', 'A,', 'D', 'G', 'A', 'd'], |
|
|
capo: 2 |
|
|
} |
|
|
]; |
|
|
|
|
|
var accidentalParams = [ |
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label : 'Accidentals (%T)', |
|
|
tuning: ['^D,', '_A,', '_D', '^G', '_B', '^d'], |
|
|
} |
|
|
]; |
|
|
|
|
|
var badTuningParams = [ |
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label : 'Guitar (%T)', |
|
|
tuning: ['D', 'A', 'D', 'G', 'A', 'd'], |
|
|
} |
|
|
]; |
|
|
|
|
|
var violinParams = [ |
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin', |
|
|
tuning: ['G,', 'D', 'A', 'e'] |
|
|
} |
|
|
]; |
|
|
|
|
|
var firstStaffOnlyParams = [ |
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin', |
|
|
firstStaffOnly: true, |
|
|
tuning: ['G,', 'D', 'A', 'e'] |
|
|
} |
|
|
]; |
|
|
|
|
|
var violinGuitarParams = [ |
|
|
|
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin', |
|
|
tuning: ['G,', 'D', 'A', 'e'] |
|
|
}, |
|
|
|
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label: 'Guitar (%T)', |
|
|
tuning: ['D,', 'A,', 'D', 'G', 'A', 'd'], |
|
|
capo: 2 |
|
|
}, |
|
|
|
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin2', |
|
|
tuning: ['G,', 'D', 'A', 'e'] |
|
|
}, |
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label: 'Guitar (%T)2', |
|
|
tuning: ['D,', 'A,', 'D', 'G', 'A', 'd'], |
|
|
capo: 2 |
|
|
}, |
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin3', |
|
|
tuning: ['G,', 'D', 'A', 'e'] |
|
|
}, |
|
|
{ |
|
|
instrument: 'guitar', |
|
|
label: 'Guitar (%T)3', |
|
|
tuning: ['D,', 'A,', 'D', 'G', 'A', 'd'], |
|
|
capo: 2 |
|
|
}, |
|
|
]; |
|
|
|
|
|
var violinCrossTuneParams = [ |
|
|
{ |
|
|
instrument: 'violin', |
|
|
label: 'Violin (%T)', |
|
|
tuning: ['A,', 'E', 'A', 'e'] |
|
|
} |
|
|
]; |
|
|
|
|
|
var graceNotes = "M: 4/4\n" + |
|
|
"L: 1/4\n" + |
|
|
"K: C\n" + |
|
|
"{B}A {dB}G {ABcd efga}b|"; |
|
|
|
|
|
var graceNotesOutput = [ |
|
|
[ |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 24, "notes": [{ "num": 2, "str": 1, "pitch": "B" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 19, "endChar": 24, "notes": [{ "num": 0, "str": 1, "pitch": "A" }] }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 30, "notes": [{ "num": 5, "str": 1, "pitch": "d" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 30, "notes": [{ "num": 2, "str": 1, "pitch": "B" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 24, "endChar": 30, "notes": [{ "num": 5, "str": 2, "pitch": "G" }] }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 0, "str": 1, "pitch": "A" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 2, "str": 1, "pitch": "B" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 3, "str": 1, "pitch": "c" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 5, "str": 1, "pitch": "d" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 0, "str": 0, "pitch": "e" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 1, "str": 0, "pitch": "f" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 3, "str": 0, "pitch": "g" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 5, "str": 0, "pitch": "a" }], "grace": true }, |
|
|
{ "el_type": "note", "startChar": 30, "endChar": 42, "notes": [{ "num": 7, "str": 0, "pitch": "b" }] }, |
|
|
{ "el_type": "bar", "type": "bar_thin", "endChar": 43, "startChar": 42 } |
|
|
] |
|
|
]; |
|
|
|
|
|
var warningRecovery = "X:1\n" + |
|
|
"K:C\n" + |
|
|
"Gr"; |
|
|
|
|
|
var warningRecoveryOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":8,"endChar":9,"notes":[{"num":5,"str":2,"pitch":"G"}]} |
|
|
] |
|
|
] |
|
|
|
|
|
var liningUp = "X: 1\n" + |
|
|
"K:C\n" + |
|
|
'G>^FG>_A G2 "a very very long chord"D2| [CD] {fe}d|\n'; |
|
|
|
|
|
var bracketPlacement = "X:5\n" + |
|
|
"L:1/8\n" + |
|
|
"%%staves {RH LH}\n" + |
|
|
"V: RH clef=treble\n" + |
|
|
"V: LH clef=bass\n" + |
|
|
"K:C\n" + |
|
|
"[V: RH]\n" + |
|
|
"|: c\n" + |
|
|
"[V: LH]\n" + |
|
|
"|: G,\n" |
|
|
|
|
|
var barNumbers = "X:1\n" + |
|
|
"%% barnumbers 1\n" + |
|
|
"K:C \n" + |
|
|
"F8|G8| \n" + |
|
|
"F8|!coda!G8|]" |
|
|
|
|
|
var barNumbersOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":25,"endChar":27,"notes":[{"num":3,"str":2,"pitch":"F"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":28,"startChar":27}, |
|
|
{"el_type":"note","startChar":28,"endChar":30,"notes":[{"num":5,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":31,"startChar":30}, |
|
|
], |
|
|
[ |
|
|
{"el_type":"note","startChar":33,"endChar":35,"notes":[{"num":3,"str":2,"pitch":"F"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":36,"startChar":35}, |
|
|
{"el_type":"note","startChar":36,"endChar":44,"notes":[{"num":5,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"bar","type":"bar_thin_thick","endChar":46,"startChar":44}, |
|
|
] |
|
|
] |
|
|
|
|
|
var noExtraVertical = "X:1\n" + |
|
|
'"A7"A' |
|
|
|
|
|
var extraVertical = "X:1\n" + |
|
|
"Q:150\n" + |
|
|
"P:Verse\n" + |
|
|
'"A7"A' |
|
|
|
|
|
var bracketWidth = "X:1\n" + |
|
|
"%%staves {RH LH}\n" + |
|
|
"V:RH clef=treble\n" + |
|
|
"V:LH clef=bass\n" + |
|
|
"K:C\n" + |
|
|
"V:RH\n" + |
|
|
"ABc\n" + |
|
|
"V:LH\n" + |
|
|
"A,B,C" |
|
|
|
|
|
var subTitle = "X: 1\n" + |
|
|
"T: First\n" + |
|
|
"T: Second\n" + |
|
|
"M: C\n" + |
|
|
"K: F\n" + |
|
|
"A\n" |
|
|
|
|
|
var crashChord = "X: 1\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/4\n" + |
|
|
"K: Bm\n" + |
|
|
"[F,^G,]" |
|
|
|
|
|
var graceOnRest = "X:1\n" + |
|
|
"K:C\n" + |
|
|
"(f3 {a})y" |
|
|
|
|
|
var graceOnRestOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":8,"endChar":12,"notes":[{"num":1,"str":0,"pitch":"f"}]}, |
|
|
{ "el_type": "note", "startChar": 12, "endChar": 17, "notes": [{ "num": 5, "str": 0, "pitch": "a" }], "grace": true }, |
|
|
] |
|
|
] |
|
|
|
|
|
var tiedNote = "X:1\n" + |
|
|
"K:C\n" + |
|
|
"f-f" |
|
|
|
|
|
var tiedNoteOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":8,"endChar":10,"notes":[{"num":1,"str":0,"pitch":"f"}]} |
|
|
] |
|
|
] |
|
|
|
|
|
var percussionClef = "X:1\n" + |
|
|
"K:C clef=perc stafflines=1 \n" + |
|
|
"B" |
|
|
|
|
|
var overlay = "X:1\n" + |
|
|
"K:C\n" + |
|
|
"G8 & C4 D4|E4 F4|]" |
|
|
|
|
|
var overlayOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":8,"endChar":11,"notes":[{"num":5,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":19,"startChar":18}, |
|
|
{"el_type":"note","startChar":19,"endChar":22,"notes":[{"num":2,"str":2,"pitch":"E"}]}, |
|
|
{"el_type":"note","startChar":22,"endChar":24,"notes":[{"num":3,"str":2,"pitch":"F"}]}, |
|
|
{"el_type":"bar","type":"bar_thin_thick","endChar":26,"startChar":24}, |
|
|
], |
|
|
[ |
|
|
{"el_type":"note","startChar":12,"endChar":16,"notes":[{"num":5,"str":3,"pitch":"C"}]}, |
|
|
{"el_type":"note","startChar":16,"endChar":18,"notes":[{"num":0,"str":2,"pitch":"D"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":19,"startChar":18}, |
|
|
{"el_type":"bar","type":"bar_thin_thick","endChar":26,"startChar":24} |
|
|
], |
|
|
] |
|
|
|
|
|
var clefNone = "X: 1\n" + |
|
|
"K: clef=none\n" + |
|
|
"C |\n" |
|
|
|
|
|
var kitchenSink = "X:1\n" + |
|
|
"M:4/4\n" + |
|
|
"L:1/16\n" + |
|
|
"%%titlefont Times 22.0\n" + |
|
|
"%%partsfont box\n" + |
|
|
"%%barnumbers 1\n" + |
|
|
"T: all-element-types\n" + |
|
|
"T: Everything should be selectable\n" + |
|
|
"C: public domain\n" + |
|
|
"R: Hit it\n" + |
|
|
"A: Yours Truly\n" + |
|
|
"S: My own testing\n" + |
|
|
"W: Now is the time for all good men\n" + |
|
|
"W:\n" + |
|
|
"W: To come to the aid of their party.\n" + |
|
|
"H: This shows every type of thing that can possibly be drawn.\n" + |
|
|
"H:\n" + |
|
|
"H: And two lines of history!\n" + |
|
|
"Q: \"Easy Swing\" 1/4=140\n" + |
|
|
"P: AABB\n" + |
|
|
"%%staves {(PianoRightHand extra) (PianoLeftHand)}\n" + |
|
|
"V:PianoRightHand clef=treble+8 name=RH\n" + |
|
|
"V:PianoLeftHand clef=bass name=LH\n" + |
|
|
"K:Bb\n" + |
|
|
"P:A\n" + |
|
|
"%%text there is some random text\n" + |
|
|
"%%sep 0.4cm 0.4cm 6cm\n" + |
|
|
"[V: PianoRightHand] !mp![b8B8d8] f3g !//!f4|!<(![d12b12] !<)![b4g4]|z4 b^f_df (3B2d2c2 B4|1[Q:\"left\" 1/4=170\"right\"]!f![c4f4] z4 [b8d8]| (3[G8e8] Tu[c8f8] G8|]\n" + |
|
|
"w:Strang- ers\n" + |
|
|
"[V: extra] B,16 | \"Bb\"{C}B,4 ({^CD}B,4 =B,8) |\n" + |
|
|
"T:Inserted subtitle\n" + |
|
|
"[V: PianoLeftHand] B,6 .D2 !arpeggio![F,8F8A,8]|(B,2 B,,2 C,12)|\"^annotation\"F,16|[F,16D,16]|Z2|]\n" |
|
|
|
|
|
var kitchenSinkOutput = [ |
|
|
429, |
|
|
786, |
|
|
580, |
|
|
657 |
|
|
] |
|
|
|
|
|
var octaveClef = "X: 1\n" + |
|
|
"K: C treble-8\n" + |
|
|
" G, G | g g' |\n" |
|
|
|
|
|
var octaveClefOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":20,"endChar":23,"notes":[{"num":"?","str":3,"pitch":"G,,"}]}, |
|
|
{"el_type":"note","startChar":23,"endChar":25,"notes":[{"num":0,"str":3,"pitch":"G,"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":26,"startChar":25}, |
|
|
{"el_type":"note","startChar":26,"endChar":29,"notes":[{"num":5,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"note","startChar":29,"endChar":32,"notes":[{"num":3,"str":0,"pitch":"g"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":33,"startChar":32} |
|
|
] |
|
|
] |
|
|
|
|
|
var unusualFontSize = "X:1\n" + |
|
|
"%%stretchlast\n" + |
|
|
"%%gchordfont Arial 10 box\n" + |
|
|
"L:1/4\n" + |
|
|
"K:C\n" + |
|
|
"|1\"Gbmaj7\"DEGB:|\n" + |
|
|
"%%gchordfont Arial 20 box\n" + |
|
|
"|1\"Gbmaj7\"DEGB:|\n" + |
|
|
"%%gchordfont Arial 40 box\n" + |
|
|
"|1\"Gbmaj7\"DEGB:|\n" + |
|
|
"%%gchordfont Arial 80 box\n" + |
|
|
"|1\"Gbmaj7\"DEGB:|\n" + |
|
|
"%%gchordfont Arial 130 box\n" + |
|
|
"|1\"Gbmaj7\"DEGB:|\n" |
|
|
|
|
|
var unusualFontSizeOutput = [ |
|
|
72, |
|
|
138, |
|
|
269, |
|
|
335, |
|
|
505, |
|
|
571, |
|
|
823, |
|
|
889, |
|
|
1242, |
|
|
1308, |
|
|
] |
|
|
|
|
|
var weirdNoteConstruction = "X:1\n" + |
|
|
"K:C\n" + |
|
|
"a, B'" |
|
|
|
|
|
var weirdNoteConstructionOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":8,"endChar":11,"notes":[{"num":0,"str":1,"pitch":"A"}]}, |
|
|
{"el_type":"note","startChar":11,"endChar":13,"notes":[{"num":7,"str":0,"pitch":"b"}]} |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
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" + |
|
|
"M:4/4\n" + |
|
|
"K:D\n" + |
|
|
"V:1\n" + |
|
|
"A G/F/ G A3/4 A/4 |\n" + |
|
|
"[|]1 F z z A :|\n" + |
|
|
"[|]2 F z A d [|] |\n" + |
|
|
"V:2\n" + |
|
|
"F E/D/ E F3/4 F/4 |\n" + |
|
|
"[|]1 D z z A :|\n" + |
|
|
"[|]2 D z F A [|] |\n" |
|
|
|
|
|
var staffPlacementOutput = [ |
|
|
44, |
|
|
145, |
|
|
258, |
|
|
363, |
|
|
475, |
|
|
580 |
|
|
] |
|
|
|
|
|
var accidentals2 = "X: 1\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/4\n" + |
|
|
"K: G\n" + |
|
|
"A2^A_A|F_F^F=F|F^E^^EE|G_GG=G|[K: Eb]A2=A2|\n" |
|
|
|
|
|
var accidentals2Output = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":24,"endChar":26,"notes":[{"num":0,"str":1,"pitch":"A"}]}, |
|
|
{"el_type":"note","startChar":26,"endChar":28,"notes":[{"num":1,"str":1,"pitch":"^A"}]}, |
|
|
{"el_type":"note","startChar":28,"endChar":30,"notes":[{"num":6,"str":2,"pitch":"_A"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":31,"startChar":30}, |
|
|
{"el_type":"note","startChar":31,"endChar":32,"notes":[{"num":4,"str":2,"pitch":"^F"}]}, |
|
|
{"el_type":"note","startChar":32,"endChar":34,"notes":[{"num":2,"str":2,"pitch":"_F"}]}, |
|
|
{"el_type":"note","startChar":34,"endChar":36,"notes":[{"num":4,"str":2,"pitch":"^F"}]}, |
|
|
{"el_type":"note","startChar":36,"endChar":38,"notes":[{"num":3,"str":2,"pitch":"=F"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":39,"startChar":38}, |
|
|
{"el_type":"note","startChar":39,"endChar":40,"notes":[{"num":4,"str":2,"pitch":"^F"}]}, |
|
|
{"el_type":"note","startChar":40,"endChar":42,"notes":[{"num":3,"str":2,"pitch":"^E"}]}, |
|
|
{"el_type":"note","startChar":42,"endChar":45,"notes":[{"num":4,"str":2,"pitch":"^^E"}]}, |
|
|
{"el_type":"note","startChar":45,"endChar":46,"notes":[{"num":4,"str":2,"pitch":"E"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":47,"startChar":46}, |
|
|
{"el_type":"note","startChar":47,"endChar":48,"notes":[{"num":5,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"note","startChar":48,"endChar":50,"notes":[{"num":4,"str":2,"pitch":"_G"}]}, |
|
|
{"el_type":"note","startChar":50,"endChar":51,"notes":[{"num":4,"str":2,"pitch":"G"}]}, |
|
|
{"el_type":"note","startChar":51,"endChar":53,"notes":[{"num":5,"str":2,"pitch":"=G"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":54,"startChar":53}, |
|
|
{"el_type":"note","startChar":61,"endChar":63,"notes":[{"num":6,"str":2,"pitch":"_A"}]}, |
|
|
{"el_type":"note","startChar":63,"endChar":66,"notes":[{"num":0,"str":1,"pitch":"=A"}]}, |
|
|
{"el_type":"bar","type":"bar_thin","endChar":67,"startChar":66}, |
|
|
] |
|
|
] |
|
|
|
|
|
var accidentalsInDef = "X: 1\n" + |
|
|
"M: 4/4\n" + |
|
|
"L: 1/4\n" + |
|
|
"K: G\n" + |
|
|
"G,CEGda\n" |
|
|
|
|
|
var accidentalsInDefOutput = [ |
|
|
[ |
|
|
{"el_type":"note","startChar":24,"endChar":26,"notes":[{"num":4,"str":5,"pitch":"G,"}]}, |
|
|
{"el_type":"note","startChar":26,"endChar":27,"notes":[{"num":4,"str":4,"pitch":"C"}]}, |
|
|
{"el_type":"note","startChar":27,"endChar":28,"notes":[{"num":3,"str":3,"pitch":"E"}]}, |
|
|
{"el_type":"note","startChar":28,"endChar":29,"notes":[{"num":6,"str":3,"pitch":"G"}]}, |
|
|
{"el_type":"note","startChar":29,"endChar":30,"notes":[{"num":4,"str":1,"pitch":"d"}]}, |
|
|
{"el_type":"note","startChar":30,"endChar":31,"notes":[{"num":6,"str":0,"pitch":"a"}]}, |
|
|
] |
|
|
] |
|
|
|
|
|
var lyrics = "X: 1\n" + |
|
|
"M: 3/4\n" + |
|
|
"L: 1/4\n" + |
|
|
"K: G\n" + |
|
|
"GAB|\n" + |
|
|
"w: Tra la la\n" + |
|
|
"w: Tra la la\n" |
|
|
|
|
|
var lyricsOutput = [ |
|
|
41, |
|
|
154, |
|
|
] |
|
|
|
|
|
var firstStaffOnly = "X:1\n" + |
|
|
"%%stretchlast\n" + |
|
|
"L:1/4\n" + |
|
|
"K:C\n" + |
|
|
"|:\"Gbmaj7\"DEGB:|\n" + |
|
|
"|:\"Gbmaj7\"DEGB:|\n" + |
|
|
"|:\"Gbmaj7\"DEGB:|\n" + |
|
|
"|:\"Gbmaj7\"DEGB:|\n" + |
|
|
"|:\"Gbmaj7\"DEGB:|\n" |
|
|
|
|
|
var firstStaffOnlyOutput1 = [ |
|
|
62, |
|
|
128, |
|
|
238, |
|
|
304, |
|
|
413, |
|
|
479, |
|
|
589, |
|
|
655, |
|
|
764, |
|
|
830, |
|
|
] |
|
|
|
|
|
var firstStaffOnlyOutput2 = [ |
|
|
62, |
|
|
128, |
|
|
238, |
|
|
304, |
|
|
392, |
|
|
458, |
|
|
547, |
|
|
612, |
|
|
701, |
|
|
767, |
|
|
] |
|
|
|
|
|
it("accidentals-in-def", function () { |
|
|
doStaffTest(accidentalsInDef, accidentalsInDefOutput, accidentalParams); |
|
|
}); |
|
|
|
|
|
it("accidentals", function () { |
|
|
doStaffTest(violinAllNotes, violinAllNotesOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("accidentals2", function () { |
|
|
doStaffTest(accidentals2, accidentals2Output, violinParams); |
|
|
}); |
|
|
|
|
|
it("out of range", function () { |
|
|
doStaffTest(violinOutOfRange, violinOutOfRangeOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("key sigs", function () { |
|
|
doStaffTest(violinKeySigs, violinKeySigsOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("cross tune", function () { |
|
|
doStaffTest(violinCrossTune, violinCrossTuneOutput, violinCrossTuneParams); |
|
|
}); |
|
|
|
|
|
it("double stops", function () { |
|
|
doStaffTest(violinDoubleStops, violinDoubleStopsOutput, violinCrossTuneParams); |
|
|
}); |
|
|
|
|
|
it("unusual accidentals", function () { |
|
|
doStaffTest(violinUnusualAccidentals, violinUnusualAccidentalsOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("capo", function () { |
|
|
doStaffTest(guitarCapo, guitarCapoOutput, guitarParams); |
|
|
}); |
|
|
|
|
|
it("two voices", function () { |
|
|
doStaffTest(twoVoices, twoVoicesOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("two staves", function () { |
|
|
doStaffTest(twoStaves, twoStavesOutput, violinGuitarParams); |
|
|
}); |
|
|
|
|
|
it("skip staff", function () { |
|
|
doStaffTest(skipStaff, skipStaffOutput, skipStaffParams); |
|
|
}); |
|
|
|
|
|
it("transpose", function () { |
|
|
doStaffTest(violinDoubleStops, transposeDoubleStopsOutput, violinCrossTuneParams, { visualTranspose: 2 }); |
|
|
}); |
|
|
|
|
|
it("grace notes", function () { |
|
|
doStaffTest(graceNotes, graceNotesOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("warning recovery", function () { |
|
|
doStaffTest(warningRecovery, warningRecoveryOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("more tabs than voices", function () { |
|
|
doStaffTest(warningRecovery, warningRecoveryOutput, violinGuitarParams); |
|
|
}); |
|
|
|
|
|
it("grace-on-rest", function () { |
|
|
doStaffTest(graceOnRest, graceOnRestOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("tied note", function () { |
|
|
doStaffTest(tiedNote, tiedNoteOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("overlay", function () { |
|
|
doStaffTest(overlay, overlayOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("octave clef", function () { |
|
|
doStaffTest(octaveClef, octaveClefOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("font-size", function () { |
|
|
doVerticalTest(unusualFontSize, unusualFontSizeOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("weird note construction", function () { |
|
|
doStaffTest(weirdNoteConstruction, weirdNoteConstructionOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("staff-placement", function () { |
|
|
doVerticalTest(staffPlacement, staffPlacementOutput, violinParams); |
|
|
}); |
|
|
|
|
|
it("fonts", function () { |
|
|
var params = { |
|
|
format: { |
|
|
tablabelfont: "Courier New", |
|
|
tabnumberfont: "cursive", |
|
|
tabgracefont: "serif" |
|
|
} |
|
|
} |
|
|
doRender(graceNotes, violinParams, params); |
|
|
var label = document.querySelector("#paper .abcjs-instrument-name") |
|
|
var number = document.querySelector("#paper .abcjs-tab-number") |
|
|
var grace = document.querySelector("#paper .abcjs-tab-grace") |
|
|
var labelFont = label.getAttribute("font-family") |
|
|
var numberFont = number.getAttribute("font-family") |
|
|
var graceFont = grace.getAttribute("font-family") |
|
|
chai.assert.equal(labelFont, params.format.tablabelfont, "Label font not set") |
|
|
chai.assert.equal(numberFont, params.format.tabnumberfont, "Number font not set") |
|
|
chai.assert.equal(graceFont, params.format.tabgracefont, "Grace font not set") |
|
|
}); |
|
|
|
|
|
it("lining up", function () { |
|
|
var visualObj = doRender(liningUp, violinParams); |
|
|
var noteheads = document.querySelectorAll('path[data-name="G"],path[data-name="^F"],path[data-name="_A"],path[data-name="D"],path[data-name="C"],path[data-name="f"],path[data-name="e"],path[data-name="d"]') |
|
|
var i; |
|
|
for (i = 0; i < noteheads.length; i++) { |
|
|
var dim = noteheads[i].getBBox() |
|
|
var guide = document.createElementNS("http://www.w3.org/2000/svg", "line"); |
|
|
guide.setAttribute("class", "abcjs-cursor"); |
|
|
guide.setAttribute('x1', dim.x); |
|
|
guide.setAttribute('y1', dim.y); |
|
|
guide.setAttribute('x2', dim.x); |
|
|
guide.setAttribute('y2', dim.y+100); |
|
|
guide.setAttribute('stroke', "red"); |
|
|
var svg = document.querySelector("#paper svg"); |
|
|
svg.appendChild(guide); |
|
|
guide = document.createElementNS("http://www.w3.org/2000/svg", "line"); |
|
|
guide.setAttribute("class", "abcjs-cursor"); |
|
|
guide.setAttribute('x1', dim.x+dim.width); |
|
|
guide.setAttribute('y1', dim.y); |
|
|
guide.setAttribute('x2', dim.x+dim.width); |
|
|
guide.setAttribute('y2', dim.y+100); |
|
|
guide.setAttribute('stroke', "red"); |
|
|
svg.appendChild(guide); |
|
|
} |
|
|
var dots = visualObj[0].lines[0].staff[0].voices[0]; |
|
|
var tab = visualObj[0].lines[0].staff[1].voices[0]; |
|
|
for (i = 0; i < dots.length; i++) { |
|
|
if (dots.el_type === "note") { |
|
|
var dot = dots[i]; |
|
|
var number = tab[i]; |
|
|
chai.assert.equal(Math.round(number.abselem.x), Math.round(dot.abselem.heads[0].x + dot.abselem.heads[0].w / 2), "Number not centered") |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
it("bar numbers", function () { |
|
|
function checkForBarNumbers(el, line, element) { |
|
|
if (el.abselem.abcelem.type === 'bar_thin') { |
|
|
for (var i = 0; i < el.abselem.children.length; i++) { |
|
|
var relEl = el.abselem.children[i] |
|
|
if (relEl.type === "barNumber") |
|
|
chai.assert(false, "bar number found on line "+line+" element "+element) |
|
|
} |
|
|
} |
|
|
} |
|
|
doStaffTest(barNumbers, barNumbersOutput, violinParams, undefined, checkForBarNumbers); |
|
|
}); |
|
|
|
|
|
it("extra vertical", function() { |
|
|
var visualObj = doRender(noExtraVertical, violinParams) |
|
|
var firstLineTop1 = visualObj[0].lines[0].staffGroup.staffs[0].absoluteY |
|
|
var secondLineTop1 = visualObj[0].lines[0].staffGroup.staffs[1].absoluteY |
|
|
var difference1 = Math.round((secondLineTop1 - firstLineTop1)*1000)/1000 |
|
|
visualObj = doRender(extraVertical, violinParams) |
|
|
var firstLineTop2 = visualObj[0].lines[0].staffGroup.staffs[0].absoluteY |
|
|
var secondLineTop2 = visualObj[0].lines[0].staffGroup.staffs[1].absoluteY |
|
|
var difference2 = Math.round((secondLineTop2 - firstLineTop2)*1000)/1000 |
|
|
|
|
|
chai.assert.equal(difference2, difference1, "Spacing between staves is not correct") |
|
|
}) |
|
|
|
|
|
it("bracket-width", function() { |
|
|
var visualObj = doRender(bracketWidth, violinGuitarParams) |
|
|
var name = document.querySelector(".abcjs-instrument-name") |
|
|
var x = name.getAttribute("x") |
|
|
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() { |
|
|
|
|
|
var visualObj = doRender(subTitle, violinParams) |
|
|
}) |
|
|
|
|
|
it("crash chord", function() { |
|
|
|
|
|
var visualObj = doRender(crashChord, violinParams) |
|
|
}) |
|
|
|
|
|
it("crash-clef", function() { |
|
|
|
|
|
var visualObj = doRender(clefNone, violinParams) |
|
|
}) |
|
|
|
|
|
it("bracket-height", function() { |
|
|
var visualObj = doRender(bracketPlacement, violinGuitarParams) |
|
|
var lastStaff = document.querySelector(".abcjs-staff.abcjs-l0.abcjs-v3") |
|
|
var dim = lastStaff.getBBox() |
|
|
var bottom = dim.y + dim.height |
|
|
var brace = document.querySelector(".abcjs-brace") |
|
|
dim = brace.getBBox() |
|
|
var braceBottom = dim.y+dim.height |
|
|
chai.assert.equal(braceBottom, bottom, "Brace should go to bottom") |
|
|
|
|
|
doVerticalTest(bracketPlacement, bracketPlacementOutput, violinGuitarParams) |
|
|
}) |
|
|
|
|
|
it("kitchen sink", function() { |
|
|
doVerticalTest(kitchenSink, kitchenSinkOutput, violinGuitarParams) |
|
|
}) |
|
|
|
|
|
it("percussion clef", function() { |
|
|
var visualObj = doRender(percussionClef, violinParams) |
|
|
chai.assert(visualObj[0].lines[0].staff.length === 1, "Should skip percussion clef") |
|
|
}) |
|
|
|
|
|
it("firstStaffOnly", function() { |
|
|
doVerticalTest(firstStaffOnly, firstStaffOnlyOutput1, violinParams) |
|
|
doVerticalTest(firstStaffOnly, firstStaffOnlyOutput2, firstStaffOnlyParams) |
|
|
}) |
|
|
|
|
|
it("tab-lyrics", function() { |
|
|
doVerticalTest(lyrics, lyricsOutput, violinParams) |
|
|
}) |
|
|
}); |
|
|
|
|
|
function doRender(abc, tabParams, params) { |
|
|
var warningLine = document.getElementById('warnings') |
|
|
warningLine.innerHTML = "" |
|
|
var options = { |
|
|
add_classes: true, |
|
|
tablature: tabParams |
|
|
}; |
|
|
if (params) { |
|
|
var keys = Object.keys(params); |
|
|
for (var k = 0; k < keys.length; k++) { |
|
|
options[keys[k]] = params[keys[k]]; |
|
|
} |
|
|
} |
|
|
var visualObj = abcjs.renderAbc("paper", abc, options ); |
|
|
if (visualObj[0].warnings) { |
|
|
var el = document.querySelector("#warnings") |
|
|
if (el) |
|
|
el.innerHTML = visualObj[0].warnings.join(",") |
|
|
} |
|
|
return visualObj; |
|
|
} |
|
|
|
|
|
function getTabStaff(staffs, number) { |
|
|
var tabNumber = 0; |
|
|
for (var ii = 0; ii < staffs.length; ii++) { |
|
|
if (staffs[ii].clef.type === 'TAB') { |
|
|
if (tabNumber === number) { |
|
|
return staffs[ii].voices; |
|
|
} |
|
|
tabNumber++; |
|
|
} |
|
|
} |
|
|
return null; |
|
|
} |
|
|
|
|
|
function doStaffTest(abc, expected, tabParams, params, callback) { |
|
|
var visualObj = doRender(abc, tabParams, params); |
|
|
var lineLength = visualObj[0].lines.length; |
|
|
for (var i = 0; i < lineLength; i++) { |
|
|
var line = visualObj[0].lines[i]; |
|
|
var staffNumber = 0; |
|
|
var tab = getTabStaff(line.staff, staffNumber); |
|
|
if (tab == null) { |
|
|
chai.assert(false,"unexpected null value getting tab staff"); |
|
|
} |
|
|
while (tab != null) { |
|
|
for (var v = 0; v < tab.length; v++) { |
|
|
var thisVoice = tab[v] |
|
|
for (var j = 0; j < thisVoice.length; j++) { |
|
|
var el = Object.assign({}, thisVoice[j]); |
|
|
if (callback) |
|
|
callback(el, i, j) |
|
|
delete el.abselem |
|
|
var msg = "\nrcv: " + JSON.stringify(el, replacer) + "\n" + |
|
|
"exp: " + JSON.stringify(expected[i + staffNumber][j]) + "\n"; |
|
|
chai.assert.deepStrictEqual(el, expected[i + staffNumber][j], msg); |
|
|
} |
|
|
chai.assert.equal(thisVoice.length, expected[v].length, "line " + i + " length mismatch"); |
|
|
staffNumber++; |
|
|
} |
|
|
tab = getTabStaff(line.staff, staffNumber); |
|
|
} |
|
|
} |
|
|
chai.assert.equal((lineLength-1) +staffNumber, expected.length, "different numbers of lines"); |
|
|
return visualObj[0] |
|
|
} |
|
|
|
|
|
function doVerticalTest(abc, expected, tabParams, params) { |
|
|
var visualObj = doRender(abc, tabParams, params); |
|
|
var yPos = document.querySelectorAll("#paper .abcjs-top-line") |
|
|
for (var i = 0; i < yPos.length; i++) { |
|
|
var topLine = yPos[i] |
|
|
var dim = topLine.getBBox() |
|
|
chai.assert.equal(Math.round(dim.y), expected[i], "Vertical spacing of staves wrong") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|