'use strict';
var hl = require('highlight.js');
var exts = {
'js': 'javascript',
'sh': 'bash',
'md': 'markdown'
};
function multiLineComments(match) {
var ret = match;
var lines = match.split('\n');
var ln = lines.length,
i;
if (ln > 1) {
for (i = 0; i < ln; i++) {
if (i === 0) {
ret = lines[i] + '</span>';
} else if (i === ln) {
ret = ret + '<span class="comment">' + lines[i];
} else {
ret = ret + '\n';
if (lines[i] !== '') {
ret = ret + '<span class="comment">' + lines[i] + '</span>';
}
}
}
}
return ret;
}
module.exports = function hifile(str, ext) {
var code, lines, col = '',
ln;
ext = exts[ext] || ext;
try {
if (ext) {
code = hl.highlight(exts[ext] || ext, str);
} else {
code = hl.highlightAuto(str);
}
} catch (e) {
code = hl.highlightAuto(str);
}
code.value = code.value.replace(/<span class="comment">(.|\n)+?<\/span>/gm, multiLineComments);
lines = code.value.split('\n');
lines.forEach(function(line, i, arr) {
ln = i + 1;
arr[i] = '<div id="H' + ln + '" class="cl">' + arr[i] + '</div>';
col = col + '<div id="L' + ln + '" class="ln"><a href="#L' + ln + '">' + ln + '</a></div>';
});
code = lines.join('\n');
return '<div class="hifile hljs"><div id="col">' + col + '</div><div id="code">' + code + '</div></div>';
};