inz
ansi.js (raw)
/*
* Copyright (c) 2020 Santtu Lakkala
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
(function(){
var pal256 = ["#000","#800000","#008000","#808000","#000080","#800080","#008080","#c0c0c0","#808080","#f00","#0f0","#ff0","#00f","#f0f","#0ff","#fff","#000","#00005f","#000087","#0000af","#0000d7","#00f","#005f00","#005f5f","#005f87","#005faf","#005fd7","#005fff","#008700","#00875f","#008787","#0087af","#0087d7","#0087ff","#00af00","#00af5f","#00af87","#00afaf","#00afd7","#00afff","#00d700","#00d75f","#00d787","#00d7af","#00d7d7","#00d7ff","#0f0","#00ff5f","#00ff87","#00ffaf","#00ffd7","#0ff","#5f0000","#5f005f","#5f0087","#5f00af","#5f00d7","#5f00ff","#5f5f00","#5f5f5f","#5f5f87","#5f5faf","#5f5fd7","#5f5fff","#5f8700","#5f875f","#5f8787","#5f87af","#5f87d7","#5f87ff","#5faf00","#5faf5f","#5faf87","#5fafaf","#5fafd7","#5fafff","#5fd700","#5fd75f","#5fd787","#5fd7af","#5fd7d7","#5fd7ff","#5fff00","#5fff5f","#5fff87","#5fffaf","#5fffd7","#5fffff","#870000","#87005f","#870087","#8700af","#8700d7","#8700ff","#875f00","#875f5f","#875f87","#875faf","#875fd7","#875fff","#878700","#87875f","#878787","#8787af","#8787d7","#8787ff","#87af00","#87af5f","#87af87","#87afaf","#87afd7","#87afff","#87d700","#87d75f","#87d787","#87d7af","#87d7d7","#87d7ff","#87ff00","#87ff5f","#87ff87","#87ffaf","#87ffd7","#87ffff","#af0000","#af005f","#af0087","#af00af","#af00d7","#af00ff","#af5f00","#af5f5f","#af5f87","#af5faf","#af5fd7","#af5fff","#af8700","#af875f","#af8787","#af87af","#af87d7","#af87ff","#afaf00","#afaf5f","#afaf87","#afafaf","#afafd7","#afafff","#afd700","#afd75f","#afd787","#afd7af","#afd7d7","#afd7ff","#afff00","#afff5f","#afff87","#afffaf","#afffd7","#afffff","#d70000","#d7005f","#d70087","#d700af","#d700d7","#d700ff","#d75f00","#d75f5f","#d75f87","#d75faf","#d75fd7","#d75fff","#d78700","#d7875f","#d78787","#d787af","#d787d7","#d787ff","#d7af00","#d7af5f","#d7af87","#d7afaf","#d7afd7","#d7afff","#d7d700","#d7d75f","#d7d787","#d7d7af","#d7d7d7","#d7d7ff","#d7ff00","#d7ff5f","#d7ff87","#d7ffaf","#d7ffd7","#d7ffff","#f00","#ff005f","#ff0087","#ff00af","#ff00d7","#f0f","#ff5f00","#ff5f5f","#ff5f87","#ff5faf","#ff5fd7","#ff5fff","#ff8700","#ff875f","#ff8787","#ff87af","#ff87d7","#ff87ff","#ffaf00","#ffaf5f","#ffaf87","#ffafaf","#ffafd7","#ffafff","#ffd700","#ffd75f","#ffd787","#ffd7af","#ffd7d7","#ffd7ff","#ff0","#ffff5f","#ffff87","#ffffaf","#ffffd7","#fff","#080808","#121212","#1c1c1c","#262626","#303030","#3a3a3a","#444","#4e4e4e","#585858","#626262","#6c6c6c","#767676","#808080","#8a8a8a","#949494","#9e9e9e","#a8a8a8","#b2b2b2","#bcbcbc","#c6c6c6","#d0d0d0","#dadada","#e4e4e4","#eee"];
Array.prototype.slice.call(document.getElementsByClassName('language-ansi')).forEach(function (e) {
var t = e.textContent;
var state = {
bold: false,
reverse: false,
underline: false,
color: pal256[7],
colorIdx: 7,
background: pal256[0],
bgSet: false,
};
state.applyStyle = function (e) {
if (this.bold)
e.style['font-weight'] = 'bold';
if (this.underline)
e.style['text-decoration'] = 'underline';
var fg = this.colorIdx === false ? this.color : pal256[this.colorIdx + 8 * !!this.bold];
e.style[this.reverse ? 'background-color' : 'color'] = fg;
if (this.reverse || this.bgSet)
e.style[this.reverse ? 'color' : 'background-color'] = this.background;
};
e.textContent = '';
e.style['white-space'] = 'pre';
e.style['background-color'] = pal256[0];
e.style['line-height'] = 'normal';
if (e.style['display'] != 'block')
e.style['display'] = 'inline-block';
t.split(/(?=\033\[[\d;]*m)/).forEach(function (s) {
var m = s.match(/^\033\[([\d;]*)m(.*$)/s);
var se = document.createElement('span');
if (!m)
se.textContent = s;
else {
var v = (m[1] || '0').split(/;/).map((n) => parseInt(n));
for (var i = 0; i < v.length; i++) {
switch (v[i]) {
case 0:
state.bold = state.reverse = state.underline = false;
state.colorIdx = 7;
state.background = pal256[0];
state.bgSet = false;
break;
case 1:
state.bold = true;
break;
case 7:
state.reverse = true;
break;
case 4:
state.underline = true;
break;
case 30:
case 31:
case 32:
case 33:
case 34:
case 35:
case 36:
case 37:
state.colorIdx = v[i] % 10;
break;
case 38:
if (v[i + 1] == 2) {
state.colorIdx = false;
state.color = 'rgb(' + v[i + 2].toString() + ', ' + v[i + 3].toString() + ', ' + v[i + 4].toString() + ')';
i += 4;
} else if (v[i + 1] == 5) {
state.colorIdx = false;
state.color = pal256[v[i + 2]];
i += 2;
}
break;
case 40:
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
state.background = pal256[v[i] % 10];
state.bgSet = true;
break;
case 48:
state.bgSet = true;
if (v[i + 1] == 2) {
state.background = 'rgb(' + v[i + 2].toString() + ', ' + v[i + 3].toString() + ', ' + v[i + 4].toString() + ')';
i += 4;
} else if (v[i + 1] == 5) {
state.background = pal256[v[i + 2]];
i += 2;
}
break;
}
}
se.textContent = m[2];
}
state.applyStyle(se);
e.appendChild(se);
});
});
})();