Skip to content

Commit

Permalink
Fixed some bugs in the handling of background colors
Browse files Browse the repository at this point in the history
  • Loading branch information
sunesimonsen committed Aug 28, 2014
1 parent 6cefc8b commit 1ae3686
Showing 1 changed file with 18 additions and 21 deletions.
39 changes: 18 additions & 21 deletions lib/AnsiSerializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ function AnsiSerializer() {}

AnsiSerializer.prototype = new TextSerializer();

var colorPaletteByNumberOfColors = {
var colorPalettes = {
16: {
'#000000': 'black',
'#ff0000': 'red',
Expand All @@ -29,7 +29,7 @@ var colorPaletteByNumberOfColors = {
256: {}
};

var diffPaletteByNumberOfColors = {};
var diffPalettes = {};

function convertColorToObject(color) {
if (color.length < 6) {
Expand All @@ -56,22 +56,25 @@ function firstUp(text) {
return text.substring(0, 1).toUpperCase() + text.substring(1);
}

diffPaletteByNumberOfColors[16] = shim.map(getKeys(colorPaletteByNumberOfColors[16]), convertColorToObject);
diffPaletteByNumberOfColors[256] = [].concat(diffPaletteByNumberOfColors[16]);
diffPalettes[16] = shim.map(getKeys(colorPalettes[16]), convertColorToObject);
diffPalettes['bg16'] = shim.map(shim.filter(getKeys(colorPalettes[16]), function (color) {
return color !== "#808080";
}), convertColorToObject);
diffPalettes[256] = [].concat(diffPalettes[16]);
var nextAnsiColorNumber = 16;
function registerNext256PaletteEntry(obj) {
diffPaletteByNumberOfColors[256].push(obj);
colorPaletteByNumberOfColors[256][toHexColor(obj)] = nextAnsiColorNumber;
diffPalettes[256].push(obj);
colorPalettes[256][toHexColor(obj)] = nextAnsiColorNumber;
nextAnsiColorNumber += 1;
}

for (var r = 0 ; r < 6 ; r += 1) {
for (var g = 0 ; g < 6 ; g += 1) {
for (var b = 0 ; b < 6 ; b += 1) {
registerNext256PaletteEntry({
R: Math.round(r * 256/6),
G: Math.round(g * 256/6),
B: Math.round(b * 256/6)
R: Math.round(r * 256 / 6),
G: Math.round(g * 256 / 6),
B: Math.round(b * 256 / 6)
});
}
}
Expand All @@ -84,12 +87,6 @@ forEach([
registerNext256PaletteEntry({R: value, G: value, B: value});
});


function findClosestColorInDiffPalette(color, numberOfColors) {
var colorObject = colorDiff.closest(convertColorToObject(color), diffPaletteByNumberOfColors[numberOfColors]);
return colorPaletteByNumberOfColors[numberOfColors][toHexColor(colorObject)];
}

var rgbRegexp = /^(?:bg)?#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
AnsiSerializer.prototype.text = function (content) {
if (arguments.length > 1) {
Expand All @@ -103,19 +100,19 @@ AnsiSerializer.prototype.text = function (content) {
var isBackgroundColor = styleName.substring(0, 2) === 'bg';
var colorName = isBackgroundColor ? styleName.substring(2) : styleName;

var color16Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName), diffPaletteByNumberOfColors[16]));
var closestColor16 = colorPaletteByNumberOfColors[16][color16Hex];
var color16Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName),
diffPalettes[isBackgroundColor ? 'bg16' : 16]));
var closestColor16 = colorPalettes[16][color16Hex];

var color256Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName), diffPaletteByNumberOfColors[256]));
var closest256ColorIndex = colorPaletteByNumberOfColors[256][color256Hex];
var color256Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName), diffPalettes[256]));
var closest256ColorIndex = colorPalettes[256][color256Hex];

var closestColor16 = findClosestColorInDiffPalette(colorName, 16);
var closest256ColorIndex = findClosestColorInDiffPalette(isBackgroundColor ? styleName.substring(2) : styleName, 256);
if (isBackgroundColor) {
styleName = 'bg' + firstUp(closestColor16);
} else {
styleName = closestColor16;
}

var open = ansiStyles[styleName].open;
var close = ansiStyles[styleName].close;
if (color16Hex !== color256Hex) {
Expand Down

0 comments on commit 1ae3686

Please sign in to comment.