Skip to content
Snippets Groups Projects
Commit 1d1315af authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add Ctrl-A output encoding (now the default)

The output is CP437/Ctrl-A by default, use -u to force UTF-8 encoded characters
if you need that or -a to force ANSI output if you need that.

Removed the mIRC color support (that can be added back easiliy enough if anyone
actually wants that).

So the tdfiglet -e u|a option has been replaced with -u (UTF-8)
and -c m|a option has been replaced -a (ANSI). Simpler usage with correct
terminology.
parent 07a6c7e1
Branches
No related tags found
No related merge requests found
......@@ -2,13 +2,6 @@
* Synchronet JS conversion of tdfiglet.c
* Based on the C code by Unknown/Modified by The Draw
* Converted to Synchronet JS by Nelgin
*
* Note: This is a best-effort conversion based on the provided C code.
* Synchronet JS environment differences (like file I/O, binary data handling,
* and character encoding) may require adjustments.
* The C code's mmap and directory listing will be replaced with Synchronet JS equivalents.
* The iconv part for IBM437 to UTF-8 conversion will need a JavaScript equivalent,
* possibly a lookup table or relying on Synchronet's native encoding handling.
*/
// Constants (using var as requested)
......@@ -26,12 +19,6 @@ var CENTER_JUSTIFY = 2;
var DEFAULT_WIDTH = 80;
var COLOR_ANSI = 0;
var COLOR_MIRC = 1;
var ENC_UNICODE = 0;
var ENC_ANSI = 1;
// Default font directory and extension - adjust as needed for your Synchronet setup
var FONT_DIR = system.ctrl_dir + 'tdfonts/'; // Assuming fonts directory is relative to the script
var FONT_EXT = "tdf";
......@@ -248,13 +235,7 @@ function readchar(i, font) { // glyph argument is no longer needed, we return th
var cell_idx = row * width + col;
if (cell_idx < glyph.cell.length) {
if (this.opt && opt.encoding === ENC_UNICODE) {
// ibmtoutf8 needs to be implemented or replaced with a lookup
// For now, a basic mapping or assume Synchronet handles CP437 bytes in strings
// Let's try a basic lookup for common chars, or assume direct charCodeAt gives the CP437 value.
// A full CP437 to UTF-8 mapping would be complex to implement in pure JS without libraries.
// Synchronet's `iconv` object *might* be available, or `system.text_to_utf8`.
// Assuming `system.text_to_utf8` exists and can convert from CP437 (mode 437).
if (this.opt && opt.utf8) {
try {
glyph.cell[cell_idx].utfchar = utf8_encode(String.fromCharCode(ch));
} catch (e) {
......@@ -305,29 +286,23 @@ function lookupchar(c, font) {
return result;
}
// ibmtoutf8 function (using system.text_to_utf8 as a replacement for iconv)
// This function's logic is now integrated into readchar.
function printcolor(color) {
var fg = color & 0x0f;
var bg = (color & 0xf0) >> 4;
var out = "";
// TheDraw colors mapped to ANSI and MIRC
var fgacolors = [30, 34, 32, 36, 31, 35, 33, 37, 90, 94, 92, 96, 91, 95, 93, 97]; // Normal/Bright
var bgacolors = [40, 44, 42, 46, 41, 45, 43, 47]; // Backgrounds (normal only for 8 colors)
var fgmcolors = [1, 2, 3, 10, 5, 6, 7, 15, 14, 12, 9, 11, 4, 13, 8, 0]; // MIRC colors
var bgmcolors = [1, 2, 3, 10, 5, 6, 7, 15, 14, 12, 9, 11, 4, 13, 8, 0]; // MIRC backgrounds
if (this.opt == undefined || opt.color === COLOR_ANSI) {
if (this.opt == undefined || !opt.ansi) {
var fgcolors = ["K", "B", "G", "C", "R", "M", "Y", "W", "HK", "HB", "HG", "HC", "HR", "HM", "HY", "HW"]; // Normal/Bright
var bgcolors = ["0", "1", "2", "3", "4", "5", "6", "7"]; // Backgrounds (normal only for 8 colors)
out += "\x01" + fgcolors[fg].split("").join("\x01");
out += "\x01" + bgcolors[bg];
} else {
var fgcolors = [30, 34, 32, 36, 31, 35, 33, 37, 90, 94, 92, 96, 91, 95, 93, 97]; // Normal/Bright
var bgcolors = [40, 44, 42, 46, 41, 45, 43, 47]; // Backgrounds (normal only for 8 colors)
out += "\x1b[";
out += (fgacolors[fg] + ";");
out += (bgacolors[bg] + "m");
} else { // MIRC color
out += "\x03";
out += (fgmcolors[fg] + ",");
out += (bgmcolors[bg]);
}
out += (fgcolors[fg] + ";");
out += (bgcolors[bg] + "m");
}
return out;
}
......@@ -354,14 +329,16 @@ function printrow(glyph, row) {
out += " ";
}
}
out += reset_color();
return out;
}
function reset_color()
{
// Reset color at the end of the row
if (this.opt == undefined || opt.color === COLOR_ANSI) {
out += "\x1b[0m";
} else {
out += "\x03";
}
return out;
if (this.opt == undefined || !opt.ansi)
return "\x01N";
return "\x1b[0m";
}
function output(str, font) {
......@@ -437,11 +414,7 @@ function output(str, font) {
}
// End the line and reset color
if (this.opt == undefined || opt.color === COLOR_ANSI) {
out += "\x1b[0m"; // Reset color and print newline
} else {
out += "\x03"; // Reset MIRC color and print newline
}
out += reset_color();
out += "\r\n";
}
return out;
......
......@@ -2,13 +2,6 @@
* tdfiglet.js - Synchronet JS conversion of tdfiglet.c
* Based on the C code by Unknown/Modified by The Draw
* Converted to Synchronet JS by Nelgin
*
* Note: This is a best-effort conversion based on the provided C code.
* Synchronet JS environment differences (like file I/O, binary data handling,
* and character encoding) may require adjustments.
* The C code's mmap and directory listing will be replaced with Synchronet JS equivalents.
* The iconv part for IBM437 to UTF-8 conversion will need a JavaScript equivalent,
* possibly a lookup table or relying on Synchronet's native encoding handling.
*/
load("tdfonts_lib.js");
......@@ -17,8 +10,6 @@ load("tdfonts_lib.js");
opt = {
justify: LEFT_JUSTIFY,
width: DEFAULT_WIDTH,
color: COLOR_ANSI, // Default to ANSI
encoding: ENC_ANSI, // Default to ANSI
random: false,
info: false,
index: 0
......@@ -31,8 +22,8 @@ function usage() {
writeln(" -f [font] Specify font file used.");
writeln(" -j l|r|c Justify left, right, or center. Default is left.");
writeln(" -w n Set screen width. Default is 80.");
writeln(" -c a|m Color format ANSI or mirc. Default is ANSI.");
writeln(" -e u|a Encode as unicode or ASCII. Default is ANSI.");
writeln(" -a Color sequences: ANSI. Default is Synchronet Ctrl-A.");
writeln(" -u Encode charaters as UTF-8. Default is CP437.");
writeln(" -x n Index to font within file. Default is 0.");
writeln(" -i Print font details.");
writeln(" -r Use random font.");
......@@ -84,32 +75,12 @@ while (i < args.length) {
} else if (arg === "-x" && i + 1 < args.length) {
opt.index = parseInt(args[i + 1], 10);
i += 2;
} else if (arg === "-c" && i + 1 < args.length) {
switch (args[i + 1]) {
case "a":
opt.color = COLOR_ANSI;
break;
case "m":
opt.color = COLOR_MIRC;
break;
default:
log("Invalid color option. Use a or m.");
exit(1);
}
i += 2;
} else if (arg === "-e" && i + 1 < args.length) {
switch (args[i + 1]) {
case "u":
opt.encoding = ENC_UNICODE;
break;
case "a":
opt.encoding = ENC_ANSI;
break;
default:
log("Invalid encoding option. Use u or a.");
exit(1);
}
i += 2;
} else if (arg === "-a") {
opt.ansi = true;
++i;
} else if (arg === "-u") {
opt.utf8 = true;
++i;
} else if (arg === "-i") {
opt.info = true;
i += 1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment