view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
bad_char: "Bad character '$1'",
bad_grace: "Bad character in grace note sequence",
bad_transp: "Bad transpose value",
bad_val: "Bad value in $1",
bar_grace: "Cannot have a bar in grace notes",
ignored: "$1: inside tune - ignored",
misplaced: "Misplaced '$1' in %%score",
must_note: "!$1! must be on a note",
must_note_rest: "!$1! must be on a note or a rest",
nonote_vo: "No note in voice overlay",
not_ascii: "Not an ASCII character",
not_enough_n: 'Not enough notes/rests for %%repeat',
not_enough_m: 'Not enough measures for %%repeat',
not_enough_p: "Not enough parameters in %%map",
not_in_tune: "Cannot have '$1' inside a tune",
notransp: "Cannot transpose with a temperament"
}
var self = this, // needed for modules
glovar = {
meter: {
type: C.METER, // meter in tune header
wmeasure: 1, // no M:
a_meter: [] // default: none
},
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
case "ornament":
case "stemdir":
case "vocal":
set_pos(cmd, param)
break
case "font":
get_font_scale(param)
break
case "fullsvg":
if (parse.state != 0) {
syntax(1, errs.not_in_tune, "%%fullsvg")
break
}
//fixme: should check only alpha, num and '_' characters
cfmt[cmd] = param
break
case "gracespace":
v = param.split(/\s+/)
for (i = 0; i < 3; i++)
if (isNaN(+v[i])) {
syntax(1, errs.bad_val, "%%gracespace")
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
.replace(/\n%[^%].*$/gm,'')
.replace(/^%%/gm,''))
parse.eol = file.indexOf('\n', i + 6)
if (parse.eol < 0)
parse.eol = eof
continue
}
switch (a[1]) {
case "select":
if (parse.state != 0) {
syntax(1, errs.not_in_tune, "%%select")
continue
}
select = uncomment(text.slice(7))
if (select[0] == '"')
select = select.slice(1, -1);
if (!select) {
delete parse.select
continue
}
select = select.replace(/\(/g, '\\(');
select = select.replace(/\)/g, '\\)');
// select = select.replace(/\|/g, '\\|');
parse.select = new RegExp(select, 'm')
continue
case "tune":
if (parse.state != 0) {
syntax(1, errs.not_in_tune, "%%tune")
continue
}
select = uncomment(a[2])
// if void %%tune, free all tune options
if (!select) {
parse.tune_opts = {}
continue
}
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
break
}
if (parse.tune_v_opts) {
opt.v_opts = parse.tune_v_opts;
parse.tune_v_opts = null
}
parse.eol = bol
continue
case "voice":
if (parse.state != 0) {
syntax(1, errs.not_in_tune, "%%voice")
continue
}
select = uncomment(a[2])
/* if void %%voice, free all voice options */
if (!select) {
parse.voice_opts = null
continue
}
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
if (s3.type == C.BAR) {
error(1, s3, "Bar in repeat sequence")
return
}
continue
}
if (--i <= 0)
break
}
if (!s3) {
error(1, s, errs.not_enough_n)
return
}
dur = s.time - s3.time;
i = k * n /* whole number of notes/rests to repeat */
for (s2 = s; s2; s2 = s2.next) {
if (!s2.dur) {
if (s2.type == C.BAR) {
error(1, s2, "Bar in repeat sequence")
return
}
continue
}
if (--i <= 0)
break
}
if (!s2
|| !s2.next) { /* should have some symbol */
error(1, s, errs.not_enough_n)
return
}
for (s2 = s.prev; s2 != s3; s2 = s2.prev) {
if (s2.type == C.NOTE) {
s2.beam_end = true
break
}
}
for (j = k; --j >= 0; ) {
i = n /* number of notes/rests */
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
/* check the measure repeat */
i = n /* number of measures to repeat */
for (s2 = s.prev.prev ; s2; s2 = s2.prev) {
if (s2.type == C.BAR
|| s2.time == tsfirst.time) {
if (--i <= 0)
break
}
}
if (!s2) {
error(1, s, errs.not_enough_m)
return
}
dur = s.time - s2.time /* repeat duration */
if (n == 1)
i = k /* repeat number */
else
i = n /* check only 2 measures */
for (s2 = s; s2; s2 = s2.next) {
if (s2.type == C.BAR) {
if (--i <= 0)
break
}
}
if (!s2) {
error(1, s, errs.not_enough_m)
return
}
/* if many 'repeat 2 measures'
* insert a new %%repeat after the next bar */
i = k /* repeat number */
if (n == 2 && i > 1) {
s2 = s2.next
if (!s2) {
error(1, s, errs.not_enough_m)
return
}
s2.repeat_n = n;
s2.repeat_k = --i
}
/* replace */
dur /= n
if (n == 2) { /* repeat 2 measures (once) */
s3 = s
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
v = a[2]
if (c[0] == '\\') {
if (c[1] == 't')
c = '\t'
else if (!c[1])
c = ' '
}
k = c.charCodeAt(0)
if (k >= 128) {
syntax(1, errs.not_ascii)
return
}
switch (char_tb[k][0]) {
case '0': // nil
case 'd':
case 'i':
case ' ':
break
case '"':
case '!':
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
// loop on the chord
while (1) {
// when in chord, get the slurs and decorations
if (in_chord) {
while (1) {
if (!c)
break
i = c.charCodeAt(0);
if (i >= 128) {
syntax(1, errs.not_ascii)
return //null
}
ty = char_tb[i]
switch (ty[0]) {
case '(':
sl1.push(parse_vpos());
c = line.char()
continue
case '!':
if (ty.length > 1)
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
parse_mac(k, mac[k], n)
n = 1
break
}
if (n)
continue
}
idx = c.charCodeAt(0)
if (idx >= 128) {
syntax(1, errs.not_ascii)
line.index++
break
}
type = char_tb[idx]
switch (type[0]) {
case ' ': // beam break
s = curvoice.last_note
if (s) {
s.beam_end = true
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
// %%map map_name note [print [note_head]] [param]*
function get_map(text) {
if (!text)
return
var i, note, notes, map, tmp, ns,
ty = '',
a = text.split(/\s+/)
if (a.length < 3) {
syntax(1, errs.not_enough_p)
return
}
ns = a[1]
if (ns[0] == '*' || ns.indexOf("all") == 0) {
ns = 'all'
} else {
if (ns.indexOf("octave,") == 0 // remove the octave part
|| ns.indexOf("key,") == 0) {
ty = ns[0]
ns = ns.split(',')[1]
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
if (a[1].indexOf('=') < 0) {
map[0] = a[1].split(',') // heads
i++
}
}
for (; i < a.length; i++) {
switch (a[i]) {
case "heads=":
if (!a[++i]) {
syntax(1, errs.not_enough_p)
break
}
map[0] = a[i].split(',')
break
case "print=":
case "play=":
case "print_notrp=":
if (!a[++i]) {
syntax(1, errs.not_enough_p)
break
}
tmp = new scanBuf;
tmp.buffer = a[i];
note = parse_acc_pit(tmp)
if (a[i - 1][5] == '_') // if print no transpose
note.notrp = 1 //true
if (a[i - 1][1] == 'r')
map[1] = note
else
map[3] = note
break
case "color=":
if (!a[++i]) {
syntax(1, errs.not_enough_p)
break
}
map[2] = a[i]
break
}
}
}
// get a abcm2ps/abcMIDI compatible transposition value as a base-40 interval
// The value may be