;// Format ANSI to HTML if(typeof(Drone) === 'undefined') { Drone = {}; } (function() { Drone.LineFormatter = function() {}; Drone.LineFormatter.prototype = { regex: /\u001B\[([0-9]+;?)*[Km]/g, styles: [], format: function(s) { // Check for newline and early exit? s = s.replace(//g, ">"); var output = ""; var current = 0; while (m = this.regex.exec(s)) { var part = s.substring(current, m.index); current = this.regex.lastIndex; var token = s.substr(m.index, this.regex.lastIndex - m.index); var code = token.substr(2, token.length-2); var pre = ""; var post = ""; switch (code) { case 'm': case '0m': var len = this.styles.length; for (var i=0; i < len; i++) { this.styles.pop(); post += "" } break; case '30;42m': pre = ''; break; case '36m': case '36;1m': pre = ''; break; case '31m': case '31;31m': pre = ''; break; case '33m': case '33;33m': pre = ''; break; case '32m': case '0;32m': pre = ''; break; case '90m': pre = ''; break; case 'K': case '0K': case '1K': case '2K': break; } if (pre !== "") { this.styles.push(pre); } output += part + pre + post; } var part = s.substring(current, s.length); output += part; return output; } }; })();