App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
if (k.st < a.st) {
for (i1 = 1; i1 < i; i1++) {
a = path[i1]
if (a.ymn < z)
z = a.ymn
}
for (i1 = i; i1 < i2; i1++) {
a = path[i1]
if (a.ymx > h)
h = a.ymx
}
} else {
for (i1 = 1; i1 < i; i1++) {
a = path[i1]
if (a.ymx > h)
h = a.ymx
}
for (i1 = i; i1 < i2; i1++) {
a = path[i1]
if (a.ymn < z)
z = a.ymn
}
}
h += z
a = k
}
k.y = h - k.y
k.notes[0].pit = (k.y / 3 | 0) + 18
k.ys = h - k.ys
y = k.ymx
k.ymx = h - k.ymn
k.ymn = h - y
k.stem = -k.stem
} else {
k.notes[0].pit += h / 3 | 0
k.ys += h
k.y += h
k.ymx += h
k.ymn += h
}
}
// k.st = k1.st // keep the staff number for draw_sl2()
}
ty = k1.st > s_st2.st ? '/' : '\\'
if (sl.ty & C.SL_CENTER)
ty = ty + ty // type = // or \\
else if (k1.st == k2.st)
ty = ty == '/' ? '/\\' : '\\/' // type = /\ or \/
else
ty += dir > 0 ? '+' : '-' // type = .+ or .-
var savout = output
output = ""
draw_slur(path, sl, 1 /*true*/)
gene.a_sl.push([k1, s_st2, ty, output])
output = savout
return
}
/* fix endpoints */
x1 = k1.x
if (k1.notes && k1.notes[0].shhd)
x1 += k1.notes[0].shhd;
x2 = k2.x
if (k2.notes)
x2 += k2.notes[0].shhd
if (not1) { // start on a note
y1 = 3 * (not1.pit - 18) + 2 * dir
x1 += 3
} else { // start on a chord
y1 = dir > 0 ? k1.ymx + 2 : k1.ymn - 2
if (k1.type == C.NOTE) {
if (dir > 0) {
if (k1.stem > 0) {
x1 += 5
if (k1.beam_end
&& k1.nflags >= -1 /* if with a stem */
//fixme: check if at end of tuplet
&& !k1.in_tuplet) {
if (k1.nflags > 0) {
x1 += 2;
y1 = k1.ys - 3
} else {
y1 = k1.ys - 6
}
} else {
y1 = k1.ys + 3
}
} else {
y1 = k1.y + 8
}
} else {
if (k1.stem < 0) {
x1 -= 1
if (k2.grace) {
y1 = k1.y - 8
} else if (k1.beam_end
&& k1.nflags >= -1
&& (!k1.in_tuplet
|| k1.ys < y1 + 3)) {
if (k1.nflags > 0) {
x1 += 2;
y1 = k1.ys + 3
} else {
y1 = k1.ys + 6
}
} else {
y1 = k1.ys - 3
}
} else {
y1 = k1.y - 5
}
}
}
}
if (sl.nte) { // slur ending on a note
y2 = 3 * (sl.nte.pit - 18) + 2 * dir
x2 -= 3
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
y2 = k2.y - 5
}
}
}
}
if (k1.type != C.NOTE) {
y1 = y2 + 1.2 * dir;
x1 = k1.x + k1.wr * .5
if (x1 > x2 - 12)
x1 = x2 - 12
}
if (k2.type != C.NOTE) {
if (k1.type == C.NOTE)
y2 = y1 + 1.2 * dir
else
y2 = y1
if (k1 != k2)
x2 = k2.x - k2.wl * .3
}
if (nn >= 3) {
k = path[1]
if (k.type != C.BAR
&& k.x < x1 + 48) {
if (dir > 0) {
y = k.ymx - 2
if (y1 < y)
y1 = y
} else {
y = k.ymn + 2
if (y1 > y)
y1 = y
}
}
k = path[i2 - 1]
if (k.type != C.BAR
&& k.x > x2 - 48) {
if (dir > 0) {
y = k.ymx - 2
if (y2 < y)
y2 = y
} else {
y = k.ymn + 2
if (y2 > y)
y2 = y
}
}
}
a = (y2 - y1) / (x2 - x1) /* slur steepness */
if (a > SLUR_SLOPE || a < -SLUR_SLOPE) {
a = a > SLUR_SLOPE ? SLUR_SLOPE : -SLUR_SLOPE
if (a * dir > 0)
y1 = y2 - a * (x2 - x1)
else
y2 = y1 + a * (x2 - x1)
}
/* for big vertical jump, shift endpoints */
y = y2 - y1
if (y > 8)
y = 8
else if (y < -8)
y = -8
z = y
if (z < 0)
z = -z;
dx = .5 * z;
dy = .3 * y
if (y * dir > 0) {
x2 -= dx;
y2 -= dy
} else {
x1 += dx;
y1 += dy
}
/* special case for grace notes */
if (k1.grace)
x1 = k1.x - GSTEM_XOFF * .5
if (k2.grace)
x2 = k2.x + GSTEM_XOFF * .5
h = 0;
a = (y2 - y1) / (x2 - x1)
if (k1 != k2
&& k1.v == k2.v) {
addy = y1 - a * x1
for (i = 1; i < i2; i++) {
k = path[i]
switch (k.type) {
case C.NOTE:
case C.REST:
if (dir > 0) {
y = 3 * (k.notes[k.nhd].pit - 18) + 6
if (y < k.ymx)
y = k.ymx;
y -= a * k.x + addy
if (y > h)
h = y
} else {
y = 3 * (k.notes[0].pit - 18) - 6
if (y > k.ymn)
y = k.ymn;
y -= a * k.x + addy
if (y < h)
h = y
}
break
case C.GRACE:
for (g = k.extra; g; g = g.next) {
if (dir > 0) {
// y = 3 * (g.notes[g.nhd].pit - 18) + 6
// if (y < g.ymx)
y = g.ymx;
y -= a * g.x + addy
if (y > h)
h = y
} else {
( run in 1.269 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )