App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/abc2svg-1.js view on Meta::CPAN
"5": "𝄫"
}
// convert the escape sequences to utf-8
function cnv_escape(src, flag) {
var c, c2,
dst = "",
i, j = 0
while (1) {
i = src.indexOf('\\', j)
if (i < 0)
break
dst += src.slice(j, i);
c = src[++i]
if (!c)
return dst + '\\'
switch (c) {
case '0':
case '2':
if (src[i + 1] != '0')
break
c2 = oct_acc[src[i + 2]]
if (c2) {
dst += c2;
j = i + 3
continue
}
break
case 'u':
j = Number("0x" + src.slice(i + 1, i + 5));
if (isNaN(j) || j < 0x20) {
dst += src[++i] + "\u0306" // breve accent
j = i + 1
continue
}
c = String.fromCharCode(j)
if (c == '\\') {
i += 4
break
}
dst += c
j = i + 5
continue
case 't': // TAB
dst += '\t';
j = i + 1
continue
case 'n': // new line (voice name)
dst += '\n';
j = i + 1
continue
default:
c2 = abc_utf[src.slice(i, i + 2)]
if (c2) {
dst += c2;
j = i + 2
continue
}
// try unicode combine characters
c2 = src[i + 1]
if (!c2)
break // !! the next test is true if c2 is undefined !!
if (!/[A-Za-z]/.test(c2))
break
switch (c) {
case '`':
dst += c2 + "\u0300" // grave
j = i + 2
continue
case "'":
dst += c2 + "\u0301" // acute
j = i + 2
continue
case '^':
dst += c2 + "\u0302" // circumflex
j = i + 2
continue
case '~':
dst += c2 + "\u0303" // tilde
j = i + 2
continue
case '=':
dst += c2 + "\u0304" // macron
j = i + 2
continue
case '_':
dst += c2 + "\u0305" // overline
j = i + 2
continue
case '.':
dst += c2 + "\u0307" // dot
j = i + 2
continue
case '"':
dst += c2 + "\u0308" // dieresis
j = i + 2
continue
case 'o':
dst += c2 + "\u030a" // ring
j = i + 2
continue
case 'H':
dst += c2 + "\u030b" // hungarumlaut
j = i + 2
continue
case 'v':
dst += c2 + "\u030c" // caron
j = i + 2
continue
// case ',':
// dst += c2 + "\u0326" // comma below
// j = i + 2
// continue
case 'c':
dst += c2 + "\u0327" // cedilla
j = i + 2
continue
case ';':
dst += c2 + "\u0328" // ogonek
( run in 0.899 second using v1.01-cache-2.11-cpan-5a3173703d6 )