assets/js/clipboard.js:import_ansi(): correctly support sequence of comma-separated SGR parameters.

assets/js/clipboard.js:import_ansi(): support {bold,faint,reset} SGR parameters.
assets/js/color.js: adds ansi_[bf]g_bold_import[].
This commit is contained in:
Lucio Andrés Illanes Albornoz 2019-08-27 08:45:39 +02:00
parent 179b6b7c2d
commit f276aa34f5
2 changed files with 69 additions and 36 deletions

View File

@ -93,42 +93,37 @@ var clipboard = (function () {
var lines_out = []
var w = 0, h = 0
for (var y = 0; y < lines_in.length; y++) {
var bg = 1, fg = 15
var bg = 1, bold = false, fg = 15
var cells = [], line = lines_in[y]
if (line.length === 0) {
continue
} else {
for (var x = 0; x < line.length; x++) {
var m = line.substring(x).match(/^\x1b\[(\d{1,3});(\d{1,3})m/);
var m = line.substring(x).match(/^\x1b\[((?:\d{1,3};?)+)m/)
if (m !== null) {
if (ansi_bg_import[parseInt(m[1])] !== undefined) {
bg = ansi_bg_import[parseInt(m[1])];
m[1].split(";").forEach(function(c){
c = parseInt(c);
if (c == 0) {
bg = 1; bold = false; fg = 15;
} else if (c == 1) {
bold = true;
} else if (c == 2) {
bold = false;
} else if (bold && (ansi_bg_bold_import[c] !== undefined)) {
bg = ansi_bg_bold_import[c];
} else if (!bold && (ansi_bg_import[c] !== undefined)) {
bg = ansi_bg_import[c];
} else if (bold && (ansi_fg_bold_import[c] !== undefined)) {
fg = ansi_fg_bold_import[c];
} else if (!bold && (ansi_fg_import[c] !== undefined)) {
fg = ansi_fg_import[c];
}
if (ansi_fg_import[parseInt(m[1])] !== undefined) {
fg = ansi_fg_import[parseInt(m[1])];
}
if (ansi_bg_import[parseInt(m[2])] !== undefined) {
bg = ansi_bg_import[parseInt(m[2])];
}
if (ansi_fg_import[parseInt(m[2])] !== undefined) {
fg = ansi_fg_import[parseInt(m[2])];
}
x += (m[0].length - 1)
} else {
var m = line.substring(x).match(/^\x1b\[(\d{1,3})m/);
if (m !== null) {
if (ansi_bg_import[parseInt(m[1])] !== undefined) {
bg = ansi_bg_import[parseInt(m[1])];
}
if (ansi_fg_import[parseInt(m[1])] !== undefined) {
fg = ansi_fg_import[parseInt(m[1])];
}
x += (m[0].length - 1)
});
x += (m[0].length - 1);
} else {
cells.push({bg: bg, fg: fg, value: line[x]})
}
}
}
if (cells.length > 0) {
if (w < cells.length) {
w = cells.length

View File

@ -70,7 +70,7 @@ Object.keys(css_lookup).forEach(function(color){
var ansi_fg = [
97, // Bright White
30, // Black
94, // Light Blue
94, // Blue
32, // Green
91, // Red
31, // Light Red
@ -80,7 +80,7 @@ var ansi_fg = [
92, // Light Green
36, // Cyan
96, // Light Cyan
34, // Blue
34, // Light Blue
95, // Light Pink
90, // Grey
37, // Light Grey
@ -89,7 +89,7 @@ var ansi_fg = [
var ansi_fg_import = {
97: 0, // Bright White
30: 1, // Black
94: 2, // Light Blue
94: 2, // Blue
32: 3, // Green
91: 4, // Red
31: 5, // Light Red
@ -99,16 +99,35 @@ var ansi_fg_import = {
92: 9, // Light Green
36: 10, // Cyan
96: 11, // Light Cyan
34: 12, // Blue
34: 12, // Light Blue
95: 13, // Light Pink
90: 14, // Grey
37: 15, // Light Grey
}
var ansi_fg_bold_import = {
97: 0, // Bright White
30: 14, // Grey
94: 12, // Light Blue
32: 9, // Light Green
91: 4, // Light Red
31: 4, // Light Red
35: 13, // Light Pink
33: 8, // Light Yellow
93: 8, // Light Yellow
92: 9, // Light Green
36: 11, // Light Cyan
96: 11, // Light Cyan
34: 12, // Light Blue
95: 13, // Light Pink
90: 14, // Grey
37: 0, // Bright White
}
var ansi_bg = [
107, // Bright White
40, // Black
104, // Light Blue
104, // Blue
42, // Green
101, // Red
41, // Light Red
@ -118,16 +137,35 @@ var ansi_bg = [
102, // Light Green
46, // Cyan
106, // Light Cyan
44, // Blue
44, // Light Blue
105, // Light Pink
100, // Grey
47, // Light Grey
]
var ansi_bg_bold_import = {
107: 0, // Bright White
40: 14, // Black
104: 12, // Light Blue
42: 9, // Light Green
101: 4, // Light Red
41: 4, // Light Red
45: 13, // Light Pink
43: 8, // Light Yellow
103: 8, // Light Yellow
102: 9, // Light Green
46: 11, // Light Cyan
106: 11, // Light Cyan
44: 12, // Light Blue
105: 13, // Light Pink
100: 14, // Grey
47: 0, // Bright White
}
var ansi_bg_import = {
107: 0, // Bright White
40: 1, // Black
104: 2, // Light Blue
104: 2, // Blue
42: 3, // Green
101: 4, // Red
41: 5, // Light Red
@ -137,7 +175,7 @@ var ansi_bg_import = {
102: 9, // Light Green
46: 10, // Cyan
106: 11, // Light Cyan
44: 12, // Blue
44: 12, // Light Blue
105: 13, // Light Pink
100: 14, // Grey
47: 15, // Light Grey