From 3ffccc35dab8b8f52b025241a24dc0e19ff8aa93 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 21 Dec 2015 18:07:03 -0700 Subject: [PATCH] Switch to Renegade style color codes as default pipe code system --- core/client_term.js | 2 +- core/color_codes.js | 74 ++++++++++++++++++++------------------ core/connect.js | 6 ++-- core/vertical_menu_view.js | 4 +-- 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/core/client_term.js b/core/client_term.js index 7b367583..2cf90ac3 100644 --- a/core/client_term.js +++ b/core/client_term.js @@ -159,7 +159,7 @@ ClientTerminal.prototype.rawWrite = function(s) { }; ClientTerminal.prototype.pipeWrite = function(s, spec) { - spec = spec || 'enigma'; + spec = spec || 'renegade'; var conv = { enigma : enigmaToAnsi, diff --git a/core/color_codes.js b/core/color_codes.js index 1efbb071..3ccb9029 100644 --- a/core/color_codes.js +++ b/core/color_codes.js @@ -7,10 +7,10 @@ var getPredefinedMCIValue = require('./predefined_mci.js').getPredefinedMCIValue var assert = require('assert'); var _ = require('lodash'); -exports.pipeToAnsi = exports.enigmaToAnsi = enigmaToAnsi; +exports.enigmaToAnsi = enigmaToAnsi; exports.stripPipeCodes = exports.stripEnigmaCodes = stripEnigmaCodes; exports.pipeStrLen = exports.enigmaStrLen = enigmaStrLen; -exports.renegadeToAnsi = renegadeToAnsi; +exports.pipeToAnsi = exports.renegadeToAnsi = renegadeToAnsi; // :TODO: Not really happy with the module name of "color_codes". Would like something better @@ -83,13 +83,13 @@ function enigmaStrLen(s) { return stripEnigmaCodes(s).length; } -function renegadeToAnsi(s) { -if(-1 == s.indexOf('|')) { +function renegadeToAnsi(s, client) { + if(-1 == s.indexOf('|')) { return s; // no pipe codes present } var result = ''; - var re = /\|(\d{2}|\|)/g; + var re = /\|([A-Z\d]{2}|\|)/g; var m; var lastIndex = 0; while((m = re.exec(s))) { @@ -101,42 +101,46 @@ if(-1 == s.indexOf('|')) { } // convert to number - val = parseInt(val, 10); + val = parseInt(val, 10); if(isNaN(val)) { - val = 0; + val = getPredefinedMCIValue(client, m[1]) || ('|' + m[1]); // value itself or literal } - assert(val >= 0 && val <= 23); - var attr = ansi.sgr({ - 0 : [ 'reset', 'black' ], - 1 : [ 'reset', 'blue' ], - 2 : [ 'reset', 'green' ], - 3 : [ 'reset', 'cyan' ], - 4 : [ 'reset', 'red' ], - 5 : [ 'reset', 'magenta' ], - 6 : [ 'reset', 'yellow' ], - 7 : [ 'reset', 'white' ], + if(_.isString(val)) { + result += s.substr(lastIndex, m.index - lastIndex) + val; + } else { + var attr = ansi.sgr({ + 0 : [ 'reset', 'black' ], + 1 : [ 'reset', 'blue' ], + 2 : [ 'reset', 'green' ], + 3 : [ 'reset', 'cyan' ], + 4 : [ 'reset', 'red' ], + 5 : [ 'reset', 'magenta' ], + 6 : [ 'reset', 'yellow' ], + 7 : [ 'reset', 'white' ], - 8 : [ 'bold', 'black' ], - 9 : [ 'bold', 'blue' ], - 10 : [ 'bold', 'green' ], - 11 : [ 'bold', 'cyan' ], - 12 : [ 'bold', 'red' ], - 13 : [ 'bold', 'magenta' ], - 14 : [ 'bold', 'yellow' ], - 15 : [ 'bold', 'white' ], + 8 : [ 'bold', 'black' ], + 9 : [ 'bold', 'blue' ], + 10 : [ 'bold', 'green' ], + 11 : [ 'bold', 'cyan' ], + 12 : [ 'bold', 'red' ], + 13 : [ 'bold', 'magenta' ], + 14 : [ 'bold', 'yellow' ], + 15 : [ 'bold', 'white' ], - 16 : [ 'blackBG' ], - 17 : [ 'blueBG' ], - 18 : [ 'greenBG' ], - 19 : [ 'cyanBG' ], - 20 : [ 'redBG' ], - 21 : [ 'magentaBG' ], - 22 : [ 'yellowBG' ], - 23 : [ 'whiteBG' ], - }[val] || 'normal'); + 16 : [ 'blackBG' ], + 17 : [ 'blueBG' ], + 18 : [ 'greenBG' ], + 19 : [ 'cyanBG' ], + 20 : [ 'redBG' ], + 21 : [ 'magentaBG' ], + 22 : [ 'yellowBG' ], + 23 : [ 'whiteBG' ], + }[val] || 'normal'); + + result += s.substr(lastIndex, m.index - lastIndex) + attr; + } - result += s.substr(lastIndex, m.index - lastIndex) + attr; lastIndex = re.lastIndex; } diff --git a/core/connect.js b/core/connect.js index cd20a619..67ab1c1f 100644 --- a/core/connect.js +++ b/core/connect.js @@ -78,9 +78,9 @@ function prepareTerminal(term) { function displayBanner(term) { term.pipeWrite( - '|33Conected to |32EN|33|01i|00|32|22GMA|32|01½|00 |33BBS version|31|01 |VN\n' + - '|00|33Copyright (c) 2014-2015 Bryan Ashby |33|01- |31|01http://l33t.codes/\n' + - '|00|33Updates & source |01- |31|01https://github.com/NuSkooler/enigma-bbs/\n' + + '|06Conected to |02EN|10i|02GMA|10½ |06BBS version |12|VN\n' + + '|06Copyright (c) 2014-2015 Bryan Ashby |14- |12http://l33t.codes/\n' + + '|06Updates & source |14- |12https://github.com/NuSkooler/enigma-bbs/\n' + '|00'); } diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index 90fc566e..72bc2a40 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -89,8 +89,8 @@ function VerticalMenuView(options) { // :TODO: Need to support pad() // :TODO: shoudl we detect if pipe codes are used? self.client.term.write( - ansi.goto(item.row, self.position.col) + - colorCodes.enigmaToAnsi(text) + ansi.goto(item.row, self.position.col) + + colorCodes.pipeToAnsi(text, self.client) ); } else {