<font face="Arial, Verdana">Trying not to spam, but I cannot edit my posts after a while.</font>
<font face="Arial, Verdana">After lots of trial and error (mostly overlapping or extending too much), I found a decent setup for my chords, so until I will have more time to figure out a proper '&nbsp' vs. '' selection, I will stick to this. Tested with Arial Narrow font.</font>
<font face="Arial, Verdana"><br></font>
<font face="Arial, Verdana">slide.js:</font>
<font face="Arial, Verdana"><br></font>
regchord = /<span class="chord" style="display:inline">[{[]}]<\/span>([\u0080-\uFFFF,\w])([\u0080-\uFFFF,\w,\s,.,\,,!,\?,\;,:,|,\",\',-,_])(<br>)?/g,
replaceChords = function(mstr, $1, $2, $3, $4) {
var w='';
var $1len = 0, $2len = 0, slimchars = 'fiIÍjlrt.,;/ ()|"\'!:\';
for (var i = 0; i < $1.length; i++) if (slimchars.indexOf($1.charAt(i)) === -1) {$1len += 2;} else {$1len += 1;}
for (var i = 0; i < $2.length; i++) if (slimchars.indexOf($2.charAt(i)) === -1) {$2len += 2;} else {$2len += 1;}
for (var i = 0; i < $3.length; i++) if (slimchars.indexOf($2.charAt(i)) === -1) {$2len += 2;} else {$2len += 1;}
if ($1len >= $2len && !$4) {
if ($2.length){
if (!$3.length) {
for (c = 0; c < Math.floor(($1len - $2len) / 2) + 1; c++) {w+='_';}
} else {
for (c = 0; c < $1len - $2len + 2; c++) {w += '&nbsp;';}
}
} else {
if (!$3.length) {
for (c = 0; c < Math.ceil(($1len - $2len) / 2); c++) {w += '_';}
} else {
for (c = 0; c < $1len-$2len; c++) {w += '&nbsp;';}
}
};
} else {
if (!$2 && $3.charAt(0) == ' ') {for (c = 0; c < $1len; c++) {w += '&nbsp;';}}
}
return $.grep(['<span class="chord" style="display:inline"><span><strong><span>[</span>', $1, '<span>]</span></strong></span>', $2, w, $3, '</span>', $4], Boolean).join('');
};