Add CNET style Y-Style/Q-Style color code support
This commit is contained in:
parent
2c7354b4fa
commit
d7aabba847
|
@ -7,19 +7,19 @@ const { getPredefinedMCIValue } = require('./predefined_mci.js');
|
||||||
// deps
|
// deps
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
|
||||||
exports.stripPipeCodes = exports.stripEnigmaCodes = stripEnigmaCodes;
|
exports.stripMciColorCodes = stripMciColorCodes;
|
||||||
exports.pipeStrLen = exports.enigmaStrLen = enigmaStrLen;
|
exports.pipeStringLength = pipeStringLength;
|
||||||
exports.pipeToAnsi = exports.renegadeToAnsi = renegadeToAnsi;
|
exports.pipeToAnsi = exports.renegadeToAnsi = renegadeToAnsi;
|
||||||
exports.controlCodesToAnsi = controlCodesToAnsi;
|
exports.controlCodesToAnsi = controlCodesToAnsi;
|
||||||
|
|
||||||
// :TODO: Not really happy with the module name of "color_codes". Would like something better
|
// :TODO: Not really happy with the module name of "color_codes". Would like something better ... control_code_string?
|
||||||
|
|
||||||
function stripEnigmaCodes(s) {
|
function stripMciColorCodes(s) {
|
||||||
return s.replace(/\|[A-Z\d]{2}/g, '');
|
return s.replace(/\|[A-Z\d]{2}/g, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
function enigmaStrLen(s) {
|
function pipeStringLength(s) {
|
||||||
return stripEnigmaCodes(s).length;
|
return stripMciColorCodes(s).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ansiSgrFromRenegadeColorCode(cc) {
|
function ansiSgrFromRenegadeColorCode(cc) {
|
||||||
|
@ -62,6 +62,37 @@ function ansiSgrFromRenegadeColorCode(cc) {
|
||||||
}[cc] || 'normal');
|
}[cc] || 'normal');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ansiSgrFromCnetStyleColorCode(cc) {
|
||||||
|
return ANSI.sgr({
|
||||||
|
c0 : [ 'reset', 'black' ],
|
||||||
|
c1 : [ 'reset', 'red' ],
|
||||||
|
c2 : [ 'reset', 'green' ],
|
||||||
|
c3 : [ 'reset', 'yellow' ],
|
||||||
|
c4 : [ 'reset', 'blue' ],
|
||||||
|
c5 : [ 'reset', 'magenta' ],
|
||||||
|
c6 : [ 'reset', 'cyan' ],
|
||||||
|
c7 : [ 'reset', 'white' ],
|
||||||
|
|
||||||
|
c8 : [ 'bold', 'black' ],
|
||||||
|
c9 : [ 'bold', 'red' ],
|
||||||
|
ca : [ 'bold', 'green' ],
|
||||||
|
cb : [ 'bold', 'yellow' ],
|
||||||
|
cc : [ 'bold', 'blue' ],
|
||||||
|
cd : [ 'bold', 'magenta' ],
|
||||||
|
ce : [ 'bold', 'cyan' ],
|
||||||
|
cf : [ 'bold', 'white' ],
|
||||||
|
|
||||||
|
z0 : [ 'blackBG' ],
|
||||||
|
z1 : [ 'redBG' ],
|
||||||
|
z2 : [ 'greenBG' ],
|
||||||
|
z3 : [ 'yellowBG' ],
|
||||||
|
z4 : [ 'blueBG' ],
|
||||||
|
z5 : [ 'magentaBG' ],
|
||||||
|
z6 : [ 'cyanBG' ],
|
||||||
|
z7 : [ 'whiteBG' ],
|
||||||
|
}[cc] || 'normal');
|
||||||
|
}
|
||||||
|
|
||||||
function renegadeToAnsi(s, client) {
|
function renegadeToAnsi(s, client) {
|
||||||
if(-1 == s.indexOf('|')) {
|
if(-1 == s.indexOf('|')) {
|
||||||
return s; // no pipe codes present
|
return s; // no pipe codes present
|
||||||
|
@ -102,6 +133,8 @@ function renegadeToAnsi(s, client) {
|
||||||
// * PCBoard : @X## where the first number/char is FG color, and second is BG
|
// * PCBoard : @X## where the first number/char is FG color, and second is BG
|
||||||
// * WildCat! : @##@ the same as PCBoard without the X prefix, but with a @ suffix
|
// * WildCat! : @##@ the same as PCBoard without the X prefix, but with a @ suffix
|
||||||
// * WWIV : ^#
|
// * WWIV : ^#
|
||||||
|
// * CNET Y-Style : 0x19## where ## is a specific set of codes -- this is the older format
|
||||||
|
// * CNET Q-style : 0x11##} where ## is a specific set of codes -- this is the newer format
|
||||||
//
|
//
|
||||||
// TODO: Add Synchronet and Celerity format support
|
// TODO: Add Synchronet and Celerity format support
|
||||||
//
|
//
|
||||||
|
@ -109,7 +142,7 @@ function renegadeToAnsi(s, client) {
|
||||||
// * http://wiki.synchro.net/custom:colors
|
// * http://wiki.synchro.net/custom:colors
|
||||||
//
|
//
|
||||||
function controlCodesToAnsi(s, client) {
|
function controlCodesToAnsi(s, client) {
|
||||||
const RE = /(\|([A-Z0-9]{2})|\|)|(@X([0-9A-F]{2}))|(@([0-9A-F]{2})@)|(\x03[0-9]|\x03)/g; // eslint-disable-line no-control-regex
|
const RE = /(\|([A-Z0-9]{2})|\|)|(@X([0-9A-F]{2}))|(@([0-9A-F]{2})@)|(\x03[0-9]|\x03)|(\x19(c[0-9a-f]|z[0-7]|n1|f1)|\x19)|(\x11(c[0-9a-f]|z[0-7]|n1|f1)}|\x11)/g; // eslint-disable-line no-control-regex
|
||||||
|
|
||||||
let m;
|
let m;
|
||||||
let result = '';
|
let result = '';
|
||||||
|
@ -213,6 +246,19 @@ function controlCodesToAnsi(s, client) {
|
||||||
result += s.substr(lastIndex, m.index - lastIndex) + v;
|
result += s.substr(lastIndex, m.index - lastIndex) + v;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '\x19' :
|
||||||
|
case '\0x11' :
|
||||||
|
// CNET "Y-Style" & "Q-Style"
|
||||||
|
v = m[9] || m[11];
|
||||||
|
if('n1' === v) {
|
||||||
|
result += '\n';
|
||||||
|
} else if('f1' === v) {
|
||||||
|
result += ANSI.clearScreen();
|
||||||
|
} else {
|
||||||
|
result += ansiSgrFromCnetStyleColorCode(v);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastIndex = RE.lastIndex;
|
lastIndex = RE.lastIndex;
|
||||||
|
|
Loading…
Reference in New Issue